Martin L.: Entwicklung einer Scriptsprache

Soooooooo ich habe mal eine Frage, die mich schon sehr lange eigentlich seit meinen ersten programmier versuchen verfolgt.

Es geht um folgende grundfrage:

Wie entstehen Scriptsprachen (C++, Java,..) worauf basieren sie, was ist das Grundprinzip und wie versteht der PC das?

Wie kann man eigene Scriptsprachen entwickeln (eher theoretisch ich glaub so weit bin ich noch nich :-D )

Das muss hier nicht erläutert werden ich kann mich auch gerne durchlesen^^ nur habe ich auch keine wirklich guten Seiten gefunden. Wenn also jemand Seiten hat, die das Thema behandeln währe ich sehr dankbar. Weil diese Frage lässt mich nicht mehr los :-D

GRAZIE IN ANTICIPO euer Martin

  1. Hallo Martin

    als Laie sage ich mal Du kannst Dir jede Script Art der Welt erfinden.

    Du musst nur dafür einen Interpreter entwickeln der dann das ganze in "Maschienensprache" umsetzt. Und dann z.b. auf den in sprechenden Servern od er lokalen Computern installiert ist.

    Liebe Grüße

    Bernd

    1. also gibt es so sozusagen eine Maschinensprache (über die ich mich jetzt denke ich mal als erstes informieren werden) die jeder Computer versteht^^ (mal so als Laie gesagt)

      jetzt muss ich also mir sozusagen befehle ausdenken, und dann diese befehle durch ein von mir geschriebenes Programm in die Maschinensprache übersetzen.

      also um mal ein Beispiel zu bringen:

      der Pc ist deutscher und ich will das er hallo welt sagt.

      also sage ich jetzt BLABLÜBLI und mein programm übersetzt das in gutes Deutsch :" sag hallo welt !"  und dann kann der PC das machen?

      dann frag ich mich jetzt nur noch warum der PC die Maschinensprache versteht und wie das alles funktioniert^^

      aber ich bin ja erst 17 jahre und habe jetzt mal einen Denkanstoß aber es fasziniert mich einfach die funktionsweise ein wenig zu ergründen weil etwas das besser schach spielt als ich obwohl es nur 0 und 1 kennt ist schon faszinierend :-D :-D :-D

      Grazie ers mal euer Martin

      1. also gibt es so sozusagen eine Maschinensprache (über die ich mich jetzt denke ich mal als erstes informieren werden) die jeder Computer versteht^^ (mal so als Laie gesagt)

        Ja, so grob gesagt.

        jetzt muss ich also mir sozusagen befehle ausdenken, und dann diese befehle durch ein von mir geschriebenes Programm in die Maschinensprache übersetzen.

        Ja genau. Allein das wird schon sehr kompliziert sein, denn du musst dir ja nicht nur die Befehle ausdenken sondern auch die passende Syntax, Operatoren, ... und du musst eben auch ein Programm schreiben dass diese Sprache auswerten kann.

        also um mal ein Beispiel zu bringen:

        der Pc ist deutscher und ich will das er hallo welt sagt.

        also sage ich jetzt BLABLÜBLI und mein programm übersetzt das in gutes Deutsch :" sag hallo welt !"  und dann kann der PC das machen?

        Naja, das Beispiel trifft es nicht ganz. Treffender wäre es, wenn du in deinem Programm ein verständliches "sag hallo welt!" stehen hast und dein Programm übersetzt das jetzt in die doch recht kryptische komplizierte Maschinensprache ("BLABLÜBLI"). Immerhin versteht ein PC kein Deutsch.

        dann frag ich mich jetzt nur noch warum der PC die Maschinensprache versteht und wie das alles funktioniert^^

        Das wird ja immer komplizierter. ;) Sag ichs mal so: Die Maschinensprache besteht nur auch einfachen simplen Byte/-Bitfolgen die an den Prozessor gehen. Dabei besteht die Maschinensprache nur aus so ganz einfachen Befehlen wie addieren, abspeichern, kopieren, entscheiden die recht kryptisch als Bytefolgen abgespeichert sind. Der prozessor ist eben so konstruiert worden, dass er die Befehle versteht und entsprechend umsetzt.

        1. ich bin in meinem beispiel davon einfach mal davon ausgegangen, das die Maschinensprache von meinem PC Deutsch ist^^ ;-) wär auch mal ganz praktisch ;-)

          aber ich glaub ich habs jetzt verstanden jetzt hab ich zumindest einen Ansatz. Mein Ziel ist auch nicht die eigene Scriptsprache die allen anderen Konkurrenz macht, sondern einfach zu verstehen wie das alles zusammenhängt^^

          ich werde mich da mal informieren weil ich es auf jeden fall sehr interressant finde

          Grazie euer Martin

          1. das klingt wirklich als ob ich erst mal informatik studieren sollte ;-) allerdings habe ich auch genau das vor. Ich habe noch 2 Jahre bis zu meinem Abitur.

            Es ist mir allerdings immer noch ein rätsel wie es von 0 und 1 zu diesem Forum kommt in dem ich schreiben und genau das fragen kann.

            Naja ich informiere mich jetzt über Maschinensprachen und dann denke ich erde ich die Frage angehen wie man mit diesen einfachen dingen (addieren .....) es zu programmen bringen kann............

            aber erst mal geh ich jetzt alle links durch die hier stehen und dann weiß ich vllt schon viel mehr :-D

            1. so ich schaue mir jetzt denke ich erst mal Assembler an. Das soll ja sehr Maschinennah sein und hilft sicherlich......

              ich hab auch schon ein schönes tutorial gefunden aber da geht man scheinbar davon aus, dass man einen Editor hat und auch einen Assemblierer. Leider habe ich das nciht :-(

              kennt hier jemand einene guten bzw was muss ich alles haben um meinen Code ausführen zu können ?

              1. Ich grüsse den Cosmos,

                kennt hier jemand einene guten bzw was muss ich alles haben um meinen Code ausführen zu können ?

                Jeder Texteditor ist verwendbar. Die meisten haben Syntaxhighlighting für Assembler.
                Einen Assembler findest du in guten Tutorials oder bei Google.

                Für Linux gibt es z.B. bin86. Da du aber noch nicht gesagt hast, welches System du nutzt, ist es schwer möglich, dir wirklich Tipps zu geben.

                Möge das "Self" mit euch sein

                --
                Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
                ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
                1. Ich nutze hier Windoof XP

                  Ich les hier jetzt im Internet ne Menge über TASM

                  das scheint irgendwie shareware zu sein ?! die sind sich da alle nicht so einig ;-) jetzt habe ich mir TASM32 runtergeladen..... jetzt scheine ich aber noch TLINK32 zu brauche, das finde ich allerdings nicht ;-)

                  1. Du kannst auch MASM benutzen: http://masm32.com/

                    1. jo MASM nutze ich jetzt.

                      ich wünsche mir trotzdem die zeit zurück als es darum ging Javascript zu lernen :-D das war doch seeeeeeeeehr viel einfacher  :-D

                      mal sehen wie viel zeit und lust ich da neben Schule und Freundin für aufbringen kann. Ich will ja nicht nachher "ich liebe dich" in 0 und 1 sagen ;-)

                      Aber an sich gibt es kaum ein interressanteres und faszinierenderes Thema (für mich) als zu verstehen wie aus simplem strom an und strom aus, das wird was ich hier heute vor mir habe.........

                      (außer vllt die entstehung des Universums aber die Frage stell ich erst morgen ;-))

                      Ich mache mich jetzt mal auf die suche nach guten Tutorials die alles für nen Absoluten Anfänger gut erklären und wenn ich es dann absolut toll finde werde ich mich mal über Bücher informieren aber erst mal hoffe ich, das ich gute Tutorials zum reinschnüffeln finde.

                      1. ich krieg gerade die absolute krise

                        ich finde einfach nicht die
                        MASM.EXE
                        bzw
                        LINKER.EXE

                        scheinbar ist das alles ganz einfach ich kann mir auch was dazu runterladen was MASM oder sogar TASM (was ja eigentlich shareware) ist aber es ist halt nie das richtige ich will doch nur die beiden EXE datein...........

                        hat da jemand en link wo ich das richtige laden kann ?????

                        grazie in anticipo

                        1. hat da jemand en link wo ich das richtige laden kann ?????

                          Das, was es auf masm32.com gibt, ist das Richtige. Du kommst von dort nach ein paar Klicks auf http://www.codingcrew.de/masm32/index.php. Dort befindet sich ein Downloadlink für ein ZIP-Archiv mit dem Installationsprogramm.

                          Gruß

              2. Hey,
                du legst dir am besten diese Live-CD/-Floppy zu, damit kannst du keinen großen Schaden anrichten, aber ungehindert lernen. http://www.menuetos.net/

                --
                水-金-地-火-木-土-天-海-冥
      2. Hallo lieber Namensvetter,

        also gibt es so sozusagen eine Maschinensprache (über die ich mich jetzt denke ich mal als erstes informieren werden) die jeder Computer versteht^^ (mal so als Laie gesagt)

        nein, die Formulierung (oder vielleicht der Gedanke) ist falsch.
        Es gibt nicht "eine" Maschinensprache, sondern jeder Rechnertyp hat seine eigene Maschinensprache. Deswegen muss auch der Programmcode in C/C++ als typische Compilersprache für jede Zielplattform speziell übersetzt werden.

        jetzt muss ich also mir sozusagen befehle ausdenken, und dann diese befehle durch ein von mir geschriebenes Programm in die Maschinensprache übersetzen.

        Ja. In die individuelle Maschinensprache des Systems, auf dem der Code dann ausgeführt werden soll.

        also um mal ein Beispiel zu bringen:
        der Pc ist deutscher und ich will das er hallo welt sagt.
        also sage ich jetzt BLABLÜBLI und mein programm übersetzt das in gutes Deutsch :" sag hallo welt !"  und dann kann der PC das machen?

        Im Prinzip ja.

        dann frag ich mich jetzt nur noch warum der PC die Maschinensprache versteht und wie das alles funktioniert^^

        Der Prozessor eines Computers kann nur eine Anzahl vergleichsweise primitiver Vorgänge ausführen. Er kann Informationen aus bestimmten Speicherbereichen lesen oder dorthin schreiben, er kann Daten an Peripheriegeräte senden oder von ihnen empfangen, er kann Berechnungen anstellen oder Zahlenwerte vergleichen und anhand dieser Vergleiche einfache Entscheidungen treffen. Selbst einfache Anweisungen ergeben daher eine ziemlich lange Folge von Prozessorbefehlen. Nehmen wir beispielsweise die einfach aussehende C-Anweisung

        ptr = malloc(buffersize+1);

        Das sind folgende Einzelschritte:

        * Hole den Wert der Variablen buffersize
         * Addiere den Wert 1 dazu
         * Lege das Ergebnis auf dem Stack ab (so werden Funktionsparameter übergeben)
         * Rufe die Funktion malloc auf
         * Räume den Parameter von vorher wieder vom Stack ab
         * Speichere das Ergebnis in der Variablen ptr

        Bereits beim Übersetzen dieses Codes hat der Compiler sichergestellt, dass die Anweisung syntaktisch korrekt ist und dass alle Variablen vom richtigen Typ sind, so dass das Ganze überhaupt Sinn ergibt.

        aber ich bin ja erst 17 jahre und habe jetzt mal einen Denkanstoß aber es fasziniert mich einfach die funktionsweise ein wenig zu ergründen weil etwas das besser schach spielt als ich obwohl es nur 0 und 1 kennt ist schon faszinierend :-D :-D :-D

        Yo, die Menge und die Bedeutung der Nullen und Einsen bringt's eben. ;-)

        Ciao,
         Martin

        --
        Was du heute kannst besorgen,
        das geht sicher auch noch morgen.
        1. aber ich bin ja erst 17 jahre und habe jetzt mal einen Denkanstoß aber es fasziniert mich einfach die funktionsweise ein wenig zu ergründen weil etwas das besser schach spielt als ich obwohl es nur 0 und 1 kennt ist schon faszinierend :-D :-D :-D

          Yo, die Menge und die Bedeutung der Nullen und Einsen bringt's eben. ;-)

          Das Problem kenn ich. Einmal hab ich gegen einen 4-k-computer von 1967 im Schach verloren... Das hat mich dann schon verwundert, weil ich sonst eigentlich recht gut Schach spiele. Bei einem Computer mit 4kb Speicher hätte ich das nicht gedacht... Aber es ist schon spannend, wenn so ein Computer für jeden Zug 2 Minuten rattert, knattert und rechnet und am ende ganz kalt und gefühlslos 5 Zeichen (z.b. 'C6-A8') ausgibt, die einen fertigmachen...

          --
          Käsebrötchen
      3. Hallo,

        Eine Frage hätte ich da auch noch:

        Ich habe bereits erste erfahrungen in Assemblersprachen und Maschinencode gemacht, als ich einen alten PDP8 (http://www.pdp8.net/) Programmiert habe und mir ist aufgefallen, dass Programme die direkt in Assemblersprache bzw. Maschinensprache geschrieben wurden viel schneller läuft als 'höhere' Programmiersprachen. Da habe ich mich gefragt, ob Betriebssysteme wie Windows in Assembler/Maschinensprache Geschrieben sind. Stimmt das?

        Ausserdem wollte ich fragen, ob es unter Windows oder Linux eine Möglichkeit gibt, Assemblersprache oder Maschinensprache zu testen, ohne dabei dateien zu zerstören. Ich habe mir einen Assembler/Maschinensprachen-Simulator für die alte Assemblersprache PAL 8 geschrieben, aber ich möchte das doch gerne mal in einer richtigen umgebung ausprobieren. Kann mir da einer weiterhelfen?

        aber ich bin ja erst 17 jahre

        Ich auch.

        timon @ http://www.wahnsinn.de.tl

        --
        Käsebrötchen
        1. Da habe ich mich gefragt, ob Betriebssysteme wie Windows in Assembler/Maschinensprache Geschrieben sind. Stimmt das?

          Teilweise ganz bestimmt. Allerdings glaube ich das der Großteil in C-Ähnlichen Sprachen geschrieben ist.

        2. Hallo,

          [...] mir ist aufgefallen, dass Programme die direkt in Assemblersprache bzw. Maschinensprache geschrieben wurden viel schneller läuft als 'höhere' Programmiersprachen.

          ja, das ist der Grund, warum selbst heute noch zeitkritische Routinen z.B. in Gerätetreibern direkt in Assembler geschrieben werden.

          Da habe ich mich gefragt, ob Betriebssysteme wie Windows in Assembler/Maschinensprache Geschrieben sind. Stimmt das?

          Zum Teil. Windows ist zum großen Teil in C geschrieben, aber ein kleiner Kern sowie besonders hardwarenahe Teile auch in Assembler. Das dürfte bei anderen Betriebssystemen ähnlich sein.

          Ausserdem wollte ich fragen, ob es unter Windows oder Linux eine Möglichkeit gibt, Assemblersprache oder Maschinensprache zu testen, ohne dabei dateien zu zerstören.

          Jein ... wenn du in Assembler programmierst, hast du -mehr noch als in C- alle Freiheiten, die dir das System überhaupt bieten kann. Dabei umgehst du bewusst oder unbewusst einige Fangnetze, die ein Hochsprachen-Compiler oder auch die Shell des Betriebssystems sonst bietet. Wenn du also versehentlich ein Rechenergebnis mitten in einer Tabelle anderer Daten ablegst, dann hast du damit eben diese Daten verstümmelt. Die Assembler-Programmierung ist also immer ein bisschen wie das Anklemmen der Elektroinstallation unter Spannung: Ein kleiner Fehler kann fatale Folgen haben.

          Ich habe mir einen Assembler/Maschinensprachen-Simulator für die alte Assemblersprache PAL 8 geschrieben, aber ich möchte das doch gerne mal in einer richtigen umgebung ausprobieren. Kann mir da einer weiterhelfen?

          Wenn du Maschinenprogramme direkt "live" ausführen willst, dann geht das nur auf der Hardware, für die sie gedacht sind. Andernfalls brauchst du immer einen Emulator, also ein Zusatzprogramm, das die Hardwareumgebung simuliert, die das Programm voraussetzt.

          Ciao,
           Martin

          --
          Wer im Glashaus sitzt, sollte Spaß am Fensterputzen haben.
          1. Danke für die Antwort.

            Dann habe ich noch eine Frage:
            Bei der Arbeit mit einem alten Computer und der Programmierung in Maschinensprache gab es immer einen 'Accumulator' (und ein weiteres Bit, den LINK), der als einziger Punkt zum ausführen vom Rechnungen gedient hat und über den alle ein- und ausgehenden Daten liefen. Ist das bei den modernen Computern immer noch so? Ich kann mir nähmlich nicht vorstellen, wie das sonst funktionnieren könnte.

            --
            Käsebrötchen
            1. Hey,
              ja, und man hat mehrere davon, und die heißen jetzt Register.
              http://en.wikipedia.org/wiki/Processor_register
              http://en.wikipedia.org/wiki/Accumulator_(computing)

              --
              水-金-地-火-木-土-天-海-冥
  2. Wie entstehen Scriptsprachen (C++, Java,..) worauf basieren sie, was ist das Grundprinzip und wie versteht der PC das?

    Ich würde C++ nicht unbedings als Scriptsprache bezeichnen. Scriptsprachen (Ruby, Javascript, PHP) werden von einem Interpreter ausgeführt, der den Quelltext analysiert und entsprechend Befehle ausführt. Häufig wird dabei noch einiges Optioniert, in Preudocode übersetzt, etc.

    In "richtigen" Programmiersprachen wird der Programmcode erst in Maschinencode umgewandelt, den das Betriebssystem bzw. der Prozessor mehr oder weniger eigenständig ausführen kann.

    Wie kann man eigene Scriptsprachen entwickeln (eher theoretisch ich glaub so weit bin ich noch nich :-D )

    Das ist sehr kompliziert. Grundlagen findest du in manchen Büchern, aber was halbwegs anständiges wirst du wohl nicht so schnell auf die Beine stellen. ;)
    Man muss halt den Quellcode verarbeiten und entsprechend dann für Programme in Maschinencode umwandeln oder für Scriptsprachen diese Befehle ausführen. Das geschieht häufig über mehrere Zwischenschritte und ist relativ komplex.

  3. Ich grüsse den Cosmos,

    Wie entstehen Scriptsprachen (C++, Java,..) worauf basieren sie, was ist das Grundprinzip und wie versteht der PC das?

    Das sind keine Scriptsprachen sondern Kompilersprachen. JAVA läuft auf einer virtuellen Maschine, C++ wird durch den Kompiler direkt in Code umgesetzt, den das Betriebssystem umsetzen kann.

    Wie kann man eigene Scriptsprachen entwickeln (eher theoretisch ich glaub so weit bin ich noch nich :-D )

    Indem du dir eine Syntax überlegst und dann einen Interpreter oder Compiler schreibst, der diese Syntax so umsetzt, das ihn der Rechner verstehen kann.
    Zuerst musst du aber mal lernen, was eine Scriptsprache ist und was nicht.

    Das muss hier nicht erläutert werden ich kann mich auch gerne durchlesen^^ nur habe ich auch keine wirklich guten Seiten gefunden. Wenn also jemand Seiten hat, die das Thema behandeln währe ich sehr dankbar. Weil diese Frage lässt mich nicht mehr los :-D

    Schau dir den Code diverser Kompiler (C/C++/C#/JAVA/usw.) und einiger Interpreter (PHP/PERL/PYTHON/RUBY/usw.) an. Dabei wünsche ich dir viel Spass, vorallem als Anfänger.
    Diese Kompiler/Interpreter sind im Normalfall immer in C geschrieben. (Zumindest unter Linux, unter Windows könnte auch C++ oder C# zur Anwendung kommen).

    Möge das "Self" mit euch sein

    --
    Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
    ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
  4. Hallo,

    wenn Du eine Programmiersprache und ein bisschen xml verstehst, kannst Du versuchen, eine kleine, experimentelle Scriptsprache zu entwickeln.

    Der Ablauf ist ja ganz grob (Informatiker weggeschaut)

    (1) Ressourcen laden // also mindestens den Code der Scriptdatei
    (2) Code parsen // Google freut sich über Stichworte wie "Parser" und "Lexer"
    (3) Code ausführen // Mit Hilfe der Programmiersprache, die Du benutzt
    (4) Ressourcen wieder freigeben

    Da für Anfänger Schritt 2 sehr schwer ist, bietet es sich an, xml zu benutzen. Das können viele Programmiersprachen bearbeiten und man hat mit (2) nicht mehr viel zu tun.

    Und so könnte eine Datei aussehen:

      
    <script language="MyScriptLanguage" version="0.1">  
        <variable name="fruit">Orange</variable>  
        <variable name="favorite">Apfel</variable>  
        <choose>  
            <ifEquals var1="fruit" var2="favorite">  
                <print>Meine Lieblingsfrucht</print>  
            </ifEquals>  
            <else>  
                <print>eine andere Frucht</print>  
            </else>  
        </choose>  
    </script>  
    
    

    Nicht schön, aber man hat was zum Experimentieren

    Gruß
    Olaf

  5. Moin,

    das meiste wurde ja schon gesagt, aber ich erzähls auch noch mal ;-) und werfe mit Fachbegriffen um mich ;-)))

    Soooooooo ich habe mal eine Frage, die mich schon sehr lange eigentlich seit meinen ersten programmier versuchen verfolgt.

    Es geht um folgende grundfrage:

    Wie entstehen Scriptsprachen (C++, Java,..) worauf basieren sie, was ist das Grundprinzip und wie versteht der PC das?

    C, C++ und Java sind KEINE Scriptsprachen, sondern Programmiersprachen. Es gibt grundsätzlich zwei verschiedene Typen von Computersprachen. Einmal die interpretierten Sprachen (Bash, einige Basic-Dialekte, PHP etc.) und die "richtigen Sprachen". Bei den interpretierten Sprachen wird der Quellcode direkt an ein weiteres Programm, den Interpreter, übergeben, der den Quellcode (vereinfacht gesagt) zeilenweise durchgeht und ausführt.

    Die den Sprachen mit Compiler schreibt man seinen Quellcode, und übersetzt dann den Quellcode mit dem Compiler in den jeweiligen Maschinencode. (z.B. x86, Linux). Wobei das Betriebssystem nur Einfluss auf das Format hat, in dem die Programme gespeichert werden. Die Maschinenbefehle für die x86-Architektur sind in Linux und Windows gleich.

    Java ist dabei ein Art Zwitter. Das Programm wird dabei nicht direkt in Maschinencode übersetzt, sondern in eine Art Zwischencode für eine virtuelle Maschine. Dieser wird der jeweiligen Java-Laufzeitumgebung interpretiert.

    Wie kann man eigene Scriptsprachen entwickeln (eher theoretisch ich glaub so weit bin ich noch nich :-D )

    Zuerst musst du dir eine Grammatik für die Sprache überlegen. Dafür gibt es  spezielle Notationen, sehr verbreitet ist die Backus-Naur-Form. Dann musst du einen Parser dafür entwickeln etc.

    Allerdings gibt es netterweise auch Programme, die dir das abnehmen. Stichworte sind hier Lex und Yacc.

    Das ganze ist allerdings sehr komplex. Es gilt nicht umsonst als eine der Königsdisziplinen der Informatik.

    Das muss hier nicht erläutert werden ich kann mich auch gerne durchlesen^^ nur habe ich auch keine wirklich guten Seiten gefunden. Wenn also jemand Seiten hat, die das Thema behandeln währe ich sehr dankbar. Weil diese Frage lässt mich nicht mehr los :-D

    Noch eine andere Sache:
    Wie lange hast du noch bis zum Abi? Deine Fragen klingen so, als ob dir ein Studium der Informatik liegen könnte. Darüber solltest du dich auf jeden Fall mal informieren.

    Gruß

    Stareagle

    1. Ich grüsse den Cosmos,

      C, C++ und Java sind KEINE Scriptsprachen, sondern Programmiersprachen.

      Scriptsprachen sind _ebenfalls_ Programmiersprachen. Nur so nebenbei.

      Möge das "Self" mit euch sein

      --
      Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
      ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
    2. Es gibt grundsätzlich zwei verschiedene Typen von Computersprachen. Einmal die interpretierten Sprachen (Bash, einige Basic-Dialekte, PHP etc.) und die "richtigen Sprachen".

      Das kann ich so nicht unterschreiben. Zu den Computersprachen gehören auch HTML, TeX, Formeln und reguläre Ausdrücke.
      Für eine Programmiersprache ist es unwichtig, ob sie interpretiert oder kompiliert wird. Auch interpretierte Sprachen sind „richtige Sprachen“. Das ist einfach nur eine Entscheidung des Sprachdesigners, ob er den Parsebaum interpretieren oder kompilieren lässt. Bei Sprachen wie Visual Basic 6 ist beispielsweise beides möglich.

  6. Hallo,
    die Thematik ist recht komplex, da für Compilerbau (so heißt die Disziplin) einiges an Theorie vonnöten ist. Wenn du wirklich tief einsteigen willst, gibt es mehrere Bücher. Zunächst das Standardwerk von Aho, Sethi, Ullman („Drachenbuch“, in der deutschen Ausgabe 2 Bände). Dann kenne ich noch das Buch von Wirth. Davon gibt es sogar eine Online-Ausgabe (http://www.oberon.ethz.ch/WirthPubl/CBEAll.pdf).
    Falls du eine Anwendung suchst, würde ich erst einmal mit etwas Einfachem anfangen, z.B. einem Formelparser, der eine Formel wie „(1.4+3) * 2 + 41.32“ berechnen kann. Wenn du so etwas schreiben kannst, hast du ein paar Grundlagen (DEAs, LL(1)-Parser) schon verstanden.
    Eine echte Programmiersprache zu entwickeln ist sehr schwer. Dafür braucht es nicht nur sehr gute Kenntnisse in theoretischer Informatik, sondern auch technische Kenntnisse, um beispielsweise Optimierungen implementieren zu können. So etwas zu entwickeln, dauert üblicherweise Jahre, wenn man es komplett verstehen und zu einem guten Ergebnis bringen will.

  7. Hallo Martin,

    Um mal einen Überblick über das Ganze zu geben, eine kleine Übersicht über Programmiersprachen und Compilerbau:

    1. Was kann ein Computer
    Prozessoren können sehr einfache, binär codierte Befehle ausführen.
    Diese Prozessorspache in Klartext nennt sich dann Assembler und sieht etwa so aus:

    LOAD <speicheradresse> <registernummer>   # Etwas in ein Register (Speicherstelle, auf der ein Prozessor direkt arbeiten kann laden)
    STORE <speicheradresse> <registernummer>  # Zurück in den Speicher schreiben
    ADD <registernummer> <registernummer> <registernummer>  # Register addieren

    Zwei zahlen addieren würde man also mit:
    LOAD 1345 1
    LOAD 6546 2
    ADD 1 2 3
    STORE 0345 3

    Es gibt dann natürlich noch ein Haufen weitere Befehle für andere Rechenoperationen, Prozeduraufrufe, Sprünge im Programm usw.

    2. Der klassische Compiler
    Aufgabe eines Compilers ist es nun, eine Sprache mit komplexen Anweisungen zu verarbeiten und daraus die obige einfache Sprache zu machen.
    Die Architektur eines einfachen Compilers sieht dann etwa so aus:

    Quelltext --[parsen]--> Abstrakter Syntax Baum (AST) --[Maschinensprache Erzeugen]--> Maschinensprache

    Die Programme, die so ein Compiler erzeugt, sind ziemlich ineffizient. Ein "guter" Compiler arbeitet also eher so:
    Quelltext --[parsen]--> Abstrakter Syntax Baum (AST) --[Zwischencode erzeugen]--> Zwischencode --[optimieren]--> optimierter Zwischencode --[registerbelegung bestimmen]--> ... --[Maschinensprache erzeugen]--> Maschinensprache

    Zwischencode ist dabei eine Art abstrakte Maschinensprache, auf der man Optimierungen durchführen kann (nicht verwendeten Code entfernen, Konstanten direkt einfügen, einfache Prozeduraufrufe durch direktes einfügen von Code ersetzen usw.)

    3. Die "neueren" Konzepte: Skriptsprachen, Bytecode, JIT...
    Mittlerweile gibt es eine ganze Menge weiterer Konzepte, wie Sprachen ausgeführt werden, von denen einige in diesem Thread auch schon erwähnt wurden:

    • Skriptsprachen (klassisch)
      Skriptsprachen werden (klassischerweise) interpretiert. Dabei wird aus der Sprache der oben erwähnte AST erzeugt. Ein Interpreter führt diesen dann direkt aus, indem er die einzelnen Anweisungen erkennt und umsetzt.
      Dabei spart man sich erstmal einiges an Arbeit für einen echten Compiler. Außerdem kann die Sprache Eigenschaften haben, die eine compilierte Sprache normalerweise nicht haben kann. Bspw. die Erzeugung oder Veränderung von Code zur Laufzeit eines Programms. (eval()-Funktion bei Javascript).

    • Bytecode
      Manche Programmiersprachen werden zunächst in eine abstrakte Maschinensprache (oft Bytecode genannt) umgesetzt ähnlich dem Zwischencode eines Compilers. Die Idee davon ist, dass man plattformunabhängige Programme erhält, aber dennoch im Gegensatz zu Skriptsprachen nicht alle Arbeit zur Laufzeit durchführen muss.
      Der Bytecode muss natürlich auf jeder Zielplattform wieder irgendwie ausgeführt werden, indem er z.B. interpretiert wird wie eine Skriptsprache.
      Sprachen mit diesem Konzept sind bspw. Java, C#, Perl 6 u.a.

    • Just in Time Compiler (JIT)
      Interpretieren von Sprachen ist nicht besonders performant.
      Daher verwenden heutige, Bytecode-basierte (aber vermutlich auch einige Skriptsprachen) keinen oder nicht ausschließlich einen Interpreter. Stattdessen wird der Bytecode (bzw. sehr zentrale Teile davon) in Maschinensprache übersetzt.

    4. Wie baue ich am einfachsten selber eine Programmiersprache
    Am einfachsten ist es, sich eine Sprache auszusuchen, die ähnliche Konzepte bietet, wie die Sprache, die man selber bauen möchte und einen Cross-Compiler zu schreiben, der die eigene Sprache in die andere Sprache umsetzt.
    Viele erste Implementierungen verwenden (zumindest zu Testzwecken) entweder einen einfachen Interpreter oder einen solchen Cross-Compiler.

    Um den auch hier notwendigen Syntaxbaum zu erzeugen, gibt es für praktisch jede Programmiersprache Werkzeuge. Um einfach zu experimentieren, ist aber die Idee mit XML als Basis vielleicht auch nicht schlecht. In diesem Fall könnte man seinen "Compiler" von XML nach irgendeiner Hochsprache vermutlich sogar als XSLT-Stylesheet schreiben...

    Grüße

    Daniel