我无法弄清楚为什么我会得到这些结果。
++
+add
+syntax error 2
++
+add
+syntax error 4
++是我的输入,lex回应每个字符,只要得到+,yacc就会添加。它给了我这个错误的其他所有+它得到。无论我如何给出输入,如果我在每个+上按Enter键,我会得到相同的结果。
法
%{
#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 ();
}
}
答案 0 :(得分:2)
您的语法只接受由单个标记+
组成的“句子”。当您键入第二个+
时,会导致语法错误;你的语法不允许ADD后跟ADD。 +
之后的下一个标记必须是EOF,语法才能接受您的输入。 (由于.
和\n
规则,您可以在代码中键入各种其他内容,但输入中只能有一个+
。)