E -> E+T|T
T -> T*F|F
F->(E)|i
最左推导:E => i+i
E => E+T => T+T => F+T => i+T => i+F => i+i属性文法分为哪两类?哪类是用于自上而下传递信息,哪类用于自下而上传递信息?
代码优化的原则有哪些?
优化的目的是为了产生更高效的代码。
原则:
(1)等价原则。经过优化后不应改变程序运行的结果。
(2)有效原则。使优化后所产生的目标代码运行时间较短,占用的存储空间较小。
(3)合算原则。应尽可能以较低的代价取得较好的优化效果。
代码生成器输出代码的形式有哪些?
代码生成器的输入包括中间代码和符号表中的信息。
代码生成是把语义分析后或优化后的中间代码变换成目标代码。一般有以下三种形式:
(2)带装配的机器语言模块。带需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码。
(3)汇编语言代码,尚需经过汇编程序汇编,转换成可执行的机器语言代码。
编译过程划分为哪几个阶段?各阶段任务是什么?
会画编译程序总体框架图。
形式化定义上下文无关文法。
能简述乔姆斯基四型文法之间的区别。
能用形式语言定义文法的句型、句子、语言、等价。
能简述DFA与NFA的相同点与不同点。
DFA(确定)
一个确定有限自动机(DFA)M是一个五元式 M=(S,Σ,δ,s0,F),其中:
S是一个有限集,它的每个元素称为一个状态。
Σ是一个有穷字母集,它的每个元素称为一个输入字符。
δ是一个从S×Σ至S的单值部分映射。δ(s,a)=s\'意味着:当现行状态为s、输入字符为a时,将转换带下一状态s\'。我们称s\'为s的一个后继状态。
s0∈S,是唯一的初态。
F⊆S,是一个终态集(可空)。
NFA(非确定)
一个非确定有限自动机(NFA)M是一个五元式 M=(S,Σ,δ,s0,F),其中:
(1)S是一个有限集,它的每个元素称为一个状态。
(2)Σ是一个有穷字母集,它的每个元素称为一个输入字符。
(3)δ是一个从S×Σ到S的子集的映照,即δ:S×Σ\*→2S。
(4)s0⊆S,是一个非空初态集。
(5)F⊆S,是一个终态集(可空)。
区别:
能简述什么是LL(1)文法。
1.文法不含左递归
2.对于文法中每一个非终结符A的各个产生式的候选首符集两辆不相交。即,若A->a1|a2|a3|…|an,则
FIRST(αi)∩ FIRST(αj) = 空集 (i!=j)
3.对文法中每一个非终结符A,若它存在某个候选首符集包含ε,则:
FIRST(A) ∩ FOLLOW(A)=空集
如果一个文法满足上面条件,则称该文法G为LL(1)文法。
LL(1)中的第一个L表示从左到右扫描输入串,第二个L表示最左推导,1表示分析时每一步只需向前查看一个符合。
理解中间代码生成对于编译器构造的好处。
(1) 便于进行与机器无关的代码优化工作;
(2) 使编译程序改变目标机更容易;
(3)使编译程序的结构在逻辑上更为简单明确。以中间语言为界面,编译前端和后端的接口更清晰。
(1)消去G1的左递归:S→a|∧|(T),T→ST’,T’→,ST’|ε
(2)递归子程序:
procedures;
if sym=’a’thenadvance
elseifsym=’∧’thenadvance
elseifsym=’(’then
begin
advance
t;
ifsym=’)’thenadvance
elseerror
end
elseerror;
proceduret;
begin
s;t’
end;
procedures;
ifsym=’,’then
begin
advance
s;t’
end;
(3)
对下面的文法G
Expr→-Expr
Expr→(Expr)|VarExprTail
ExprTail→-Expr|ε
Var→idVarTail
VarTail→(Expr)|ε
(1)构造LL(1)分析表。(12分)
(2)给出对句子id—id((id))的分析过程。(8分)
(1)FIRST(Expr) = {_,(,id}
FIRST(ExprTail) = {_,ε}
FIRST(Var)={id}
FIRST(VarTail)={(,ε}
FOLLOW(Expr)={#,)}
FOLLOW(ExprTail)={#,)}
FOLLOW(Var)={_,#,)}
FOLLOW(VarTail)={_,#,)}
(2) 给出对句子id—id((id))的分析过程。(步骤符号栈输入串所用产生式)
0#Exprid__id((id))#
1 # ExprTailVarid__id((id))#Expr→VarExprTail2 # ExprTailVarTailidid__id((id))#Var→idVarTail
3 # ExprTailVarTail__id((id))#
4 # ExprTail__id((id))#VarTail→ε
5 # Expr___id((id))#ExprTail→_Expr
6 # Expr_id((id))#
7 # Expr__id((id))#Expr→_Expr
8 # Exprid((id))#
9 # ExprTailVarid((id))#Expr→VarExprTail
10 # ExprTailVarTailidid((id))#Var→idVarTail
11 # ExprTailVarTail((id))#
12 # ExprTail)Expr(((id))#VarTail→(Expr)
13 # ExprTail)Expr(id))#
14 # ExprTail))Expr((id))#Expr→(Expr)
15 # ExprTail))Exprid))#
16 # ExprTail))ExprTailVarid))#Exp→VarExprTai
17 # ExprTail))ExprTailVarTailidid))#Var→idVarTail
18 # ExprTail))ExprTailVarTail))#
19 # ExprTail))ExprTail))#VarTail→ε
20 # ExprTail))))#ExprTail→ε
21 # ExprTail))#
22 # ExprTail # ExprTail→ε
23 # # 分析成功
2.对下面的文法(G):
E->TE’
E’->+E|ε
T->FT’
T’->T|ε
F->PF’
F’->*F’|ε
P->(E)|A|B|^
(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集
(2)证明这个文法是LL(1)的
(3)构造它的预测分析表。
解:
考核:给出自然语言描述的规则要求,可用正规式、NFA描述该规则。
(1) C语言的标识符;
(2) 以01结尾的二进制数串;
(3) 含有子串010的所有二进制数串;
(4) 包含奇数个1或奇数个0的二进制串;
(5) 不包含字串abb的由a和b组成的符号串的全体。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务