斯卡拉传递的表达式列表和其他表达一个列表构造
问题描述:
我目前正在写一Parser
这Scala
延伸JavaTokenParsers
应该除其他事项外解析以下Grammar
:斯卡拉传递的表达式列表和其他表达一个列表构造
list = "[" [ { expr "," } expr ] "]"
我的分析器类:
class ExpParser extends JavaTokenParsers {
def expr: Parser[Expression] = int | list | bool | id
[...]
private def list: Parser[Liste] = "[" ~> repsep(expr, ",") ~ expr <~ "]" ^^ {
case el ~ e => Liste(List(el, e))
} // error
[..]
}
object ParseProgram extends ExpParser {
def parse(s: String): ParseResult[Expression] = {
parseAll(expr, s)
}
}
我的案例类:
sealed trait Expression
[...]
case class Liste(l: List[Expression]) extends Expression
[...]
我试图创建一个新的List
,并把它传递给Liste Constructor
但我收到以下错误信息:
类型不匹配,预计:列表[表达式],实际:列表[对象]
那么,怎样才能通过我的Expressions
这是我从repsep(expr, ",")
得到list
和expression
这是我从~ expr
得到作为一个list
到Liste Constructor
?
答
repsep(expr, ",")
给你一个Parser[List[Expression]]
,是不是够了?
private def list: Parser[Liste] = "[" ~> repsep(expr, ",") <~ "]" ^^ {
case el => Liste(el)
}
原来的解析是指有一个列表一样[True,FalseTrue]
,是你想要的吗?
非常感谢,这绝对是我想要的。我想我只是觉得太复杂了 – TheDoctor