小白说编译原理-4-计算器yacc

本文介绍了一个编译原理的系列教程,旨在手动编写一个计算器,支持浮点数的算术运算、括号处理和空格识别。将逐步实现包括变量存储、额外数学运算符(如%、^和开根号)等功能。通过递归下降法实现语法规则,提供源代码和工程文件供读者参考和学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这个编译原理是一个系列,系列地址为: https://blog.youkuaiyun.com/lpstudy/article/category/937055
考虑到很多小伙伴咨询代码的问题,现把链接发出来:https://github.com/lpstudy/compile
这个链接里面具有这个系列所有的VS工程和代码,工程是按照系列中的一个教程环境配置6来配置的,不过lib我好像没有上传到github。
如果大家发现任何问题,可以在github或者csdn,我有空的时候完善一下,争取做到下载github工程即可跑。

前提说明

上一节通过一个yacc代码示例,说明一个简单计算器的编写。 它支持浮点数的±*/运算,以及括号,对空格也可以很好的识别。
#本节准备的工作
依据编译原理中简单编译器的代码,实现一个上述的编译器。 它不同于yacc代码的自动生成,它纯粹手写,实现了语法规则。我以前并不了解这种代码的编写,不知道如何根据规则来实现相应的代码,这次经同实验室的余同学提醒,说是这种机制很容易实现,叫做递归下降法。

要实现的语法规则

lines : lines expr '\n' {printf("%f\n", $2);}
	  | lines '\n'
	  |//empty line
	  ;

expr : expr '+' term {$$ = $1 + $3;}	
        | expr '-' term {$$ = $1 - $3;}	
        | term
        ;
term : term '*' factor {$$ = $1 *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值