解析Elm案例表达式与函数调用冲突

时间:2015-10-29 20:09:49

标签: parsing jflex grammar-kit

我正在使用JFlex和Grammar Kit为Elm语言开发Intellij插件。我编写解析器的经验很少。

我无法解析case表达式,因为它们会与函数调用发生冲突。

BNF规范如下:

expr ::=
  NUM
  | IDENTIFIER
  | FunctionCallExpr
  | CaseExpr


CaseExpr ::= CASE IDENTIFIER OF case_body
case_body ::= (case_body_part)* OTHERWISE "->" expr
case_body_part ::= NUM "->" expr

FunctionCallExpr ::= IDENTIFIER NUM

在以下示例中,解析器无法识别84是新case_body_part的开头

 case n of
    42 -> foo 420
    84 -> bar 840   -- this line is treated as an error rather than case_body_part
    otherwise -> zap 100

如果有人知道语法套件,我会很感激驾驶。但是,假设观众通常更有可能知道解析器:
1)我可以用更好的BNF解决这个问题 2)涉及哪种解析概念。
3)你能指出我的另一个解析器如yacc如何处理这个。

0 个答案:

没有答案