![]() |
|||
| HSG |
|
w [ \t\n]
z [0-9]
b [A-Za-z]
k ","
%%
{w}+ {return(Whitespace)};
{z}+({k}{z}+)? mAus.Lines.Add('Zahl: '+yytext);
{b}({b}|{z})* mAus.Lines.Add('Bezeichner: '+yytext);
. mAus.Lines.Add('unerlaubtes Zeichen: '+yytext);
Aus obiger Datei scan1.l erzeugt DLex die Datei scan1.pas. scan1.pas enthält die Funktion TParser.yylex. Diese Funktion kann nach einer Umbenennung in yylex als Basis des eigenen Scanners verwendet werden. Die Bibliothek lexlib.pas wurde zu lexlib1.pas gepatcht. lexlib1 verwendet Stringlisten zur Ein- und Ausgabe. Das Archiv scan1lex.zip enthält bereits lexlib1.pas.
dyacc erzeugt aus einer foo.y-Datei eine Pascal-Unit foo.pas. Diese Unit benutzt dlib.pas, lexlib.pas und yacclib.pas. dlex erzeugt aus einer foolex.l-Datei eine Include-Datei foolex.pas. Obwohl diese Datei keine Unit enthält, hat sie die Dateiendung .pas, sodass empfohlen wird zur Unterscheidung von der yacc-generierten Datei an den Namen lex anzuhängen. Die lex-Datei enthält den Quellcode des Lexers, der hier eine Funktion des Parsers ist. Der Parser arbeitet mit den Tokens, die der Lexer zurückgibt. Zwar kann man den Lexer mit einigen Kopier- und Umbenenn-Aktionen getrennt benutzen, die Entwickler hatten aber anscheinend die gemeinsame Nutzung im Sinn. dyacc und dlex sind Kommandozeilen-Tools, deren Bedienung für GUI-gewohnte Benutzer ungewohnt ist. Wir benutzen sowohl die GUI Glyd2.0 von Scott J. Miles als auch die GUI-Nutzung (Ein-/Ausgabe über Stringlisten) angepassten Bibliotheken yacclib und lexlib. work.zip enthält in einem Verzeichnis alles, was man zum Start braucht.