BLOG¶
Compiler 5 活动记录
冯诺依曼架构中的编译器需要将所有的 CODE 转换为汇编指令,并为 DATA 分配空间。活动记录是通过编译器实现的,使得程序在运行时,存储或传递:函数或过程的局部变量、返回地址、参数等信息的数据结构,一般是栈帧。
Compiler 4 语义分析
符合语法的程序不一定有有意义或是程序员期望的语义。
狭义上的语义分析是编译器前端的最后一部分,手段是对 AST 做一些分析和变换,目的是确定程序的某些静态属性,例如变量的声明与作用域、变量与表达式的类型、函数调用是否符合定义等等。最后,语义分析将把 AST 转换为某种中间表示(IR)。
Compiler 3 语法分析:自底向上方法
语法分析器从词法分析器获得 Token 序列,确认该序列是否可以由语言的文法生成,然后:
- 对于语法错误的程序,报告错误信息
- 对于语法正确的程序,生成语法分析树,例如抽象语法树(Abstract Syntax Tree, AST)
自底向上指的是,从输入的串出发,尝试将其归约到文法开始符号。以分析树(Parse Tree)的角度来看,自底向上方法从所有叶节点尝试构建出分析树。
Compiler 2 语法分析:自顶向下方法
语法分析器从词法分析器获得 Token 序列,确认该序列是否可以由语言的文法生成,然后:
- 对于语法错误的程序,报告错误信息
- 对于语法正确的程序,生成语法分析树,例如抽象语法树(Abstract Syntax Tree, AST)
自顶向下指的是,从文法的开始符号出发,尝试推导出输入的串。以分析树(Parse Tree)的角度来看,自顶向下方法从根节点出发,构建分析树。