Warum wird BNF als unbefriedigende Technik zur Beschreibung einer Sprache angesehen?


8

Ich habe neulich die Arbeit Fundamental Concepts in Programming Languages ​​von C. Strachey gelesen, in der ich etwas gelesen habe, das mir ziemlich fremd war. Direkt zitieren (mit dem von mir hervorgehobenen seltsamen Teil):

Angesichts der heutigen Situation, in der es eine allgemein bekannte Methode zur Beschreibung einer bestimmten Klasse von Grammatiken gibt (bekannt als BNF oder kontextfrei), scheint der erste Instinkt dieser Mathematiker darin zu bestehen, die Grenzen von BNF zu untersuchen - was auch immer Können Sie in BNF auch auf Kosten sehr umständlicher und künstlicher Konstruktionen ausdrücken? Dies mag eine Frage von mathematischem Interesse sein (was auch immer das bedeutet), aber es hat nur eine sehr geringe Relevanz für Programmiersprachen, bei denen es wichtiger ist, bessere Methoden zur Beschreibung der Syntax zu finden als BNF (was für ALGOL bereits unpraktisch und unangemessen ist). als es ist , die möglichen Grenzen dessen zu untersuchen, was wir bereits als unbefriedigende Technik kennen .

Gibt es einen bestimmten Grund, warum der Autor die BNF als unbefriedigende Technik zur Beschreibung von Sprachen ansieht? Könnte es sein, dass Sie die Syntax und nicht die Semantik nur mit einer einzigen BNF-Grammatik beschreiben können (Sie können sie jedoch erweitern, um die operative Semantik zu beschreiben, indem Sie sie in eine Attributgrammatik umwandeln)?


Antworten:


3

Sie erwähnen einen Grund.

Der andere Grund ist, dass die Syntax von Programmiersprachen nicht kontextfrei ist, es sei denn, Sie definieren die Syntax als diejenige, die durch eine kontextfreie Grammatik beschrieben werden kann oder wird.

Als Stracheys Artikel geschrieben wurde, wurde die Syntax einer neuen Sprache, Algol 68, in einem neuen Formalismus definiert, einer zweistufigen Grammatik, die verwendet wurde, um die syntaktische Gültigkeit vollständig zu beschreiben, einschließlich vieler Dinge, die von der "BNF" einer Gehirnwäsche unterzogen wurden Die Syntax "meme" wird von vielen von uns überhaupt nicht als Teil der Syntax betrachtet, z. B. alle Variablen, die vor der Verwendung deklariert werden müssen.

Die meisten von uns werden nicht so weit gehen, sind sich aber dennoch einig, dass nicht kontextfreie syntaktische Funktionen in Programmiersprachen existieren.


3

Ich denke nicht, dass die Semantik eine Rolle spielt. In Ihrem Zitat heißt es: "Entdecken Sie bessere Methoden zur Beschreibung der Syntax als BNF." Natürlich sind Dinge wie Funktions- und Variablennamen Teil der Syntax. Mit BNF können Sie beispielsweise eine Sprache, in der Variablen vor der Verwendung dekaliert werden müssen, nicht von einer Sprache unterscheiden, in der Sie nicht deklarierte Variablen verwenden können. Diese Dinge müssen normalerweise im Begleittext erklärt werden, was nicht perfekt ist.


"Diese Dinge müssen normalerweise im Begleittext erklärt werden" - es gibt jedoch eine formale Semantik.
Raphael

1
Die Frage, ob ein Programm mit einem bestimmten Bezeichner an einer bestimmten Position für mich legal ist oder nicht, ist Syntax, nicht Semantik. Semantik ist die Bedeutung, Syntax beschreibt die formale Sprache von Rechtsprogrammen. Daher denke ich, dass mein Beispiel einen Teil der Syntax beschreibt, der normalerweise in Textform beschrieben wird.
Peter Leupold

1
Abgesehen von der Terminologie der Programmiersprache können Sie dort den Zweig der TCS verwenden, der als formale Semantik bezeichnet wird. Wenn Sie möchten, können Sie die Syntax anschließend aufrufen (obwohl ich das für dumm halte). Der Punkt ist, dass die natürliche Sprache nicht die einzige Alternative ist, um diese Dinge zu spezifizieren.
Raphael
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.