我正在使用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如何处理这个。