Re: Dokumentation für Parser aus Delphi VCL?
29. Jan 2010, 16:42
Hallo,
Danke zuerst an alle für Eure zahlreiche Antworten. Hab mir auch Castalia runtergeladen. Guck ich mir später an. Hab mir erst mal die verfügbaren Dokus zu Lex und yacc, die mit dem Delphi Compiler Generator mitgeliefert wurden angesehen und brauchte eigentlich mal ein Beispiel.
Für ne Codevervollständigung kömnnte ich ja folgendes schreiben:
%token class const begin constructor destructor end function out override procedure
%token type uses var virtual
Aber wie geht es jetzt weiter?
Wenn der Token "type" gefunden wird muss ja mindestens zwischen Klasse und record unterschieden werden. Wenn später eine Variable vom angegebenen Typ gefunden wird, brauche ich für die Codevervollständigung die Members dieses Typs, beim Record die Felder und bei der Klasse auch die Methoden und Eigenschaften. Nur wie sage ich das dem Lex Programm?
Ich weiß faktisch nicht, was gehört zum Programm, das letzlich entstehen soll und was gehört zum Eingabecode für Lex bzw. yacc?
Beispiel:
%left '+' '-'
%left '*' '/'
%token NUM
%%
expr : expr '+' expr
| expr '-' expr
| expr '*' expr
| expr '/' expr
| '(' expr ')'
| NUM
;
%{
type YYSType = Real;
%}
x : y { action; } z
Ist "{ action; } z jetzt eine Operation zwischen y und z, aus der sich x ergibt?
Wo finde ich da eine verständliche Einführung. Die mit dem Delphi Compiler Generator mitgeleieferte ist mir zu knapp.
Wenn ich mir selber eine Grammatik unabhängig von Lex und yacc schreiben will, könnte das wahrscheinlich so aussehen:
<token> <typbezeichner> '=' <eingebauter_typ>
<token>:= "TYPE"
<typbezeichner>:=['A'..'Z', 'a'..'z']
<eingebauter_typ>:="CLASS","RECORD"...
Nun müsste ich mir ein Pascalprogramm schreiben, das weiß, was <token>, <typbezeichner> ... usw bedeuten, um damit die Grammatik beschreiben zu können.
Aber noch immer hoffe ich auf eine verstänliche einsteigerfreundliche Dokumentation von lex und yacc, womit ich das gleiche erreiche und das womöglich schneller, als mit einem eigenen Lexer.
Wo als finde ich eine verständliche einsteigerfreundliche Dokumentation von Lex und Yacc?
|