kostenloser Webspace werbefrei: lima-city


Wie programmiert man Programmiersprachen

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    alex0809

    alex0809 hat kostenlosen Webspace.

    Ich nenn das jetzt einfach mal so...
    ich meine damit sogenannte \"Esoterische Programmiersprachen\" (Link: http://de.wikipedia.org/wiki/Esoterische_Programmiersprache)
    Und weil man darüber irgendwie nix erfährt, stell ich die Frage einfach mal hier: wie programmiert man Programmiersprachen? :biggrin:
    Benutzt man eine Sprache wie z.B. C++ oder fängt man komplett anders an? - Wie macht man sowas?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Kurzer Exkurs. Man beginnt mit einer sog. kontext-freien Grammatik. Dieser ordnet man Kontextbedingungen sowie Übersetzungsregeln zu. Das ist ein wenig Paperwork. Dann implementiert man, vorzugsweise mit einem Parser/Compilergenerator. Früher war noch BISON gross im Rennen, heute würde man wohl eher ANTLR nehmen (für BISON gibt\'s ne Linux manpage, ANTLR kanns Du googlen/downloaden).

    Ergibt das eine Antwort für Dich?


    PS - wie kommst DU auf \"Bildgrammiersprache\" ????


    Beitrag geändert: 17.7.2008 0:08:17 von ferdinand24
  4. x*****k

    alex0809 schrieb:
    Und weil man darüber irgendwie nix erfährt, stell ich die Frage einfach mal hier: wie programmiert man Programmiersprachen? :biggrin:


    Hab ich mich auch schon gefragt! xD

    peterdeussen schrieb:
    Kurzer Exkurs. Man beginnt mit einer sog. kontext-freien Grammatik. Dieser ordnet man Kontextbedingungen sowie Übersetzungsregeln zu. Das ist ein wenig Paperwork. Dann implementiert man, vorzugsweise mit einem Parser/Compilergenerator. Früher war noch BISON gross im Rennen, heute würde man wohl eher ANTLR nehmen (für BISON gibt\\\'s ne Linux manpage, ANTLR kanns Du googlen/downloaden).

    Ergibt das eine Antwort für Dich?

    @peterdeussen: Wie wurden dann die ersten Programmiersprachen entwickelt, oder solche wie Assembler?
    Irgendwer muss ja \"BISON\" oder \"ANTLR\" auch mal programmiert haben. Aber womit?

    Wie gibt man einem Computer anweisungen, wenn es noch kein Programm gibt, dass es entgegen nimmt?
    Ähnlich: Was war zuerst da: Huhn oder Ei?

    Ich hoffe du verstehst mich (uns)!

    mfg x-bLack :cool:

  5. @peterdeussen: Wie wurden dann die ersten Programmiersprachen entwickelt, oder solche wie Assembler?
    Irgendwer muss ja \"BISON\" oder \"ANTLR\" auch mal programmiert haben. Aber womit?

    Wie gibt man einem Computer anweisungen, wenn es noch kein Programm gibt, dass es entgegen nimmt?
    Ähnlich: Was war zuerst da: Huhn oder Ei?


    Jungs, ein PC versteht vorzugsweise nur eine Folge von Bits (also 0 und 1en). Um diese Folge von Bits nihct immer einzeln angeben zu müssen wurde eine Umrechnung in Hexadezimal gemacht. Die Verarbeitung dieser Bits geschieht durch die interne Logik des Prozessors und diese wird ja bekanntlich durch Intel oder AMD entwickelt.

    Wenn man also eine Folge von Bits richtig zum Prozessor schicken würde, würde der das auch verstehen.
    Um Tippfehler u.ä. jetzt weitestgehend zu vermeiden hat man einen Kompiler gebastelt, der verständliche Zeichenfolgen (Worte + Zahlen) in eine Bitfolge wandelt.

    Wie komplex dann die Compilersprache letztendlich ist, hängt dann natürlich vom Compilerbauer ab.

    Grüßle


  6. @peterdeussen: Wie wurden dann die ersten Programmiersprachen entwickelt, oder solche wie Assembler?
    Irgendwer muss ja \"BISON\" oder \"ANTLR\" auch mal programmiert haben. Aber womit?

    Wie gibt man einem Computer anweisungen, wenn es noch kein Programm gibt, dass es entgegen nimmt?
    Ähnlich: Was war zuerst da: Huhn oder Ei?


    Jungs, ein PC versteht vorzugsweise nur eine Folge von Bits (also 0 und 1en). Um diese Folge von Bits nihct immer einzeln angeben zu müssen wurde eine Umrechnung in Hexadezimal gemacht. Die Verarbeitung dieser Bits geschieht durch die interne Logik des Prozessors und diese wird ja bekanntlich durch Intel oder AMD entwickelt.

    Wenn man also eine Folge von Bits richtig zum Prozessor schicken würde, würde der das auch verstehen.
    Um Tippfehler u.ä. jetzt weitestgehend zu vermeiden hat man einen Kompiler gebastelt, der verständliche Zeichenfolgen (Worte + Zahlen) in eine Bitfolge wandelt.

    Wie komplex dann die Compilersprache letztendlich ist, hängt dann natürlich vom Compilerbauer ab.

    Grüßle


    Das ist schon richtig, beantwortet aber die Frage nicht wirklich, da heute niemand mehr einen Compiler in Assembler oder Maschinensprache implementiert (dafür gibt\'s nämlich Hochsprachen wie C++ oder Java und die schon genannten Tools). Wer also compiliert den Compiler?

    Im Normalfall nimmt man natürlich, was bereits da ist, also einen nativen C/C++ Compiler oder halt Java. Es ergibt durchaus Sinn einen C++ Compiler in C++ zu schreiben, wenn man den Compiler-Code optimieren oder eine Spracherweiterung vornehmen will. Es ist ausserdem einfacher, nicht mit zwei Sprachen zu arbeiten.

    Unter Compilerbauern gehört es sogar zum guten Ton, eine Compiler für eine Programmiersprache in eben dieser Sprache zu schreiben. Der Compiler-Code wird dann zum ersten grossen Testfall für diese Sprache. Aber wie geht das, wenn der Compiler sich erst übersetzen muss um sich übersetzen zu können ...

    Bevor Ihr alle versucht, das Paradoxon aufzulösen: Hier ist die Antwort. Man implementiert zunächst einen Rumpf-Compiler in einer anderen Sprache, der nicht soviel kann und möglicherweise grottenschlechten Code erzeugt, um den Bootstrapping-Prozess anzustossen.

    Und nun können wir auch sagen, wie die ersten Compiler in das Computerland gekommen sind - die waren nämlich wirklich in Assembler geschrieben (und die Assembler in Maschinen-Code).
  7. Man sollte aber dabei nochmal erwähnen, das ein Prozessor weit mehr als nur 0en und 1en versteht.

    Ein Prozessor hat (nehmen wir mal der einfachheit halber die x86 Achitektur) um die 300 eigenen Befehle. Diese werden in Assembler einfach nur übersetzt, dh. aus \"move Ex9234 blablalblabla\" macht er dann \"0F08 EX9234 EF 7F 7B\" usw usf, was der CPU versteht.

    CPUs sind garnicht so doof. Nur Schleifen wie For / Next und so können sie nicht, die werden anderweitig geschrieben, daher sind sie auch recht anspruchsvoll. Wer z.B. die beliebten 8Bit Prozessoren Programmiert, der hat nurnoch die möglichkeit über nen Hardware Interrupt eine Schleife vorzeitig zu beeden, da diese auf solchen CPUs eben als einzige \"Befehlsfolge\" ausgeführt werden können. Von \"Multitasking\" noch weit weg :D

  8. CPUs sind garnicht so doof. Nur Schleifen wie For / Next und so können sie nicht, die werden anderweitig geschrieben, daher sind sie auch recht anspruchsvoll. Wer z.B. die beliebten 8Bit Prozessoren Programmiert, der hat nurnoch die möglichkeit über nen Hardware Interrupt eine Schleife vorzeitig zu beeden, da diese auf solchen CPUs eben als einzige \"Befehlsfolge\" ausgeführt werden können. Von \"Multitasking\" noch weit weg :D


    Ich weiß ja nicht, mit welchen kruden 8-Bit-Prozessoren du zu tun hattest, aber die mir bekannten hatten durchaus Unterstützung für Schleifen. Der Z80 bspw. hat (u.A.) die schöne Instruktion LDIR == load-increment-and-repeat. Damit kann man wunderbare \"Hochzähl\"-Schleifen schreiben. So wie jeder C-Anfänger mit \"for (i = 0; i < irgendwas; ++i) {...}\" in die Welt der for-Schleife einsteigt:
    http://www.geocities.com/siliconvalley/peaks/3938/z80syntx.htm#LDIR

    Außerdem sind Schleifen sowieso nur ein Hilfskonstrukt für Hochsprachen, die keine richtige Rekursion unterstützen. ;-) Und für Rekursion benötigt man nur einen großen Stack und die Unterstützung von Subroutinen, und die hatte auch schon der 8085, der mir aus meiner Berufsausbildung noch bekannt ist.

    @alex0809:

    Natürlich braucht man für den Bau eines Übersetzers erst mal eine fertige andere Sprache (Wenn man es nicht besonders kompliziert machen möchte ...). Die muss nichtmal besonders leistungsfähig sein. Man kann zum Beispiel auch in der bei Limas sicher beliebten Sprache PHP einen eigenen Übersetzer schreiben. Paul Hudson zeigt, wie das gemacht wird:
    http://hudzilla.org/phpwiki/index.php?title=Making_your_own_language

    Grob vereinfacht ist das alles eine Art Textverarbeitung: Der Quelltext wird zuerst in Teile (Tokens) zerlegt. Dann (oder gleichzeitig) wird geprüft, ob diese Teile in der richtigen Abfolge auftreten (Syntax-Analyse). Ist der Quelltext (syntax-)fehlerfrei, wird er übersetzt (Parser). Die Übersetzung kann in einem oder in mehreren Läufen erfolgen. Manche Compiler machen in einem Rutsch aus einem C-Quelltext fertigen Maschinencode.
    Bsp. TinyCC: http://bellard.org/tcc/

    Andere erzeugen über mehrere Zwischenstufen erst Assembler-Quelltext, dann optimierten Assemblerquelltext und danach erst den Maschinencode.
    Bsp. gcc: http://de.wikipedia.org/wiki/GNU_Compiler_Collection#Struktur

    Wobei man hier Maschinencode nicht wörtlich nehmen sollte: Ein Übersetzer (Compiler oder Interpreter) kann auch von einer Hoch-Sprache in eine andere übersetzen.

    Bsp.:
    http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/297702
    http://ejohn.org/blog/running-java-in-javascript/

    Die gesamte Thematik ist sehr komplex. Wenn du dich dafür interessierst, kannst du dich ja mal durch die entsprechenden Wikipedia-Artikel lesen:

    http://de.wikipedia.org/wiki/Tokenizer
    http://de.wikipedia.org/wiki/Lexikalischer_Scanner
    http://de.wikipedia.org/wiki/Parser
    http://de.wikipedia.org/wiki/Assembler_(Informatik)
    http://de.wikipedia.org/wiki/YACC

    Allerdings sind die jeweiligen englischsprachigen Ausgaben zum Thema wesentlich besser zum Verständnis geeignet (wenn man denn Englisch beherrscht).


    Beitrag geändert: 18.7.2008 21:03:31 von alopex
  9. Vielleicht hilft dir ja auch die recht gut verfasste Seite zum Compilerbau weiter...

    http://vhb.fh-regensburg.de/co/

    Grüßle ;-)
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!