Scala Parser Combinators:“或”和不同的案例

时间:2017-05-24 23:27:41

标签: java scala switch-statement parser-combinators

我在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

  • 的列表

0 个答案:

没有答案