我在Parser
写了一个Scala
,它应该在Grammar
之后进行解析:
my_parser = (id | "(" expr ")" ) "(" [ { expr "," } expr ] ")"
我的解析器类:
class ExpParser extends JavaTokenParsers {
def expr: Parser[Expression] = my_parser | id
[...]
private def my_parser : Parser[MyParser] = (id | "(" ~> expr ~ ")") ~ "(" ~ repsep(expr, ",") <~ ")" ^^ {
case i ~ _ ~ le => MyParser(i, le) //Error at Constructor first parameter: i
case expr ~ _ ~ _ ~ le => MyParser( expr, le) //Error at Constructor first parameter: expr
}
[...]
}
object ParseProgram extends ExpParser {
def parse(s: String): ParseResult[Expression] = {
parseAll(expr, s)
}
}
我的案例类:
sealed trait Expression
[...]
case class MyParser(e: Expression, l : List[Expression]) extends Expression
case class Id(i: String) extends Expression
[...]
在case-statements
我收到以下错误消息:
第一个案例位于Parameter
MyParser(i, le)
的第一个constructor
:我
类型不匹配,预期:表达式,实际:具有可序列化的产品
和
第二种情况:位于Parameter
MyParser(expr, le)
的第一个constructor
: expr
类型不匹配,预期:表达式,实际:任何
我如何区别
id
以及Expressions
和
Expression
以及Expressions