2009-05-11 10 views

答えて

27

は考慮してください。

A ::= A B 

同等のコードは、無限再帰を

boolean A() { 
    if (A()) { 
     return B(); 
    } 
    return false; 
} 

見ていますか?形質転換の一般的な形態である

A ::= (D | E) (B | C)* 

:左のいずれかの数字が続く非左再帰的論理和のいずれか興味が誰

A ::= A B | A C | D | E 

のように書き換えることができるため

16

最初の要素のない再帰的な論理和。

アクションコードを改ざんするのはちょっとしたことですが、私もプラグアンドチャグにすることができます。

+0

初めて私はそれを見たことがありますが、通常はAという新しい非終端記号を使用するようにアドバイスを見ました。 –

+0

BNFベースのツールではグループを許可しないので、新しいルール解決策に固執します。パーザー・ジェネレーターもアクション変換を行う必要があるため、私が提案したフォームの一部になっているので、新しいルールなしで動作させるのはずっと簡単です。 – BCS

+1

これは本当に質問に答えません。コメントとしては良いでしょう。 –

関連する問題