1
VARIABLE: ...

UNARYOP: 'not' Expression; // unary operation
BINARYOP: 'or' VARIABLE;

Expression : (NIL | INTEGER | UNARYOP) BINARYOP?;

上記のシナリオでは、「または」は次のいずれかを介して到達できます

式->BINARYOP

また

EXPRESSION-> UNARYOP-> Expression-> BINARYOP

上記のようなあいまいさを取り除く体系的な方法はありますか?

4

1 に答える 1

2

文法のあいまいさを取り除くことは、自動的に解決できないタスクだと思います。なぜなら、どちらの選択肢が正しいかを選択するのは「主観的な」選択だからです。

問題を特定したら、別の代替ツリーを構築し、新しいプロダクション ルールを追加して、無効な解析ツリーを許可しないようにします。

残念ながら、左再帰を削除するような魔法の解決策はありません...多分私は間違っています。

あなたの場合、定義できます

Expression : NIL
           | INTEGER
           | VARIABLE
           | 'not' Expression
           | Expression 'or' Expression;

または、'or' の右側を変数のみに制限しますか?

于 2009-09-20T21:49:22.783 に答える