セマンティクスとは何ですか?


13

多くの一般的な言語があります。しかし、コンピューター科学者は、これらの言語でのプログラムの動作を明確かつ明確にプログラムの動作を論証する(たとえば、その身元を証明する)には、それらを別のよく理解された言語に翻訳する必要があると言います。彼らはそのような言語を「セマンティクス」と呼んでいます。著者は多くのセマンティクスの1つを提案します。彼らはその構造の意味と、あなたの言語をどのように翻訳できるかを説明します。そうすれば、誰もがあなたのプログラムを確実に理解するでしょう、と彼らは言います。

よさそうだ、まだ、私は何かを理解していません。彼らは最初の言語を理解するために別の言語を導入すると言っていますか?なぜ私たちは元のものよりもそれをよく理解するのですか?なぜこのセマンティクスがそれよりも優れているのでしょうか?Cのセマンティクスを記述するために、別の言語を発明するのではなく、Cのセマンティクスをすぐに学習しないのはなぜですか?同じことが構文にも当てはまります。構文に関して同じ質問をしないのはなぜですか?

PSコメントでは、セマンティクスは別の言語やその意味への翻訳を意味しないと聞いています。しかし、VHDLのFormal Semanticsは、何かを1つの方法でしか理解できない場合、それを理解せず、別の(既知の)言語に翻訳するメカニズムを備えた言語に「意味」を指定できると述べています。つまり、「意味論は形式的なシステム間の関係」です。Semantics of Programming Languagesの Hennessyは、セマンティクスが BNFまたはシンタックスダイアグラムとして提供されている場合、セマンティクスによってプログラムの「意味」を正式に処理できると述べています。言語でない場合の正式なシステムとは何ですか?

PS2ゲートの相互接続への特定のHDLプログラムのHW合成は、セマンティクス抽出のプロセスであると言えますか?その後、(高レベルの)説明を、理解できる(低レベルの)言語に翻訳します。


どのような図を意味しますか?私はセマンティクスを使用しますが、実際には図を使用しません。
デイブクラーク

1
セマンティクスを「言語」とは呼びません。セマンティクスは定義の意味の言語。例えば、二進数その構文。唯一のセマンティクスを持つワット= Σ | w | i = 1 w i 2 n i + 1実際の数値を取得しますか?これが唯一の可能なセマンティクスではないことに注意してください。BCD、2補数などもあります。{0,1}+value(w)=i=1|w|wi2ni+1
ラファエル

@Daveすみません、私は課題決定図の印象の下で質問を作成しました。また、著者はVHDLの正式なセマンティクスについても書いています。著者はさまざまなセマンティクスを提案し、それぞれに多くの図を掲載しています。これは私たちがマップする言語だと思っていました。
ヴァル

これは、セマンティクスとはあまり似ていないように聞こえますが、ハードウェアへのコンパイルの途中段階のようです。
デイブクラーク

はい。ただし、説明から「意味」を抽出します。
ヴァル

回答:


15

Cのセマンティクスを記述するために、別の言語を発明する代わりに、すぐにCのセマンティクスを学習しないのはなぜですか?

Cのセマンティクスを定義するには、たとえば英語などの何らかの言語が必要だからです。英語は曖昧な場合があり、特にC99セマンティクスです。

セマンティクスのコンピューターサイエンスの概念は、一般にプログラムの数学的記述であり、この記述は正確な翻訳ではありません。いくつかの種類のセマンティクスがありますが、それはさまざまなことに関するものです。

  1. プログラムが計算する数学関数について(表示的意味論)、
    lambda x: x + x =(x2x)
  2. プログラムの前後に保持するプロパティについて(公理セマンティクス)、
    {a>0} x = a; y = 0; while(1 < x){ x = x/2; y++; } {y=log(a)}
  3. プログラムがどのように削減するかについて(操作上のセマンティクス)。 ここで、は前後の記憶を表します。この場合、とがメモリセルである場合、およびですおよび、および場合。σσ ' σ = X A Y B σ ' = X A + B Y 0 )、xはyとx y
    (σ, while(x){x--;y++;})σ
    σ,σσ=(xa,yb)σ=(xa+b,y0)xyxya

今のところ少し悲しいことに、そのセマンティクスを通じてプログラムを普遍的に理解することは簡単でも、すべての意図でもありません。それは前者ではありません。なぜなら、それらの数学は面倒だからです。セマンティクスが実際に共通の明確な説明を提供するため、後者ではありませんが、プログラムを理解するためには使用されません。

セマンティクスを読むことがそれほど意味がない場合、言語の基本要素のセマンティクスを読んで同意することは、たとえばCの明確に説明するために非常に重要原始的な作品。continue

結論として:

彼らは最初の言語を理解するために別の言語を導入すると言っていますか?

技術的には、言語は数学です。また、基本的にすべてのプログラミング言語で同じであるため、新しい言語を導入しても、それがすべて同じであれば、大丈夫です。

なぜ私たちは元のものよりもそれをよく理解するのですか?

数学なので、理解するのは難しいかもしれませんが、より正確で完全です。

同じことが構文にも当てはまります。

検証済みのパーサーに関する作業はありますが、パーサーのセマンティクスが何を意味するのかという問題は簡単ではありません。


2
「数学[...]は、より正確で完全な方法です。」-もちろん、数学自体の形式的な構文とセマンティクスに対する疑問を招きます。;)
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.