Frage zum Erstellen einer Skriptsprache

12

Angenommen, ich wollte jemanden dafür bezahlen, eine Programmiersprache oder Skriptsprache für mich zu erstellen. Welche Art von Dokument würden sie brauchen, um vollständig zu verstehen, was genau ich will.

Ich meine, gibt es Standarddokumente, die die betreffende neue Programmiersprache beschreiben?

JTS
quelle
Da es sich um Programmierung und nicht um Programmierer handelt, ist dies wahrscheinlich besser für StackOverflow geeignet.
Muad'Dib,
14
Ich stimme Muad'Dib nicht zu. Ich denke, das ist ein guter Ort für diese Frage.
Chris
5
Ich denke, anstatt Ihre eigene Skriptsprache zu erfinden, sollten Sie auf Kosten des enormen Arbeitsaufwands für Sie und Ihren Benutzer eine neue Sprache lernen, eine vorhandene Skriptsprache einbetten. Einige Sprachen, z. B. Python, Javascript / ECMAScript, sind so konzipiert, dass sie in ein größeres Framework eingebettet werden können. Kurz gesagt, Sie müssen nur die API entwerfen und eine Möglichkeit finden, den Skriptinterpreter in Ihr eigenes Programm einzubetten.
Lie Ryan
1
Dies ist von Vorteil, wenn die Sprache eine DSL-Sprache sein soll. für eine allgemeine Sprache nicht so sehr. Natürlich sind einige allgemeine Sprachen eine sehr gute Basis für DSLs, zB Lisp oder TCL
jk.

Antworten:

16

Was Sie schreiben müssen, wird als Sprachspezifikation bezeichnet .

Es sollte eine Beschreibung der Grammatik der Sprache (vorzugsweise in Extended Backus-Naur-Form ) und ihrer Semantik enthalten.

Für den letzten Teil könnten Sie entweder eine Beschreibung in Ihren eigenen Worten (aber seien Sie vorsichtig, um genau zu sein) oder eine formale Semantik schreiben .

sepp2k
quelle
1
BNF ist nur für inhaltsfreie Grammatiken nützlich, Skriptsprachen sind nicht immer kontextfrei, z. B. TCL (obwohl ich denke, man kann immer noch argumentieren, dass es in den meisten Fällen vorzuziehen ist, eine kontextfreie Sprache zu haben)
jk.
@jk. Ich würde nicht sagen, dass BNF für nicht-kontextfreie Sprachen völlig nutzlos ist. Abhängig davon, wie nicht kontextfrei die Syntax ist, kann es dennoch sinnvoll sein, sie in EBNF anzugeben und dann die Mehrdeutigkeiten in Wörtern aufzulösen. Das macht zum Beispiel der C ++ - Standard. In den meisten Fällen denke ich, das ist immer noch klarer, als alles in Worten zu erklären oder es mit einer kontextsensitiven oder uneingeschränkten Grammatik zu spezifizieren.
26.
Meiner Meinung nach gibt es eher Sprachen wie lisp, tcl oder forth (die eigentlich sehr gut für die Definition von DSLs geeignet sind), die eine degenerierte Syntax haben, und daher sagt Ihnen die BNF nur sehr wenig
jk.
@jk. Klar, aber in diesem Fall sagt Ihnen jedes andere Mittel zur Beschreibung der Syntax ebenso wenig, nur weil es so wenig zu sagen gibt. Das bedeutet nur, dass der Syntaxteil der Spezifikation sehr kurz sein wird.
26.
13

Sie benötigen Folgendes:

  • Ein Grund, eine neue Sprache zu erstellen
  • Eine Philosophie
  • Eine semantische Definition
  • Eine lexikalische Beschreibung Ihrer Token
  • Eine Syntaxanalyse-Definition

Wie wird deine Sprache anders sein? Was ist ihre Mission? Ist es funktionsfähig? Ist es objektorientiert? Ist es eine Metasprache? Was sind seine einzigartigen Eigenschaften? Was wird es der Welt geben, die nicht existiert (oder auf hässliche Weise existiert)? Wie willst du etwas verändern? Wird es kompiliert oder interpretiert? Eine DSL- oder Allzwecksprache? Dies ist Ihre Philosophie und bestimmt viel über das Design Ihrer Sprache.

Als nächstes arbeiten Sie daran, grobe Syntax und Semantik auf Papier zu schreiben. Dies wird Ihre semantische Definition sein . Das Schreiben von gefälschtem Code ist eine großartige Möglichkeit, Ihre Gedanken zu entwickeln. Lesen Sie "Die Programmiersprache C", um ein hervorragendes Beispiel dafür zu erhalten. Spiel damit.

Sie müssen dann Ihre Token und die Syntax auf irgendeine Weise definieren. Programme verarbeiten diese dann zu Automaten, die Zeichenfolgen einlesen und die Syntax verarbeiten können. Yacc und Bison verwenden reguläre Ausdrücke und eine BNF-Syntax für die lexikalische Analyse bzw. die Syntaxanalyse. Es gibt auch Yacc- und Bison-ähnliche Tools für andere Sprachen.

Sie benötigen auch eine Grundausbildung in Sprachtheorie / Compilern, um zu wissen, was NICHT zu tun ist. Beispiele hierfür sind mehrdeutige Grammatiken, Probleme bei der AST-Generierung und -Manipulation sowie allgemeine Hinweise zur Vereinfachung des Lebens. Die Theorie zu kennen ist sehr wichtig. Ich würde Folgendes in Betracht ziehen, um anzufangen:

Compiler: Prinzipien, Techniken und Werkzeuge (Dragon Book)
Moderne Compiler-Implementierung in C oder Moderne Compiler-Implementierung in Java

Aiden Bell
quelle
1
+1 für Philosophie, für DSL möchten Sie die Domain hier eindeutig identifizieren
jk.
8

In 99,9% der Fälle ist das Erstellen einer neuen Sprache nicht erforderlich. Der Return on Investment wäre höchstwahrscheinlich winzig und Sie hätten nur Ihre Zeit verschwendet.

Höchstwahrscheinlich können Sie Javascript als anfällige Skriptsprache verwenden, und für die meisten Sprachen sind bereits Parser verfügbar. Sie können auch andere Skriptsprachen verwenden, die Ihnen gefallen, wenn Sie einen geeigneten Parser für diese finden. Die Implementierung in Ihr Programm würde viel weniger Arbeit erfordern und eine größere Rendite bringen. Die Leute müssen keine andere Sprache lernen, sie müssen nur Ihre API lernen. Es ist eine viel bessere Lösung.

Das Erstellen einer neuen Sprache ist fast immer schlecht.

TheLQ
quelle
9
Mit Ausnahme der vielen Male, in denen es nicht schlecht ist. Das Erstellen eigener einfacher DSLs kann sehr nützlich sein. Wenn Sie jetzt Ihre eigene Allzwecksprache erstellen, entspricht dies eher Ihrer Antwort.
ChaosPandion 16.10.10
@ChaosPandion, aber viele Sprachen zeichnen sich bereits durch die Erstellung eines DSL aus, das Code aus dieser Sprache verwendet (dh Ruby kann das)
Alternative
2
Ich bin mit Ihrer Antwort einverstanden, aber ich glaube, dass es nicht die richtige Antwort für diese Frage ist. Ich glaube, der Fragesteller befasst sich mit den allgemeinen Aspekten der Erstellung einer Skriptsprache, nicht mit den Vor- und Nachteilen der Erstellung einer Skriptsprache.
Tim Murphy
Das Erstellen einer neuen Sprache ist fast immer die beste Lösung. en.wikipedia.org/wiki/Language-oriented_programming
SK-logic
3

Sie können die Grammatik Ihrer Sprache in BNF beschreiben .

Dies ist beispielsweise Pythons Grammatik .

grokus
quelle
6
Die Grammatik allein reicht jedoch nicht aus, um eine Sprache zu implementieren. Er muss auch die Semantik auf die eine oder andere Weise spezifizieren.
16.
0

Wenn Sie .NET verwenden, ist hier etwas, über das ich vor einiger Zeit gestolpert bin. Ich habe es nur mit einem merkwürdigen Blick betrachtet, aber vielleicht würde es Ihnen etwas nützen: Ironie .

Irony ist ein Entwicklungskit für die Implementierung von Sprachen auf der .NET-Plattform.

DevSolo
quelle