005
31.10.2003, 15:40 Uhr
virtual
Sexiest Bit alive (Operator)
|
Ja flex ist der Nachfolger von lex. Generell kann man sagen, daß (f)lex dazu dient, Texte zu analysieren. er erwartet eine eingabedatei (.l) aus der er dann fertigen C Code (oder C++ Code, kann man einstellen) generiert, das kann man dann wiederum kompilieren. Der Generierte Code erlaubt die analyse von Texten gemäß den in der .l Datei festgelegten Regeln. Sehr häufig wird der Flex dazu eingesetzt, um einen einfachen ASCII Text in Tokens zu zerlegen. Die generierten Tokens werden dann zB von bison (yacc) generierten Compilern gelesen und ausgewertet. Mit dem Paar flex/bison kann man also Interpreter/Compiler bauen. Ein Beispiel findet sich hier, wo ich mal einen einfachen Interpreter für mathe. Ausdrücke geschrieben habe. Der Zusammenhang der einzelnen komponenten ist eigentlich folgender: Die .l Datei enthält, nachdem flex seine Arbeit getan hat, neben dem main (was ja schon davor da war) eine funktion yylex. yylex gibt irgendwelche Zahlen zurück, die die einzelnen Tokens definieren (TOKEN_xxx). Die .y Datei wird vom bison bearbeitet und generiert eine yyparse Routine. Nun main ruft yyparse auf. Diese yyparseRoutine enthält den eigentlichen Interpreter. Der Interpreter ruft wiederum yylex auf, um an die Tokens zu kommen.
An obigen Link sieht man auch den vorteil: der Code ist zwar auf mehrere Dateien verteilt, aber kürzer als der in post 001 und ist ihm auch hinsichtlich funktionalität deutlich überlegen. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) Dieser Post wurde am 31.10.2003 um 15:43 Uhr von virtual editiert. |