1

私は、自分の慣習的な言語のセマンティック分析パスに取り組んでいますが、あまり成功していません。しかし、Googleでそのようなものを検索すると、リンクの大部分は、有用な知識ではなく、大学のコース資料、学術論文、または完全に無関係なプロセス、たとえば英語のテキストの意味分析などです.

伝説のドラゴンブックも探しましたが、この点についてはあまり含まれていないことを読みました(また、現在Amazonでの私の価格帯からはかなり外れています).

コンパイルのこの特定の段階の資料を見つけることができる場所に関する推奨事項はありますか?

4

1 に答える 1

2

セマンティック分析は、コンパイラー内の多くの単純なステップを網羅する包括的な用語です。

通常、次の要素で構成されます。

  • さらなる分析を簡素化するためのシンタックス シュガーおよび/またはマクロ展開パス
  • 識別子の解決と名前の変更。つまり、各名前は完全修飾識別子に変換され、ローカル スコープの各識別子には一意の名前が付けられます。
  • 型チェック (型推論または型伝播のいずれか)
  • 制約チェック
  • さまざまなサニティ チェック (つまり、「非 void 関数が値を返すかどうか」または「変数が初期化の前に使用されるかどうか」)

現在の傾向は、個別のパスを持つのではなく、すべての制約チェックを型システムに限定しようとすることです。多くの異なる言語に適した汎用的で強力な型付けアルゴリズムはHindley-Milnerです。複雑に見えるかもしれませんが、正しい方法で実行すれば、実際には (C や Java のような) 愚かな型の伝播よりも簡単に実装できます。

複雑な型付けと任意のセマンティック チェックの両方を行うための非常に一般的で単純なトリックの 1 つは、AST をウォークスルーし、単純な Prolog インタープリターにフィードして AST 全体を取得できる Prolog (場合によっては Datalog でさえも) 式のフラットなシーケンスを出力することです。制約システムが解決されました。

于 2013-02-07T17:18:44.800 に答える