0
私は、この質問が何度も尋ねられたことを知っています。私はANTLRを使って文法を作ろうとしています。ANTLR文法が相互に反復帰ってきた
Predicate : LOWERCASE | Predicate VarChars ;
VarChars : LOWERCASE | UPPERCASE;
fragment LOWERCASE : [a-z] ;
fragment UPPERCASE : [A-Z] ;
私は、次のエラーを取得しています:「ルールの以下のセットは、相互に左再帰されている[述語]」
これが固定されているかを私に示してくださいが。私のantlr文法で相互左反復を削除する方法。
あなたは何を達成しようとしていますか?述語は常に小文字で始める必要がありますか?有効な/無効なトークンの例を挙げることができますか?エラーメッセージの技術的な理由はもちろん、Predicateは独自のルールの代替として発生します。 – dlatikay
これはDatalog文法の一部です。 pAが有効になります PAが無効になる 多くの場合、相互に左の再帰的なエラーが発生しました。エラーを修正するにはどうすればよいですか?どのようにしてプレディケートを独自のルールの代替方法で使うことができますか –
大文字で始まるルールはレクサールールです。混乱を避けるために、すべての大文字の名前を付けることが慣習です。おそらくあなたが望むのは、 'PREDICATE :LOWERCASE(小文字大文字)*;'です。そして、 'PA'のような入力のための別のルールを提供しなければなりません。そうしないと、トークン認識エラーが発生します。 – BernardK