文档视界 最新最全的文档下载
当前位置:文档视界 › 构造识别文法活前缀dfa的三种方法

构造识别文法活前缀dfa的三种方法

构造识别文法活前缀dfa的三种方法

1.直接构造法:将文法转化为dfa时,先构造出所有的nfa状态,然后逐个转化为dfa状态进行合并和化简,最终得到dfa。

2. 子集法:将文法转化为nfa时,通过将每个终结符和非终结符看作一个状态,构造出nfa状态。然后通过子集构造法将nfa状态转化为dfa状态。

3. LR分析法:通过对文法进行LR分析,可以得到一个LR分析表。该表中包含了所有的DFA状态和对应的转移符、移进动作以及归约动作。通过该表可以快速构造出DFA状态。

- 1 -

《编译原理》样卷及答案

一、简答题(每题4分,共24分) 1、构造一个文法G,使得:L(G)={(m )m|m>0} 解答:G[S]: s-> ()|(S) 2、构造一个正规式,它接受 ={0,1}上符合以下规则的字符串:串内有且只有2个1 的0、1字符串全体。 解答:0*10*10* 3、消除文法G[S]中的直接左递归和回溯 S→(L) | aS | a L→L,S | S 解答:S→(L) | aS' S'→S | ε L→S L' L'→,S L' | ε 4、文法G[S]是乔姆斯基几型文法? S → ABS | AB AB → BA A → 0 B → 1 解答:1型文法/上下文有关文法 5、按Thmopson算法构造与正则表达式(1*|0) * 等价的NFA。 解答:略 6、设计一个状态转换图,其描述的语言规则为:如果以a开头,则其后是由a、b组成的任意符号串;如果以b开头,则其后是至少包含一个a的由a、b组成的任意符号串。 解答:略 二、(本题10分)对于文法G[E]: E→ET+|T

T→TF* | F F→F^ | a (1) 给出句子FF^^*的最左推导和语法树; (2) 给出句子FF^^*的短语、直接短语和句柄。 解答: (1) 2分:句子FF^^*的最左推导 2分:句子FF^^*的语法树E=>T=>TF*=>FF*=>FF^*=>FF^^* (2) 3分:句子FF^^*的短语 FF^^*、FF^^*、F、F^、F^^ 2分:句子FF^^*的直接短语 F、F^ 1分:句子FF^^*的句柄 F 三、(本题15分)构造与下列NFA等价的最小化DFA。 解答:(1)10分:构造与NFA等价的DFA

编译原理大题

五、语法分析——自底向上分析法 已知文法G: EE+T E T TT*F TF F(E) Fi (1)求文法G中每个非终结符的First集和Follow集。 (2)构造文法G的SLR(1)预测分析表。(20分) 首先构造增广文法: SE EE+T E T TT*F TF F(E) Fi First(S)=First(E)=First(T)=First(F)={(,I) Follow(S)={#} Follow(E)={+,#,}} Follow(T)={+,},#,*} Follow(F)={+,},#,*} 状态Action Goto i + * ( ) # E T F 0 S5 S4 1 2 3 1 S6 Acc 2 r 2 S7 r 2 r 2 3 r 4 r 4 r 4 r4 4 S 5 S4 8 2 3 5 r 6 r 6 6 S5 9 3 7 S5 10 8 S6 S11 9 r 1 S7 r 1 r 1 10 r 3 r 3 r 3 r 3 11 r 5 r 5 r 5 r 5 注:识别可归前缀的DFA共12项。 词法分析——确定性有穷自动机 为以下字符集编写正规表达式,并构造与之等价的最简DFA(写出详细的具体过程):在字母表{a,b}上的包含偶数个a且含有任意数目b的所有字符串。(15分) (b*ab*ab*)* b a b 1 a 状态Action GOTO a b d e f $ S R T 0 S3 1 1 acc 2 r2 S 3 r2 r2 5 3 S6 S 4 2 4 r4 r4 r4 r4

5 S10 9 6 7 7 S8 8 r3 r3 r3 r3 9 r1 r1 r1 10 r6 S6 S4 r6 r6 11 11 S12 12 r5 r5 r5 五、语法分析——自底向上分析法 已知文法G: S’S S bRST S bR RdSa R e TfRa Tf (1)求文法G中每个非终结符的First集和Follow集。 (2)构造文法G的SLR(1)预测分析表。(20分) frist(s’)={b} follow(s’)={$} frist(s)={b} follow(s)={f,a, $} frist(R) ={d,e} follow( R )={a,b,f, $} frist(T)={t} follow (T)={a,f,#} 五、对下面的文法(15分) S->UTa|Tb T->S|Sc|d U->US|e 判断是否为LR(0),SLR(1),说明理由,并构造相应的分析表。 (1)拓广文法: (0)S’->S (1)S->UTa (2)S->Tb (3)T->S (4)T->Sc (5)T->d (6)U->US (7)U->e

第六七章 作业与习题参考答案

第七章 LR分析法 第1题已知文法 A→aAd|aAb|ε 判断该文法是否是SLR(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。 文法:A→aAd|aAb|ε 拓广文法为G′,增加产生式S′→A 若产生式排序为: 0 S' →A 1 A →aAd 2 A →aAb 3 A →ε 由产生式知: First (S' ) = {ε,a} First (A ) = {ε,a} Follow(S' ) = {#} Follow(A ) = {d,b,#} G′的LR(0)项目集族及识别活前缀的DFA如下图所示: 在I0中: A →.aAd和A →.aAb为移进项目,A →.为归约项目,存在移进-归约冲突,因此所给文法不是LR(0) 文法。 在I0、I2中: Follow(A) ∩{a}= {d,b,#} ∩{a}= 所以在I0、I2中的移进-归约冲突可以由Follow集解决,所以G是SLR(1)文法。 构造的SLR(1)分析表如下: 题目1的SLR(1)分析表

的分析过程 题目1对输入串ab# 第2题若有定义二进制数的文法如下: S→L.L|L L→LB|B B→0|1 (1) 试为该文法构造LR分析表,并说明属哪类LR分析表。 (2) 给出输入串101.110的分析过程。 解:文法: S→L.L|L L→LB|B B→0|1 拓广文法为G′,增加产生式S′→S 若产生式排序为: 0 S' →S 1 S →L.L 2 S →L

3 L →LB

4 L →B 5 B →0 6 B →1 由产生式知: First (S' ) = {0,1} First (S ) = {0,1} First (L ) = {0,1} First (B ) = {0,1} Follow(S' ) = {#} Follow(S ) = {#} Follow(L ) = {.,0,1,#} Follow(B ) = {.,0,1,#} G′的LR(0)项目集族及识别活前缀的DFA如下图所示: 在I2中: B →.0和B →.1为移进项目,S →L.为归约项目,存在移进-归约冲突,因此所给文法不是LR(0)文法。在I2、I8中: Follow(s) ∩{0,1}= { #} ∩{0,1}= 所以在I2、I8中的移进-归约冲突可以由Follow集解决,所以G是SLR(1)文法。 构造的SLR(1)分析表如下: 题目2的SLR(1)分析表 状态(State)Action Goto · 0 1 #S L B 0 1 S4 S5 acc 1 2 3 .

2005年编译原理试题A

一.选择题(60分,每小题2分,答案请填写在答题纸上) 1.编译程序是对( )。 A.汇编程序的翻译B.高级语言程序的解释执行 C.机器语言的执行D.高级语言的翻译 2.构造编译程序应掌握( )。 A.源程序B.目标语言 C.编译方法D.以上三项都是 3.编译程序绝大多数时间花在( )上。 A.出错处理B.词法分析 C.目标代码生成D.表格管理 4.编译技术中描述单词符号的形成规则的常用工具有()。 A.正规文法B.正规式 C.有穷自动机D.以上都是 5.编译技术中常用()描述程序语言的语义。 A.正规文法B.上下文无法文法 C.属性文法D.上下文有关文法 6.词法分析器的输出结果是( )。 A.单词的种别编码B.单词在符号表中的位置C.单词的种别编码和自身值D.单词自身值 7.以下( )不是DFA的组成部分。 A.有穷字母表B.初始状态集合 C.终止状态集合D.有限状态集合 8.正规式M1和M2等价是指( )。 A.Ml和M2的状态数相等 B.M1和M2的有向边条数相等 C.M1和M2所识别的语言集相等 D.M1和M2状态数和有向边条数相等

9. 下图所示的DFA M 接受的字集为( )。 A .以0开头的二进制数组成的集合 B ,以0结尾的二进制数组成的集合 C .含奇数个0的二进制数组成的集合 D .含偶数个0的二进制数组成的集合 10. 有文法G (S ): S ->aA| a |bC A ->aS | bB B ->aC | bA | b C ->aB | bS 则下列( )为L (G )中的句子。 A .a 100b 50ab 100 B .a 1000b 500aba C .a 500b 60aab 2a D .a 100b 40ab 10aa 11. 文法G[S]:S →xSx | y 所识别的语言是( )。 A .xyx B .(xyx)* C .x n yx n (n ≥0) D .x*yx* 12. 给定语言L 为:所有以0开头,后接零个或多个10组成的符号串的集合,则描 述它的正规文法G[S]应为( )。 A .S →0A A →10A |ε B .S →S10 | 0 C .S →0B | 0 B →1S D .以上都是 13. 如果文法G 是无二义的,则它的任何句子( )。 A .最左推导和最右推导对应的语法树必定相同 B .最左推导和最右推导对应的语法树可能不同 C .最左推导和最右推导必定相同 D .可能存在两个不同的最左推导,但它们对应的语法树相同 14. 以下文法( )是二义性文法。 A .G[E]:E →E+T|T T →T/F | F F →(E) | i B .G[D]:D →TL T →int | long | short L →id | L,id C .G[S]:S →if B then S S →if B then S else S S →A D .G[B]:B →AB | OB | not B | (B) | i rop i | i A →B and O →B or 15. 采用自上而下分析,必须( )。 A .消除左递归 B .消除右递归 1

编译原理 上海交通大学期末考试

上海交通大学期末考试 编译原理试题及答案 一、对于文法G[S] : S →1A | 0B | ε A →0S | 1AA B →1S | 0BB ⑴(3 分) 请写出三个关于G[S] 的句子; ⑵(4 分) 符号串11A0S 是否为G [S] 的句型?试证明你的结论。 ⑶(3 分) 试画出001B 关于G [S] 的语法树。 二、请构造一个文法,使其产生这样的表达式E :表达式中只含有双目运算符+ 、* ,且+ 的优先级高于* ,+ 采用右结合,* 采用左结合,运算对象只有标识符i ,可以用括号改变运算符优先级。要求给出该文法的形式化描述。 三、设有语言L={ α| α∈{0,1} + ,且α不以0 开头,但以00 结尾} 。 ⑴试写出描述L 的正规表达式; ⑵构造识别L 的DFA (要求给出详细过程,并画出构造过程中的NDFA 、DFA 的状态转换图,以及DFA 的形式化描述) 。 四、给定文法G[S] : S →AB A →a B | bS | c B →AS | d ⑴(6 分) 请给出每一个产生式右部的First 集; ⑵(3 分) 请给出每一个非终结符号的Follow 集; ⑶(8 分) 请构造该文法的LL(1) 分析表; ⑷(8 分) 什么是LL(1) 文法?该文法是LL(1) 文法吗?为什么? 五、给定文法G[S] : S →SaA|a A →AbS|b ⑴请构造该文法的以LR(0) 项目集为状态的识别规范句型活前缀的DFA 。 ⑵请构造该文法的LR(0) 分析表。 ⑶什么是LR(0) 文法?该文法是LR(0) 文法吗?为什么? ⑷什么是SLR(1) 文法?该文法是SLR(1) 文法吗?为什么? 六、给定下列语句: if a+b>c then x := a*(b-c) + (b*c-d)/e ⑴写出其等价的逆波兰表示; ⑵写出其等价的四元式序列。 七、已知下列C 语言程序: int * f() { int a = 100; return &a; } main() { int * i = f(); char a[] = “compiler”; printf(“the result is %d\n”, *i); }

LR(1)

LR(1)分析 本节介绍比SLR(1)功能更强的LR(1)分析法。 例如下列文法G′为: (0) S′→S (1) S→aAd (2) S→bAc (3) S→aec (4) S→bed (5)A →e 我们首先用S′→·S作为初态集的项目,然后用闭包函数和转换函数构造识别文法G′的识别活前缀的有限自动机DFA见P143如图7.11所示,可以发现在项目集I5和I7中存在移进和归约冲突。 I5:S→ae·c I7:S→be·d A→e· A→e· 而归约项目左部非终结符的FOLLOW(A)={c,d} 在I5中,FOLLOW(A)∩{c}={c,d}∩{c}≠ 在I7中,FOLLOW(A) ∩{d}={c,d}∩{d}≠ 因此I5,I7中冲突不能用SLR(1)方法解决。只能考虑用下面将要介绍的LR(1)方法解决。 由于用SLR(1)方法解决动作冲突时,对于归约项目A→α·,只要当前面临输入符为a∈FOLLOW(A)时,就确定采用产生式A→α进行归约,但是如果栈中的符号串为βα,归约后变为βA,再移进当前符a,则栈里变为βAa,而实际上βAa未必为文法规范句型的活前缀。 例如:在识别表达式文法的活前缀DFA中,(见图7.10)在项目集I2存在移进-归约冲突,即{E→T· T →T·*F}若栈顶状态为2,栈中符号为#T,当前输入符为‘)’,而‘)’属FOLLOW(E)中,这时按SLR(1)方法应用产生式E→T进行归约,归约后栈顶符号为#E,而再加当前符‘)’后,栈中为#E)不是表达式文法规范句型的活前缀。因此这个归约是多余的。因此可以看出SLR(1)方法虽然相对LR(0)有所改进,但仍然存在着多余归约,也说明SLR(1)方法向前查看一个符号的方法仍不够确切,LR(1)方法恰好是要解决SLR(1)方法在某些情况下存在的无效归约问题。 若[A→α·Bβ]∈项目集I,则[B→·γ](B→γ为一产生式)也包含在I中,不妨考虑,把FIRST(β)作为用产生式B→γ归约的搜索符,称为向前搜索符,作为归约时查看的符号集合,用以代替SLR(1)分析中的FOLLOW集,把此搜索符号的集合也放在相应项目的后面,这种处理方法即为LR(1)方法。 1. LR(1)项目集族的构造 构造LR(1)项目集的闭包函数CLOSURE(I)按如下方式构造: a) I 的任何项目都属于CLOSURE(I) b) 若有项目[A→α·Bβ,a ]属于CLOSURE(I), B→γ 是文法中的产生式,β∈V*,b∈FIRST(βa),则 [B→·γ,b]也属于CLOSURE(I)中。 c) 重复b)直到CLOSURE(I)不再增大为止。 例:已知拓展文法为: (0) S′→S (1) S→aAd

陇东学院《编译原理》练习题及答案

编译原理练习题答案 第一阶段 一、选择题(每个选择题 2 分,共 20 分) 1 .文法 G 产生的⑴ 的全体是该文法描述的语言。 A .句型 B. 终结符集 C. 非终结符集 D. 句子 2 .若文法 G 定义的语言是无限集,则文法必然是⑵ : A .递归的 B 前后文无关的 C 二义性的 D 无二义性的 3 . Chomsky 定义的四种形式语言文法中, 0 型文法又称为⑶ 文法; 1 型文法又称为⑷ 文法; 2 型语言可由⑸ 识别。 A .短语结构文法 B 前后文无关文法 C 前后文有关文法 D 正规文法 E 图灵机 F 有限自动机 G 下推自动机 4 .一个文法所描述的语言是⑹ ;描述一个语言的文法是⑺ 。 A .唯一的 B 不唯一的 C 可能唯一,好可能不唯一 5 .数组的内情向量中肯定不含有数组的⑻ 的信息 A.维数 B.类型 C.维上下界 D.各维的界差 6 .在下述的编译方法中,自底向上的方法有⑼ ,自顶向下的分析方法有⑽ 。 ①简单优先分析②算符优先分析③递归下降分析④预测分析技术⑤LR(K)分析 ⑥ SLR(k)分析⑦ LL(k)分析⑧LALR(K)分析 A.③④⑦ B. ③④⑧ C.①②⑧ D.③④⑤⑥⑦ E.①②⑤⑥⑦ F. ①②⑤⑥⑧ 二、简答题(每小题 5 分,共 20 分) 1 . LL ( 1 )分析法对文法有哪些要求? 2 .常见的存储分配策略有几种?它们都适合于什么性质的语言? 3 .常见循环优化都有哪些项目? 4 .什么是活动记录?它主要由哪些内容构成? 三、( 8 分)化简文法 G[S] : S → ASe | BCaD | aD | AC A → Cb | DBS C → bC | d B → Ac D → aD 四、( 12 分)设L í {a,b,c}* 是满足下述条件的符号串构成的语言: (1)若出现 a ,则其后至少紧跟两个 c ; (2)若出现 b ,其后至少紧跟一个 c 。 试构造识别 L 的最小化的 DFA ,并给出描述 L 的正规表达式。 五、( 12 分)已给文法 G[S] :S → SaP | Sf | P P → qbP | q 将 G[S] 改造成 LL ( 1 )文法,并给出 LL ( 1 )分析表。 六、( 12 分)给定文法 G[S] :S → Aa|dAb|Bb|dBa A → c B → c 构造文法 G[S] 的 LR ( 1 )分析表。 七、( 8 分)将下面的条件语句表示成逆波兰式和四元式序列: if a>b then x:=a+b*c else x:=b-a; 八、( 8 分)给定基本块: A:=3*5 B:=E+F

编译原理重点

编译原理 什么是编译程序? 编译程序也叫编译系统,是把用高级语言编写的面向过程的源程序翻译成目标程序的语言处理程序。 编译的各个阶段 什么是文法? 文法是以又穷的集合刻画无穷的集合的一个工具。 1、字母表:它是非空有穷集。例如:∑={a,b,c}或∑={1,2,3} 2、符号:字母表中的元素称为符号。 3、符号串:符号的有穷序列,符号串也称为字。用ε来表示空符号串。例如:a,ab,abc 4、长度:符号串的长度是指该串所包含的符号个数。用|x|表示符号串x的长度。 例如:|a|=1,|abn|=3 5、连结:设x和y为符号串,则称xy 为他们的连结。例如:x=aa,y=bb,则xy=aabb 6、空集:不含任何元素的集合,记为 。 7、乘积:设A和B是符号串集,则用AB表示A和B的乘积。A={a,b},B={c,d},则AB={ac,ad,bc,bd} 8、方幂:设A为符号串集,则定义 A0={ε} A1=A A n=A n-1 A

例如:A={a,b} 则有: A0={ε} A1={a,b} A2={aa,ab,ba,bb} 9、正闭包:设A为符号串集,则用A+表示A的正闭包,其具体定义如下: A+=A1∪A2∪A3∪?… 例如:A={a},A+={a,aa,aaa,……} 10、星闭包:设A为一集合,则定义A的星闭包为A* ,其具体定义如下A*=A0∪A+ 例如:A={a},A*={ε,a,aa,aaa,……} 文法G定义为四元组(V N,V T,P,S )其中 V N为非终结符号(或语法实体,或变量)集; V T为终结符号集; P为产生式(也称规则)的集合;V N,V T和P是非空有穷集。 S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。V N和V T不含公共的元素,即V N∩V T = φ 用V表示V N ∪V T,称为文法G的字母表或字汇表 例文法G=(V N,V T,P,S) V N = { S }, V T ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号 推导:用若干次产生式可从x串导出y串,则称y为x的推导,记为x y。 直接推导:用一次产生式可从x导出y,则称y为x的直接推导,并记为x?y。 星推导:x y(当且仅当x=y或x y)。 句型:由初始符推出的任意符号集合。 句子:不包含非终结符的句型。 最左推导:推导的每一步都是对最左非终结符进行替换。 最右推导(规范推导):推导的每一步都是对最右非终结符进行替换。所得句型称为规范句型。 0型文法(短语结构文法):产生式为:α→β,其中α和β是符号串。 1型文法(上下文有关文法):产生式:αAβ→αuβ,其中A∈V N,u为非空串。2型文法(上下文无关文法): A→β,其中A∈V N,β为非空串。 3型文法(正则文法):产生式为:A→a,A→bB,其中A,B∈V N, #a,b∈V T是符号串。四种文法包含关系:0型文法→1型文法→2型文法→3型文法 二义性文法:一个文法存在某个句子使得它有两棵语法树。例G:E→E+E|E*E|(E)|i

编译原理期末考试复习知识点

1.Chomsky把文法分为几种类型?什么是文法的二义性? 1)分成四种类型,即0型、1型、2型和3型。(1)0型文法:设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法。(2)1型文法:若P中的每一个产生式α→β均满足|β|>=|α|,仅仅S->ε除外,则文法G是1型。(3)若P中的每一个产生式α→β满足:α是非终结符,β∈(VN∪VT)*,则此文法称为2型的。(4)若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a∈VT*,则G是3型文法。 2)如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。如果文法含有二义性的句子,则称该文法是二义性的 2. 简述DFA与NFA的区别:DFA每次输入只对应一个结果,而NFA的依次输入可能对应多个结果,形成一个结果集。 3.什么是算符文法?并举例说明 设有文法G,如果G中没有形如A->…BC…的产生式,其中B,C为非终结符,则称G为算符文法。 例如:对于表达式的二义性文法E->E|E-E|E*E|E/E|E↑E|(E)|i 其中任何一个产生式中都不包含两个非终结符相邻的情况,因此该文法为算符文法。 4.什么是3型文法?什么是文法的语言? (1)若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a ∈VT*,则G是3型文法。 (2)文法的语言:文法是用于描述语言的语法结构的形式规则。文法描述的语言是该文法一切句子的集合。一个文法所描述的语言是唯一的。 5. 什么是文法的二义性?给出一个二义性文法实例 (1)如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。如果文法含有二义性的句子,则称该文法是二义性的 书上:若一个文法中存在某个句子,有两个不同的最左(最右)推导,则该文法是二义的。(2)文法G=({E},{+, * , i , (,) }, P, E),其中P为:E->i ; E->E+E ; E->E*E ; E->(E) ; 这里的非终结符E表示一类算术表达式,i表示程序设计语言中的变量。该文法定义了由变量,+,*,(和)组成的算术表达式的语法结构。 6.常见的代码优化技术有哪些?依据优化所涉及的范围分为那些级别? 删除多余运算、代码外提、强度削弱、变换控制条件、合并已知量和复写传播、删除无用赋值。局部优化、循环优化、全局优化

编译原理作业集-第五章-修订

第五章语法分析—自下而上分析 本章要点 1. 自下而上语法分析法的基本概念: 2. 算符优先分析法; 3. LR分析法分析过程; 4. 语法分析器自动产生工具Y ACC; 5. LR分析过程中的出错处理。 本章目标 掌握和理解自下而上分析的基本问题、算符优先分析、LR分析法及语法分析器的自动产生工具YACC等内容。 本章重点 1.自下而上语法分析的基本概念:归约、句柄、最左素短语; 2.算符优先分析方法:FirstVT, LastVT集的计算,算符优先表的构造,工作原理;3.LR分析器: (1)LR(0)项目集族,LR(1)项目集簇; (2)LR(0)、SLR、LR(1)和LALR(1)分析表的构造; (3)LR分析的基本原理,分析过程; 4.LR方法如何用于二义文法; 本章难点 1. 句柄的概念; 2. 算符优先分析法; 3. LR分析器基本; 作业题 一、单项选择题: 1. LR语法分析栈中存放的状态是识别________的DFA状态。 a. 前缀; b. 可归前缀; c. 项目; d. 句柄; 2. 算符优先分析法每次都是对________进行归约: (a)句柄(b)最左素短语(c)素短语(d)简单短语

3. 有文法G=({S},{a},{S→SaS,S→ε},S),该文法是________。 a. LL(1)文法; b.二义性文法; c.算符优先文法; d.SLR(1)文法; 4. 在编译程序中,语法分析分为自顶向下分析和自底向上分析两类,和LL(1)分析法属于自顶向下分析; a. 深度分析法 b. 宽度优先分析法 c. 算符优先分析法 d. 递归下降子程序分析法 5. 自底向上语法分析采用分析法,常用的是自底向上语法分析有算符优先分析法和LR分析法。 a. 递归 b. 回溯 c. 枚举 d. 移进-归约 6. 一个LR(k)文法,无论k取多大,。 a. 都是无二义性的; b. 都是二义性的; c. 一部分是二义性的; d. 无法判定二义性; 7. 在编译程序中,语法分析分为自顶向下分析和自底向上分析两类,和LR分析法属于自底向上分析。 a. 深度分析法 b. 宽度优先分析法 c. 算符优先分析法 d. 递归下降子程序分析法 8. 在编译程序中,语法分析分为自顶向下分析和自底向上分析两类,自顶向下分析试图为输入符号串构造一个; a. 语法树 b. 有向无环图 c. 最左推导 d. 最右推导 9. 在编译程序中,语法分析分为自顶向下分析和自底向上分析两类,自底向上分析试图为输入符号串构造一个。 a. 语法树 b. 有向无环图 c. 最左推导 d. 最右推导 10. 采用自顶向下分析方法时,要求文法中不含有。 a. 右递归 b. 左递归 c. 直接右递归 d. 直接左递归 11. LR分析是寻找右句型的;而算符优先分析是寻找右句型的。 a. 短语; b. 素短语; c. 最左素短语; d. 句柄 12. LR分析法中分析能力最强的是;分析能力最弱的是。 a. SLR(1); b. LR(0); c. LR(1); d. LALR(1) 13. 设有文法G: T->T*F | F F->F↑P | P P->(T) | a 该文法句型T*P↑(T*F)的最左直接短语是下列符号串________。 a. (T*F), b. T*F, c. P, d. P↑(T*F) 14. 在通常的语法分析方法中,()特别适用于表达式的分析。 a.算符优先分析法b.LR分析法c.递归下降分析法d.LL(1)分析法 15. .运算符的优先数之间有几种关系。 a.3种 b. 2种 c. 4种 d. 1种 16. 算符优先法属于() a.自上而下分析法 b.LR分析法 c.SLR分析法 d.自下而上分析法 17. 在LR分析法中,分析栈中存放的状态是识别规范句型的DFA状态。 a.句柄 b. 前缀 c. 活前缀 d. LR(0)项目 一.答案: 1. b; 2. b; 3. b; 4. d; 5. d; 6. a; 7. c; 8. c; 9. d;10. b;11. d,c;12. c,b;13. a;14. a 15. a;16. d;17. c;

编译原理附标准答案五

练习5.1 解答:输入(4*7+1)*2n,带注释的分析树如下: 练习5.2 解答: (1)根据表5.3中的语法制导定义建立表达式((a)+(b))的分析树和语法树

(2)根据图5.17的翻译模式构造((a)+(b))的分析树和语法树

练习5.3 解答: 设置下面的函数和属性: expr1||expr2:把表达式expr2拼写在表达式expr1后面。 deletep(expr):去掉表达式expr左端的‘(’和右端的‘)’。 E.expr,T.expr, F.expr:属性变量,分别表示E,T,F的表达式。 E.add,T.add, F.add,属性变量,若为true,则表示其表达式中外层有‘+’号,否则无‘+’号。 E.pmark,T.pmark, F.pmark,属性变量,若为true,表示E,T,F的表达式中左端为‘(’,右端是‘)’。 语法制导定义如下: 产生式语义规则 E -> E1 +T if(T.pmark==true) THEN E.expr=E1.expr||'+'||deletep(T.expr) ELSE E.expr:=E1.expr||'+'||T.expr; E.add:=true; E.pmark:=false; E -> T if(T.pmark==true) THEN E.expr:=deletep(T.expr) ELSE E.expr:=T.expr; E.add:=T.add; E.pmark:=false; T -> T1*F T.expr:=T1.expr||'*'||F.expr; T.add:=false; T.pmark:=false; T -> F T.expr:=F.expr; T.add:=F.add; T.pmark:=F.pmark; F -> (E) if(E.add==false) THEN BEGIN F.expr:=E.expr; F.add:=false; F.pmark:=false; END ELSE BEGIN F.expr:='('||E.expr||')'; F.add:=true; F.pmark:=true; END; F -> id F.expr:=id.lexval; F.add:=false; F.pmark:=false; 练习5.4 解答: (1)语法制导定义如下:

编译原理复习整理(重点含答案)

1、给出下面语言的相应文法。L1={a n b n c i|n≥1,i≥0} 从n,i的不同取值来把L1分成两部分:前半部分是anbn:A→aAb|ab后半部分是ci:B→Bc|ε所以整个文法G1[S]可以写为:G1(S):S→AB;A→aAb|ab;B→cB|ε 3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。 (要求:先将正规式转化为NFA,再将NFA确定化,最小化)

4、对下面的文法G: E →TE ’ E ’→+E|ε T →FT ’ T ’→T|ε F →PF ’ F ’ →*F ’|ε P →(E)|a|b|∧ (1)证明这个文法是LL(1)的。 (2)构造它的预测分析表。 (1)FIRST(E)={(,a,b,^}FIRST(E')={+,ε}FIRST(T)={(,a,b,^}FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^}FIRST(F')={*,ε}FIRST(P)={(,a,b,^}FOLLOW(E)={#,)} FOLLOW(E')={#,)}FOLLOW(T)={+,),#}FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式: '→+'→'→'→E E T T F F P E a b ||*|()|^||εεε FIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φ FIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ FIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ 所以,该文法式LL(1)文法. (3) + * ( ) a b ^ # E E TE →' E TE →' E TE →' E TE →' E' '→+E E '→E ε '→E ε T T F T →' T F T →' T F T →' T F T →' T' '→T ε '→T T '→T ε '→T T '→T T '→T T '→T ε F F P F →' F P F →' F P F →' F P F →' F' '→F ε '→'F F * '→F ε '→F ε '→F ε '→F ε '→F ε '→F ε P P E →() P a → P b → P →^ 5、考虑文法: S →AS|b A →SA|a (1)列出这个文法的所有LR(0) 项目。

编译原理复习

1.画出编译程序的总体结构图,简述各部分的主要 功能。 2. 已知文法G[E]: E→ET+|T T→TF* | F F→F^ | a 试证:FF^^*是文法的句型,指出该句型的短语、简单短语和句柄. 3.为正规式(a|b) *a(a|b)构造一个确定的有限自动机。 4.设文法G(S): S→(L)|a S|a L→L,S|S (1) 消除左递归和回溯; (2) 计算每个非终结符的FIRST和FOLLOW; (3) 构造预测分析表。 5.已知文法 A->aAd| aAb|ε 判断该文法是否SLR(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。6.构造算符文法G[H]的算符优先关系(含#)。 G[H]:H→H;M|M M→d|aHb

7.已构造出文法G(S) (1)S BB (2)B aB (3)B b 1)。给出DFA图 2).给出LR分析表 3).假定输入串为abaab,请给出LR分析过程(即状态,符号,输入串的变化过程)。8.将下面的语句翻译成四元式序列: while A

1.【解答】 编译程序的总体结构图如图1.2所示。 词法分析器:输入源程序,进行词法分析,输出单词符号。 语法分析器:在词法分析的基础上,根据语言的语法规则(文法规则)把单词符号串分解成各类语法单位,并判断输入串是否构成语法上正确的“程序”。 中间代码生成器:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码,比如说四元式。 优化:对中间代码进行优化处理。 目标代码生成器:把中间代码翻译成目标语言程序。 表格管理模块保存一系列的表格,登记源程序的各类信息和编译各阶段的进展情况。编译程序各阶段所产生的中间结果都记录在表格中,所需信息多数都需从表格中获取,整个编译过程都在不断地和表格打交道。 出错处理程序对出现在源程序中的错误进行处理。此外,编译的各阶段都可能出现错误,出错处理程序对发现的错误都及时进行处理。 2.【解答】 该句型对应的语法树如下:该句型相对于E的短语有FF^^*;相对于T的短语有FF^^*,F;相对于F的短语有F^;F^^;简单短语有F;F^;句柄为F. 3.【解答】 最简DFA如图2.66所示。

编译原理第七章习题参考答案

第1 题 已知文法 A→aAd|aAb|ε 判断该文法是否是SLR(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。 答案: 文法: A→aAd|aAb|ε 拓广文法为G′,增加产生式S′→A 若产生式排序为: 0 S' →A 1 A →aAd 2 A →aAb 3 A →ε 由产生式知: First (S' ) = {ε,a} First (A ) = {ε,a} Follow(S' ) = {#} Follow(A ) = {d,b,#} G′的LR(0)项目集族及识别活前缀的DFA 如下图所示 在I0 中: A →.aAd 和A →.aAb 为移进项目,A →.为归约项目,存在移进-归约冲突,因此所给文法不是LR(0)文法。 在I0、I2 中: Follow(A) ∩{a}= {d,b,#} ∩{a}=f 所以在I0、I2 中的移进-归约冲突可以由Follow 集解决,所以G 是SLR(1)文法。

构造的SLR(1)分析表如下: 对输入串ab#的分析过程: 第2 题 若有定义二进制数的文法如下: S→L·L|L L→LB|B B→0|1 (1) 试为该文法构造LR 分析表,并说明属哪类LR 分析表。 (2) 给出输入串101.110 的分析过程。 答案: 文法:

S→L.L|L L→LB|B B→0|1 拓广文法为G′,增加产生式S′→S 若产生式排序为: 0 S' →S 1 S →L.L 2 S →L 3 L →LB 4 L →B 5 B →0 6 B →1 由产生式知: First (S' ) = {0,1} First (S ) = {0,1} First (L ) = {0,1} First (B ) = {0,1} Follow(S' ) = {#} Follow(S ) = {#} Follow(L ) = {.,0,1,#} Follow(B ) = {.,0,1,#} G′的LR(0)项目集族及识别活前缀的DFA 如下图所示: 在I2 中: B →.0 和B →.1 为移进项目,S →L.为归约项目,存在移进-归约冲突,因此所给文法不是LR(0)文法。 在I 2、I8 中:Follow(s) ∩{0,1}= { #} ∩{0,1}= 所以在I2 、I8 中的移进-归约冲突可以由Follow 集解决,所以G 是SLR(1)文法。 构造的SLR(1)分析表如下:

语法分析实验报告

语法分析实验报告 一:实验内容: 编写语法分析程序,实现对算术表达式的语法分析,要求所分析的算术表达式由如下的文法产生。 E->E+T|E-T|T T->T*F|T/F|F F->id|(E)|num 二:实验要求: 在对表达式进行分析的同时,输出所采用的产生式。 1.编写LL(1)语法分析程序,要求: 编程实现算法4.2,为给定的文法自动构造预测分析表 编程实现算法4.1,构造LL(1)预测分析程序, 2.编写语法分析程序,实现自底向上的分析,要求: 构造识别所有活前缀的DFA 构造LR分析表 编程实现算法4.3,构造LR分析程序 三:实验分析: 1.方法二(编写LL(1)语法分析程序)

1.步骤: (1)根据题目所给出的文法构造相应的无左递归文法,并求出该文法各非终结符的FIRST、FOLLOW集合; (2)构造文法的LL(1)分析表; (3)由此构造LL分析程序。 2.实现方法: 1.输入缓冲区为一个字符型数组,读入输入的算术表达式并保存在此,以’$’结束; 2.为构造文法的LL(1)分析表,构建一个相对应的字符串数组; 3.在实际程序中P代表E',Q代表T',e代表ε,i代表id,n代表num; 4.处理输入表达式中代表id和num的子串,分别将它们转化为'i'和'n'进行分析; 5. LL(1)预测分析程序的总控程序在任何时候都是按STACK 栈顶符号X和当前的输入符号a做哪种过程的。对于任何(X,a),总控程序每次都执行下述三种可能的动作之一: (1)若X = a =‘$’,则宣布分析成功,停止分析过程。 (2)若X = a!=‘$’,则把X从STACK栈顶弹出,让a指向下一个输入符号。 ①如果是终结符合,则栈不加入新符号 ②如果是非终结符合,则把表达式右边入栈

西安电子科技大学2020秋 编译原理与技术(大作业)答案

学习中心/函授站_ 姓名学号 西安电子科技大学网络与继续教育学院 2020 学年下学期 《编译原理与技术》期末考试试题 (综合大作业) 考试说明: 1、大作业试题于2020 年10 月15 日公布: (1)毕业班学生于2020 年10 月15 日至2020 年11 月1 日在线上传大作业答卷; (2)非毕业班学生于2020 年10 月22 日至2020 年11 月8 日在线上传大作业答卷; (3)上传时一张图片对应一张A4 纸答题纸,要求拍照清晰、上传完整; 2、考试必须独立完成,如发现抄袭、雷同均按零分计; 3、答案须用《西安电子科技大学网络与继续教育学院标准答题纸》手写完成,要求字迹工整、卷面干净。 一、单选题(每小题 2 分,共 10 分) 1、编译器和解释器是两种高级语言处理程序,与编译器相比, B 。 A.解释器不参与运行控制,程序执行的速度慢 B.解释器参与运行控制,程序执行的速度慢 C.解释器参与运行控制,程序执行的速度快 D.解释器不参与运行控制,程序执行的速度快 2、给定文法A→bA|ca, B 不是该文法句子。 A.bbca B.bcabca C.ca D.bca 3、 B 是与规范归约(最左归约)互逆的一个过程。 A.最左推导B.最右推导C.词法分析D.语义分析 4、与逆波兰式abc*+d+对应的中缀表达式是 B 。 A.a+b+c*d B.(a+b)* c+d C.(a+b)* (c+d) D.a+b*c+d 5、从编译程序的语法分析角度看,源程序是句子的集合, B 可以较好地反映句子的结构。 A.线性表B.树C.完全图D.堆栈

二、填空题(每空 2 分,共 20 分) 1、编译程序的工作过程可划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等阶段,符号表管理和出错处理是编译程序各阶段都涉及到的工作。 2、 3、用LR 方法实现语法分析时,典型的操作有移进、归约、接受和报错。 4、识别上下文无关语言的自动机是下推自动机。 5、数组元素的地址计算公式由两部分组成,一部分是不变部分,它在编译 时确定;另一部分是可变部分,它在运行时确定。 三、简答题(每小题 10 分,共 30 分) 1、简述从正规式构造词法分析器的一般方法和过程。 答案: 有了正规式和有限自动机的理论基础后,就可以构造出编译程序的词法分析模块。构造词法分析器的一般步骤如下。 (1)用正规式描述语言中的单词构成规则。 (2)为每个正规式构造一个NFA,它识别正规式所表示的正规集。 (3)将构造出的NFA转换成等价的DFA。 (4)对DFA进行最小化处理,使其最简。 (5)从DFA构造词法分析器。 2、请列举三种常用的中间代码?采用中间代码有什么好处? 答案: 常用的中间代码:三地址码,后缀式,DAG图。中间代码的特点是与具体机器(指令系统)无关;采用中间代码可以明确区分前端与后端;便于优化和移植。 解释:编译器各阶段的完整输出,均可以被认为是源程序的某种中间表示。本章讨论的是中间代码生成器输出的中间表示,称之为中间代码。中间代码实际上应起一个编译器前端与后端分水岭的作用。为此要求中间代码具有如下特性,以便于编译器的开发移植和代码的优化:(1)便于语法制导翻译;(2)既与机器指令的结构相近,又与具体机器无关。 3、下图所示的分析树用到了某个上下文无关文法的所有产生式。 (a)给出该文法的所有非终结符号集合 N 和终结符号集合 T。 (b)给出该文法的产生式集合。 S a A c B A a B b S c A c b B d c ε 答案: N = {S, A, B} T = {a, b, c, d} S → aAcB | Bd A → AaB | c B → bScA | b | ε

相关文档
相关文档 最新文档