编译原理题库

合集下载

《编译原理》考试题

《编译原理》考试题

《编译原理》考试题一、选择题:(每题2分,共20分)1.文法G所描述的语言是的集合。

A)文法G的字汇表V中所有符号组成的符号串B)文法G的字汇表V的闭包V*中的所有符号串C)由文法的识别符号推出的所有符号串D)由文法的识别符号推出的所有终结符号串2.设有文法G[S]=({b},{S,B},S,{S→b|bB,B→bS}),试问该文法所描述的语言是。

A)L(G[S])={b i|i≥0} B)L(G[S])={b2i|i≥0}C)L(G[S])={b2i+1|i≥0} D)L(G[S])={b2i+1|i≥1}3.一个句型中的最左称为该句型的句柄。

A)短语B)简单短语C)素短语D)终结符号4. 正则文法能产生下面的语言:L={a n b n|n≥1}。

A)存在一个B)存在多个C)不存在D)无法判断5.编译程序中的语法分析器接受以为单位的输入,并产生有关信息供以后各阶段使用。

A)表达式B)产生式C)单词D)语句6.编译方法中,自顶向下的语法分析方法有。

A)简单优先分析方法B)算符优先分析方法C)SLR方法D)LL(1)分析方法7.简单优先分析法每次都是对进行归约。

A)最左短语B)简单短语C)句柄D)最左素短语8.LR语法分析栈中存放的状态是识别的DFA状态。

A)前缀B)可归前缀C)项目D)句柄9.表达式-(a+b)/(c-d)-(a+b*c)的逆波兰表示是(@代表单目运算-)。

A)ab+cd-/@bc*a+- B)ab+/cd@bc*a+--C)ab+@cd-/abc*+- D)ab+cd-/abc*+@-10.乔姆斯基(Chomsky)把文法分成四种类型,即0型、1型、2型和3型。

其中,3型文法是。

A)上下文无关文法B)上下文有关文法C)正则文法D)短语文法二、填空题:(每空1分,共20分)1.假设G是一个文法,S是文法的开始符号,如果S *x,则称x是。

2.已知文法G[E]:E→E+T|T,T→T*F|F,F→(E)|i;该文法的开始符号是,终结符号集合V T是,非终结符号集合V N 是,句型T+T*F+i的短语有T+T*F+i,第一个T,T*F和。

编译原理考试练习题

编译原理考试练习题

2019年春季《编译原理》在线作业一、单选题(共 30 道试题,共 60 分。

)V 1. 如果一个编译程序能产生不同于其宿主机的机器代码,则称它为:()A. 诊断编译程序B. 优化编译程序C. 交叉编译程序D. 可变目标编译程序正确答案:C 满分:2 分2. 对应于产生式A→XY继承属性Y.y的属性计算,可能正确的语义规则是()A. A.a:=f(X.x,Y.y)B. Y.y:=f(A.a,Y.y)C. Y.y:=f(X.x)D. A.a:=f(Y.y)正确答案:C 满分:2 分3. 表达式作为实在参数可以传递给被调用的过程,替换过程体中的()A. 局部变量B. 形式参数C. 全局变量D. 实在参数正确答案:B 满分:2 分4. 为了便于优化处理,三地址代码可以表示成()A. 三元式B. 四元式C. 后缀式D. 间接三元式正确答案:D 满分:2 分5. 程序语言的单词符号一般可以分为5种,下面()不需要超前搜索A. 关键字B. 标识符C. 常数D. 算符和界符正确答案:D 满分:2 分6. 在编译过程中,符号表的主要作用是()A. 帮助错误处理B. 辅助语法错误的检查C. 辅助语义的正确性检查D. 辅助代码生成E. 辅助对目标程序的优化正确答案:B 满分:2 分7. LR语法分析栈中存放的状态是识别()的DFA状态A. 前缀B. 可归前缀C. 项目D. 句柄正确答案:B 满分:2 分8. Fortran语言的编译程序采用()分配策略A. 静态B. 最佳C. 堆式动态D. 栈式动态正确答案:A 满分:2 分9. 使用三元式是为了:()A. 便于代码优化处理B. 避免把临时变量填入符号表C. 节省存储代码的空间D. 提高访问代码的速度正确答案:B 满分:2 分10. 合并表达式中常量运算的目的是()A. 使表达式中的常量尽可能少B. 是表达式尽可能简短C. 将可在编译时刻计算的常量运算在编译时刻计算出来,然后用所计算出来的值替换表达式中出现的所有这种常量运算,使得生成的代码指令尽可能少D. 以上都是正确答案:D 满分:2 分11. 从左线性文法构造有限自动机时,通常自动机状态个数比文法非终结符号数多()A. 4B. 2C. 0D. 1正确答案:D 满分:2 分12. 程序基本块是指()A. 一个子程序B. 一个仅有一个入口和一个出口的语句C. 一个没有嵌套的程序段D. 一组顺序执行的程序段,仅有一个入口和一个出口正确答案:D 满分:2 分13. 设G是一个文法,S是开始符号。

编译原理考试习题及答案

编译原理考试习题及答案

最右推导
E T T*F T*(E) T*(E+T) T*(E+F) T*(E+i) T*(T+i) T*(F+i) T*(i+i) F*(i+i) i*(i+i)
14
CH.2.练习题8(P36.)
8. 令文法为
(2) 给出 i+i+i、i+i*i和i-i-i的语法树。
E → T|E+T|E-T
(2) 1(1010*|1 (010)*1)*0
1
4
05
0*
1
6
X 1 1ε 2 ε 3 0 Y
1
7 (010)* 8
1
4 0 5 1 6ε
0
9
1
ε
X 1 1ε 2 ε 3 0 Y
1
ε 10
ε
7
010
1
8
2023/7/29
8
4 0 5 1 6ε 9 0
1
ε
X 1 1ε 2 ε 3 0 Y
1
7
ε
10 ε
0
01
0
1
0
1
2
2023/7/29
10
CH.3.练习题14(P64.)
(1) 正规式: (10|0)*
(2) NFA:
0
X ε 1εY
1
0
2
DFA: 0
0
1 1
2023/7/29
0
1
0
2
构造一个DFA,它接受 S= {0,1}上所有满足如下条件 的字符串:每个1都有0直 接跟在右边。
DFA:(最简)
,a))# , a ))#

编译原理复习题集

编译原理复习题集

《编译原理》复习题集1.名词解释短语句柄文法上下文无关文法LL(1)文法LR(1)文法语法分析无环路有向图(DAG)后缀式语法制导翻译遍局部优化词法分析语法分析语义分析源语言源程序目标语言中间语言(中间表示)2.简答题(1)编译程序和高级语言有什么区别?(2)编译程序的工作分为那几个阶段?(3)简述自下而上的分析方法。

(4)目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?(5)何谓优化?按所涉及的程序范围可分为哪几级优化?(6)简述代码优化的目的和意义。

3.叙述下面的正规式描述的语言,并画出接受该语言的最简DFA的状态转换图。

( 1 | 01 )* 0*4.Pascal语言无符号数的正规定义如下:num→digit+ (.digit+)? (E(+|-)? digit+)?其中digit表示数字,用状态转换图表示接受无符号数的确定有限自动机。

5.画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。

6.用状态转换图表示接收(a|b)*aa的确定的有限自动机。

7.处于/* 和 */之间的串构成注解,注解中间没有*/。

画出接受这种注解的DFA的状态转换图。

8.某操作系统下合法的文件名为device:name.extension其中第一部分(device:)和第三部分(.extension)可缺省,device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。

9.构造一个DFA,它接受∑={0, 1}上0和1的个数都是偶数的字符串。

10.设有非确定的有自限动机 NFA M=({A,B,C},{0,1},δ,{A},{C}),其中:δ(A,0)={C} δ (A,1)={A,B} δ (B,1)={C} δ (C,1)={C}。

请画出状态转换距阵和状态转换图。

11.设L⊆ {a,b,c}* 是满足下述条件的符号串构成的语言:(1)若出现a ,则其后至少紧跟两个c ;(2)若出现b ,其后至少紧跟一个c 。

编译原理练习题答案

编译原理练习题答案

一、填空题:1-01.编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,之间代码生成,代码优化等几个基本阶段,同时还会伴有表格处理和出错处理.1-02.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序.1-03.编译方式与解释方式的根本区别在于是否生成目标代码.1-04.翻译程序是这样一种程序,它能够将用甲语言书写的程序转换成与其等价的用乙语言书写的程序. 1-05.对编译程序而言,输入数据是源程序,输出结果是目标程序.1-06.如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段: 编译阶段和运行阶段.如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分为三个阶段: 编译阶段, 汇编阶段和运行阶段.1-07.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。

1-08.一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。

其中,词法分析器用于识别单词。

1-09.编译方式与解释方式的根本区别为是否生成目标代码。

2-01.所谓最右推导是指:任何一步αβ都是对α中最右非终结符进行替换的。

2-02.一个上下文无关文法所含四个组成部分是一组终结符号、一组非终结符号、一个开始符号、一组产生式。

2-03.产生式是用于定义语法成分的一种书写规则。

2-04.设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)={x│S x,x∈V T*} 。

2-05.设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈V*),则称x是文法的一个句型。

2-06.设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈V T*),则称x是文法的一个句子。

3-01.扫描器的任务是从源程序中识别出一个个单词符号。

4-01.语法分析最常用的两类方法是自上而下和自下而上分析法。

编译原理习题及答案(整理后)

编译原理习题及答案(整理后)
5【解答】
(1)句型(S,(a))的语法树如图2-8-3所示
(2)由图2-8-3可知:
①短语:S、a、(a)、S,(a)、(S,(a));
4、有文法G:S→aAcB|Bd
A→AaB|c
B→bScA|b
(1)试求句型aAaBcbbdcc和aAcbBdcc的句柄;
(2)写出句子acabcbbdcc的最左推导进程.
5、对于文法G[S]:
S→(L)|aS|aL→L, S|S
(1)画出句型(S,(a))的语法树.(2)写出上述句型的所有短语、直接短语、句柄和素短语.
c.构词规矩d.等价变换规矩
二、多项选择题
1、编译程序各阶段的工作都涉及到.
a.语法剖析b.表格治理c.出错处理
d.语义剖析e.词法剖析
2、编译程序工作时,通常有阶段.
a.词法剖析b.语法剖析c.中间代码生成
d.语义检讨e.目的代码生成
三、填空题
1、说明程序和编译程序的区别在于.
2、编译进程通常可分为5个阶段,分离是、语法剖析、代码优化和目的代码生成.3、编译程序工作进程中,第一段输入是,最后阶段的输出为程序.
断定解答1、对2、错3、错4、错5、错6、错
简答[解答]
1、句柄:一个句型的最左直接短语称为该句型的句柄.
2、素短语:至少含有一个终结符的素短语,并且除它自身之外不再含任何更小的素短语.
3、语法树:知足下面4个条件的树称之为文法G[S]的一棵语法树.
①每一终结均有一标识表记标帜,此标识表记标帜为VN∪VT中的一个符号;
SÞaSPQÞaaSPQPQÞaaabQPQPQÞaaabPQQPQÞaaabPQPQQÞaaaPPQQQÞ
aaabbPqqqÞaaabbQQQÞaaabbbcQQÞaaabbbccQÞaaabbbccc

编译原理练习题

《编译原理》练习题一一、填空题(每空1分)1.设G [S ]是一个文法,我们把能由文法的 开始符号s 推导出来的符号串α称为G 的一个句型。

当句型α仅由 终结符号 组成时 (即α∈V T *),则将它称为G 产生的句子。

2.从某一给定的状态q 出发,仅经过若干条 标记为 ε 的矢线所能达到的状态所组成的集合称为ε-CLOSURE(q)。

3.设G=(V N ,V T ,P,S)是一文法,我们说G 中的一个符号X ∈V N ∪V T 是有用的,是指X 至少出现在 一个句子 的推导过程中,否则,就说X 是无用的。

我们将不含形如A→A 的产生式和不含无用符号及无用产生式的文法称为 已化简的文法 。

4.我们常采用形如 (class, value)的二元式作为一个单词的 内部表示 。

其中,class 是一个整数,用来指示该单词的 类别 ,value 则是单词之值。

5.一个文法G[S]可表示成形如 ( V N ,V T ,P,S ) 的四元式。

其中V N ,V T ,P 均为非空的有限集,分别称为非终结符号集、终结符号集和产生式集, S ∈V N 为文法的开始符号。

此外,将出现在各产生式左部和右部的一切符号所组成的集合称为 字汇表 ,记作V 。

显然,V=V N ∪V T ,V N ∩V T =∅。

6.通常,可通过两种途径来构造词法分析程序。

其一是根据对语言中各类单词的某种描述或定义,用 手工的方式 构造词法分析程序;另外一种途径是所谓词法分析程序的 自动生成 。

7.设G 为一文法,A→α是G 的一个产生式,如果α具有υAδ的形式,其中υ,δ不同时为ε,则称产生式A→α是 直接递归的 。

若存在推导δυαA A *⇒⇒,则称产生式A→α是 递归的 。

8.设M=(K,Σ,f,S 0,Z)为一DFA ,并设s 和t 是M 的两个不同状态,我们说状态s,t 为某一输入串w 所区分 ,是指从s,t 中之一出发,当扫视完w 之后到达M 的终态,但从其中的另一个状态出发,当扫视完同一个w 后而进入 非终态 。

《编译原理》期末考试复习题

《编译原理》期末考试复习题一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)×1.计算机高级语言翻译成低级语言只有解释一种方式。

()×2.在编译中进行语法检查的目的是为了发现程序中所有错误。

()√3.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。

()×4.正则文法其产生式为 A->a , A->Bb, A,B∈VN , a 、b∈VT 。

()√5.每个文法都能改写为 LL(1) 文法。

()√6.递归下降法允许任一非终极符是直接左递归的。

()×7.算符优先关系表不一定存在对应的优先函数。

()×8.自底而上语法分析方法的主要问题是候选式的选择。

()×9.LR 法是自顶向下语法分析方法。

()×10.简单优先文法允许任意两个产生式具有相同右部。

()三、填空题(每空1分,共10分)1.编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,中间代码生成,代码优化等几个基本阶段,同时还会伴有__ ___和 ___ _。

表格管理出错处理_2.若源程序是用高级语言编写的,__ __是机器语言程序或汇编程序,则其翻译程序称为 __ __ 。

_目标程序_编译程序3.编译方式与解释方式的根本区别在于__ __。

是否生成目标代码_4.对编译程序而言,输入数据是__ __, 输出结果是__ ___。

_源程序目标程序5.产生式是用于定义__ __的一种书写规则。

_语法成分6.语法分析最常用的两类方法是___ __和__ __分析法。

自上而下_自下而上四、简答题(20分)1. 什么是句子什么是语言答:(1)设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈VT*),则称x是文法的一个句子。

(2)设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为: L(G)={x│S x,x∈VT*} 。

(完整word版)编译原理练习题

一章: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、过程1、扫描器的任务是从源程序中识别出一个个单词符号。

2、高级语言源程序有两种执行方式,即解释和编译。

判断:高级语言编写的源程序都必须通过编译,产生目标代码后才能运行。

多遍扫描的编译程序的多遍是指多次重复读源程序。

高级语言程序到低级语言程序的转换是基于语义的等价变换。

编译程序中错误处理的任务是对检查出的错误进行修改。

目标程序一定是机器语言程序。

连接装配程序可把经编译程序产生的目标程序变成可执行的机器语言程序。

简答题:1、请指出下列错误信息可能是编译的哪个阶段报告的?①else没有匹配的if;②数组下标越界;③使用的函数没有定义;④在数中出现了非数字信息。

答:①语法分析阶段②语义分析与中间代码生成阶段③语义分析与中间代码生成阶段④词法分析阶段2、何谓源程序、中间代码和目标代码?它们三者之间有何种关系?答:所谓源程序是指用某种高级语言编写的程序,它是编译程序的加工对象。

目标程序是指低级语言(机器语言或汇编语言)编写的程序,它是编译程序的加工结果。

中间代码是其结构介于源程序和目标程序之间的一种机内表示形式,它是编译程序产生的中间临时结果。

它们三者之间的关系是等价关系,即结构不同,但语义相同。

二章:1、文法G:S-xSx|y所识别的语言是。

A、xyx B 、(xyx)* C、x n yx n(n≥0) D、x*yx*2、设有文法G[S]=({S,B},{b},{S-b|bB,B-bS},S),该文法所描述的语言是。

编译原理复习题


FIRST(S')={+,ε } FOLLOW(S')={#}
FIRST(F)={*}
FOLLoW(F)=(+,#}
FIRST(F')={*,ε} FOLLOW(+,#}
18. 试为表达式 w+(a+b)*(c+d/(e-10)+8) 写出相应的逆波兰表示。
解: w a b + c d e 10 - / + 8 + * +
17.语法分析最常用的两类方法是__自上而下___和__自下而上___分析法。
18.计算机执行用高级语言编写的程序主要有两种途径:___解释__和__编译___。
19.扫描器是__词法分析器___,它接受输入的__源程序___,对源程序进行___词法分析__并识别出一个个单词
符号,其输出结果是单词符号,供语法分析器使用。
A.LALR 文法 B.LR(0)文法
C.LR(1)文法
D.SLR(1)文法
三、填空题
2.编译方式与解释方式的根本区别在于__是否生成目标代码___。
4.设 G 是一个给定的文法,S 是文法的开始符号,如果 S->x( 其中 x∈VT*), 则称 x 是文法的一个__句子___。
5.自顶向下的语法分析方法的基本思想是:从文法的__开始符号____开始,根据给定的输入串并按照文法的产
28.一个算符优先文法可能不存在算符优先函数与之对应。
29.语法分析时不用消除文法中的左递归 。
30.LR 分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
34.两个正规集相等的必要条件是他们对应的正规式等价。
正规式等价=》正规集相等
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Tiange's reference
1
第一章
▪ 什么是编译器?
▪ 编译程序的结构分为几个阶段,各阶段的任务是什么?
▪ 遍、编译前端及编译后端的含义?
▪ 编译程序的生成方式有哪些?
第二章
▪ 1. 写一文法,使其语言是偶正整数的集合。
▪ 要求:(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
2.证明下述文法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
3. 给出生成下述语言的上下文无关文法:
(1){ anbnambm| n,m>=0}
(2){ 1n0m1m0n| n,m>=0}
解: (1){ anbnambm| n,m>=0}
S→AA
A→aAb|ε
Tiange's reference
2
(2) { 1n0m1m0n| n,m>=0}
S→1S0|A
A→0A1|ε
第三章
1、构造一个DFA,它接收∑={a, b}上所有满足下述条件的字符串:字符串中的每个a都有
至少一个b直接跟在其右边。
解:
已知∑={a, b},根据题意得出相应的的正规式为: (b*abb*)*
根据正规式画出相应的DFA M,如下图所示
用子集法将其确定化

I Ia Ib
{X,1,2,3,Y} {4} {2,3}
{4} —
{5,6,1,2,3,Y}
{2,3} {4} {2,3}

{5,6,1,2,3,Y} {4} {6,1,2,3,Y}
{6,1,2,3,Y} {4} {6,1,2,3,Y} 由DFA得状态图 用最小化方法化简得:{0},{1},{2},{3,4},按顺序重新命名DFA M’ 第四章 练习1:文法G[V]: V→N|N[E] E→V|V+E N→i 是否为LL(1)文法,如不是,如何将其改造成LL(1)文法。 解: LL(1)文法的基本条件是不含左递归和回溯(公共左因子),而G[V]中含有回溯,所以先消I Ia Ib 0 1 2 1 — 3 2 1 2 3 1 4 4 1 4

X
Y
(b*abb*)*
X

Y
b*abb*
1

X

Y

b

1
2 3
4

5 6

b
b

a


1
0
2
4

3
a
a
a a
b

b
b

b
b
0 3
1

2
a

a
a

b
b

b
Tiange's reference

3
除回溯得到文法G’[V]:
G’[V]: V→NV’ V’→ε|[E]
E→VE’ E’→ε|+E
N→i
由LL(1)文法的充要条件可证G’[V]是LL(1)文法
练习2:有文法G[s]:
S→BA A→BS|d B→aA|bS|c
(1)证明文法G是LL(1)文法。
(2)构造LL(1)分析表。
(3)写出句子adccd的分析过程
解:(1)一个LL(1)文法的充要条件是:对每一个非终结符A的任何两个不同产生式A→α|
β,有下面的条件成立:
① FIRST(α)∩FIRST(β)=Φ;
② 若β*ε, 则有FIRST(α)∩FOLLOW(A)=Φ
对于文法G[s]:
S→BA A→BS|d B→aA|bS|c
其FIRST集如下:
FIRST(B)={a, b, c}; FIRST(A)={a, b, c, d}; FIRST(S)={a, b, c}。
其FOLLOW集如下:
首先, FOLLOW(S)={#};
对S→BA有: FIRST(A)\{ε}加入FOLLOW(B), 即FOLLOW(B)={a, b, c, d };
对A→BS有:FIRST(S)\{ε}加入FOLLOW(B), 即FOLLOW(B)={a, b, c, d };
对B→aA有:FOLLOW(B)加入FOLLOW(A), 即FOLLOW(A)={a, b, c, d };
对B→bS有:FOLLOW(B)加入FOLLOW(S), 即FOLLOW(S)={#, a, b, c, d };
由A→BS|d得:
FIRST(BS) ∩FIRST(d) = { a, b, c } ∩{d} = Φ;
由B→aA|bS|c得:
FIRST(aA) ∩FIRST(bS) ∩FIRST(c) ={a} ∩{b} ∩{c}= Φ。
由于文法G[s]不存在形如 β→ε的产生式,故无需求解形如FIRST(α)∩FOLLOW(A)的值。
也即,文法G[S]是一个LL(1)文法。
(2) 由G[s]:S→BA A→BS|d B→aA|bS|c的
FIRST(B)={a, b, c}; FOLLOW(B)={a, b, c, d };
FIRST(A)={a, b, c, d}; FOLLOW(A)={a, b, c, d };
FIRST(S)={a, b, c}。 FOLLOW(S)={#, a, b, c, d }可构造LL(1)预测分析表如下:

a b c d #
S S→BA S→BA S→BA
A A→BS A→BS A→BS A→d
B B→aA B→bS B→c
S S→BA S→BA S→BA
A A→BS A→BS A→BS A→d
B B→aA B→bS B→c

相关文档
最新文档