编译原理:用Yacc实现简易计算器(小白篇)

  • 可以参考flex的使用方法

要求

编译原理:用Yacc实现简易计算器(小白篇)_第1张图片

下载bison

https://sourceforge.net/projects/unxutils/

  • 下载之后解压即可

配置环境变量

  • ①在系统变量Path中新增如下变量
    编译原理:用Yacc实现简易计算器(小白篇)_第2张图片
  • \user\local\wbin可以在刚才解压的文件夹里找到
  • ②在系统变量中新增变量BISON_SIMPLE和BISON_HAIRY,变量值如下图
    编译原理:用Yacc实现简易计算器(小白篇)_第3张图片
    编译原理:用Yacc实现简易计算器(小白篇)_第4张图片

生成.c文件

  • ①找到bison.exe,并复制到桌面
    编译原理:用Yacc实现简易计算器(小白篇)_第5张图片
  • ②写.y文件
  • 新建文本文档,保存为aa.y,并输入以下代码:
%{
#include 		/* 常量、变量的声明*/
#include
#include
int yylex(void);
int yyerror(char*);
%}
%token DIGIT
%%
line 	: expr '\n'		{printf("%d\n", $1);}
		;
expr 	: expr '+' term	{$$ = $1+$3;}
		| term
		;
term	: term '*' factor	{$$ = $1 * $3;}
		| factor
		;
factor	: '(' expr ')'		{$$ = $2;}
		| DIGIT
		;
%%	
int yylex(){
	int c;
	c = getchar();
	if (isdigit(c)){
		yylval =c-'0';
		return DIGIT;
	}
	return c;
}
int yyerror(char *s){
    printf("%s\n",s);
    return 1;
}
int main() {
	int y=yyparse();
	if(y!=0){	
		printf("输入错误!\n");
		system("pause");
	}
	return 0;    
} 
  • ③生成.c文件
  • 拖动刚才的.y文件到bison.exe即可
    编译原理:用Yacc实现简易计算器(小白篇)_第6张图片

生成.exe文件

  • ①新建文件夹,把刚才的.c文件放进来
  • ②用vc打开这个.c文件
  • ③找到yyerrhandle(大概在850行的位置)
  • ④添加代码 if (yystate==13) goto yyacceptlab;如下图所示
    编译原理:用Yacc实现简易计算器(小白篇)_第7张图片
  • ⑤编译即可
  • ⑥发现刚才新建的文件夹多了一个Debug文件夹,打开即可找到.exe文件

输入输出

  • 双击.exe文件
    编译原理:用Yacc实现简易计算器(小白篇)_第8张图片
  • 输入输出
    编译原理:用Yacc实现简易计算器(小白篇)_第9张图片
    编译原理:用Yacc实现简易计算器(小白篇)_第10张图片

你可能感兴趣的:(编译技术)