BNFが言語を記述するための不十分な手法と見なされるのはなぜですか?


8

私は先日、C。Stracheyによる論文「プログラミング言語の基本概念」を読んでいました。その中で、私には非常に奇妙なものを読んでいました。直接引用する(奇妙な部分を強調表示した):

今日存在するような、特定のクラスの文法(BNFまたはコンテキストフリーとして知られている)を記述する一般に知られている方法がある状況に直面すると、これらの数学者の最初の本能はBNFの限界調査することです —面倒で人工的な構造を犠牲にしても、BNFで表現できますか?これはいくつかの数学的な関心の問題かもしれませんが(意味が何であれ)、BNFよりも構文を記述するより良い方法を発見することが重要であるプログラミング言語との関連性はほとんどありません(これはすでにALGOLには不便で不十分です)。それは、私たちがすでに不十分な技術であるとわかっていることの可能な限界調べることです。

著者がBNFを言語を記述するための不十分な手法であると考える特定の理由はありますか?単一のBNF文法では構文しか記述できず、セマンティクスは記述できないためでしょうか(ただし、属性文法に変換することで、操作セマンティクスを記述するように拡張できます)。


回答:


3

あなたは一つの理由に言及します。

もう1つの理由は、構文を文脈自由文法で記述できる、または文脈自由文法で記述できるように定義しない限り、プログラミング言語の構文は文脈自由ではないということです。

Stracheyの論文が書かれたとき、新しい言語、Algol 68の構文は、2つのレベルの文法である新しい形式で定義されていました。構文」ミーム、私たちの多くは、使用する前に宣言する必要があるすべての変数など、構文の一部をまったく考慮しません。

私たちのほとんどは、それほど遠くまでは行きませんが、プログラミング言語に非コンテキストフリーの構文機能が存在することに同意します。


3

セマンティクスが役割を果たすとは思いません。あなたの引用は「BNFよりも構文を説明するより良い方法を発見する」ことを求めています。もちろん、関数や変数名のようなものは構文の一部を形成します。たとえば、BNFでは、使用前に変数を宣言する必要がある言語と、宣言されていない変数を使用できる言語を区別できません。これらは通常、付随するテキストで説明する必要がありますが、完全ではありません。


「これらのことは、通常は添付のテキストに説明されなければならない」 -そこにある正式な意味論は、けれども。
ラファエル

1
特定の位置に特定の識別子を持つプログラムが正当であるかどうかは、構文ではなく、構文です。セマンティクスは意味であり、構文は法的プログラムの正式な言語を記述しています。したがって、私の例では、通常テキスト形式で記述される構文の一部について説明していると思います。
Peter Leupold、2016年

1
プログラミング言語の用語は別として、正式なセマンティクスと呼ばれるTCSのブランチは、そこで使用できるものです。必要に応じて、後で構文を呼び出すことができます(ただし、これはばかげていると思いますが)。ポイントは、自然言語がこれらのものを指定する唯一の選択肢ではないということです。
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.