3

背景:-プログラミング言語の有効なレキシコンと構文を表現するための正式な言語があります-そのような表現(正規表現やコンテキストフリーの文法など)は、一部のツール(LEXやYACCなど)を使用して、一部のプログラミング言語のレキシコン/構文アナライザーに自動的にコンパイルできます

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

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

事前に感謝の気持ちを伝えたいと思います

4

4 に答える 4

3

言語セマンティクスをプログラミングするための多くの形式言語があります-グーグルへのいくつかのより多くの用語についてはウィキペディアのエントリを見てください。私は初期のキャリアで少量のZを実行しました(形式手法wikiへのリンクは探索を開始するためのもう1つの可能な場所です)。ラムダの人々がそれらのいくつかを使用しているので、ラムダに究極のフォーラムを尋ねることをお勧めします。そして、あなたが考えているどのユースケースにも何を使用するかを提案できます。このペーパーは、コンパイラーの生成に関してあなたが求めていたものにいくらか関連しているようです。コンパイラーを作成するには、言語のセマンティクスとターゲットマシンの説明の両方が必要です。

于 2009-09-13T08:17:45.793 に答える
2

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

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

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

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

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

上記のよりアドホックなアプローチに従う1つのシステムは、 DMSソフトウェアリエンジニアリングツールキットです。これには、Java、C、C ++、COBOLなどの実際の言語用に完成した一般的なセマンティック定義(構文、シンボルテーブル、データフロー分析)もあります。DMSは、さまざまなファクト収集手順によって条件付けられたASTにソースからソースへの変換を適用できます。これにより、信頼できる方法でコードの一括変換が可能になります。

于 2009-09-14T00:15:00.207 に答える
1

特に静的分析については、http://rw4.cs.uni-sb.de/~martin/pag/を参照してください。

于 2009-09-13T19:49:46.527 に答える
0

あなたが説明するのは、まさにCentaurプロジェクトの内容です。

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

実際、システムがその言語のインタープリターを提供できるようになるまで、言語のセマンティクスを説明することは非常に困難でした(セマンティクスを完全に説明したときです)。しかし、あなたはずっと行く必要はありませんでした。説明作業を減らしても、構造化されたエディターとタイプチェッカーを入手できます。

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

于 2009-09-13T19:33:44.413 に答える