![](https://seccdn.libravatar.org/avatar/1832f8b66d6276077dae70621f3f82e8.jpg?s=120&d=mm&r=g)
Hallo Allerseits, hoffentlich ist diese Gruppe nicht ganz verkehrt für meine Frage. Gibt es bei der o.g. Programmkombination 1. eine Möglichkeit einfach nicht erkannte Worte (1-x Zeichen) als Token aus Flex zurückzugeben ohne alle erkannten Worte auszuschliessen? Ich bekomme bei meinem Wildcard [^\n\t ]+ immer einzelne Buchstaben, bzw bei [^\n]+ den Rest der Zeile, incl besonders definierter Token. 2. Bei Bison eine Möglichkeit mehrere Token an einer Position zu verodern also ... | TOK1 errortoken TOK2 oder TOK3 { Fehlermeldung } statt ... | TOK1 errortoken TOK2 { Fehlermeldung } | TOK1 errortoken TOK3 { Fehlermeldung } Bei beiden Problemen bin ich weder im Web noch in der Doku fündig geworden oder ich hatte die bekannten Tomaten auf den Augen. Kann mir jemand Helfen? Danke vorab, Thomas
![](https://seccdn.libravatar.org/avatar/fff0f38e92656c8a636916213eb952c4.jpg?s=120&d=mm&r=g)
Hi, On Thu, 24 Oct 2002, Roesner Thomas wrote:
Gibt es bei der o.g. Programmkombination 1. eine Möglichkeit einfach nicht erkannte Worte (1-x Zeichen) als Token aus Flex zurückzugeben ohne alle erkannten Worte auszuschliessen? Ich bekomme bei meinem Wildcard [^\n\t ]+ immer einzelne Buchstaben, bzw bei [^\n]+ den Rest der Zeile, incl besonders definierter Token.
Also fuer mich tut's folgendes: ---------- snip ---------------- %option noyywrap %% TOK1 printf ("TOK1\n"); TOK2 printf ("TOK2\n"); [^\n\t ]+ printf ("else: %s\n", yytext); [\n\t ] %% int main() { yylex(); return 0; } --------- snap ----------------- Bei dem Input: "TOK1 TOK2 TOK1 TOK3 A B C LONGBIG" gibt es richtig TOK1 TOK2 TOK1 else: TOK3 else: A else: B else: C else: LONGBIG aus. Ich wuerde also erstmal annehmen, das dein lexer irgend was falsch macht.
2. Bei Bison eine Möglichkeit mehrere Token an einer Position zu verodern also ... | TOK1 errortoken TOK2 oder TOK3 { Fehlermeldung }
statt ... | TOK1 errortoken TOK2 { Fehlermeldung } | TOK1 errortoken TOK3 { Fehlermeldung }
Solche shortcuts (EBNF) kann bison leider nicht, aber in diesem Fall kann man sich ja einfach behelfen: tok23: TOK2 | TOK3 ; useit: TOK1 errortoken tok23 {Fehlermeldung} ; Ciao, Micha.
participants (2)
-
Michael Matz
-
Roesner Thomas