Runtime "syntax error" von lex und yacc
Ich kann nicht herausfinden, warum erhalte ich diese Ergebnisse.
++
+add
+syntax error 2
++
+add
+syntax error 4
Den ++ ist mein input-und lex-Echos jedes Zeichen und yacc Drucke hinzufügen, sobald es bekommt, a +. Es ist mir dieser Fehler auf jedem anderen + es bekommt. Egal, wie ich die Eingabe, erhalte ich die gleichen Ergebnisse, wenn ich drücken Sie die EINGABETASTE auf jeden +.
lex
%{
#include "y.tab.h"
int chars = 0;
%}
%%
"+" {ECHO; chars++; return ADD;}
. {ECHO; chars++;}
\n {ECHO;}
%%
yacc
%{
#include <stdio.h>
extern int chars;
void yyerror (const char *str) {
printf ("%s %d\n", str, chars);
}
%}
%token ADD
%%
symbol : ADD {printf ("add\n");}
;
%%
int main () {
while (1) {
yyparse ();
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Grammatik akzeptiert nur einen 'Satz', die aus einem einzelnen token
+
. Wenn Sie eine zweite+
Sie verursachen einen syntax-Fehler; Ihre Grammatik nicht erlauben, HINZUZUFÜGEN, gefolgt von HINZUFÜGEN. Ihre nächste token nach der+
werden müssen EOF für die Grammatik akzeptieren Sie Ihre Eingabe. (Wegen der.
und\n
Regeln, können Sie geben alle möglichen anderen Sachen auf den code, aber es kann nur einen+
in der Eingabe.)