Compiler construction 添加规则时出现bison语法错误
嗨,我正在尝试做一个非常简单的语法,但当我尝试结合两条规则时,失败得很惨: flex文件:Compiler construction 添加规则时出现bison语法错误,compiler-construction,bison,Compiler Construction,Bison,嗨,我正在尝试做一个非常简单的语法,但当我尝试结合两条规则时,失败得很惨: flex文件: %option never-interactive %option yylineno D [0-9] L [a-zA-Z_] A [a-zA-Z_0-9] WS [ \t\v\n\f] %% "keyword" { printf("KEYWORD: %s\n", yytext); return KEYWORD; } [+-]?{D}+ { yylval = at
%option never-interactive
%option yylineno
D [0-9]
L [a-zA-Z_]
A [a-zA-Z_0-9]
WS [ \t\v\n\f]
%%
"keyword" { printf("KEYWORD: %s\n", yytext); return KEYWORD; }
[+-]?{D}+ { yylval = atoi(yytext); return L_SINT32; }
{L}{A}* { printf("ID: %s\n", yytext); return IDENTIFIER; }
";" { return EOS; }
{WS} { }
. { printf("OTHER\n"); return 0; }
%%
以及相应的bison文件:
%token L_SINT32
%token EOS
%token IDENTIFIER KEYWORD
%start stmt_list
%%
idlist : IDENTIFIER { printf("IDENT\n"); }
| idlist IDENTIFIER { printf("IDENT, IDENT\n"); }
;
stmt : KEYWORD IDENTIFIER ';'
| idlist ';' { printf("EXP\n"); }
;
stmt_list
: stmt
| stmt_list stmt
;
%%
当我尝试在输入上使用它时
id0 id1 id2;
keyword id1;
我得到:
ID: id0
IDENT
ID: id1
IDENT, IDENT
ID: id2
IDENT, IDENT
error -> syntax error
有人能告诉我为什么吗?当你的词法分析器看到分号时:
";" { return EOS; }
您的解析器正在查找的内容:
| idlist ';' { printf("EXP\n"); }
EOS
将由bison创建一些值并放入生成的头文件中;可能是258<代码>';'另一方面,code>的值为';'代码>(即0x3B
或59
)
我会去掉EOS,只返回“;”代码>来自lexer。谢谢,救了我一天,问题确实出在返回的lexem中!