1,关于文法
一个文法G可以抽象的分为四元组(VN,VT,P,S)
VN表示非终结符 VT表示终结符 P表示产生式 S表示开始符
2,老师上课说的编译原理的阶段说的是:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成
其中 语法分析,语义分析,中间代码生成称为 语法制导翻译
语义分析,中间代码生成称为 语义翻译
3,乔姆斯基创造了文法,克林创造了自动机,其实这两种东西是等价的
4,优化可生成“运行时间段且存储空间小的代码”
5,如何判断文法是不是二义文法
对一个串进行识别,判断其是否能够分出两个串
已知文法 G[S] 为 S → aSb|Sb|b ,试证明文法 G[S] 为二义文法。
证明:
由文法G[S]:S→aSb|Sb|b,对句子aabbbb对应的两棵语法树为:
6,如果文法G是无二义性的,那么它对应的最左推导和最右推导对应的语法树必定相同
7,构造编译程序应该掌握:源程序,目标语言,编译方法
8,两个正规式等价说的是两个正规式所识别的语言集相等
9,计算机执行用高级语言编写的程序主要有:解释 和 编译
10,自上而下分析法操作 (自己想)
11,题型:消除左递归,提取公因子
解题方法:
很好想,左递归就套公式,用一个临时变量解决,提取公因子就用提取公因子,换一个新变量出来
例题:
考虑文法 G[S]:
S → (T) | a+S | a
T → T,S | S
消除文法的左递归及提取公共左因子。
解:消除文法G[S]的左递归:
S→(T) | a+S | a
T→ST′
T′→,ST′| ε
提取公共左因子:
S→(T) | aS′
S′→+S | ε
T→ST′
T′→,ST′| ε
12,几个填空题
词法分析输入:源程序 输出:单词符号
语法分析输入:单词符号 输出:语法单位
语法分析的方法大致分为:自上而下分析法 + 自下而上分析法(现在我还没看)
预测分析使用 预测分析表 + 符号栈 联合控制
最右推导 规范推导! 最右推导就是从右边开始推?哦了?
根据优化所设计的范围,可把优化分为:局部优化,循环优化,全局优化
优化的定义:对程序进行各种变换,使的从变换后的程序出发,能够产生更高效的代码
文法G含有终结符的句型成为 句子
自上而下分析法: 从开始符号开始推,推出句子 (句子为下)
自下而上分析法:从句子开始逐步归约,直到归约到开始符
目标代码的形式:机器语言,汇编语言,待装配机器语言模块
代码考虑问题:(1)生成目标代码短 (2)减少访问内存(3)考虑到计算机指令系统的特点
display表:嵌套层次显示表
作用:登记外层每个活动的最新的起始地址
13,几个填空题:
13.1编译程序首先要识别出源程序中每个(单词),然后分析每个(句子)并翻译其含义
13.2通常把分析前端和综合后端两大阶段,词法,语法和语义分析是对源程序的(分析),中间代码生成,代码优化,目标代码生成是对源程序的(综合)
13.3程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为(静态存储分配) + (动态存储分配)
13.4对于编译程序而言,输入数据是(源程序),输出结果是(目标程序)