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.