我写了一个解析器来充当词法分析器。这个词法分析器解析一个文件并返回一个标记列表,每个标记都是一个扩展公共特征的案例类或对象。
我现在正在尝试为词法分析器的输出编写一个解析器,但我遇到了一个非常令人困惑的问题。解析器很乐意隐式转换我的案例对象,但如果我什至尝试apply(classHere)
手动调用,它就会抛出一个合适的。
以下是我的代码的简化版本:
// CODE
trait Token
case class StringWrapperIgnoresCase(val string: String) {
private case class InnerWrapper(s: String)
lazy val lower = string.toLowerCase
override lazy val hashCode = InnerWrapper(lower).hashCode
override def equals(that: Any) =
that.isInstanceOf[StringWrapperIgnoresCase] &&
lower == that.asInstanceOf[StringWrapperIgnoresCase].lower
}
case class ID(val text: String)
extends StringWrapperIgnoresCase(text)
with Token {
override def toString = "ID(" + text + ")"
}
case object PERIOD extends Token
object Parser extends Parsers {
type Elem = Token
def doesWork: Parser[Token] = PERIOD
def doesNotWork: Parser[Token] = ID
}
编译器报告以下有关的消息doesNotWork
:
// ERROR MESSAGE
type mismatch; found : alan.parser.ID.type (with underlying type object alan.parser.ID) required: alan.parser.Parser.Parser[alan.parser.Token]
我怎样才能解决这个问题?