Разбор выражений в регистре Elm конфликтует с вызовом функции
Я разрабатываю плагин Intellij для языка Elm, используя JFlex и Grammar Kit. У меня минимальный опыт написания парсеров.
Я не могу разобрать выражения регистра, потому что они конфликтуют с вызовами функций.
Спецификация 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) Могу ли я исправить это с лучшей БНФ.
2) Какие виды синтаксического анализа участвуют.
3) Можете ли вы указать мне, как это обрабатывает другой парсер, например, yacc.