Seite 1 von 1
BASIC Lexer/Tokenizer in Python?
Verfasst: Mittwoch 28. August 2013, 15:16
von jens
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.
Re: BASIC Lexer/Tokenizer in Python?
Verfasst: Mittwoch 28. August 2013, 15:26
von BlackJack
@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.
Re: BASIC Lexer/Tokenizer in Python?
Verfasst: Mittwoch 28. August 2013, 15:34
von jens
Zudem es anscheinend keine kompliziertes Quoting/DoubleQuotes gibt... Also nicht sowas:
Code: Alles auswählen
print 'foo " bar'
print "foo ' bar"
print "foo \" bar"
print """foo " bar"""
So wie es aussieht gibt es nur einfache Gänsefüßchen

Re: BASIC Lexer/Tokenizer in Python?
Verfasst: Mittwoch 28. August 2013, 15:47
von BlackJack
@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.
Re: BASIC Lexer/Tokenizer in Python?
Verfasst: Donnerstag 29. August 2013, 09:03
von BlackJack
@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.
Re: BASIC Lexer/Tokenizer in Python?
Verfasst: Donnerstag 10. Oktober 2013, 07:58
von jens
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.