搜索
您的当前位置:首页南京信息工程大学滨江学院林美华《编译原理》期末复习完整版整理

南京信息工程大学滨江学院林美华《编译原理》期末复习完整版整理

来源:世旅网
考试题型:20分选择题,80分简答设计。

考试内容:第三章零碎知识点多,第四章一个大题,第五章一个大题,第六章一个大

题。考试题目均来自书本的例题、以及上课讲过的课后习题。

书后习题答案(讲过的部分):

第一章(只讲过第4题,其他防止出选择):

1. 解释下列术语:编译程序,源程序,目标程序,编译程序的前端,后端和遍。 答:编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。

源程序:源语言编写的程序称为源程序。 目标程序:目标语言书写的程序称为目标程序。

编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。

后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。

遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 2. 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程 序的总体结构图。

答:一个典型的编译程序通常包含 8 个组成部分,它们是:词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下:

词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。

语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。 目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译

1

程序具有的表格管理功能。

错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误进行适当的校正(修复),目的是使编译程序能够继续向下进行分析和处理。

源程序

目标程序

注意:如果问编译程序有哪些主要构成成分,只要回答六部分就可以。如果搞不清楚,就回答八部分。

3. 何谓翻译程序、编译程序和解释程序?它们三者之间有何种关系?

答:翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程序和汇编程序等。

编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编写的目标程序的翻译程序。

解释程序是解释、执行高级语言源程序的程序。解释方式一般分为两种:一种方式是,源程序功能的实现完全由解释程序承担和完成,即每读出源程序的一条语句的第一个单词,则依据这个单词把控制转移到实现这条语句功能的程序部分,该部分负责完成这条语句的功能的实现,完成后返回到解释程序的总控部分再读人下一条语句继续进行解释、执行,如此反复;另一种方式是,一边翻译一边执行,即每读出源程序的一条语句,解释程序就将其翻译成一段机器指令并执行之,然后再读人下一条语句继续进行解释、执行,如此反复。无论是哪种方式,其加工结果都是源程序的执行结果。目前很多解释程序采取上述两种方式的综合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行中间代码程序,最后得到运行结果。

广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同,解释程序是边翻译(解释)边执行,不产生目标代码,输出源程序的运行结果。而编译程序只负责把源

2

程序翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来完成,即只翻译不执行。

4. 对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。

(1)else 没有匹配的if; (2)数组下标越界; (3)使用的函数没有定义; (4)在数中出现非数字字符。

答案:(1)语法分析 (2)语义分析 (3)语法分析 (4)词法分析

第二章(略,因为没讲)

第三章(知识点零碎,个人估计选择题多在此,也有可能出个简答题,毕竟大题共80分)

1. 文法G=({A,B,S},{a,b,c},P,S)其中P 为:

S→Ac|aB A→ab B→bc

写出L(G[S])的全部元素。 答案:L(G[S])={abc} 2. 文法G[N]为:

N→D|ND

D→0|1|2|3|4|5|6|7|8|9 G[N]的语言是什么?

答:G[N]的语言是V+。V={0,1,2,3,4,5,6,7,8,9}

N=>ND=>NDD.... =>NDDDD...D=>D......D 或者:允许0 开头的非负整数?

3. 为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。 答:G[S]:

S->S+D|S-D|D

D->0|1|2|3|4|5|6|7|8|9 4. 已知文法G[Z]:

(1)Z::=a Z b (2)Z::=a b

写出L(G[Z])的全部元素。

答:Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbb

L(G[Z])={anbn|n>=1}

3

5. 写一文法,使其语言是偶正整数的集合。 要求:

(1) 允许0 打头; (2)不允许0 打头。

答:(1)允许0 开头的偶正整数集合的文法

E→NT|D T→NT|D N→D|1|3|5|7|9 D→0|2|4|6|8

(2)不允许0 开头的偶正整数集合的文法 E→NT|D T→FT|G N→D|1|3|5|7|9 D→2|4|6|8 F→N|0 G→D|0 6. 已知文法G:

<表达式>::=<项>|<表达式>+<项> <项>::=<因子>|<项>*<因子> <因子>::=(<表达式>)|i 试给出下述表达式的推导及语法树。 (5)i+(i+i) (6)i+i*i 答:(5) <表达式>

=><表达式>+<项> =><表达式>+<因子> =><表达式>+(<表达式>) =><表达式>+(<表达式>+<项>) =><表达式>+(<表达式>+<因子>) =><表达式>+(<表达式>+i) =><表达式>+(<项>+i) =><表达式>+(<因子>+i) =><表达式>+(i+i) =><项>+(i+i) =><因子>+(i+i) =>i+(i+i)

4

(6) <表达式> =><表达式>+<项> =><表达式>+<项>*<因子> =><表达式>+<项>*i =><表达式>+<因子>*i =><表达式>+i*i =><项>+i*i =><因子>+i*i =>i+i*i

7. 证明下述文法G[〈表达式〉]是二义的。

〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉 〈运算符〉∷=+|-|*|/

答:可为句子a+a*a 构造两个不同的最右推导:

最右推导1 〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉 =>〈表达式〉〈运算符〉a =>〈表达式〉* a

=>〈表达式〉〈运算符〉〈表达式〉* a =>〈表达式〉〈运算符〉a * a =>〈表达式〉+ a * a =>a + a * a

最右推导2 〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉 =>〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉 =>〈表达式〉〈运算符〉〈表达式〉〈运算符〉 a =>〈表达式〉〈运算符〉〈表达式〉 * a =>〈表达式〉〈运算符〉a * a =>〈表达式〉+ a * a =>a + a * a 8. 文法G[S]为:

S→Ac|aB A→ab B→bc

该文法是否为二义的?为什么?

答:对于串abc,有:(1) S=>Ac=>abc ; (2) S=>aB=>abc

即存在两不同的最右推导。所以,该文法是二义的。

或者:对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。5

9. 考虑下面上下文无关文法:

S→SS*|SS+|a

(1)表明通过此文法如何生成串a a+a*,并为该串构造语法(推导)树。 (2)G[S]的语言是什么?

答:(1)此文法生成串aa+a*的最右推导如下:

S=>SS*=>SS*=>Sa*=>SS+a*=>Sa+a*=>aa+a* 构造语法(推导)树如右图:

(2)该文法生成的语言是:*和+的后缀表达式,即逆波兰式。

10. 文法S→S(S)S|ε

(1) 生成的语言是什么?

(2) 该文法是二义的吗?说明理由。 答:(1)嵌套的括号

(2)是二义的,因为对于()()可以构造两棵不同的语法树。 11. 令文法G[E]为:

E→T|E+T|E-T T→F|T*F|T/F F→(E)|i

证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。 答:此句型对应语法树如右,故为此文法一个句型。

或者:因为存在推导序列: E=>E+T=>E+T*F,所以 E+T*F 是此文法的一个句型。

此句型相对于E 的短语有:E+T*F;相对于T 的短语有T*F

直接短语为:T*F 句柄为:T*F

12. 略(因为没给答案)

6

13. 一个上下文无关文法生成句子abbaa 的推导树如下:

(1)给出串abbaa 最左推导、最右推导。 (2)该文法的产生式集合P 可能有哪些元素? (3)找出该句子的所有短语、直接短语、句柄。

答:(1)串abbaa 最左推导:S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa

最右推导:S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Abbaa=>abbaa (2)产生式有:S→ABS |Aa|ε A→a B→SBB|b 可能元素有:ε aa ab abbaa aaabbaa …… (3)该句子的短语有: a 是相对A 的短语 ε 是相对S 的短语 b 是相对B 的短语 εbb 是相对B 的短语 aa 是相对S 的短语 aεbbaa 是相对S 的短语 直接短语有:a ε b 句柄是:a

第四章(一个大题目)

1. 构造下列正规式相应的DFA.

(1) 1(0|1) *101

(2) 1(1010*|1(010)*1)*0 (3) a((a|b)*|ab*a)*b (4) b((ab)*|bb)*ab 答:(1) 先构造NFA:

用子集法将NFA 确定化

除X,A 外,重新命名其他状态,令AB 为B、AC 为C、ABY 为D,因为D 含有Y(NFA的终态),所以D 为终态。

7

DFA 的状态图::

(2)先构造NFA:

用子集法将NFA 确定化

8

将T0、T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14重新命名,分别用0、1、2、3、4、5、6、7、8、9、10、11、12、13、14 表示。因为2、7、8、10、12 中含有Y,所以它们都为终态。

9

用子集法将NFA 确定化

将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5 表示。因为3、5 中含有Y,所以它们都为终态。

DFA 的状态图:

10

(4) 先构造NFA:

用子集法将NFA 确定化:

将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5 表示。因为4 中含有Y,所以它为终态。

DFA 的状态图:

2. 已知NFA=({x,y,z},{0,1},M,{x},{z}),其中:M(x,0)={z},M(y,0)={x,y},

11

M(z,0)={x,z},M(x,1)={x},M(y,1)=φ,M(z,1)={y},构造相应的DFA。 答:先构造其矩阵

用子集法将NFA 确定化:

将x、z、xz、y、xy、xyz 重新命名,分别用A、B、C、D、E、F 表示。因为B、C、F中含有z,所以它为终态。

3. 将下图确定化:

12

答:用子集法将NFA 确定化:

重新命名状态子集,令VQ 为A、QU 为B、VZ 为C、V 为D、QUZ 为E、Z 为F。

DFA 的状态图:

4. 将下图的(a)和(b)分别确定化和最小化:

答:初始分划得

Π0:终态组{0},非终态组{1,2,3,4,5}

对非终态组进行审查: {1,2,3,4,5}a ⊂{0,1,3,5}

而{0,1,3,5}既不属于{0},也不属于{1,2,3,4,5}

13

∵{4} a ⊂{0},所以得到新分划 Π1:{0},{4},{1,2,3,5}

对{1,2,3,5}进行审查: ∵{1,5} b ⊂{4}

{2,3} b ⊂{1,2,3,5},故得到新分划 Π2:{0},{4},{1, 5},{2,3}

{1, 5} a ⊂{1, 5}

{2,3} a ⊂{1,3},故状态2 和状态3 不等价,得到新分划 Π3:{0},{2},{3},{4},{1, 5}

这是最后分划了 最小DFA:

5.构造一个DFA,它接收Σ={0,1}上所有满足如下条件的字符串:每个1 都有0 直接跟在右边。并给出该语言的正规式。

答:按题意相应的正规表达式是(0*10)*0*,或0*(0 | 10)*0* 构造相应的DFA,首先构造NFA 为:

用子集法确定化:

重新命名状态集:

14

DFA 的状态图(左图):

可将该DFA 最小化:终态组为{1,2,4},非终态组为{3},{1,2,4}0 {1,2,4},{1,2,4}1 {3},所以1,2,4 为等价状态,可合并(上方右图)。 6. 设无符号数的正规式为θ:

θ=dd*|dd*.dd*|.dd*|dd*10(s|ε)dd* |10(s|ε)dd*|.dd*10(s|ε)dd* |dd*.dd*10(s|ε)dd*

化简θ,画出θ的DFA,其中d={0,1,2,…,9},s={+,-} 答:先构造NFA:

用子集法将NFA 确定化:

15

将XA、B、FG、A、C、G、H、DE、E、Y 重新命名,分别用0、1、2、3、4、5、6、7、8、9 表示。终态有0、3、4、6、9。

DFA 的状态图:

7.给文法G[S]:

S→aA|bQ A→aA|bB|b B→bD|aQ Q→aQ|bD|b D→bB|aA E→aB|bF F→bD|aE|b

构造相应的最小的DFA。 答:先构造其NFA:

16

用子集法将NFA 确定化:

将S、A、Q、BZ、DZ、D、B 重新命名,分别用0、1、2、3、4、5、6 表示。因为3、4 中含有z,所以它们为终态。

DFA 的状态图:

令P0=({0,1,2,5,6},{3,4})用b进行分割: P1=({0,5, 6},{1,2},{3,4})再用b进行分割:

17

P2=({0},{5, 6},{1,2},{3,4})再用a、b 进行分割,仍不变。 再令{0}为A,{1,2}为B,{3,4}为C,{5,6}为D。 最小化为:

8.给出下述文法所对应的正规式:

S→0A|1B A→1S|1 B→0S|0

答:解方程组S 的解:

S=0A|1B A=1S|1 B=0S|0

将A、B 产生式的右部代入S 中 S=01S|01|10S|10=(01|10)S|(01|10) 所以:S= (01|10)*(01|10)

9.将下图的DFA 最小化,并用正规式描述它所识别的语言。

答:令P0=({1,2,3,4,5},{6,7})用b进行分割:

P1=({1,2},{3,4},{5},{6,7})再用a、b、c、d进行分割,仍不变。 再令{1,2}为A,{3,4}为B,{5}为C,{6,7}为D。 最小化为:r=b*a(c|da)*bb*=b*a(c|da)*b+

18

第五章(一个大题)

1. 对文法G[S]

S→a|∧|(T) T→T,S|S

(1) 给出(a,(a,a))和(((a,a),∧,(a)),a)的最左推导。

(2) 对文法G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。 (3) 经改写后的文法是否是LL(1)的?给出它的预测分析表。 (4) 给出输入串(a,a)#的分析过程,并说明该串是否为G 的句子。 答:(1)

(2) 改写文法为:

0) S→a

19

对(a,(a,a)的最左推导为: S=>(T) =>(T,S) =>(S,S) =>(a,S) =>(a,(T)) =>(a,(T,S)) =>(a,(S,S)) =>(a,(a,S)) =>(a,(a,a)) 对(((a,a),∧,(a)),a) 的最左推导为: S => (T) => (T,S) => (S,S) => ((T),S) => ((T,S),S) => ((T,S,S),S) => ((S,S,S),S) => (((T),S,S),S) => (((T,S),S,S),S) => (((S,S),S,S),S) => (((a,S),S,S),S) => (((a,a),S,S),S) => (((a,a),∧,S),S) => (((a,a),∧,(T)),S) => (((a,a),∧,(S)),S) => (((a,a),∧,(a)),S) => (((a,a),∧,(a)),a) 1) S→∧ 2) S→( T ) 3) T→S N 4) N→, S N 5) N→ε

对左部为N 的产生式可知: FIRST (→, S N)={,} FIRST (→ε)={ε} FOLLOW (N)={)}

由于SELECT(N →, S N)∩SELECT(N →ε) ={,}∩ { )}=¢ 所以文法是LL(1)的。

预测分析表(Predicting Analysis Table)

也可由预测分析表中无多重入口判定文法是LL(1)的。 (3) 对输入串(a,a)#的分析过程为:

可见输入串(a,a)#是文法的句子。 3. 已知文法G[S]:

20

S→MH|a H→LSo|ε K→dML|ε L→eHf M→K|bLM

判断G 是否是LL(1)文法,如果是,构造LL(1)分析表。 答:文法展开为:

0) S→M H 1) S→a 2) H→L S o 3) H→ε 4) K→d M L 5) K→ε 6) L→e H f 7) M→K 8) M→b L M

对相同左部的产生式可知:

SELECT(S→M H)∩SELECT(S→a) ={ d,b ,e,#,o }∩ { a }=¢ SELECT(H→L S o)∩SELECT(H→ε) ={ e }∩ { #,f,o }=¢ SELECT(K→d M L)∩SELECT(K→ε) ={ d }∩ { e,#,o }=¢ SELECT(M→K)∩SELECT(M→b L M) ={ d,e,#,o }∩ { b }=¢ 所以文法是LL(1)的。 预测分析表:

由预测分析表中无多重入口也可判定文法是LL(1)的。

21

7. 对于一个文法若消除了左递归,提取了左公共因子后是否一定为LL(1)文法?试对下面文法进行改写,并对改写后的文法进行判断。

(1)A→baB|ε B→Abb|a (2) A→aABe|a B→Bb|d (3) S→Aa|b A→SB B→ab

答:(1) 先改写文法为:

0) A→baB 1) A→ε 2) B→baBbb 3) B→bb 4) B→a

再改写文法为:

0) A→baB 1) A→ε 2) B→bN 3) B→a 4) N→aBbb 5) N→b

预测分析表:

由预测分析表中无多重入口判定文法是LL(1)的。 (2)对文法提取左公共因子和消除左递归后文法变为: 0) A→a N 1) N→A B e 2) N→ε 3) B→d N1 4) N1→b N1 5) N1→ε

22

对相同左部的产生式可知:

SELECT(N→A B e)∩SELECT(N→ε) ={ a }∩ {#,d }=¢ SELECT(N1→b N1)∩SELECT(N1→ε) ={ b }∩ { e }=¢ 所以文法是LL(1)的。

预测分析表(Predicting Analysis Table)

也可由预测分析表中无多重入口判定文法是LL(1)的。 (3)第1 种改写:

用A 的产生式右部代替S 的产生式右部的A 得: S→SBa|b B→ab

消除左递归后文法变为: 0) S→b N 1) N→B a N 2) N→ε 3) B→a b

对相同左部的产生式可知:

SELECT(N→B a N)∩SELECT(N→ε) ={ a }∩ {# }=¢ 所以文法是LL(1)的。

预测分析表(Predicting Analysis Table)

也可由预测分析表中无多重入口判定文法是LL(1)的。 第2 种改写:

23

用S 的产生式右部代替A 的产生式右部的S 得: S→Aa|b A→AaB|bB B→ab

消除左递归后文法变为: 0) S→A a 1) S→b 2) A→b B N 3) N→a B N 4) N→ε 5) B→a b

对相同左部的产生式可知:

SELECT(S→A a)∩SELECT(S→b) ={ b }∩ { b }={ b }≠¢ SELECT(N→a B N)∩SELECT(N→ε) ={ a }∩ { a }={ a }≠¢ 所以文法不是LL(1)的。 预测分析表:

也可由预测分析表中含有多重入口判定文法不是LL(1)的。

第六章(一个大题目)

1. 法G[S]为:

S→a|∧|(T) T→T,S|S

(1) 计算G[S]的FIRSTVT 和LASTVT。

(2) 构造G[S]的算符优先关系表并说明G[S]是否为算符优先文法。 (3) 计算G[S]的优先函数。

(4) 给出输入串(a,a)#和(a,(a,a))#的算符优先分析过程。

24

答:文法展开为:

S→a S→∧ S→(T) T→T,S T→S

(1) FIRSTVT - LASTVT 表:

(2) 算符优先关系表:

表中无多重人口所以是算符优先(OPG)文法。 友情提示:记得增加拓广文法 S`→#S#,所以# (3)对应的算符优先函数为:

FIRSTVT(S),LASTVT(S)

#。

(4)对输入串(a,a)#的算符优先分析过程为

25

Success!

对输入串(a,(a,a))# 的算符优先分析过程为:

Success! 2. 已知文法G[S]为:

S→a|∧|(T) T→T,S|S

(1) 给出(a,(a,a))和(a,a)的最右推导,和规范归约过程。

(2) 将(1)和题1 中的(4)进行比较给出算符优先归约和规范归约的区别。 答:(1)

(a,(a,a))的规范归约过程:

(a,a)的最右推导过程为:

S=> (T) => (T,S) => (T,a) => (S,a) => (a,a)

(a,(a,a))的最右推导过程为:

S => (T) => (T,S) => (T,(T)) => (T,(T,S)) => (T,(T,a)) => (T,(S,a)) => (T,(a,a)) => (S,(a,a)) => (a,(a,a))

26

(a,a)的规范归约过程:

(2)算符优先文法在归约过程中只考虑终结符之间的优先关系从而确定可归约串,而与非终结符无关,只需知道把当前可归约串归约为某一个非终结符,不必知道该非终结符的名字是什么,因此去掉了单非终结符的归约。

规范归约的可归约串是句柄,并且必须准确写出可归约串归约为哪个非终结符。 3. 有文法G[S]:

S→V

27

V→T|ViT T→F|T+F F→)V*|(

(1) 给出(+(i(的规范推导。

(2) 指出句型 F+Fi(的短语,句柄,素短语。

(3) G[S]是否为OPG?若是,给出(1)中句子的分析过程。

答:(1)S=>V=>ViT=>ViF=>Vi(=>Ti(=>T+Fi(=>T+(i(=>F+(i(=>(+(i( (2)句型F+Fi(的语法树(见右图): 短语:F,F+F,(,F+Fi( 句柄:F 素短语:( (3)FIRSTVT 和LASTVT

算符优先关系

因为该文法是OP,同时任意两个终结符的优先关系唯一,所以该文法为OPG。 (+(i(的分析过程

28

4. 文法G[S]为:

S→S;G|G G→G(T)|H H→a|(S) T→T+S|S

(1)构造G[S]的算符优先关系表,并判断G[S]是否为算符优先文法。 (2)给出句型a(T+S);H;(S)的短语、句柄、素短语和最左素短语。 (3)给出a;(a+a)和(a+a)的分析过程,说明它们是否为G[S]的句子。 (4)给出(3)中输入串的最右推导,分别说明两输入串是否为G[S]的句子。 (5)由(3)和(4)说明了算符优先分析的哪些缺点。 (6)算符优先分析过程和规范归约过程都是最右推导的逆过程吗? 答:(1)构造文法G[S]的算符优先关系矩阵:

在上表中可看出终结符之间的优先关系是唯一的,或称G[S]的算符优先关系矩阵不含多重入口,因此,G[S]是一个算符优先文法。 (2)

(3)对输入串(a+a)#的分析过程如下:

29

说明是它的句子。 (4)试用规范推导:

S⇒ G⇒H⇒(S)由此往下S 不可能推导出a+a,所以 (a+a)不是G[S]的句子。 (5)结果说明:由于算符优先分析法去掉了单非终结符之间的归约,尽管在分析过程中,当决定是否为句柄时采取一些检查措施,但仍难完全避免把错误的句子得到正确的归约。

(6)算符优先分析过程不是最右推导的逆过程。规范归约过程是最右推导的逆过程。

——By:南京信息工程大学滨江学院 12软件工程3班

2015年1月6日 星期二 晚九点

30

因篇幅问题不能全部显示,请点此查看更多更全内容

Top