一个简单的计算器
我的编程入门是一本比较久远的书——《C++ in action》。在该书中描述了一个实数计算器, 除了简单的四则运算外,还可以计算三角函数,指对数运算等常见的算术运算,而且可以定义变量。如果再加上函数、条件语句、循环语句,就可以当作一种程序语言来使用了。 其中提到的技术和代码实现可以用来入门编译原理,从中可以找到很多教科书中提到的编译器前端技术。
在研究生的那段时间,这本书给了我很大的帮助。我当时的一个主要研究课题就是软件缺陷定位,或者说是自动Debug技术。这类问题的一个主要方法就是, 先对目标程序插入各种各样的桩,来收集程序运行过程中的执行信息,比如说哪条语句被执行过,哪条没有被执行过。然后运行大量的测试用例,收集这些运行信息。 最后从这些信息中挖掘Bug的线索。
对目标程序插桩,就需要用到编译原理中的前端技术。先构建语法树,再在合适的位置植入桩函数,保证不影响原程序的运行逻辑,并且可以收集需要的信息。 幸亏在大三大四的样子看到了《C++ in action》,让我翻看编译原理的教科书时有所准备。
本系列文章主要是应用数据结构与算法实现一个简单的计算器,从而初窥编译原理。 为以后通过复杂网络来分析程序特征打下基础。心情好的话,我们还可以考虑实现一个C语言的编译器。