【发布时间】:2016-02-28 18:10:07
【问题描述】:
您好,我已经开始学习 Bison 解析器生成器。我尝试了以下程序。我使用MinGW on Window 7 和mintty 客户端编译并运行程序。 Bison 版本是 2.4.2
%verbose
%error-verbose
%{
#include <cstdio>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
int yylex(void);
int yyerror(const char *msg);
%}
%token INT
%%
rule :
INT { $$ = $1; printf("value : %d %d %d %d\n", $1,
@1.first_line, @1.first_column, @1.last_column); }
;
%%
int main()
{
yyparse();
return 0;
}
int yylex()
{
char ch = getchar();
if(isdigit(ch))
{
ungetc(ch, stdin);
scanf("%d", &yylval);
return INT;
}
return ch;
}
int yyerror(const char *msg)
{
printf("Error : %s\n", msg);
}
我用bison filename.y 然后gcc filename.tab.c 编译了程序,当我尝试运行程序并在标准输入中输入 5 时,我收到以下错误,因为它是从 yyerror 函数打印的。谁能帮我找出我做错了什么。
Error : syntax error, unexpected $undefined, expecting $end
【问题讨论】:
-
我推荐使用 flex 作为词法分析器。 Bison 和 flex 相得益彰。