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 :wink:

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.