プログラミング言語のセマンティクスの一種とは何ですか?


9

プログラミング言語の実用的な基礎の第1章で、著者は抽象構文木はソートに関連付けられていると述べています。

直感的には、ソートはタイプに似ていますが、正確な定義があるかどうか知りたいです。いくつかの参考資料も提供していただければ幸いです。

回答:


4

それは、タイプとソートに対してどのようなセマンティクスを取るかによって異なります。-ただし、短い非公式の定義がいくつかあります- ソートはASTのクラスであり、タイプは値のクラスです


4

通常理解されているように、実際の抽象構文と型のソートには多くの類似点があります。しかし、ソートは正式な構文上の概念であり、ASツリーも構文ですが、タイプは意味上の概念です。

用語は、用語代数自由代数とも呼ばれる)と普遍代数に由来します。これらは本質的に代数的構造の構文理論であり、解釈とは無関係に分析されます。彼らは20世紀の前半に開発されました。

用語はツリーと見なすことができ、ノードは有限の演算子のセットからラベル付けされ、各演算子はツリー内の娘の数を指定する固定アリティを持っています。アリティ0は葉用です。では代数マルチソートこのようにソートに属し、各オペレータことを、種類で洗練され、かつその頭演算子の各娘の修正は、ソートすることをアリティは、種類の順序付けられたリストに置き換えられます。演算子の種類は、その娘の種類のリストとともに、演算子のシグネチャと呼ばれます。

普遍代数では、これは、用語間に等式で定義された同値関係を導入することによってさらに洗練されます。

少し色褪せたように見えますが、これらの概念はかなり人気があり、20世紀後半にコンピュータサイエンスで多くの研究が行われました。オブジェクト指向プログラミングのnosクラス。

普遍代数はカテゴリー理論の発展に関係しており、カテゴリー理論は現在の型とプログラミング言語のビジョンの基礎でもあります。

代数は構文オブジェクトであり、型に対応するいくつかのセマンティックドメインでの解釈で使用することを目的としています。解釈とは、値(型)のドメインにソートをマッピングし、それらのドメイン間の関数に演算子をマッピングする準同型であるため、シグネチャが尊重され、方程式の場合は方程式も同様です。これは、グループ理論の結果を、グループの定義を尊重する操作で任意のドメインに適用する方法です。

この組織は、プログラミング言語の初期の研究者、特にプログラミング言語の形式化に関心のある研究者によって非常に便利であると考えられていました。構文と意味を分離し、数学的によく理解されているという利点がありました。

それを採用したもう1つの理由は、開発環境または正式なシステムのいずれかでプログラムのプロパティを証明するプログラムを操作するツールの開発に関する懸念でした(これはますます双子の問題であることが判明しました)。

これにより、プログラミング言語の抽象構文ツリー(AST)の概念が登場しました。これは、本質的にマルチソート代数の用語です(一部のシステムではソートユニオンを使用して改良される場合があります)。ASTは言語のリファレンス構文であり、セマンティクスは表記セマンティクスのように準同型によって定義できます。

これは、言語のセマンティクスを研究するのに便利なだけでなく、ツリーは文字列よりも構造が優れているため、プログラミングツールとプログラミング環境を開発するための優れた基盤となります。

構文解析技術の制限により、歪んだ文法の使用が余儀なくされたため、伝統的に厄介な部分であった構文解析を分離することができます。また、プレゼンテーションの問題も除外されます。

プログラムの複数の具体的な(文字列またはグラフィック)表現が可能で、便利な場合があります(プログラム構文でタブではなく句読点を使用したり、その逆を強制する必要がある理由はありません)。

プログラムの性質を抽象的な解釈で分析するために、プログラムやソートの多くの解釈を簡単に定義できます。

これは、自動プログラム変換や言語間の翻訳など、(半)自動プログラム操作ツールを書くのに便利です。

一部の形式の抽象構文では、一部の演算子が複数の種類に属するツリー(式)を構築できるため(非公式な方法でそれを見ることができるため)、物事は実際には少し複雑になる場合があります。たとえば、変数(割り当て可能なエンティティ)を表す構文構造のソートと、式のソートがあります。しかし、任意の変数を式として使用でき、その逆は偽です。

これに関する初期の論文は、プログラミング言語としては70年代半ばにさかのぼります。当時の概念化は、構文を意識した( "directed"という単語が使用された)プログラミング環境の作成を目的としています。ヨーロッパではメンターとケンタウロスを、アメリカではコーネルプログラムシンセサイザを探してください。それらは実際にそのような概念を実際に使用する最初の2つのシステムでした。他の多くはその後開発されました。

しかし、抽象構文はこれらのシステムよりも古いものです。Lisp言語(1958)は抽象的な構文を持っていましたが、これは論理学者によって開発されたため、プログラムを操作するプログラムを作成する目的のために驚くことではありません(MLとLCF ...も参照)。しかし、Lispはソートされていませんでした。すべてが構文的にリストであり、より洗練された構造は本質的にセマンティクスに依存していました。これにより、一部の人々は、Lispに構文がないと多少誤って考えるようになりました。


2つの異なる階層があると思いますか。1つは構文のランドにあり、もう1つはセマンティクスのランドにあります。構文には、ASTとソート、およびソートのクラスがあります。セマンティクスには、値、型、種類などがあります。TwelfやCoqのような1つの開発環境に両方を統合する言語はありませんか?
CMCDragonkai 2016

@CMCDragonkai私が言ったことを正確に(間違いがなければ)言います。私はこれらの階層を呼び出すのではなく、(メタ)ディスコースのドメインと呼びます。構文とセマンティクスの分離は、私たちが話していることと、それをどのように行うかを区別します。同じ言語の構文とセマンティクスを混在させる必要はありませんが、ある言語の構文は談話の対象になる可能性があるため、別の言語のセマンティクスに属します。その意味で、注意して処理するために、いくつかの統一が見られるかもしれません。構文は常に有限に生成されますが、セマンティクスにはそのような制約はありません。
2016

2

ソートは構文用、タイプはセマンティクス用であることが第4章に記載されています。

40ページの構文チャートの例は、言語L {num str}のソートを扱います。どうやらソートは言語の構文のカテゴリです。

特に、「プラス」にはソートがあり、これはその結果の構文カテゴリです。演算子「プラス」の一種は「Exp」と名付けられています。これは、構文上、演算子「プラス」の呼び出しが式であることを表しています。演算子「プラス」を呼び出すと、式が許可されている抽象構文ツリーの位置を埋めることができます。それが「プラス」の構成です。これが、プログラムを表すテキストの構造に適合する方法です。

41ページの型システムは、言語L {num str}の型を扱います。演算子のタイプが「num」の場合、演算子のタイプは「num」です。この判断は、演算子「プラス」のセマンティクスの部分的な説明です。つまり、演算子「プラス」の意味の一部は、2つの数値を組み合わせて数値を生成することです。この意味は、「プラス」を他の表現と区別します。

さらに、「num」と「str」の2つのタイプを含む「Typ」という名前のソートがあります。


1
まあ、彼はこの概念でそれを使用していますが、彼はそれを明確に定義していません。私は「ソート済みロジック」という用語を見つけました。これは、ソートとタイプは本当に閉じた関連概念であるように思えます。私は両方の明確な定義を知りたかっただけです。
rslima 2013年

それは「純粋型システム」と関係があります。「型付きラムダ計算」でのプレゼンテーションは従来のものであると考えることができると思います。しかし、それは簡潔ではありません。用語、タイプ、種類、並べ替えの明確で簡潔な定義を提供するリファレンスはまだ見つかりません。
minopret 2013年

パーサーのプロダクションヘッドはどうですか?多くの場合、式やタイプなどの類似した名前で文法を分類することになります。
CMCDragonkai 2016

1

第1章の初めに、ハーパーはsortという単語で彼が何を意味するかについてのヒントを与えています

言語の構文は、さまざまな種類の句 (式、コマンド、宣言など)を組み合わせてプログラムを形成する方法を指定します。

彼は語句を抽象構文木として定義し、それを彼は次に議論します。


ここでは、「ソート」が通常の英語の意味で使用されているように見えます。これは「種類」の同義語です。
ラファエル

@Raphaelはい、しかしその意味は後者の正式な使用法と一致しているようです、あなたは同意しませんか?
jcora 2014

結構です。本には「この種のX」という語句がよく出てきます。この文は、何かが定義されていることを示すものではありません。(また、この一節は、「ソート」という用語の理解方法とは一致しません)。
ラファエル

@Raphaelわかりました。この特定の使用法がどのように一貫していないか説明してください。それは確かに私に通知します。それが私が現在それを理解している方法だからです。
jcora 14

私が知っている「ソート」の概念は、ツリー全体ではなく、ASTの個々のノードに関連付けられています(これは、「フレーズ」がソースで意味するものです)。
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.