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
language-design
syntax
SLaks
quelle
quelle
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.Antworten:
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:
Es wurde demostriert, dass ein TM die gleiche Rechenleistung hat wie ein einzelner realer Computer. Dies ist also absolut möglich
quelle
Ja, natürlich ist es möglich, es ist sogar ganz einfach.
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 .
quelle
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.
quelle
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.
quelle
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.
quelle
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.
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 .
quelle