Scala输出中的解析器组合子

时间:2014-07-20 14:12:29

标签: scala parsing

对于文件中的此输入:{right; left; straight}我有这个解析器:

def conf: Parser[Any] = "{"  ~> feat <~ "}"
def feat: Parser[Any] = repsep(expr, ";") 
def expr = """[a-zA-Z]([a-zA-Z0-9]|[a-zA-Z0-9])*""".r

给了我这个输出:List(right, left, straight)

现在我需要在这个列表中使用这些元素来迭代它们,但我不能这样做,因为当我尝试使用for()循环时,它说&#34;值过滤器不是成员com.xxx.ParseResult [Any]&#34;。我如何迭代并从这个解析的List中获取值?

1 个答案:

答案 0 :(得分:1)

: Parser[Any]类型归档会产生解析Any的结果,而不是代码其余部分所需的List[String]。如果你消除它们,编译器将自己推断出Parser[List[String]]的正确类型:

def conf = "{"  ~> feat <~ "}"
def feat = repsep(expr, ";") 
def expr = """[a-zA-Z]([a-zA-Z0-9]|[a-zA-Z0-9])*""".r

第二个问题是您尝试直接使用ParseResult。您需要在其上调用.getOrElse以获取其中包含的List[String],或者在解析失败时提供替代方法:

val ls = parseResult.getOrElse(throw new Exception("parsing failed"))