Скаляк, висящий на фазе типер RegexParser

У меня есть программа Scala, в которой, помимо прочего, есть синтаксический анализатор. Это делается путем расширения scala.util.parsing.combinator.RegexParsers, Я разработал его, используя Scala 2.10, и все работало нормально.

Вчера я обновил свою систему до Scala 2.11.4 вместе с IntelliJ 14.02 (не то чтобы это имело значение).

Однако всякий раз, когда я пытаюсь скомпилировать эту программу сейчас, scalac зависает на этом этапе:

scalac: phase typer on MyParser.scala

Я абсолютно ничего не изменил в этом коде, я не могу понять, почему он зависает или с чего мне начать. IntelliJ получил предупреждение об постфиксных операторах для выражений парсера, таких как constants_def? или же structure_def*, где ? а также * следуйте токену, и я добавил эту строку из-за SIP: Языковая модуляризация

import scala.language.postfixOps

Это не имело никакого эффекта, и проблема все та же.

Как я могу решить, что происходит? Я не могу понять, откуда начать понимать, почему фазер просто висит бесконечно.

1 ответ

Похоже, что обходной путь должен добавить явный тип:

def da_gd : Parser[Expression with TimedCondition] =
  pref_timed_gd | da_gd_conjunction |
  (empty_temporal: Parser[Expression with TimedCondition])

Дамп стека показывает, что он вычисляет тип выражения expr, и -Ytyper-debug показывает окрестности.

Поскольку после полуночи ничего хорошего не происходит, я на этом остановлюсь.

Другие вопросы по тегам