Kennt jemand einen schön und einfach implementierten Lexer/Tokenizer für BASIC artige Sprachen?
Was ich bisher gefunden habe:
http://docs.python.org/3/library/re.htm ... -tokenizer
http://www.jayconrod.com/posts/37/a-sim ... hon-part-1
Worum es mir eigentlich geht, ist BASIC code mit den token zu tauschen: https://github.com/jedie/PyDragon32/blo ... _tokens.py
Also aus 10 PRINT "Foo PRINT Bar" soll [10, " ", 0x87, '"Foo PRINT Bar"'] werden.
Denke eigentlich brauche ich keinen richtigen Lexer/Tokenizer sondern könnte mit ein bischen RegularExpressions ganz gut hin kommen. Etwas richtiges zu haben, kann aber auch nicht schaden. Wenn es nicht zu Aufwendig wird.
BASIC Lexer/Tokenizer in Python?
@jens: Ich habe so etwas für CBM BASIC V2 geschrieben. Sollte ich vielleicht mal veröffentlichen. Denn das grundsätzliche Format ist ja sehr ähnlich zu dem was Du brauchst.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Zudem es anscheinend keine kompliziertes Quoting/DoubleQuotes gibt... Also nicht sowas:
So wie es aussieht gibt es nur einfache Gänsefüßchen 
Code: Alles auswählen
print 'foo " bar'
print "foo ' bar"
print "foo \" bar"
print """foo " bar"""

@jens: Wo man aufpassen muss ist, dass (zumindest bei CBM BASIC) einiges möglich ist, was nicht unbedingt im Handbuch steht, aber funktioniert und auch genutzt wird/wurde. Zum Beispiel das ein Zeilenende ein schliessendes " ersetzen kann. Spart ein Byte ein.
Und interessant fand ich auch die Frage ob nach einem REM (oder ') die Zeichen 1:1 in den Speicher übernommen werden, oder ob da auch Tokens erkannt und verwendet werden. Das war auf dem C64 auch von praktischem Interesse weil dort BASIC-Compiler in der Regel Anweisungen für den Compiler in den Kommentaren ermöglichen. Die geiche Frage Tokenisieren oder nicht, stellt sich auch bei ``DATA``, denn Zeichenketten müssen dort überhaupt nicht in Anführungszeichen gesetzt werden. Also ``data "eins","zwei","drei"`` kann man auch als ``data eins,zwei,drei`` schreiben.
Und interessant fand ich auch die Frage ob nach einem REM (oder ') die Zeichen 1:1 in den Speicher übernommen werden, oder ob da auch Tokens erkannt und verwendet werden. Das war auf dem C64 auch von praktischem Interesse weil dort BASIC-Compiler in der Regel Anweisungen für den Compiler in den Kommentaren ermöglichen. Die geiche Frage Tokenisieren oder nicht, stellt sich auch bei ``DATA``, denn Zeichenketten müssen dort überhaupt nicht in Anführungszeichen gesetzt werden. Also ``data "eins","zwei","drei"`` kann man auch als ``data eins,zwei,drei`` schreiben.
@jens: Das hier hatte ich mal für den Eigenbedarf verbrochen: http://pastebin.com/kx9dgjvK
Dokumentation/Kommentare wären an der einen oder anderen Stelle wahrscheinlich nicht schlecht.
Dokumentation/Kommentare wären an der einen oder anderen Stelle wahrscheinlich nicht schlecht.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hab was gefunden: http://www.gripho.it/py_basic.tgz
Ist ein kompletter BASIC Interpreter in Python.
Ist von http://www.gripho.it/homepage.en.html
Leider ist nirgends eine Lizenz des Codes zu finden. Ich werde dem Autor mal eine Mail schreiben.
Ist ein kompletter BASIC Interpreter in Python.
Ist von http://www.gripho.it/homepage.en.html
Leider ist nirgends eine Lizenz des Codes zu finden. Ich werde dem Autor mal eine Mail schreiben.