费曼学习法(符号表)
Posted 每天告诉自己要努力
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了费曼学习法(符号表)相关的知识,希望对你有一定的参考价值。
符号表是编译过程中收集标识符信息的一种数据结构,一般有数组、链表、哈希表、二叉搜索树等等。相同的标识符会组织到一起,形成常量表、变量名表、函数名表等等。编译阶段会不断的生成符号表,不断使用符号表去进行解析,这也是编译过程最主要的一个开销。
符号表最主要的作用有三个:
①词法解析阶段:编译器会根据空格把一个一个标识符识别出来,然后在同一个作用域内,按照符号属性分类,记录到符号表中,每个标识符都和它的数据类型、作用域、名称、在内存中的地址等信息绑定到一起。主要就是收集符号的属性。
②语法解析阶段:通过收集到的符号表,进行语法树的建立,主要是为了检查上下文的合法性。比如说在同一个作用域内,搜集到相同名称的变量时,会报错,错误原因是重复定义变量。再比如说,在一个新作用域内,会生成一个新的符号表进行收集信息,那么假如又出现了一个内部作用域,就会再生成一个新的符号表进行收集,并且这个内部作用域对应的符号表会有一个指针,指向上一层外部作用域所对应的符号表,当需要解析这个标识符时,如果在当前作用域的符号表内找不到,就要顺着指针到上一层作用域对应的符号表中查找,如果一直到最外层作用域的符号表中都还是找不到,就会报错,错误信息是使用未声明的变量。主要的作用其实就是检验上下文的合法性。
③代码经过预处理、编译、汇编之后,生成的是目标文件,在linux下就是.O文件,这种文件携带有很多符号表,那么需要经过链接器,把这些.O文件打包,链接,生成最终的可执行二进制文件。那么这个过程就需要符号表,确定标识符在最终二进制文件中的相对地址和所在的内存布局区域。
以上是关于费曼学习法(符号表)的主要内容,如果未能解决你的问题,请参考以下文章