Lx0: Prototyp -- for und procedure
Die for-Schleife und procedure sind im Prototyp der Lx0-Programmiersprache dazugekommen.
Die for-Schleife war einfach und ließ sich direkt implementieren. Die Prozeduren hatte ich als erstes ohne Parameter implementiert, dies ging ebenfalls problemlos -- ist von der Verwaltung aber noch nicht schön gelöst. Im Moment werden sie im program scope gesammelt. Das Hinzufügen der Parameter war dann umständlicher.
Hatte reichlich lange und mehrere Blicke in den Mantra-Quelltext gebraucht, bis die Klammern und Pluszeichen dann irgendwann richtig im Treewalker verteilt waren:
procedureDecl
: ^('procedure' nameBegin=PROCNAME
(^(FORMPARS pars+=formalParameter+))?
block nameEnd=PROCNAME)
formalParameter
: ^(FORMPAR type VARNAME)
-> formalParameter(type={$type.st},varname={$VARNAME.text.substring(1)})
;
Die pars+=formalParameter-Schreibweise sorgt dafür, dass ANTLR 3 von sich aus eine Liste generiert, das findet sich dann natürlich auch im generierten Treewalker.java-Quelltext wieder:
public final TreeWalker.procedureDecl_return procedureDecl() throws RecognitionException {
[...]
CommonTree nameEnd=null;
List list_pars=null;
Als nächstes ist die Prüfung der Parameteranzahl und Typen dran.
Bekannte Fehler
Da für die Prozeduren noch keine Symboltabellen aufgebaut werden, fehlen für Printbefehle wie print $a die Variablennamen im vom Lx0-Compiler generierten C-Quelltext.
Quelltext
Der komplette Lx0-Quelltext steht in Subversion.
