Benutzerdefinierte Programmiersprache: Wie?

8

Hoffentlich wird diese Frage nicht zu verworren oder vage sein. Ich weiß, was ich in meinem Kopf will, also Daumen drücken, das kann ich im Text verstehen.

Ich suche nach einer Sprache mit einer Syntax meiner eigenen Spezifikation, also nehme ich an, dass ich selbst eine erstellen muss. Ich habe die letzten Tage damit verbracht, über Compiler, Lexer, Parser, Assembler, virtuelle Maschinen usw. zu lesen, und ich bemühe mich, alles so zu ordnen, dass ich meine Ziele erreichen kann (Datei unten angehängt) einige Spezifikationen). Im Wesentlichen bin ich tot verwirrt, welche Werkzeuge ich speziell verwenden muss, um vorwärts zu gehen.

Ein kleiner Hintergrund: Die erstellte Sprache würde hoffentlich dazu dienen, einen textbasierten Multi-Player-MUD-Server zu implementieren. Daher benötigt es einfach eingebaute Funktionen zum Erstellen / Pflegen von Client-TCP / IP-Verbindungen, nicht blockierenden IO, Datenbankzugriff über SQL oder ähnliches. Ich bin auch an Sicherheit interessiert, da ich nicht möchte, dass Code, der für diese Sprache geschrieben wurde, ohne spezielle Software von der Allgemeinheit gestohlen und benutzt werden kann. Dies bedeutet wahrscheinlich, dass es zu Objektcode

kompilieren sollte

Also, was sind meine besten Optionen, um eine Sprache zu erstellen, die diese Spezifikationen

erfüllt

Meine Schlussfolgerungen sind unten. Das ist nur meine beste Vermutung, also bitte bestreite mich, wenn du denkst, dass ich in die falsche Richtung gehe. Ich nehme das meistens nur auf, um zu sehen, wie verwirrt ich bin, wenn die Experten kommentieren.

  1. Für die Codesicherheit sollte eine Sprache gewünscht sein, die kompiliert und in einer virtuellen Maschine ausgeführt wird. Wenn ich das tue, habe ich verdammt viel zu tun, oder? Schreiben Sie eine virtuelle Maschine, Assembler-Sprache auf der unteren Ebene und dann auf der höheren Ebene, Code-Bibliotheken, um mit IO, Sockets, etc. selbst zu tun, anstatt vorhandene Module zu verwenden?

  2. Ich bin einfach nur verwirrt.

  3. Ich bin mir nicht sicher, ob es Sinn macht.

Wenn jemand mein Gehirn sogar ein wenig beruhigen könnte, würde ich es sehr schätzen! Alternativ, wenn ich vom Kurs abgekommen bin und es einen viel einfacheren Weg gibt, lass es mich wissen!

    
Sam 20.04.2011, 12:05
quelle

6 Antworten

10

Das Entwerfen einer benutzerdefinierten domänenspezifischen Programmiersprache ist der richtige Ansatz für ein Problem. Eigentlich sind fast alle Probleme besser mit DSLs angegangen. Begriffe, die Sie wahrscheinlich googlen möchten, sind: domain specific languages und language-oriented programming .

Manche würden sagen, dass das Entwerfen und Implementieren eines Compilers eine komplizierte Aufgabe ist. Es ist überhaupt nicht wahr. Die Implementierung von Compilern ist eine triviale Sache. Es gibt eine Menge qualitativ hochwertiger Compiler, und Sie müssen lediglich eine einfache Transformation von Ihrer eigenen Sprache in eine andere oder in eine Kombination der anderen Sprachen definieren. Du brauchst einen Parser - es ist heutzutage keine große Sache, mit Antlr und Tonnen von Homebrew-PEG-basierten Parser-Generatoren herum. Sie benötigen etwas, um die Semantik Ihrer Sprache zu definieren - moderne funktionale Programmiersprache glänzt in diesem Bereich, alles was Sie brauchen, ist etwas mit einer Unterstützung für ADTs und Pattern-Matching. Du brauchst eine Zielplattform. Es gibt viele Möglichkeiten: JVM und .NET, C, C + +, LLVM, Common Lisp, Scheme, Python und was auch immer aus Textstrings gemacht wird.

Es gibt fertige Frameworks zum Erstellen eigener Sprachen. Wörtlich kann jede Common-Lisp- oder Schema-Implementierung als ein solches Framework verwendet werden. LLVM hat alles, was Sie brauchen. Die .NET-Toolbox ist in Ordnung - es gibt viele Optionen zur Codegenerierung. Es gibt spezielle Frameworks wie dieses zum Erstellen von Sprachen mit komplexer Semantik.

Wählen Sie, wie Sie möchten. Es ist leicht. Viel einfacher als Sie sich vorstellen können.

    
SK-logic 20.04.2011, 12:37
quelle
3

Wenn Sie Ihre eigene Sprache und Werkzeugkette schreiben, um ein scheinbar normales Problem zu lösen, klingt das nach dem falschen Weg. Du wirst am Ende noch eine andere Sprache entwickeln und nicht dein MUD schreiben.

Viele Spieleentwickler verwenden einen Ansatz zur Verwendung von Skriptsprachen, um ihre eigene Spielwelt zu beschreiben, zum Beispiel: Ссылка

Siehe auch: Ссылка für die Verwendung bestehender Sprachen (Pythong und LUA) in diesem Fall für das In-Game-Scripting.

    
Guy 20.04.2011 12:13
quelle
3

Da Sie nicht viel über Compiler und das Erstellen von Computersprachen wissen: Do not. Es gibt ungefähr fünf Leute auf der Welt, die gut darin sind.

Wenn Sie immer noch versuchen möchten: Die Erstellung einer guten allgemeinen Sprache dauert mindestens 3 Jahre. Vollzeit. Es ist ein großes Unternehmen.

Also sollten Sie stattdessen eine der vorhandenen Sprachen ausprobieren, die fast alle Ihre Probleme bereits löst, außer vielleicht der "benutzerdefinierte" Teil. Aber vielleicht macht die Sprache die Dinge besser als du es dir jemals vorgestellt hast und du brauchst den "benutzerdefinierten" Teil überhaupt nicht.

Hier sind zwei Optionen:

  1. Python , eine wunderschöne Skriptsprache. Die VM kompiliert die Sprache in Byte-Code für Sie, keine Zeit mit einem Compiler zu verschwenden. Die Syntax ist sehr flexibel, aber da es in Python einen guten Grund für alles gibt, ist es nicht zu flexibel.

  2. Java. Mit dem neuen Xtext-Framework können Sie in ein paar Minuten Ihre eigenen Sprachen erstellen. Das heißt nicht, dass Sie in wenigen Minuten eine gute Sprache erstellen können. Nur eine Sprache.

Python kommt mit vielen Bibliotheken, aber wenn Sie etwas anderes brauchen, wird die Luft schnell dünn. Auf der positiven Seite können Sie in kurzer Zeit viel guten und soliden Code schreiben. Eine Zeile von Python ist normalerweise gleich 10 Zeilen Java.

Java kommt nicht mit einer Menge Extras, aber es gibt buchstäblich Millionen von Frameworks da draußen, die alles tun, was Sie sich vorstellen können ... und viele Dinge, die Sie nicht können.

Das sagte: Warum beschränken Sie sich auf eine Sprache? Mit Jython können Sie Python-Quellen in der Java VM ausführen. So können Sie den Kern (Webserver, SQL, usw.) in Java und die flexiblen UI-Teile, die Abenteuer und so in Python schreiben.

    
Aaron Digulla 20.04.2011 12:19
quelle
2

Wenn Sie wirklich Ihre eigene kleine Sprache erstellen möchten, ist eine einfachere und oft schnellere Lösung, Tools wie zu betrachten lex und yacc und ähnliche Systeme ( ANTLR ist eine beliebte Alternative), und dann können Sie Code entweder für eine existierende virtuelle Maschine generieren oder einen einfachen selbst erstellen.

Alles selbst zu machen ist eine großartige Lernerfahrung und hilft Ihnen zu verstehen, was hinter den Kulissen anderer virtueller Maschinen vor sich geht.

    
Some programmer dude 15.11.2011 13:02
quelle
0

Eine ausgezeichnete Quelle für das Verständnis von Konzepten für die Gestaltung und Implementierung von Programmiersprachen ist Struktur und Interpretation von Computerprogrammen von MIT Drücken Sie. Es ist eine großartige Lektüre für jeden, der eine Sprache entwerfen und implementieren möchte, oder für jeden, der generell ein besserer Programmierer werden möchte.

    
kallisti 22.12.2011 12:29
quelle
-2

Aus dem, was ich daraus verstehen kann, wollen Sie wissen, wie Sie Ihre eigene Programmiersprache entwickeln.

Wenn ja, können Sie dies mit verschiedenen Methoden erreichen. Ich habe vor ein paar Minuten meine eigene Arbeit beendet und ich habe HTML und Javascript (und DOM) benutzt, um mein eigenes zu entwickeln. Ich habe eine Menge x.split und x.indexOf ("code here")! = - 1 dazu verwendet ... Ich habe nicht viel Zeit, um ein Beispiel zu geben, aber wenn Sie W3schools verwenden und "indexOf" suchen und "Split" Ich bin sicher, dass Sie finden werden, was Sie brauchen könnten. Ich würde Ihnen gerne zeigen, was ich getan habe und den Code weiter unten, aber ich kann nicht wegen möglichen Diebstahls und Anspruch auf meine Arbeit.

Ich bin so ziemlich nur hier, um zu sagen, dass Sie Ihre eigene Programmiersprache mit HTML und Javascript erstellen können, so dass Sie und andere ihre Hoffnungen vielleicht nicht zu niedrig bekommen. Ich hoffe, das hilft bei den meisten Dingen ....

    
Warmaster_Prime 01.09.2017 00:06
quelle