3

小さな C 言語用に独自のコンパイラを構築したいと考えています。すでに文法を作成し、ANTLR を使用して AST (抽象構文ツリー) を構築し、シンボル テーブルを実装しています (GRosemberg コードに従っています) 。

シンボル テーブルにシンボルを入力する必要がありますが、その方法がよくわかりません..

  • y AST を実行し、見つかったトークンに応じて、シンボル テーブルに新しいシンボルを配置するか、新しいスコープを作成する必要がありますか?
  • 文法でセマンティック関数を使用する必要がありますか? ツリー ウォーカーについて聞いたことがあります...?

私はこのステップで少し迷っています。誰か例がありますか、それともどうすればいいのか教えてください。

4

1 に答える 1

3

ANTLR 3 & 2 の場合、パーサー アクションで簡単に実行できます。スコープの境界を越えて適切な場所にエントリを追加する場合は、スコープをプッシュおよびポップする必要があります。http://www.antlr3.org/grammar/cgram/grammars/StdCParser.gで、実際の C パーサーでそれを行う方法を確認できます。必要に応じて、ツリー パーサーでも実行できます。

ANTLR 4 では、代わりにプッシュ/ポップを実行してエントリを追加するリスナーを作成します。文法が C のように typedef をサポートしている場合、シンボル テーブルが解析に影響するため、文法アクションでそれを処理する必要があります。ただし、Tiny C はそれを行う必要はありません。

于 2013-05-04T14:42:30.530 に答える