我有一个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*
)的后缀运算符发出警告,其中?
和*
跟随令牌,我添加了这一行,因为{ {3}}:
import scala.language.postfixOps
它没有任何效果,问题仍然是一样的。
如何解决正在发生的事情?我无法弄清楚从何处开始理解为什么阶段性问题无限期地悬挂。
答案 0 :(得分:1)
看起来解决方法是添加显式类型:
def da_gd : Parser[Expression with TimedCondition] =
pref_timed_gd | da_gd_conjunction |
(empty_temporal: Parser[Expression with TimedCondition])
堆栈转储显示它正在计算expr的类型,-Ytyper-debug
显示附近。
因为在午夜之后没有任何好事发生,我会停在那里。