Scala 将表达式列表和另一个表达式作为一个列表传递给构造函数
Scala pass List of Expressions and another Expression as one list to Constructor
我目前正在写一个 Parser
,它在 Scala
中扩展了 JavaTokenParsers
,除其他外,它应该解析以下 Grammar
:
list = "[" [ { expr "," } expr ] "]"
我的解析器Class:
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)
}
}
我的案例Class:
sealed trait Expression
[...]
case class Liste(l: List[Expression]) extends Expression
[...]
我试图创建一个新的 List
并将其传递给 Liste Constructor
但我收到以下错误消息:
Type mismatch, expected: List[Expression], actual: List[Object]
那么我如何将我从 repsep(expr, ",")
得到的 Expressions
的 list
和我从 ~ expr
得到的 expression
作为一个 list
到 Liste Constructor
?
repsep(expr, ",")
给你一个 Parser[List[Expression]]
还不够吗?
private def list: Parser[Liste] = "[" ~> repsep(expr, ",") <~ "]" ^^ {
case el => Liste(el)
}
你原来的解析意味着有一个像 [True,FalseTrue]
这样的列表,这是你想要的吗?
我目前正在写一个 Parser
,它在 Scala
中扩展了 JavaTokenParsers
,除其他外,它应该解析以下 Grammar
:
list = "[" [ { expr "," } expr ] "]"
我的解析器Class:
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)
}
}
我的案例Class:
sealed trait Expression
[...]
case class Liste(l: List[Expression]) extends Expression
[...]
我试图创建一个新的 List
并将其传递给 Liste Constructor
但我收到以下错误消息:
Type mismatch, expected: List[Expression], actual: List[Object]
那么我如何将我从 repsep(expr, ",")
得到的 Expressions
的 list
和我从 ~ expr
得到的 expression
作为一个 list
到 Liste Constructor
?
repsep(expr, ",")
给你一个 Parser[List[Expression]]
还不够吗?
private def list: Parser[Liste] = "[" ~> repsep(expr, ",") <~ "]" ^^ {
case el => Liste(el)
}
你原来的解析意味着有一个像 [True,FalseTrue]
这样的列表,这是你想要的吗?