質問

背景: -プログラミング言語の有効な語彙と構文を表現するための正式な言語があります -このような表現(例:正規表現や文脈自由文法)は、いくつかのツール(例:LEXおよびYACC)を使用して、一部のプログラミング言語のレキシコン/構文アナライザーに自動的にコンパイルできます

質問: -プログラミング言語のセマンティクスを定義するためのそのような正式な言語はありますか? -これらの形式言語に基づいたセマンティックアナライザーのコード生成を自動化するコンパイラはありますか? -ソースコードのセマンティック分析に関して読むべきリソースはありますか?

注: -あなたは私の質問が非現実的であると思うかもしれません、それは大丈夫です&8230;私はコンパイラの初心者ですか? -セマンティック分析とは、コードの最適化と生成の次のステップのために、ソースコードから必要な情報を収集することを意味します。これには、タイプ/境界チェックを含める必要があります…など

私は自分自身を明確にしたい 事前に感謝します

役に立ちましたか?

解決

プログラミング言語のセマンティクスを定義するための多くのスキームがあります。 表示的意味論(構文をプログラム状態を計算する関数にマップする); 操作上のセマンティクス(言語のインタープリターの構築に相当)、 変換セマンティクス(言語を別の言語に翻訳することになります) 他のセマンティクスがすでに存在する言語など)

現在、実際のプログラミング言語で使用できるシステムにつながっているものはほとんどありません。ここでの他の回答の1つは、これを試みるシステムとしてCentaurを示唆しています。 Peter Mossesによるアクションセマンティクスは、最近の深刻な試みの1つです。

実際のシステムでは、現在、よりアドホックな方法が最も効果的です。 これらには、語彙および文法の構文を効果的に使用できるシステムが含まれます 定義され(LEXおよびYACCのバリアントとして)、自動的にツリーを構築します。 属性文法を使用すると、ツリー上の計算を指定できます。 シンボルテーブルなど、いくつかの種類の分析を定義できます。 構築またはメトリック(技術的には このように表示的意味論を行う)。ほとんどの従来の言語(C、Java、C#、 COBOL、...)はすべて、制御フローに関して比較的類似した構造を持ち、 データフロー。結果として、一般的なフロー分析ルーチンを構築できます。 そのような標準言語について推論することができます。

最後に、セマンティック分析の目的が必要です:どのような事実 正確に抽出しますか?利用可能な静的解析 システムには、ハイブリッドパターン駆動/プロシージャコードメソッドがあります。 構文、シンボルテーブル、および対象のフローファクトを収集する 特定の質問に対する特定の回答を計算します。

一部のシステムでは、このセマンティック情報を使用して、 ソースコードの変更。

上記のよりアドホックなアプローチに従うシステムの1つは、 DMS Software Reengineering Toolkit には、一般的なセマンティック定義もあります (構文、シンボルテーブル、データフロー分析)実際に完了 Java、C、C ++、COBOLなどの言語。 DMSが適用できます 条件付きASTへのソースからソースへの変換 さまざまな事実を収集する手順によって 信頼できる方法でのコードの変換。

他のヒント

言語セマンティクスをプログラミングするための多くの正式な言語があります。グーグルへのより多くの用語。私は初期のキャリアで少量の Z を行いました(公式メソッドwikiへのリンクは探索を開始する別の可能な場所)。 lambdaに究極のフォーラムを置くことをお勧めします。あなたが考えているユースケースに何を使うべきかを提案できます; このペーパーは、コンパイラーの生成に関してあなたが求めたものと多少関係があるようです-必要です言語のセマンティクスとコンパイラを作成するターゲットマシンの説明の両方。

説明するものは、Centaurプロジェクトの目的そのものです:

http://www-sop.inria.fr/croap/centaur /centaur.html

実際には、システムがその言語のインタープリターを提供できるようになるまで(つまり、セマンティクスを完全に記述した時点で)、言語のセマンティクスを非常に詳細に記述することができます。しかし、あなたはずっと行く必要はありませんでした。記述作業は少なくて済みますが、努力のために構造化されたエディターとタイプチェッカーを入手できます。

プロジェクトの作業は終了しましたが(私の知る限り)、 興味深い記事を見つけてリンクからダウンロードできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top