1、c. 中间代码:是一种含义明确,便于处理的记号系统,它通常独立于具体的硬件。d. 遍:就是对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。e. 上下文无关文法(CFG):它所定义的语法范畴(或语法单位)完全独立于这种范畴可能出现的环境之外,不宜描述自然语言 。自然语言中,句子和词等往往与上下文紧密相关f. LL(K)分析法:第一个L表示从左到右扫描输入串,第二个L表示最左推导,K表示分析时每一步需要向前查看K个符号。g. LR分析法:L表示从左到右扫描输入串,R表示构造一个最右推导的逆过程。h. 算符优先法:就是定义算符之间的某种优先关系,借助于这种
2、关系寻找“可归约串”和进行归约。i. 属性文法:是在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“值“(称为属性),对于文法的每个产生式都配备了一组属性的计算规则(称为语义规则)。3.有哪些存储分配策略,并叙述何时用何种存储分配策略?答:有静态与动态存储分配策略。动态的存储分配策略包括栈式动态分配策略与堆式动态分配策略。 静态分配策略在编译时对所有数据对象分配固定的存储单元,且在运行时始终保持不变。栈式动态分配策略在运行时把存储器作为一个栈进行管理,运行时,每当调用一个过程,它所需要的存储空间就动态地分配于栈顶,一旦退出,她所占空间就予以释放。堆式动态分配策略在运行
3、时把存储器组织成堆结构,以便用户关于存储空间的申请与归还(回收),凡申请者从堆中分给一块,凡释放者退回给堆。4.编译过程中可进行的优化如何分类?最常用的代码优化技术有哪些?根据优化涉及范围与程序范围可以分为:局部优化,循环优化和全局优化。最常用的代码优化技术有:删除公共子表达式,复写传播,删除无用代码,代码外提,强度削弱和删除归纳变量。5.一个编译程序的代码生成要着重考虑哪些问题?代码生成器的设计要着重考虑目标代码的质量问题,而衡量目标代码的质量主要从占用空间和执行效率两个方面综合考虑。【代码生成要着重考虑两个问题:1).如何使生成的目标代码较短 2.)如何充分利用计算机的寄存器。(减少目标代
4、码中访问存储单元的次数。)这两个问题都直接影响目标代码的执行速度】6语言和文法的转换的例题(1). 文法G2:SbA,AaAa解:推导过程 SbAbaSbAbaAbaaSbAbaAbaa归纳得出:L(G2)=bann1(2). 文法G3:SAB,AaAa,BbBb推导过程 SABabSABaABaAbaaba2bSABabBabbab2归纳得出 L(G3)=ambnm,n1(3). 若已知文法G6(A): A c|Ab 请给出G6(A)的语言?解答:L(G6)=c,cb,cbb, 以c开头,后继若干个b(4). 若已知文法G8(S):SaSBE SaBE EBBE aBab bBbb bEbe
5、 eEee请给出G8(S)的语言? SaSBE SaaBEBE (SaBE)SaaBBEE (EBBE)SaabBEE (aBab)SaabbEE (bBbb)SaabbeE (bEbe)Saabbee (eEee)L(G8)= anbnen | n1, 上下文有关文法(5)给出生成下述语言的上下文无关文法:(1) anbnambm| n,m=0(2) 1n0m1m0n| n,m G1(S) SAA AaAb| G2(S) S1S0|A A0A1|7.有限自动机(1)DFA举例 DFA M = (0,1,2,3,a,b,f,0,3)f定义如下: f(0,a)=1 f(0,b)=2 f(1,a)
6、=3 f(1,b)=2 f(2,a)=1 f(2,b)=3 f(3,a)=3 f(3,b)=3 (2). 证明t=baab被下图的DFA所接受对于*中的任何字,若存在一条从初态到某一终态的通路,且这条通路上所有弧的标记符连接成的字等于,则称为DFA M所识别(或接受)证法一:a,b baab*f(S,baab) = f(f(S,b),aab) = f(V,aab) = f(f(V,a),ab) = f(U,ab) = f(f(U,a),b) = f(Q,b) = Q。 Q属于终态,故得证证法二:根据上述状态转换图,可以构造确定有限自动机DFA MS,U,V,Q,a,b,FM,S,Q其中,FM
7、是DFA M的状态转换函数,定义如下:FM (S,a)U FM (S,b)VFM (U,a)Q FM (U,b)VFM (V,a)U FM (V,b)QFM (Q,a)Q FM (Q,b)Q由题意可知:对于tbaab, DFA M存在一条经过S、V、U、Q和Q的通路,使得该通路上所有弧的标记符连接成的字等于t因此,t 被DFA M所接受(2):下图是一个NFA的状态转换图,请将其转化为一个DFA。 采用NFA确定化算法(或子集法)。状态集合I的-闭包表示为-closure(I)。状态集I中任何状态S经任意条弧而能到达的状态集S-closure(I)。状态集合I的a弧转换表示为move(I,a)
8、,定义为状态集合J,其中:J是所有那些可从I中的某一状态经过一条a弧而到达的状态的全体。 Ia = move(I,a) = -closure(J)。因此得出上表 。根据上述NFA的状态转换图及其确定化过程,可以构造与它等价的DFA M。DFA MS,A,B,C,D,E,F,a,b,FM,S,C,D,E,F这个DFA M的状态转换图见下图所示。 其中 S=i,1,2 A=1,2,3 B=1,2,4C=1,2,3,5,6,f D=1,2,4,5,6,f E=1,2,4,6,f F=1,2,3,6,fFM 是DFA M的状态转换函数,定义如下:FM (S,a)A FM (S,b)B FM (A,a)
9、C FM (A,b)BFM (B,a)A FM (B,b)D FM (C,a)C FM (C,b)EFM (D,a)F FM (D,b)D FM (E,a)F FM (E,b)DFM (F,a)C FM (F,b)E8语法分析1文法GV: VN | NE EV | V+E Ni 是否为LL(1)文法?若不是,如何改造成LL(1)文法?LL(1)文法的基本条件是不含左递归和回溯(公共左因子),而GV中含有回溯,所以先消除回溯得到文法GV: GV: VNV V|EV EVE E|+EE Ni由LL(1)文法的充要条件可证 GV是LL(1)文法2.文法Gs: SBA ABS|d BaA|bS|c证明
10、文法G是LL(1)文法 ,构造LL(1)分析表,写出句子adccd的分析过程一个LL(1)文法的充要条件是对每一个非终结符A的任何两个不同产生式A|,有下面的条件成立:FIRST()FIRST()=, 若*, 则有FIRST()FOLLOW(A)=对于文法Gs:FIRST集FIRST(B)=a, b, c; FIRST(A)=a, b, c, d;FIRST(S)=a, b, c。FOLLOW集 FOLLOW(S)=#对SBA有 FIRST(A)加入FOLLOW(B),即FOLLOW(B)=a, b, c, d 对ABS有FIRST(S)加入FOLLOW(B),即FOLLOW(B)=a, b,
11、 c, d 对BaA有FOLLOW(B)加入FOLLOW(A),即FOLLOW(A)=a, b, c, d 对BbS有FOLLOW(B)加入FOLLOW(S),即FOLLOW(S)=#, a, b, c, d 由ABS|d得FIRST(BS) FIRST(d) = a, b, c d = 由BaA|bS|c得FIRST(aA)FIRST(bS)FIRST(c)=abc= 由于文法Gs不存在形如 的产生式,故无需求解形如FIRST()FOLLOW(A)的值也即,文法GS是一个LL(1)文法 由Gs:SBA ABS|d BaA|bS|c的FIRST(B)=a, b, c; FOLLOW(B)=a,
12、 b, c, d ;FIRST(A)=a, b, c, d; FOLLOW(A)=a, b, c, d ; FOLLOW(S)=#, a, b, c, d 可构造LL(1)预测分析表如下:abcd#SS-BAAA-BSBB-aAbS在分析表的控制下,句子adccd的分析过程如下:3对于文法G(E):ETE E+TE | TFTT*FT | F(E) | i 构造每个非终结符的FIRST和FOLLOW集合FIRST(E) = (, i FOLLOW(E) = ), # FIRST(E)=+, FOLLOW(E)= ), # FIRST(T) = (, i FOLLOW(T) = +, ), #
13、FIRST(T)=*, FOLLOW(T)= +, ), # FIRST(F) = (, i FOLLOW(F) = *, +, ), #4已知文法GS:S eT | RT T DR | R dR | D a | bd构造该文法的LL(1)分析表。FIRST(S), FIRST(T), FIRST(R), FIRST(D)FOLLOW(S),FOLLOW (T),FOLLOW (R),FOLLOW (D)LL(1)分析表FIRST(S) = a, b, d, e, FOLLOW(S) = # FIRST(T) = a, b, FOLLOW(T) = # FIRST(R) = d, FOLLOW
14、(R) = a, b, # FIRST(D) = a, b FOLLOW(D) = d, # 该文法的LL(1)分析表如下:eSRTSeTTTDRRDDaDbd5 例:文法GE:E E+T |T T T*F | F F (E) | id 考虑文法GE上的句子id1+id2*id3 。给出其最右推导和分析树,并根据分析树指出句子中的短语、直接短语和句柄从E1推导可得到id1+id2*id3id1+id2*id3是句型id1+id2*id3相对于E1的短语id1+id2不是句型id1+id2*id3中相对于任何非终结符的短语因为找不到任何一个非终结符,它的子树中的所有叶子构成id1+id2短语 以
15、非终结符为根的子树中所有从左到右排列的叶子 E1 E2+id2*id3 T2+id2*id3 F1+id2*id3 id1+id2*id3id1是相对于非终结符E2、T2和F1的短语相对于F1的直接短语,也是句柄6.例4.2 文法: EET | T TT*F | F F(E) | i经消去直接左递归后变成: ETE E+TE | TFT T*FT | F(E) | i7.例: 对于文法G(E)ETE E+TE | TFT T*FT | F(E) | i 构造每个非终结符的FIRST和FOLLOW集:FIRST(E) = (, i FOLLOW(E) = ), # FIRST(E)=+, FOL
16、LOW(E)= ), # FIRST(T) = (, i FOLLOW(T) = +, ), # FIRST(T)=*, FOLLOW(T)= +, ), # FIRST(F) = (, i FOLLOW(F) = *, +, ), #TFT; T*FT | ; FOLLOW(T) FOLLOW(F) 8.例: ETE E+TE | TFT T*FT | F(E) | i 构造每个非终结符的FIRST和FOLLOW集合:FIRST(E) = (, i FOLLOW(E) = ), # FIRST(E)=+, FOLLOW(E)= ), # FIRST(T) = (, i FOLLOW(T) =
17、 +, ), # FIRST(T)=*, FOLLOW(T)= +, ), # FIRST(F) = (, i FOLLOW(F) = *, +, ), #9.文法GV:VN | NE EV | V+E Ni由LL(1)文法的充要条件可证:GV是LL(1)文法11.已知文法GS:S eT | RT T DR | R dR | D a | bdFOLLOW(S),FOLLOW (T),FOLLOW (R),FOLLOW (D) LL(1)分析表FIRST(S) = a, b, d, e, FOLLOW(S) = # FIRST(T) = a, b, FOLLOW(T) = # FIRST(R)
18、= d, FOLLOW(R) = a, b, # FIRST(D) = a, b FOLLOW(D) = d, # 9。中间语言形式常用的中间语言:a.后缀式表示法 b.图表示法:DAG 抽象语法树三地址代码:三元式 四元式 间接三元式1.abc+*等价a*(b+C)表达式 x+yz a0 (8+z) 3 的逆波兰表示为 xy+za08z+3表达式A(CD)的逆波兰表示为 ACD 表达式a b c (b x=0 c) 的逆波兰表示为 abcbx0=c 表达式 (AB)(CDE)的逆波兰表示为 ABCDE 一个带有四个域的记录结构,这四个域分别称为op, arg1, arg2及result例:
19、a:=b*-c+b*-c 的四元式 op arg1 arg2 result(0) uminus c T1(1) * b T1 T2(2) uminus c T3(3) * b T3 T4(4) + T2 T4 T5(5) := T5 a 2.例:=b*-c+b*-c 的三元式三个域:op、arg1和arg2 op arg1 arg2(0) uminus c (1) * b (0)(2) uminus c (3) * b (2)(4) + (1) (3)(5) assign a (4)3.例如,语句 X:=(A+B)*C;Y:=D(A+B)的间接三元式表示如右图4表达式 -a+b*c+d+(e*
20、f)/d*e,如果优先级由高到低依次为-、+、*、/,且均为左结合,则其后缀式为 a-b+cd+ef*+*de*/5.如果优先级由高到低依次为-、+、*、$(乘幂),且均为右结合,则表达式2+3-2+2*2*1$2$3-3-2+1的后缀式为 232-2+21*2332-1+$6.如果某表达式的后缀式为ab+cd+*,则其中缀形式的表达式为 (a+b) * (c+d)7.请将表达式-(a+b)*(c+d)-(a+b)分别表示成三元式、间接三元式和四元式序列 三元式 间接三元式 (1) (+ a, b) 间接三元式序列 间接码表 (2) (+ c, d) (1) (+ a, b)(1) (3) (
21、* (1), (2) (2) (+ c, d)(2) (4) (- (3), /) (3) (* (1), (2) (3) (5) (+ a, b) (4) (- (3), /) (4)(6) (- (4), (5) (5) (- (4), (1) (1)(5) 四元式 (1) (+, a, b, t1) (2) (+, c, d, t2) (3) (*, t1, t2, t3) (4) (-, t3, /, t4) (5) (+, a, b, t5) (6) (-, t4, t5, t6) 必考题:构造一个DFA,它接收=a,b上所有满足下述条件的字符串:字符串中的每个a都有至少有一个b直接跟在其右边。由题意可得其正规式为(b*abb*)*,画出相应的DFM.仅供参考,如有什么不对的地方尽请谅解
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1