2016-04-30 13 views
0

Ich versuche .l Datei aber Warnung treten in bestimmten Linien zu machen, die Regel nichtLex - Achtung, Regel kann nicht abgestimmt werden

"true"      return TRUE; 
"false"      return FALSE; 
"int"      return INT; 
"char"      return CHAR; 
"float"      return FLOAT; 
"bool"      return BOOLEAN; 

"if"     return IF; 
"else"     return ELSE; 
"for"     return FOR; 
"while"     return WHILE; 
"do"     return DO; 
"switch"    return SWITCH; 
"case"     return CASE; 

"break"     return BREAK; 
"default"    return DEFAULT; 
+0

erklärt? –

+0

Welche "bestimmten Linien"? Und wo ist der Rest der Scannerdefinition? – rici

Antwort

2

angepasst werden, wenn die Zeilen, die Sie in Ihrer Frage eingefügt sind Zeilen, die die Warnung ausgelöst haben, liegt wahrscheinlich daran, dass Sie eine Kennzeichnungsregel für Kennungen vor die Schlüsselwortregeln haben. Ein minimales Beispiel würde wie folgt aussehen:

[[:space:]]    /* ignore whitespace */ 
[[:alpha:]][[:alnum:]]* return ID; /* Wrong!! */ 
keyword     return KEYWORD; 
.       return *yytext; 

, dass die Warnung auf der dritten Zeile erzeugt.

Reihenfolge in (f) lex-Definitionen, denn wenn zwei Regeln mit demselben Token übereinstimmen und keine Regel mit einem längeren Token übereinstimmt, dann gewinnt die erste Regel .

Dies wird im Haben Sie Separatoren setzen in den `` %% Abschnitt flex manual