2

我有一个 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?or structure_def*,其中?and*跟在令牌之后,我添加了这一行,因为SIP:Language Modularization Features

import scala.language.postfixOps

它实际上没有任何效果,问题仍然是一样的。

如何解决正在发生的事情?我不知道从哪里开始理解为什么相位打字机只是无限期地挂起。

4

1 回答 1

1

看起来解决方法是添加显式类型:

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

堆栈转储显示它正在确定 expr 的类型,并-Ytyper-debug显示附近。

由于午夜之后没有什么好事发生,我会停在那里。

于 2014-12-21T08:10:25.247 回答