Eigene Programmiersprache ?
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
assembler
aufgefallen
bauen
befehl
beispiel
code
compiler
eigene sprache
funktion
http
interpreter
lernen
liste
paar
programmiersprache
sprache
umwandeln
umweg
unterschied
url
-
Hallo, ich bin's mal wieder
Och dachte mir gerade, wo ich durch die ganzen Programmiersprachen durchschaue, ob es nicht auch möglich ist sich eine eigene Sprache zu bauen.
Jetzt habe ich mir mal andere Sprachen angeschaut, was mir aufgefallen ist, ist das die meisten Funktionen einer Sprache, wie der name es sagt, einfach nur Funktionen sind...
Ist es also möglich sich seine eigene sprache nur aus selbst geschriebenen Funktionen zu machen.
Aber woher bekommt man dann einen Compiler für die eigene Sprache?
Zudem, ab wann ist eine Sprache eine Sprache?
Und gibt es eine Liste "offizieller" Sprachen? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
gaestefun schrieb:
sicherlich ist so etwas möglich, je nach deinem Vorwissen könnte es ja sogar klappen. Pascal z..B.:
Hallo, ich bin's mal wieder
Och dachte mir gerade, wo ich durch die ganzen Programmiersprachen durchschaue, ob es nicht auch möglich ist sich eine eigene Sprache zu bauen.
Jetzt habe ich mir mal andere Sprachen angeschaut, was mir aufgefallen ist, ist das die meisten Funktionen einer Sprache, wie der name es sagt, einfach nur Funktionen sind...
Ist es also möglich sich seine eigene sprache nur aus selbst geschriebenen Funktionen zu machen.
Aber woher bekommt man dann einen Compiler für die eigene Sprache?
Zudem, ab wann ist eine Sprache eine Sprache?
Und gibt es eine Liste "offizieller" Sprachen?Die Sprache wurde von Niklaus Wirth als Lehrsprache entwickelt. Sie wurde deshalb so einfach und strukturiert wie möglich gestaltet. Ihre große Verbreitung in der professionellen Programmierung fand sie als Borland/Turbo Pascal (später Delphi) – gegenüber dem Ur-Pascal wesentlich erweiterte und verbesserte Versionen.
Quelle: http://de.wikipedia.org/wiki/Pascal_(Programmiersprache)
Ausser einem sehr gten Wissen im Compilerbau brauchst du natürlich auch genügend Ausdauer, dann klappt das schon.
Das erste Grundgerüst wird heutzutage meist mit C oder C++ entwickelt, früher war Assembler dafür angesagt, was ganz ffrüher vor Assembler war geht vielleicht aus http://de.wikipedia.org/wiki/Programmiersprache hervor.
Hier eine (sicherlich nicht vollständige Liste) von Programmiersprachen: http://de.wikipedia.org/wiki/Liste_von_Programmiersprachen
Beitrag zuletzt geändert: 29.4.2011 0:24:43 von harrybotter -
Wann ist jetzt eigentlich eine Sprache eine Sprache, wenn ich jetzt ein sehr großes include für zB C++ machen würde mit allen notwendigen befehlen und dann sagen würde "Zum Compilen geht jeder c++ complier", wäre dies eine Sprache?
Oder muss man für seine eigene Sprache auch einen eigenen Compiler haben? -
gaestefun schrieb:
Hallo, ich bin's mal wieder
Och dachte mir gerade, wo ich durch die ganzen Programmiersprachen durchschaue, ob es nicht auch möglich ist sich eine eigene Sprache zu bauen.
Natürlich. Irgendwoher müssen die ganzen Programmiersprachen ja kommen
Jetzt habe ich mir mal andere Sprachen angeschaut, was mir aufgefallen ist, ist das die meisten Funktionen einer Sprache, wie der name es sagt, einfach nur Funktionen sind...
Nun, es gibt Sprachen, die ausschließlich mit Funktionen arbeiten. Die meisten Sprachen haben aber auch Operatoren, Kontrollstrukturen und noch einige andere Eigenschaften. Ein Beispiel für eine Sprache, die nur aus Funktionen besteht, ist Scheme (wobei es da auch Makros gibt).
Ist es also möglich sich seine eigene sprache nur aus selbst geschriebenen Funktionen zu machen.
Du darfst die Standardbibliothek nicht mit der Sprache an sich verwechseln. Die Sprache selber braucht eine Grammatik und wenn du die hast, dann kannst du erst Dinge wie Funktionen umsetzen.
Aber woher bekommt man dann einen Compiler für die eigene Sprache?
Den muss man sich natürlich selber schreiben.
Zudem, ab wann ist eine Sprache eine Sprache?
Die Frage ist zu allgemein
Und gibt es eine Liste "offizieller" Sprachen?
Gibt es denn so etwas wie eine offizielle Sprache? Ich denke nicht.
gaestefun schrieb:
Wann ist jetzt eigentlich eine Sprache eine Sprache, wenn ich jetzt ein sehr großes include für zB C++ machen würde mit allen notwendigen befehlen und dann sagen würde "Zum Compilen geht jeder c++ complier", wäre dies eine Sprache?
Ich verstehe nicht ganz, was du meinst. Wenn du einfach nur ein paar Funktionen hinzufügst, hast du keine neue Sprache. Wenn du die Grammatik änderst oder erweiterst, ja.
Oder muss man für seine eigene Sprache auch einen eigenen Compiler haben?
Klar.
Falls du dich wirklich an ein eigenes Sprachprojekt heranwagen willst, dann versuch erstmal einen eigenen Lisp- bzw. Scheme-Dialekt zu implementieren. Das ist schon schwer genug. -
Rein theoretisch ist es natürlich möglich, eine eigene Programmiersprache zu entwickeln. In der Praxis benötigt man dafür aber erweiterte Informatikkenntnisse, wie Compilerbau, Maschinensprache etc.
Wer jedoch nicht den Unterschied zwischen einer Funktionsbibliothek und einer Programmiersprache kennt, ist noch weit weg von den benötigten Kenntnissen.
Am einfachsten wäre es, wenn man zB eigenen Code in Assembler-Code umwandelt und diesen dann durch einen bestehenden Assembler-Compiler compiliert. -
trueweb schrieb:
Wer jedoch nicht den Unterschied zwischen einer Funktionsbibliothek und einer Programmiersprache kennt, ist noch weit weg von den benötigten Kenntnissen.
Der Fehler war mir auch irgendwie klar, nur war ich leicht verwirrt darüber, als ich PHP angeschaut habe, da hier ja zu C nur Funktionen hinzugefügt wurde(ausnahme OOP(kann auch mehr sein))
Am einfachsten wäre es, wenn man zB eigenen Code in Assembler-Code umwandelt und diesen dann durch einen bestehenden Assembler-Compiler compiliert.
Das habe ich nicht ganz verstanden...
Ich soll erst eigenen Code in irgendeiner Sprache schreiben,dann in Assembler umwandeln und dann wieder in Maschienencode, wieso der Umweg über Assembler?
Oder ist gemeint das ich eigenen Code in Assembler schreibe und dann in Binary umwandle? -
gaestefun schrieb:
Ich soll erst eigenen Code in irgendeiner Sprache schreiben,dann in Assembler umwandeln und dann wieder in Maschienencode, wieso der Umweg über Assembler?
Weil du dann nur deinen Syntax in Assembler umwandeln musst und dich um die Compilierung vom Assembler nicht kümmern brauchst. Du schreibst also nicht selber einen Compiler (das ist die Königsdisziplin der Informatik, das kann man nicht mal geschwind so lernen), aber hast im Endeffekt trotzdem deine eigene Sprache.
Zum Beispiel könntest du:
machSchleife(5) { // Anweisungen }
In:
mov ecx, 5 .Schleife: ; Anweisungen loop .Schleife
übersetzen und es würde funktionieren ;) -
Also PHP ist schon ein wenig mehr als nur Funktionen zu C hinzufügen.
Du musst bedenken, dass PHP zwingendermaßen eine Schnittstelle zum System braucht und
es, soweit ich weiß, keinen Prozessor gibt, der PHP direkt ausführen kann.
Das heißt es muss über Maschinencode "emuliert" werden und der ist in C geschrieben.
Sicherlich hast du viele Funktionen, die direkt von C abgebildet wurden aber schon dabei steckt ein
gewaltiger Speicherverwaltungsaufwand dahinter, der weit über das "Ein paar Funktionen hinzufügen" hinausgeht.
Aber genug von PHP und zum eigentlichen Problem.
Ich sehe es ähnlich, wie die anderen, du gehst etwas zu blauäugig an die Sache heran.
Ich habe früher ähnlich gedacht, bin aber durch mein Studium mit Compilerbau in Berührung gekommen.
Das heißt ich habe ein ganzes Semester Vorlesung und Übung zu diesem Thema gehabt und ich bin
mir sicher noch ganz am Anfang zu stehen.
Man kann natürlich auf alle möglichen weisen eine Sprache zusammenschustern,
aber im laufe der Zeit haben sich strukturierte ansätze bewährt, da man damit nicht so schnell die Übersicht verliert.
Wenn du wirklich ernsthaft mit dem Gedanken spielst eine eigene Sprache zu bauen, dann informiere dich über folgendes:
Sprachebeschreibungen mit Hilfe von Grammatiken( Stickwort Backus-Naur Form)
Umsetzung dieser Sprache in einem Scanner/Tokenizer (siehe Flex/Lex)
Verwendung des Scanners/Tokenizers in einem Parser-Generator (siehe Bison/Yacc)
(Letzteres nimmt dir die Wahl über den Typ des Parsers ab, da beide genannten LALR(1) Parser erzeugen,
was so ziemlich das Beste ist, was man noch effizient nutzen kann)
Damit hast du die reine Erkennung der Sprache ohne eine Umsetzung in ausführbaren Code.
Jetzt fehlt "nur noch" die Übersetzung in eine niedrigere Sprache/Maschinencode.
In der Gnu Compiler Collection ist das für viele Sprachen so gelöst, dass man erst in Assembler
übersetzt und dann in Maschinencode.
das hat den Vorteil, dass man die Übersetzung in Maschinencode nur einmal für alle Sprachen implementieren muss.
Das reicht erstmal als Übersicht über die wichtigsten Schritte, die jeder für sich schon eine Herkulesaufgabe darstellen.
Sollte ich dich jetzt nicht zusehr abgeschreckt haben und du willst mit Bison und Flex mal ein wenig rumprobieren,
dann würde ich dir empfehlen erstmal so etwas einfaches wie einen infix-Kommandozeilentaschenrechner damit zu bauen.
Ich hatte das mal als Übung für meine Vorlesung gemacht und was dabei rauskam fand ich schöner als den ollen
Standardrechner in dem man unintuitiv in prä- oder postfix-Notation arbeiten muss.
Grüße
Sektor -
gaestefun schrieb:
trueweb schrieb:
Wer jedoch nicht den Unterschied zwischen einer Funktionsbibliothek und einer Programmiersprache kennt, ist noch weit weg von den benötigten Kenntnissen.
Der Fehler war mir auch irgendwie klar, nur war ich leicht verwirrt darüber, als ich PHP angeschaut habe, da hier ja zu C nur Funktionen hinzugefügt wurde(ausnahme OOP(kann auch mehr sein))
Läuft C Code mit dem PHP Interpreter? Nein! Also ist das schonmal Blödsinn. PHP ist zwar sehr stark von C inspiriert, aber es ist etwas gänzlich anderes als C + ein paar Funktionen. Das Laufzeit-Modell ist auch gänzlich anders.
Am einfachsten wäre es, wenn man zB eigenen Code in Assembler-Code umwandelt und diesen dann durch einen bestehenden Assembler-Compiler compiliert.
Das habe ich nicht ganz verstanden...
Ich soll erst eigenen Code in irgendeiner Sprache schreiben,dann in Assembler umwandeln und dann wieder in Maschienencode, wieso der Umweg über Assembler?
Weil dies kein Umweg ist, nur eine längere Strecke. Es ist schon schwierig genug, einen Compiler zu schreiben. Wenn du dann noch direkt die Binärwerte von den CPU-Kommandos ausgeben müsstest, würdest du durchdrehen. Und wenn du später etwas an deinem Compiler ändern willst, dann wirst du viel Spaß beim Binärwerte entziffern haben.
Deswegen ist es angenehmer mit einem Compiler lesbaren Assembler-Code zu produzieren, der dann 1:1 in die entsprechenden Binärcodes von einem Assembler umgewandelt werden kann.
Oder ist gemeint das ich eigenen Code in Assembler schreibe und dann in Binary umwandle?
Das kannst du dir sparen. Wenn du es hinbekommst, deinen Code in Assembler-Code umzuwandeln, dann kannst du einfach den Assembler einer anderen Programmiersprache für den Rest der Arbeit nutzen.
Man muss auch nicht umbedingt Assembler-Code für x86 produzieren. Man kann auch Assembler-Code für Virtuelle Maschienen erzeugen lassen, die deutlich nettere Features haben. Die Parrot-VM hat beispielsweise Dictionaries auf Assemblerebene. Sowas gibt es bei x86 nicht. Und man hat auch deutlich mehr Register zur Verfügung. Dafür ist allerdings die Geschwindigkeit nicht so gut wie bei nativen x86-Assembler-Anwendungen.
Bezüglich dem Post von sektor: Dem kann ich mich voll und ganz anschließen. Falls man Erfahrung sammeln will, im Sprachen erschaffen, bietet es sich meiner Einschätzung nach an einen Scheme-Dialekt umzusetzen und die Parrot-VM als Zielplattform zu nutzen.
Beitrag zuletzt geändert: 29.4.2011 19:26:22 von bladehunter -
Hallo gaestefun,
eine Programmiersprache muss ja nicht notwendigerweise kompilierbar sein. Es gibt ja auch noch Interpretersprachen und einen Interpreter kann man in ziemlich allen Programmiersprachen implementieren.
Am Anfang sollte man erst einmal mit etwas einfachem anfangen und sich mal ein paar Parser-Routinen basteln.
Es wäre ja erstmal eine rein imperative Sprache denkbar nach folgendem Schema:
Hierbei ist 'Befehl' ein Ausdruck, denn der Interpreter kennt und die Anzahl der Argumente hängt halt vom Befehl ab. Wenn Du noch runde Klammern drum machst, dann hast Du schon den ersten Schritt hin zum eigenen Lisp-InterpreterBefehl <Arg1> <Arg2> ... <ArgN>
Wenn man das hat, dann kann man sich Gedanken darüber machen, wie man mit verschachtelten Ausdrücken umgeht. Im allgemeinen braucht man dazu einen Parser, der erst einmal einen Ausführungsplan (=Liste von elementare Operationen wie z.B. Addition, Wertzuweisung, Funktionsaufruf, ...) erstellt, der dann vom Interpreter abgearbeitet wird. Wenn man erst rekursiv in den Ausdruck absteigt und dann die Operationen quasi von innen nach außen in den Ausführungsplan schreibt, dann sind sie auch schon in der richtigen Reihenfolge.
Ein guter Anfang um sich damit auseinanderzusetzen ist das zerlegen und evaluieren von mathematischen Ausdrücken. Wenn Du das Problem geknackt hast, dann hast Du im Allgemeinen genug gelernt um problemlos auch Kontrollstrukturen usw. umzusetzen.
Wenn Du dann doch kompilieren willst, dann musst Du tatsächlich Assembler lernen. Bis zum Erstellen des Ausführungsplanes bleibt aber alles wie es ist. Anstelle der Evaluierung muss man dann halt die elementaren Kommandos in Assembler- oder Opcode-Blöcke umsetzen.
-
Hm. Also so einen kleinen Interpreter für seine Skriptsprache ist meiner Meinung nach machbar. Beispielsweise programmiere ich gerade einen kleinen Taschenrechner, welcher den Shunting-Yard Algo benutzt, mit dem könntest du zb. Funktionsaufrufe und Rechnungen auflösen. Außerdem kannst du diesen noch mit ein paar Algos für eine Baumstruktur kombinieren. Das ganze ist furchtbar interessant. Hat aber nichts mit der Übersetzung von Code in Assembler zu tun.
Hier eine sehr nützliche Seite: http://dev.xscheme.de/2009/08/wie-entwickle-ich-meine-eigene-scriptsprache-teil-3/ -
Sicher ist es möglich, eine eigene Sprache zu entwickeln. Wir haben während des Studiums mal im Team eine kleine Sprache geschrieben, die sehr nahe an der englischen Sprache angesiedelt war, also zum Beispiel ging so etwas:
Create apple as apple_1 on appletree. Autumn come. Apple_1 falldown.
Wurde nicht in Maschinencode compiliert sondern just-in-time (JIT) in ein eigenes Bytecode-Format umgewandelt und sofort ausgeführt --> Interpretieren.
-
Das wichtigste bei ner Programmiersprache ist erst mal der Parser und ein minimaler Befehlssatz. Compilerbau ist sehr schwierg, Interpreter können einfach sein, je nachdem was du machen willst. Heutzutage wird auch viel mit Makros gemacht.
Aber ich hab mal nen kleinen Link für dich gesucht : http://www.html.de/off-topic-plauderecke/4276-programmiersprache-selber-machen.html -
Naja eine eigene Sprache zu machen ist nichts schwieriges. Wenn man eine Anwendung (in C) schreibt die immer ein Byte aus einer Datei liest, schaut ob es den oder den Wert hat und dabei jedes mal etwas bestimmtes ausführt kann man das schon als Intepreter Sprache bezeichnen. Das ganze mit Funktionen und Variablen ähnlich wie PHP oder Python zu machen dürfte schon etwas schwieriger sein.
Bei einer Hochsprache wie C.... viel Spaß! -
Ein Rezept, zu dem ich dir raten würde: Fang minimal an. Also etwa, dass du eine Sprache hast, die nur ein paar Befehle kennt, noch keine Methoden, etc.
Wenn das läuft, wag dich an neue Features heran. Irgendwann bei deinem 50. Experiment hast du dann etwas, das man vielleicht gebrauchen kann. Aber dazu muss dich das Thema wirklich interessieren und du musst viel über das Thema lesen.
EIn Batzen zum Lesen dürfte das hier sein (danach weißt du mit was du es zu tun hast) : http://kurse.fh-regensburg.de/kurs_6/kursdateien/documents/co_buch.pdf -
Ich würde mit einer einfachen Scriptsprache anfangen um erstmal das effiziente parsen einer solchen Sprache zu lernen.
Als Beispiel:
var a = 5; a += 5; MessageBox("A ist " + a );
Das zu parsen ist schon nicht einfach.^^
Auch könnte man sich einige Scriptsprachen ansehen, wie diese geschrieben sind.
Mein Favorit:
http://www.angelcode.com/angelscript/
Ich verwende die Scriptsprache in meinen Programmen selber als Built-In Scriptsprache und der Source liegt bei.
Viel Spaß und zeig Ergebnisse :D. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage