0

ANTLR4 (Java から) で C# コードを解析しようとしています。これまでのところ、適切な文法を見つけることができなかったので、自分で書くことにしました。ここでこの付録を使用しましたが、問題が発生しました。問題は、左再帰ルールがたくさんあることです。ANTLRWorks (antlrworks-1.5) を使用して修正しようとしましたが、例外が発生し続けます。それらのいくつかは手動で修正できましたが、次のようなものは修正できませんでした。

multiplicative_expression:
| unary_expression
| multiplicative_expression '*' unary_expression
| multiplicative_expression '/' unary_expression
| multiplicative_expression '%' unary_expression;

それで、ANTLR4の適切な文法に私を導いたり、左再帰の問題に対処するのを手伝ってくれる人はいますか. ありがとうございました。

4

2 に答える 2

0

左再帰規則は、A -> Aa | Aa | のような形式です。b この問題を解決する正式な方法は、新しい非終端記号 A' を導入し、規則を次のように書き直すことです。

A -> bA'

A' -> イプシロン | aA' (イプシロンは「空の文字列」)

ANTLR は LL パーサー ジェネレーターであるため、左再帰に耐えられません。ただし、右再帰ルールは ANTLR で問題ないため、次のようにルールを記述できます。

multiplicative_expression:
| unary_expression
| unary_expression '*' multiplicative_expression 
| unary_expression '/' multiplicative_expression  
| unary_expression '%' multiplicative_expression  ;
于 2013-08-25T13:17:11.837 に答える