LLVM平台,短短几年间,改变了众多编程语言的走向,也催生了一大批具有特色的编程语言的出现,不愧为编译器架构的王者,也荣获2012年ACM软件系统奖 —— 题记
版权声明:本文为 西风逍遥游 原创文章,转载请注明出处 西风世界 http://blog.csdn.net/xfxyy_sxfancy
栈式符号表的构建
栈式符号表对于一款编译器,无疑是核心的组件。
无论你在做什么符号扫描,那么都离不开符号表,如何得知一个符号是否定义,以及它的类型,那么唯有查看符号表中的记录。
栈式符号表并不复杂,但思想精妙,本文,将介绍一款栈式符号表的原理及简单构建。
源代码的例子
首先我们来看一段C代码
int a[3] = { 100, 10, 1};
int work() {
if (a[0] == 100) { // 这里的a指向的是全局符号a
int a = 99999; // 重新定义了局部符号 下图的符号表是扫描到这里后的情况
for (int i = 0; i< 10; ++i) {
a /= 3; // 由于局部符号优先级较高,引用局部符号
}
return a; // 局部符号
}
return a[0]; // 局部符号生命周期已过&#x