とても懐かしく感じたので、ユーザーが複雑な文章を入力できるアドベンチャー ゲーム クリエーターを作成することにしました。
ビジター パターンを使用するレクサーとパーサーを手動で作成しましたが、BNF (Backus-Naur Form) ルールの 1 つで左再帰の問題が発生するまでは、非常にうまく機能します。
object ::= {adjective} noun
| object AND {adjective} noun
この wiki エントリに従って左再帰を削除した後、これは正しく見えますか?
object ::= {adjective} noun object2
object2 ::= AND {adjective noun}
| !Empty
編集:
hereのガイドに従って、C# を使用してレクサーとパーサーを手動でローリングしています。この演習では、パーサー ジェネレーターは使用しません。
また、このウェブサイトからパーサーの BNF ルールを取得しました。