Bison文件结尾给出语法错误?
在我的yacc文件中,我有一个开始符号“程序”,如下所示:Bison文件结尾给出语法错误?,bison,flex-lexer,Bison,Flex Lexer,在我的yacc文件中,我有一个开始符号“程序”,如下所示: Program: Declaration Statements E_O_F {/*Semantic Action*/}; E_O_F是flex lexer返回的令牌,如下所示: <<EOF>> return E_O_F; 我想我不会把钱还给你的 <<EOF>> 正确标记。请提供帮助。您不需要显式返回EOF标记,并且您的语法不应尝试检测EOF bison/yacc始终创建一个隐式开
Program: Declaration Statements E_O_F {/*Semantic Action*/};
E_O_F是flex lexer返回的令牌,如下所示:
<<EOF>> return E_O_F;
我想我不会把钱还给你的
<<EOF>>
正确标记。请提供帮助。您不需要显式返回
EOF
标记,并且您的语法不应尝试检测EOF
bison/yacc始终创建一个隐式开始规则:
real_start: start <<EOF>>
real\u开始:开始
其中,start
是您的开始生产,
是令牌类型0
此外,flex
在找到输入结束时总是返回0
因此,这两件事共同作用,使您无需在正常事件过程中担心
EOF
。但是,如果您希望解析器只解析部分输入(在本问题中似乎不是这样),那么它们确实会使您的生活变得复杂。您不需要显式返回EOF
标记,并且您的语法不应该尝试检测EOF
bison/yacc始终创建一个隐式开始规则:
real_start: start <<EOF>>
real\u开始:开始
其中,start
是您的开始生产,
是令牌类型0
此外,flex
在找到输入结束时总是返回0
因此,这两件事共同作用,使您无需在正常事件过程中担心EOF
。然而,如果您希望解析器只解析输入的一部分(在本问题中似乎不是这样),那么它们确实会使生活变得复杂