2013年(24)
发布时间:2013-03-02 10:39:07
上篇我们介绍了一般形式的语句处理,现在我们来处理判断分支和循环。任意的循环语句,本身都可以改写成一系列执行语句再加上分支语句。......【阅读全文】
发布时间:2013-03-02 10:38:54
上一篇描述了函数调用的逻辑,现在可以在这种设计思想下,继续提高完成度。我们使用两种不同数据结构分别描述和存储句子的语义,以及数据的值。在存储的时候,将二者区分开来,计算时,将语句翻译成正确的计算逻辑,计算出每个句子的正确的值。......【阅读全文】
发布时间:2013-03-02 10:36:55
最近在学习编译原理,于是准备自己动手写一个脚本语言。准备用一些文章记录其中遇到的问题和解决的方法。这些文章需要有一些编译原理,YACC, LEX的储备知识。关于这些知识,使用方面的部分可以简单的通过网络上的文章得到,更详细的原理,需要参考《编译原理》(龙书)。......【阅读全文】
发布时间:2013-01-08 10:08:44
先看一个经典的面试题:#include <stdio.h>#define f(a,b) a##b#define g(a) #a#define h(a) g(a) int main(){ printf("%s\n", h(f(1,2))); printf("%s\n", g(f(1,2))); return 0;}输出是:12f(1,2)原因就是宏替换的原则问题:当一个宏参数被放进宏体时,通常(注意,有例外)这个宏参数会首先被全部展开。当展开后的宏参数被放进宏体时,预处理器对新展开的宏体进行第二次扫描,并继续展开。例如:#define P......【阅读全文】