Скаляк, висящий на фазе типер 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
показывает окрестности.
Поскольку после полуночи ничего хорошего не происходит, я на этом остановлюсь.