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, ",") 得到的 Expressionslist 和我从 ~ expr 得到的 expression 作为一个 listListe Constructor?

repsep(expr, ",") 给你一个 Parser[List[Expression]] 还不够吗?

private def list: Parser[Liste] = "[" ~> repsep(expr, ",") <~ "]"  ^^ {
  case el => Liste(el)
}

你原来的解析意味着有一个像 [True,FalseTrue] 这样的列表,这是你想要的吗?