プログラミング言語のセマンティクスを定義するための多くのスキームがあります。表示的セマンティクス(構文をプログラムの状態を計算する関数にマップします)。操作的意味論(あなたの言語の通訳者を構築することになります)、変換的意味論(あなたの言語を他のいくつかの意味論がすでに存在する別の言語に翻訳することになります)など。
現在、実際のプログラミング言語で使用できるシステムにつながるものはほとんどありません。ここでの他の答えの1つは、これを行おうとするシステムとしてCentaurを示唆しています。
Peter Mossesによるアクションセマンティクスは、最近のより深刻な試みの1つです。
実際のシステムでは、現在、よりアドホックな方法が最も効果的です。これらのインクルードシステムでは、字句および文法の構文を効果的に定義し(LEXおよびYACCのバリアントとして)、ツリーを自動的に構築できます。属性文法を使用すると、ツリーに対する計算を指定できます。これにより、シンボルテーブルの構築やメトリックなど、ある種の分析を定義できます(技術的には、この方法で表示的意味論を行うことができます)。ほとんどの従来の言語(C、Java、C#、COBOLなど)はすべて、制御フローとデータフローに関して比較的類似した構造を持っており、その結果、一般的なフロー分析ルーチンを構築して、そのような標準言語について推論することができます。
最後に、セマンティック分析の目的が必要です。正確にどのような事実を抽出したいですか?利用可能な静的分析システムには、特定の質問に対する特定の回答を計算するために、構文、シンボルテーブル、および対象のフローファクトを収集するためのハイブリッドパターン駆動型/手続き型コードメソッドがあります。
一部のシステムでは、このセマンティック情報を使用してソースコードの変更を行うことができます。
上記のよりアドホックなアプローチに従う1つのシステムは、
DMSソフトウェアリエンジニアリングツールキットです。これには、Java、C、C ++、COBOLなどの実際の言語用に完成した一般的なセマンティック定義(構文、シンボルテーブル、データフロー分析)もあります。DMSは、さまざまなファクト収集手順によって条件付けられたASTにソースからソースへの変換を適用できます。これにより、信頼できる方法でコードの一括変換が可能になります。