2

これは文法です:

S' -> S
S-> aBc|bCc|aCd|bBd
B ->e
C ->e

私はCLRで解析してから、削減/削減の競合が発生しました。次はどうする?解決した問題を以下に添付します。

解析テーブル

これはプロセスです

4

1 に答える 1

3

誰か次のことを教えてください

エラー...競合を修正しますか?

パーサーが e の後に c または d のいずれかを満たす場合、最後の 2 つのプロダクションからでも非常に明確です。

B -> e . {c, d}
C -> e . {c, d}

上記の条件を B または C に縮小する必要があるかどうかを判断するには、単一の先読みでは十分ではありません。

パーサー ジェネレーターは通常、文法で最初に現れるものを採用することで解決しますが、これは必ずしも良いケースではありません。上記の文法では、この解決策が採用された場合、e は常に B に還元されるため、パーサーは bec と aed を解析できません。

競合が発生しないように文法を変更することをお勧めします。文法全体で生成できるのは aec、bec、aed、bed だけです。一意に削減される個別の生産を行うシーケンスで何が優れているかを確認してください。

于 2016-02-20T11:10:31.273 に答える