C++ と flex + bison を使用した変数のスコープをサポートするカスタム C ベース言語用のコンパイラを作成しようとしています。レクサーとパーサーを作成しましたが、スコープの問題を解決できません。バイソンパーサーファイルにセマンティックアクションを実装しました。
while_stmt : WHILE LEFT_PAREN expr RIGHT_PAREN LEFT_CBRACE stmts RIGHT_CBRACE { $$ = new WhileStatement($3, *$6); }
;
私が問題を抱えているのは、新しいシンボル テーブルをコンテキスト シンボル テーブル スタックに配置するタイミングを見つけることです。ボトムアップのパーサーなので、新しいブロックがいつ開始されるか、いつ終了するか、リダクションが実行されてからでは手遅れです。ルールの後ろに置いたコードは、縮小後に実行されます。
バイソンを使用してこれをどのように解決できますか? 私はしばらくの間ブレインストーミングを行っていますが、解決策はありません。ありがとう。