语法分析工具bison的使用

flex是windows下词法分析工具,lex是linux下词法分析工具,bison是windows下的语法分析工具,而yacc对应为linux下的语法分析工具,flex和bison如何配置网上教程一搜一大把。
如图所示
在这里插入图片描述
先定义了一个二义性文法

%%
exp:n|exp '+' exp;
n:'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'0';
%%
int main()
{
  yyparse();
  return 0;
}

经过命令行编译后,发现了移进归约冲突,于是报错。test.y.txt contains 1 shift/reduce conflict.
正确的带上语义的代码

%{
#include<malloc.h>;
int yylex();
void yyerror(const char* s);
%}
%left'+'
%%
lines:line
         |line lines
;
line:exp '\n'  {printf ("value=%d\n",$1);}
;
exp:n {$$=$1;}
|exp '+' exp {$$=$1+$3;}
n:'1'{$$=1}
|'2'{$$=2;}
|'3'{$$=3;}
|'4'{$$=4;}
|'5'{$$=5;}
|'6'{$$=6;}
|'7'{$$=7;}
|'8'{$$=8;}
|'9'{$$=9;}
|'0'{$$=0;}
;
%%
int main()
{
  yyparse();
  return 0;
}

int yylex()
{
  return getchar();
}

void yyerror(const char *s)
{
  fprintf(stderr,"%s\n",s);
  return;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值