编译的各个阶段
任务:
从左到右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。
任务:
从词法分析的基础上将单词系列分解成各类语法短语,如“程序”,“语句”,“表达式”,这种语法短语也称为语法单位。
词法分析和语法分析本质上都是对源程序的结构进行分析出。
任务:
是审查源程序有无语义错误,为代码生成阶段手机类型信息。
任务:常用“三地址指令”、“四元式”、逆波兰式。
任务:对中间代码进行变换或进行改造,目的是使生成的代码更为高效,即省时间和省空间。
任务:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
名词解释
-
文法:以有穷的集合刻画无穷的集合的一个工具。用规则来说明句子的组成结构,用来表示无穷句子的语言描述。
-
规则:重写规则,产生式,生成式。形如α->β
-
句型:设G是一个给定的文法,S是文法的开始符号,如果S能推导x(其中x∈V*),则称x是文法G的句型,如果x仅由终结符号组成,则称x为G的句子。
-
扫描遍:指编译程序对源程序或中间代码程序从头到尾扫描一次
1.文法描述的语言是该文法一切句子的集合。
2.语言是句子的集合
3.二型文法是上下文无关文法(可以使用语法树推导上下文无关文法)
4.三型文法是正规文法
5.最右推导为规范推导(即是对句型的最右非终结符进行推导),得到的句型叫规范句型(右句型)
6.最左规约为规范规约
概念(这是一组比较容易模糊的概念)
- 短语:
- 直接短语:
- 素短语:素短语是一个短语,它至少含有一个终结符,而且除他之外不含有其他素短语。
- 句柄:
举例说明
图中小写表示终结符号,大写表示非终结符号,S为文法的开始符号。
判断短语
一个句型的语法树中任一子树叶节点所组成的符号串都是该句型的短语
则该语法树的有
a2、
b2a3、
a4、
a2b1b2b3、
a1a2b1b2a3a4
判断直接短语
当子树不包含其他更小的子树时,该子树叶节点所组成的字符串就是该句型的直接短语
a2
b2a3
a4
判断句柄
句柄是最左边的直接短语
a2
note:短语就是句型,不一定要求完全是终结符组成的,本例中只是特例。
判断素短语
素短语是一个短语,它至少含有一个终结符,而且除他之外不含有其他素短语。
a2
b2b3
a4
note:素短语不一定就是直接短语,本题特例。
总结一下
- 拿到一个句子,可以将句子对应的语法树画出来:
- 语法树的每一层结点从左到右排列构成一个句型
- 语法树的没棵子树的叶子结点从左到右排列构成一个短语
- 语法树的简单子树(只有父子两层结点)的叶子结点从左到右排列构成一个简单(直接)短语
- 每棵语法树的最左简单子树(只有父子两层结点)的叶子结点从左到右排列构成句柄