Ist es möglich, eine Sprache zu entwerfen, die keine Syntaxfehler enthält? [geschlossen]


14

Mit anderen Worten, eine Sprache, in der jede mögliche Zeichenfolge eine gültige Syntax hat?

EDIT : Dies ist eine theoretische Frage.
Ich habe kein Interesse daran , eine solche Sprache zu benutzen. Ich frage nur, ob es möglich ist.

Weiter bearbeiten

Ich habe eine solche Sprache entworfen. Siehe ErrorFree


2
Wenn wir das könnten, hätten wir KI erschaffen.
Michael K

5
@ Michael: Nein; Ich glaube nicht.
SLaks

7
!!! Perl !!!

8
Ich bin sehr dagegen, dass die Frage geschlossen wird! Es ist weder subjektiv noch nicht konstruktiv !!!
Felix Dombek

1
Nehmen Sie eine Assemblersprache mit genau 256 Befehlen, 128 Registern und einer allgemeinen Syntax instruction operand*, wobei ein Operand ein Register oder eine Zahl zwischen 0 und 127 (und alles, was darüber liegt, wird als Register behandelt) und ein Operand sein kann Fehlt für einen Multi-Arity-Befehl '0', wird angenommen.
Felix Dombek

Antworten:


8

Ja, wenn Sie dies sehr analytisch betrachten und eine deterministische Turing-Maschine erstellen, die für jede einzelne Saite einer bestimmten Sprache immer in einem guten Endzustand anhält, dann haben Sie demostriert, was möglich ist. Die Demo ist ziemlich einfach, Sie müssen ein reguläres TM mit einer Übergangsfunktion mit nur einem Übergang haben, das sieht so aus:

TF(w,q) -> (w,Qa) 

Considerations:
    L = { w | w is any possible string }
    w e L
    q e Q
    F is a set with all good final states {Qa,Qr}
    Qa e F

Es wurde demostriert, dass ein TM die gleiche Rechenleistung hat wie ein einzelner realer Computer. Dies ist also absolut möglich


1
Was um alles in der Welt bedeutet das für uns Laien? Was ist "w", "e", "L", "q", "Q", "Qa", "Qr", "F", "TF". Ohne eine dieser Definitionen habe ich keinen Bezugsrahmen.
Berin Loritsch

1
Es tut uns leid, aber es gibt keine einfache Möglichkeit, den Ansatz von Turing Machine für diese Antwort zu erklären. Überprüfen Sie diesen Link, um ein wenig zu klären: en.wikipedia.org/wiki/Turing_machine
guiman

16

Ja, natürlich ist es möglich, es ist sogar ganz einfach.

<programm> ::= char | char <program> |

Ich verstehe nicht, wie jemand "nein" sagen kann. Das heißt, es könnte ziemlich schwierig sein, eine sinnvolle Semantik für eine solche Sprache zu definieren, aber das ist auch möglich. Schauen Sie sich nur das Leerzeichen an .


Also, wenn die Sprache es ignoriert, ist es gültiger Systax? und ist "tabtabspace" keine gültige Zeichenfolge?
Michael K

1
Die Semantik der Sprache war mein Problem, aber ich kann sie nicht wirklich diskutieren, ohne dass sie vom eigentlichen Thema der Philosophie / Sprachwissenschaft abweicht.
StuperUser

2
Michael: Genau. Alles ist syntaktisch gültig, kann aber möglicherweise eine NOP sein (hat keine besondere Bedeutung). An einer Sprache, die viele Dinge ignoriert, ist nichts auszusetzen. Schauen Sie sich alle Dinge an, die C in diesem Beispielprogramm ignoriert: int main () {3 ;;; / * comment * /}
user281377

Viele Leute sagen "nein", weil sie keine begriffliche Unterscheidung zwischen Syntax und Semantik haben. "Es wird nicht kompiliert? Dann muss es sich um einen Syntaxfehler handeln!"
Fredoverflow

Viele Leute sagen "nein", weil dies keine wirkliche Bedeutung hat. Sobald Sie eine Struktur hinzufügen (dh mehr als eine selbstrekursive Parsing-Regel), haben Sie das Konzept der Syntax. Eine Verletzung der Struktur ist ein syntaktisch bedingter Fehler. Ein durch Syntax verursachter Fehler ist ein Syntaxfehler, unabhängig davon, ob der Parser ihn als solchen kennzeichnet oder nicht.
Berin Loritsch

5

Ich denke, es hängt davon ab, was Sie mit gültiger Syntax meinen.

Sie können eine Sprache entwerfen, die eine beliebige Zeichenfolge akzeptiert, jedoch alles ignoriert, was keine bestimmte Bedeutung hat. Dies ist im Grunde das Äquivalent zu der Aussage "Ich werde Syntaxfehler beseitigen, aber sie sind keine Fehler" - ziemlich sinnlos und aus vielen Gründen äußerst unerwünscht.

Darüber hinaus besteht die einzige Möglichkeit, eine Sprache zu haben, die keine Syntaxfehler aufweist, darin, dass jeder möglichen Zeichenfolge eine gültige Anweisung / Verwendung zugeordnet ist. Die einzige Möglichkeit, die ich sehen kann, wäre, alle Operationen als einzelne Zeichen zu haben und sicherzustellen, dass jedem einzelnen Zeichen eine Operation zugewiesen wurde.

Es gibt eine Million Dinge, die daran falsch sind - offensichtlich gibt es keine reservierten Wörter, es dreht sich alles darum, wo es im Kontext verwendet wird, und infolgedessen wäre es im Grunde unleserlich, und obwohl es immun gegen Syntaxfehler wäre, würde es viel wahrscheinlicher sein, dass jede andere Art auftreten des Fehlers.

So theoretisch möglich (AmmoQ formuliert es viel ordentlicher als ich), aber völlig unerwünscht.


Ich habe gelesen, dass TECO so war und jedem Zeichen eine Bedeutung zugewiesen wurde.
David Thornley

3
Maschinencode funktioniert so ziemlich genau. Jede mögliche Kombination von Bytes kann als ein Programm angesehen werden, das etwas tut , auch wenn es nur einen Interrupt verursacht.
user281377

David, so dachte ich, sehr TECO-artig. Obwohl die IIRC-TECO-Eingabe Syntaxfehler enthalten kann. Aber es zeigt die Schwierigkeit einer so dichten Sprache - sehr schwer zu lesen und anfällig für schwer zu verstehende Fehler.
Omega Centauri

@ user281377: Auf dem 6502 gibt es einige Anweisungen ohne definierte Bedeutung. Einige weisen Verhaltensweisen auf, die konsistent, nützlich und für keine dokumentierte Anweisung verfügbar sind (mein Favorit hat den Spitznamen "DCP" - Verringern Sie eine Speicheradresse und vergleichen Sie das Ergebnis mit dem Akkumulator, indem Sie die Flags entsprechend setzen), andere verhalten sich jedoch abhängig von Bus-Timings auf seltsame und bizarre Weise, und einige werden den Prozessor so stark blockieren, dass ein Reset erforderlich ist (selbst ein "nicht maskierbarer" Interrupt wird nicht helfen). Ich denke, die letzteren Anweisungen könnten als "Syntaxfehler" angesehen werden.
Supercat

5

Code in einer nicht textbasierten Programmiersprache weist möglicherweise keine Syntaxfehler auf.

Ich denke an eine visuelle Sprache wie BYOB . Sie können nicht versehentlich "if x ten else foo" eingeben, da die "Syntax" durch grafische Blöcke definiert wird.


3

Der eigentliche Zweck der Syntax besteht darin, auf eine Weise, die schneller und effektiver ist als die Ausführung des Codes, zwischen gültig und ungültig zu unterscheiden. Syntax ist nur eine Optimierung, was darin und was in die Semantik geht, ist willkürlich.

Normalerweise möchten Sie genau das Gegenteil: Um die Syntax so weit wie möglich zu strecken, um mehr Zeit zu sparen, können Sie jedoch auch die Syntax ganz weglassen und jeden Fehler als semantisch deklarieren: Sie erhalten einen nicht-tokenisierenden Interpreter.


0

Ahbefiasdlk aslerhsofa; f jwi [asdfasdf] aew / & Q! @ # $} {;-P

Was bedeutet das?

Solange die Sprache Struktur und Grammatik hat, wird es immer das Konzept eines Syntaxfehlers geben. Die Frage ist, ob Sie es durchsetzen oder nicht. Die Leute machen Fehler, und Syntaxfehler sind das, wonach die meisten Sprachentwickler streben, um Programmierern zu helfen, dumme Fehler zu vermeiden.

Ein Syntaxfehler ist ein Fehler, der von Programmierern verursacht wird, die Code schreiben, der für die Sprache keine Bedeutung hat.

Es ist unmöglich, Syntaxfehler basierend auf der obigen Definition zu beseitigen. Wir haben alle Bezeichner falsch geschrieben, wir haben alle Methodennamen falsch geschrieben. Es ist nicht meine Vorstellung von einer angenehmen Erfahrung, wenn die Sprache die Rechtschreibfehler still akzeptiert und glücklich nichts tut.

Es ist möglich, eine Sprache zu entwerfen, die ein beliebiges gültiges Unicode-Zeichen (oder eine beliebige Zeichenfolge) als Bezeichner verwenden kann. Es gibt Herausforderungen, z. B. das Normalisieren von äquivalenten Zeichen / Zeichenfolgen, damit sie als dasselbe erkannt werden - aber es ist möglich. HINWEIS: Es gibt vier Standardtypen der Unicode-Normalisierung .


1
Das Bedürfnis nach Struktur erfordert keine Grammatik. Stellen Sie sich Piet vor, bei dem sich die Struktur an der Position des Zeichens (oder der Farbe) in einem Raster befindet und nicht in der Beziehung zu anderen Zeichen in einem Morphem.
Mike Samuel

1
Die Struktur verletzen und was passiert?
Berin Loritsch
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.