Java Scala语法分析器组合器:";或;以及不同的情况
我正在Java Scala语法分析器组合器:";或;以及不同的情况,java,scala,switch-statement,parser-combinators,Java,Scala,Switch Statement,Parser Combinators,我正在Scala中编写一个解析器,它应该解析以下语法: my_parser = (id | "(" expr ")" ) "(" [ { expr "," } expr ] ")" 我的解析器类: class ExpParser extends JavaTokenParsers { def expr: Parser[Expression] = my_parser | id [...] private def my_parser : Parser[MyParser] =
Scala
中编写一个解析器
,它应该解析以下语法
:
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)
}
}
在案例语句中
我收到以下错误消息:
myMyParser(i,le)
构造函数的第一个参数处的第一个大小写:i
类型不匹配,应为:表达式,实际为:可序列化的产品
及
第二种情况:在myMyParser(expr,le)
构造函数的第一个参数处:expr
类型不匹配,应为:表达式,实际为:任意
我能在这两个方面有什么不同
id
和表达式列表
和
表达式
和表达式列表
my_parser=parser[MyParser]
?通常,当您获得可序列化的expected:Expression,actual:Product时,您应该指定所需的类型,编译器放弃了。。。另外,我建议您使用,它太棒了!:)下面是一些。MyParser
是一个case类
,它需要一个表达式
和一个表达式列表
作为参数。既然id
扩展了Expression
,我认为这就足够了,但显然不行。Fastparse
很好,但我不允许使用它
sealed trait Expression
[...]
case class MyParser(e: Expression, l : List[Expression]) extends Expression
case class Id(i: String) extends Expression
[...]