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

要求

在这里插入图片描述

下载bison

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

  • 下载之后解压即可

配置环境变量

  • ①在系统变量Path中新增如下变量
    在这里插入图片描述
  • \user\local\wbin可以在刚才解压的文件夹里找到
  • ②在系统变量中新增变量BISON_SIMPLE和BISON_HAIRY,变量值如下图
    在这里插入图片描述
    在这里插入图片描述

生成.c文件

  • ①找到bison.exe,并复制到桌面
    在这里插入图片描述
  • ②写.y文件
  • 新建文本文档,保存为aa.y,并输入以下代码:
%{
#include <ctype.h>		/* 常量、变量的声明*/
#include<stdio.h>
#include<stdlib.h>
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即可
    在这里插入图片描述

生成.exe文件

  • ①新建文件夹,把刚才的.c文件放进来
  • ②用vc打开这个.c文件
  • ③找到yyerrhandle(大概在850行的位置)
  • ④添加代码 if (yystate==13) goto yyacceptlab;如下图所示
    在这里插入图片描述
  • ⑤编译即可
  • ⑥发现刚才新建的文件夹多了一个Debug文件夹,打开即可找到.exe文件

输入输出

  • 双击.exe文件
    在这里插入图片描述
  • 输入输出
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值