我正在尝试在Scala中构建一个基本的组合器解析器,并且尝试使用它编译最基本的解析器(字母'A'的解析器)时,我从scalac收到了三个语法错误,我不理解。我正在查看我的代码,即使与在线示例进行比较,也无法弄清楚语法的哪些部分不正确。有人可以在这里解释我的Scala代码哪些部分不正确?
代码:
import lexer
import scala.Option
object Main {
def main(args: Array[String]) {
val Lexer = new lexer.Lexer
val tokens = Lexer.lex(args(0))
val parseA = satsify(t => t.key == "A")
println(parseA(tokens))
}
def satsify(predicate: Token => Bool): List(Token) => Option[(Token, List(Token))] = {
tl: List(Token) => match tl {
case tl.isEmpty => None
case predicate(tl(0)) => Some(tl(0), tl.tail)
case _ => None
}
}
}
错误:
combParser.scala:2: error: '.' expected but ';' found.
import scala.Option
^
combParser.scala:12: error: '=' expected but '(' found.
def satsify(predicate: Token => Bool): List(Token) => Option[(Token, List(Token))] = {
^
combParser.scala:19: error: illegal start of simple expression
}
^
three errors found
主要有很多语法错误
List[Token]
而不是List(Token)
case v if predicate(tl(0)) =>
而不是case predicate(tl(0)) =>
考虑以上尝试
def satsify(predicate: Token => Boolean): List[Token] => Option[(Token, List[Token])] = {
(tl: List[Token]) => tl match {
case Nil => None
case head :: tail if predicate(head) => Some(head, tail)
case _ => None
}
}