私の文法には、もともと間接左再帰を含んでいた式とフラグメントの生成規則があります。これは、再帰を削除した後のルールです。
String expression() #Expression : {String number; Token t;}
{
number = fragment()
(
(t = <Mult_Sign> number = fragment())
)
{return number;}
}
String fragment() #void : {String t;}
{
t = identifier() {return t;}
| t = number() {return t;}
| (<PLUS> | <MINUS> ) fragment()
| <LBR> expression() <RBR>
}
これらの生成規則は、文法で条件を解析しようとするときに使用されます。ただし、生産規則の順序付けにはどちらかがあるため、式のみが受け入れられます。ただし、 while (x <= 10) のようなものを受け入れる必要があります。文法で最初に述べたように、生産規則が逆の順序である場合。javac を使用して Java ファイルをコンパイルしようとすると、. identifier() が到達不能ステートメントであることを示すエラーが表示されます。これは条件生成規則です。
void condition() #void : {Token t;}
{
<NOT> expression()
| expression (<EQUALS>|<NOTEQUALS>|<LT>|<GT>|<LTE>|<GTE>|<AND>|<OR>) expression()
| identifier()
}
この問題が発生している理由を教えてくれる人がいれば、非常に役に立ちます。