【问题标题】:Runtime "syntax error" from lex and yacc来自 lex 和 yacc 的运行时“语法错误”
【发布时间】:2013-03-13 02:25:51
【问题描述】:

我不知道为什么会得到这些结果。

++
+add
+syntax error 2

++
+add
+syntax error 4

++ 是我的输入,lex 回显每个字符,并且 yacc 打印 add 每当它得到一个 +。它每隔一个+就给我这个错误。不管我如何输入,如果我在每个 + 上按回车,我都会得到相同的结果。

%{
#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 ();
    }
}

【问题讨论】:

    标签: syntax-error yacc lex flex-lexer


    【解决方案1】:

    您的语法只接受由单个标记+ 组成的“句子”。当您输入第二个+ 时,会引发语法错误;您的语法不允许 ADD 后跟 ADD。 + 之后的下一个标记必须是 EOF,语法才能接受您的输入。 (由于.\n 规则,您可以在代码中输入各种其他内容,但输入中只能有一个+。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多