自制编译型表达式计算器

起因是这个问题

http://zhidao.baidu.com/question/1110099820559411499.html

因为当时我编译原理课根本没有好好听,所以就决定尝试一下自己写这样的东西能写成什么样。

虽然写出来了,不过貌似没有满足,然后就进行魔改。

下面的代码是魔改的结果,能蛋疼成这样,我实在无话可说了……(死鱼眼

输入一个表达式,然后这个程序能计算它的值。支持加减乘除和括号,只支持整数,表达式中不能含有空格

注意:不能在“数据执行保护(DEP)”环境下执行。VC链接的时候不能带/NXCOMPAT选项,系统设置里也不能用“为所有程序启用数据执行保护”。

继续阅读自制编译型表达式计算器

尾递归和编译器优化

从最早学C语言的时候接触递归的时候就写过递归函数了。什么从1加到100,算阶乘等等。不过因为递归的函数调用操作要浪费不少时间,加上写起来也没习惯,就不怎么爱用。

最近稍微接触了一点Haskell这种函数式编程语言,然后就又想起C语言的递归了。之后在C语言里也尝试了Haskell里那样的写法。有说“尾递归可以转变为循环”,似乎编译器优化也是这么做的。但是自己在尝试的时候却没发现它变成了循环。

继续阅读尾递归和编译器优化