Bison end of File给出了语法错误?

时间:2013-11-15 09:37:27

标签: bison flex-lexer

在我的yacc文件中,我的开头符号'Program'为:

Program: Declaration Statements E_O_F {/*Semantic Action*/};

E_O_F是flex-lexer返回的标记:

<<EOF>> return E_O_F;

但是当我编译我的文件时,在最后一行+第1行总是报告语法错误。 Lex文件:File Yacc文件:File

输入:test.txt

a=(b);
b=c+d/e;
a=3/5-2*4;
a=a-b;
if(a>b) 
{
    a=a+1;
}

我想我没有回复

<<EOF>>

令牌正确。请帮忙。

1 个答案:

答案 0 :(得分:3)

您无需显式返回EOF令牌,并且您的语法不应尝试检测EOF

bison / yacc始终会创建隐式启动规则:

real_start: start <<EOF>>

其中start是您的开始作品,<<EOF>>是令牌类型0

此外,flex在找到输入结束时始终返回0

因此,这两件事情共同使您无需在正常的事件过程中担心EOF。但是,如果您希望解析器仅解析部分输入(在此问题中似乎不是这样),它们会使生活复杂化。