前言
这个编译原理是一个系列,系列地址为: 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 *