Factor ist eine Forth-artige Programmiersprache, die konkatenativ ist, d.h. man reiht Befehlswörter aneinander, die Daten auf einem Stack verarbeiten. Im Gegensatz zum klassischen sehr maschinennahen Forth unterstützt Factor (wie Joy, einem der Vorbilder) funktionale und objektorientierte Programmierung (die von CLOS, dem CommonLisp-Objektsystem, abgeschaut ist) und ist eine sehr ungewöhnliche und interessante Programmiersprache.sma hat geschrieben:Ich hatte vor einigen Wochen eine Art Tutorial geschrieben, wie man einen Interpreter für die Programmiersprache Factor in Python bauen kann. Zu viel Codeabschnitte in einem Artikel töten ja bekanntlich dieses Forum, daher versuche ich als Workaround mal, das ganze in vielen kleinen Artikel zerteilen. Viel Spaß. Kommentare sind willkommen.
Factor-Programme bestehen aus Wörtern, die durch Leerzeichen getrennt sind: `3 4 + .`.
Dies addiert (`+`) die Zahlen 3 und 4 und gibt das Ergebnis aus (`.`). Operatoren folgen den Operanden.
Ich baue schrittweise einen Factor-Interpreter in Python, der obigen Code ausführen kann.
Ich beginne mit einem Objekt, das einen String in Wörter zerlegen kann:
Code: Alles auswählen
class Lexer(object):
def __init__(self, s):
self.s, self.t = s, None
def skip(self):
self.s = self.s.lstrip()
def readuntil(self, end):
self.t, self.s = self.s.split(end, 1) if end in self.s else (self.s, "")
def next(self):
self.skip()
if self.s:
self.readuntil(" ")
return True
l = Lexer("3 4 + .")
while l.next():
print l.t