2017-05-24 58 views
0

我目前正在写一ParserScala延伸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, ",")得到listexpression这是我从~ expr得到作为一个listListe Constructor

回答

2

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

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

原来的解析是指有一个列表一样[True,FalseTrue],是你想要的吗?

+0

非常感谢,这绝对是我想要的。我想我只是觉得太复杂了 – TheDoctor