1

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

Grammar Kit を知っている人がいたら教えていただけるとありがたいです。ただし、視聴者が一般的にパーサーを知っている可能性が高いという前提で:
1) より良い BNF でこれを修正できますか?
2) どのような構文解析概念が含まれているか。
3) yacc などの別のパーサーがこれをどのように処理するか教えていただけますか。

4

0 に答える 0