scala解析器组合器

时间:2018-05-17 19:58:49

标签: scala parsing parser-combinators

我正在尝试这样写:anExpr是由"和"分隔的orExpr。如果没有用"和"它应该被视为字面而不是orExpr。

所以,如果我这样做:

def andExpr: Parser[Expr] = rep1sep(orExpr, "and") ^^{ 
  //omitting the transformation function 
} | literal

让我们假设每个表达式都是一个andExpr。 我希望表达式只有在"和"分隔时才是orExpr。例如,如果输入是" hello和hi",在这种情况下"你好"是一个orExpr和" hi"是一个orExpr。 但是现在(我编写的现有代码)默认情况下每个andExpr都是一个orExpr。所以,现在如果输入是" bye",它也是一个orExpr。但是,我想要" bye"要符合文字而不是orExpr。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我们可以通过使用复杂的案例陈述来做到这一点。

例如:

def andExpr: Parser[Expr] = rep1sep(orExpr, "and") ^^{ 
  case terms: if(terms.length == 1) {
                   terms.head . //treating like literal
               } else {
                  //required expression
               }

}