第三章语法分析-复习+习题
第三章 语法分析

第三章语法分析典型例题 :单项选择题3.1.1. 文法 G: S-xSxly 所识别的语言是 _____ (陕西省 1997 年自考题)a. xyxb. (xyx)*c. xnyxn(n ≥ 0)d. x*yx*3.1.2. 文法 G 描述的语言 L(G) 是指 _____ 。
a. L(G)= {α |S=α,α ∈ VT* }b. L(G)={ α |SA=α , α ∈ VT* }c .L(G)={ α |S=α,α∈ (VT ∪ VN)* } d. L(G)= {α |S=α , α∈ (VT ∪ VN)* }3.1.3. 有限状态自动机能识别_。
a. 上下文无关文法b. 上下文有关文法c. 正规文法d. 短语文法3.1.4. 设 G 为算符优先文法, G 的任意终结符对 a, b 有以下关系成立 ____ 。
a. 若 f(a)g(b) ,则 a bb. 若 f(a)<g(b) ,则 a<bc.a~b 都不一定成立d. a~b 一定成立3.1.5 .茹果文法 G 是无二义的,则它的任何句子α _ _。
(西电 1999 年研究生试题)a. 最左推导和最右推导对应的语法树必定相同b. 最左推导和最右推导对应的语法树可能不同c. 最左推导和最右推导必定相同d. 可能存在两个不同的最左推导,但它们对应的语法树相同3.1. 6. 由文法的开始符经。
步或多步推导产生的文法符号序列是 ____ 。
(陕西省 2000 年自考题)a .短语 b. 句柄 c. 句型 d. 句子3.1.7 .文法 G : E-E+TITT-T*P|PP-(E)|I则句型 P+T+i 的句柄和最左素短语分别为 __ _。
a. P+T 和 ib. P 和 P+Tc. i 和 P+T+id. P 和 P3.1.8 .设文法为: S--SA|AA→a|b则对句子 aba ,下面 ____ 是规范推导.a. S=SA=SAA=AAA=aAA=abA=abab. S=SA=SAA=AAA=AAa= Aba =abac. S=SA=SAA=SAa=Sba= Aba =abad. S=SA=Sa=Sba= Aba =aba3.1.9. 文法G: S → b| ∧ |(T)T-T,SIS则 FIRSTVT(T)=____ 。
《编译原理》课后习题答案第三章第3章文法和语言第1

《编译原理》课后习题答案第三章第3 章文法和语言第1 题文法G=({A,B,S},{a,b,c},P,S)其中P 为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。
答案:L(G[S])={abc}第2 题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[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|DD->0|1|2|3|4|5|6|7|8|9第4 题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。
盛威网()专业的计算机学习网站 1《编译原理》课后习题答案第三章答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbbL(G[Z])={anbn|n>=1}第5 题写一文法,使其语言是偶正整数的集合。
要求:(1) 允许0 打头;(2)不允许0 打头。
答案:(1)允许0 开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0 开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6 题已知文法G:<表达式>::=<项>|<表达式>+<项><项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。
(5)i+(i+i)(6)i+i*i盛威网()专业的计算机学习网站 2 《编译原理》课后习题答案第三章答案:<表达式><表达式> + <项><因子><表达式><表达式> + <项><因子>i<项><因子>i<项><因子>i( )(5) <表达式>=><表达式>+<项>=><表达式>+<因子>=><表达式>+(<表达式>)=><表达式>+(<表达式>+<项>)=><表达式>+(<表达式>+<因子>)=><表达式>+(<表达式>+i)=><表达式>+(<项>+i)=><表达式>+(<因子>+i)=><表达式>+(i+i)=><项>+(i+i)=><因子>+(i+i)=>i+(i+i)<表达式><表达式> + <项><项> * <因子><因子> i<项><因子>ii(6) <表达式>=><表达式>+<项>=><表达式>+<项>*<因子>=><表达式>+<项>*i=><表达式>+<因子>*i=><表达式>+i*i=><项>+i*i=><因子>+i*i=>i+i*i盛威网()专业的计算机学习网站 3《编译原理》课后习题答案第三章第7 题证明下述文法G[〈表达式〉]是二义的。
第3章 语法分析-编译原理及实践教程(第3版)-黄贤英-清华大学出版社

3.2.1 文法的定义
例1:有如下规则
<句子><主语><谓语> <主语><代词>|<名词> <代词>我 <名词>大学生 <谓语><动词><直接宾语> <动词>是 <直接宾语><代词>|<名词>
(表示由…组成)
• 归约:推导的逆过程。
• 直接归约:直接推导的逆过程
几个概念的形式定义
• 直接推导: 如果αβ是文法 G=(Vn,Vt,P,S)
的产生式,γ和δ是V*中的任意符号,若有符号 串v,w满足: v=γαδ,w=γβδ,则说v直接产生w,(w是v的 直接推导)记作:v=>w 例:S01, 0S0=>0010(直接推导γ=0,δ=0) • 如果存在v=>w0=>w1=>w2...=>Wn=w(n>0),则 称v推导出w(长度为n),记作v+=>w(至少一步) • 若有v=>w或v=w,则记作v*=>w(0步或若干步)
一个非终结符号,β∈V*)
–上例中: G=(Vn,Vt,P,<句子>)
Vn=(<句子>,<主语>,<谓语>,<代词>,<动词>,
<名词>,<直接宾语>)
Vt= (我,是,大学生)
P=
<句子><主语><谓语>
<主语> <代词>|<名词>
编译原理及实现技术:7.语法分析__语法树、二义性文法

SSS|a 可以推导出SSS串,必有二义性 SS+S 可以推导出S+S+S,必有二义 性
10
2.2 文法二义性的判定和利用
文法二义性的利用 对二义性文法进行修改,消除其二义性
会导致文法的复杂程度和符号数目迅速升 高。 可以利用二义性文法状态少,分析快的 特点,使用二义性文法,对具体问题加入 语义规则,约束其二义性即可。
16
若干历年考试题
设有一个文法G[S]: S->V V->T|ViT T->F|T+F F->V*|[
F+Fi[
句型F+Fi[的短语,简 单短语和句柄分别为: 首F,F+F, F+Fi[, [ 首F,[; 首F。
17
14
若干历年考试题
构造一个文法G,使 L(G)={anbmck|m=n+k,n≥1,m>1,k≥1}
G[S]: SAB AaAb| ab BbBc| bc
15
若干历年考试题
已知文法G[Z]: ZWV WaB | aW | a Bb | bB VbV | dD Dd | dD
判断文法G[Z]是否为二义性文法,如果是请举 例 句子abdd有两棵语法树。
语法树:设G是给定的语法,称满足下列条
件的树为G的一棵语法树: 1. 树的每个节点都标有G的一个语法符号,且根
节点标有初始符S。 2. 如果一个非叶节点A按从左到右顺序有n个儿子
节点B1、B2、…、Bn,则: AB1B2…Bn 一定是 G的一个产生式.
2
1.1 语法树的定义
例子:有文法
E
E E+T E T T T *F
编译原理教程-课后习题答案第三章语法分析

由 A′→ABl 得 FIRST(′l′) FOLLOW(B) , 即 FOLLOW(B)={l};
由 A→aA′ 得 FOLLOW(A) FOLLOW(A′) , 即 FOLLOW(A′)={#,d};
第三章 语法分析
由 B→dB′ 得 FOLLOW(B) FOLLOW(B′) , 即 FOLLOW(B′)={l}。
第三章 语法分析
求得:
FIRST(A)={a}
FIRST(A′)={a, ε }
FIRST(B)={d}
FIRST(B′)={b, ε }
对文法开始符号A,有FOLLOW(A)={#}。
由 A′→ABl 得 FIRST(B)\{ ε }FOLLOW(A) , 即 FOLLOW(A)={#,d};
第三章 语法分析
3.9 考虑文法G[S]: S→(T) | a+S | a T→T,S | S
消除文法的左递归及提取公共左因子,然后对每 个非终结符写出不带回溯的递归子程序。
【解答】 消除文法G[S]的左递归: S→(T) | a+S | a T→ST′ T′→,ST′| ε
第三章 语法分析 提取公共左因子:
短语和最左素短语。 【解答】 (1) 句型(S, (a))的语法树如图3-5所示。
第三章 语法分析
S (L ) L ,S S (L )
S a
图3-5 句型(S,(a))的语法树
第三章 语法分析
(2) 由图3-5可知: 短语:S、a、(a)、S,(a)、(S,(a)); 直接短语:a、S; 句柄:S; 素短语:素短语可由图3-5中相邻终结符之间的优 先关系求得,即:
由图3-3可直接得到正规文法G[S]如下: G[S]:S→aA|bB A→aS|bC|b B→bS|aC|a C→bA|aB|ε
编译原理第三版课后习题答案

编译原理第三版课后习题答案编译原理是计算机科学中的一门重要课程,它研究的是如何将高级程序语言转换为机器语言的过程。
而《编译原理》第三版是目前被广泛采用的教材之一。
在学习过程中,课后习题是巩固知识、提高能力的重要环节。
本文将为读者提供《编译原理》第三版课后习题的答案,希望能够帮助读者更好地理解和掌握这门课程。
第一章:引论习题1.1:编译器和解释器有什么区别?答案:编译器将整个源程序转换为目标代码,然后一次性执行目标代码;而解释器则逐行解释源程序,并即时执行。
习题1.2:编译器的主要任务是什么?答案:编译器的主要任务是将高级程序语言转换为目标代码,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等过程。
第二章:词法分析习题2.1:什么是词法分析?答案:词法分析是将源程序中的字符序列划分为有意义的词素(token)序列的过程。
习题2.2:请给出识别下列词素的正则表达式:(1)整数:[0-9]+(2)浮点数:[0-9]+\.[0-9]+(3)标识符:[a-zA-Z_][a-zA-Z_0-9]*第三章:语法分析习题3.1:什么是语法分析?答案:语法分析是将词法分析得到的词素序列转换为语法树的过程。
习题3.2:请给出下列文法的FIRST集和FOLLOW集:S -> aAbA -> cA | ε答案:FIRST(S) = {a}FIRST(A) = {c, ε}FOLLOW(S) = {$}FOLLOW(A) = {b}第四章:语义分析习题4.1:什么是语义分析?答案:语义分析是对源程序进行静态和动态语义检查的过程。
习题4.2:请给出下列文法的语义动作:S -> if E then S1 else S2答案:1. 计算E的值2. 如果E的值为真,则执行S1;否则执行S2。
第五章:中间代码生成习题5.1:什么是中间代码?答案:中间代码是一种介于源代码和目标代码之间的表示形式,它将源代码转换为一种更容易进行优化和转换的形式。
编译原理第三章语法分析

3.2 语言和文法
• 文法的优点
–文法给出了精确的,易于理解的语法说明 –自动产生高效的分析器
–可以给语言定义出层次结构
3.2 语言和文法
• 文法的优点
–文法给出了精确的,易于理解的语法说明 –自动产生高效的分析器
–可以给语言定义出层次结构
–以文法为基础的语言实现便于语言的修改
3.2 语言和文法
F id | (E)
3.2 语言和文法
E E+T|T TT* F|F F id | (E)
E T T T * F id F id
E E
T F
+
T F
T * F
id
*
F
id
id id * id * id 和 id + id * id 的分析树
id
3.2 语言和文法
3.2.5 消除二义性 stmt if expr then stmt | if expr then stmt else stmt | other • 句型:if expr then if expr then stmt else stmt
3.2 语言和文法
3.2.5 消除二义性 stmt if expr then stmt | if expr then stmt else stmt | other • 句型:if expr then if expr then stmt else stmt • 两个最左推导: stmt if expr then stmt if expr then if expr then stmt else stmt stmt if expr then stmt else stmt if expr then if expr then stmt else stmt
unit 3 语法练习题含答案

unit 3 语法练习题(学生版)一、选择题。
1.My bike is missing. I can't find ______ anywhere.A.oneB.onesC.itD.thatC 解析it指前文提到的同一个可数名词单数或不可数词,one指同类的一个, that指同类中的一个,以避免重复。
2.Who's that? _____professor Li.A.That'sB.It'sC.He'sD.She'sB 解析主语是that指人时,一般用让t来回答,不表示男女性别。
3.______Jane and Kate that I saw in the library this morning.A. It wasB.They wereC.These wereD.Those areA解析:此题是强调句, 强调句用it is/was,其中is不能用are代替,was不能用were代替。
4.-Have you ever seen a whale alive?-Yes, I’ve seen_______.A.thatB.itC.suchD.oneD 解析one用来指前文中提到的同类名词的单数,但不指同一个。
5.The color of my coat is different from_____of yours.A.thisB.thatC.itD.oneB 解析that等于当that用在表示比较的句子中时,用来代替前文中提到的可数名词单数或不可数名词,6.We think_______our duty to pay taxes to our government.A.thatB.thisC.itsD.itD 解析t在此句中作形式宾语,真正的宾语是后面的动词不定式。
7.________will do you good to do some exercise every day.A.ItB.ThereC.ThoseD.You(A)解析i在此句中作形式主语,真正的主语是后面的动词不定式8.______four years since I joined the army.A.There wasB.There isC.It wasD.It isD解析“段时间从句”是固定句型9.It was Oct. 1st______new China was founded.A. whichB.thatC.whenD.asC.解析此句it是指时间,when引导时间状语从句,如果前有介词on,应选因为有介词on就成了强调句。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
19
语法分析内容总结 自下而上分析部分知识点 • SLR,LR,LALR的区别及判别方法 SLR,LR,LALR的区别及判别方法
– 通过构造DFA,看其中的状态是否有冲突(“移 进—归约” 或 “归约—归约”)若有冲突则不 属于该文法类型。 – 通过构造分析表,看其中某项是否有冲突。
20
文法类的层次图
4
文法G: 文法
文法G: 文法
S->aSb | P P->bPc | bQc Q->Qa | a 哪一型文法? (1)它是 )它是chomsky哪一型文法? 哪一型文法 它是2型文法 即上下文无关文法。 型文法, 答:它是2型文法,即上下文无关文法。 (2)它生成的语言是什么? )它生成的语言是什么? 答:{aibjakcjbi | i>=0; j,k>=1}
S→V=E S→E V→*E V → id E→V
24
LR(1)分析练习解答过程 • 答: • Step 1. 对原文法进行拓广
– (添加产生式S->S’)
S→V=E S→E V→*E V → id E→V
S → S’ S→V=E S→E V→*E V → id E→V
25
识别产生式文法活前缀的DFA
21
语法分析部分回顾 例2 文法G[S]: 文法G[S]: S->AaS | bAe | BeS | bBa A->d B->d 判断这个文法是SLR(1)的 还是LR(1)的 判断这个文法是SLR(1)的,还是LR(1)的,抑 或是LALR(1)的 或是LALR(1)的
22
语法分析部分回顾 例2 解答: 解答: I2=goto(I0,d) I0 : S′→·S S→·AaS S → · bAe S→·BeS S→ ·bBa A→ ·d B→ ·d
9
(7)利用非递归预测分析程序,验证 )利用非递归预测分析程序,验证abacb是 是 否是文法G描述的语言的句子 否是文法 描述的语言的句子 栈 $S $bSa $bS $bP $bP’b $bP’ 输入 abacb$ abacb$ bacb$ bacb$ bacb$ acb$
10
输出 S->aSb S->P P->bP’
2个函数
非递归的 预测分析
LR文法 LR文法
栈 sm Xm sm-1 Xm-1 … s0
输 入
a1 … ai … an $
LR分析程序 LR分析程序
输 出 简单的LR方法(SLR) 简单的LR方法(SLR) 方法 规范的LR方法 规范的LR方法 向前看的LR方法 方法(LALR) 向前看的LR方法(LALR)
– 如果改写后的文法是LL(1)的,那么进行 如果改写后的文法是LL(1)的 LL(1)分析 LL(1)分析
• 构造LL(1)分析算法 构造LL(1) LL(1)分析算法 – 可以采用递归函数实现,也可以采用非递归的栈 可以采用递归函数实现, 式分析方法实现
3
S->aSb | P P->bPc | bQc Q->Qa | a 哪一型文法? (1)它是 )它是chomsky哪一型文法? 哪一型文法 (2)它生成的语言是什么? )它生成的语言是什么? (3)给出提取左因子、消除左递归之后的文法 )给出提取左因子、 集和Follow集 (4)求出每个非终结符的 )求出每个非终结符的First集和 集和 集 (5)构建LL(1)预测分析表 )构建 ( ) 是否是LL( ) (6)文法 是否是 (1)文法 )文法G是否是 (7)利用非递归预测分析程序,验证 )利用非递归预测分析程序,验证abacb是否是 是否是 文法G描述的语言的句子 文法 描述的语言的句子
7
(5)构建 (1)预测分析表 )构建LL( )
输入符号 非终结符
a S->aSb
b S->P P->bP’
c
$
S P P’ Q Q’
P’->Qc Q->aQ’ Q’->aQ’
P’->Pc Q’->ε ε
8
是否是LL( ) (6)文法 是否是 (1)文法 )文法G是否是 构建出的LL( ) 答:构建出的 (1)分析表不含有多重定 义的条目,因此文法G是 ( )文法。 义的条目,因此文法 是LL(1)文法。
I0 S'→• S S → • V=E S→•E V → • *E V → • id E→•V id I5 E I6 S → V = • E E S → V=E • E→•V I9 id V → • *E V I3 S → V •=E = V → • id I2 E → V • V * * V → *• E I4 E → • V V E → V • I8 V → • id E id V → • * E V → *E • I7 S'→ S • * S I1
右句型的前缀, 右句型的前缀, 该前缀不超过最 右句柄的右端
活前缀
action
goto
LR分析器的模型 LR分析器的模型
语法分析部分回顾 自上而下分析的知识点 • LL(1)文法的判定 LL(1)文法的判定
– FIRST、FOLLOW集的计算(重点) FIRST、FOLLOW集的计算 重点) 集的计算( – LL(1)文法判定方法 LL(1)文法判定方法
13
语法分析部分回顾 FIRST(E) = {[} FIRST(T) = {a} FIRST(T’)= {[, ε} FIRST(F) = {a} FIRST(F’)= {a, ε} FOLLOW(E)={[,$} FOLLOW(T)={[,$} FOLLOW(T’)={[,$} FOLLOW(F)={]} FOLLOW(F’)={]}
15
语法分析部分回顾 左递归的消除 • G[S]: S->Qc|c Q->Sa|a 这是一类间接左递归 S->acS’| cS’ S’->acS’| ε S’Q->Sa|a
S->Sac|ac|c Q->Sa|a
16
语法分析部分回顾 LR分析部分的知识点 LR分析部分的知识点 • 活前缀 • 识别活前缀的DFA 识别活前缀的DFA • 分析表 • 分析算法
温故知新
上下文无关文法 最左推导 自上而下 自下而上 归约 递归下降 预测分析 最右推导 句柄
!
1。句柄与某个产生式的右部 符号串相同 2。句柄是句型的一个子串 3。把句柄归约成非终结符代 表了最右推导逆过程的 一步
移进移进-归约冲突 规约规约-归约冲 突
移进移进-归约分析
LL(1)文法 LL(1)文法
• LL(1)分析的实现方法 LL(1)分析的实现方法
– 递归函数实现 – 非递归的预测分析实现
先求FIRST FOLLOW集 先求FIRST、FOLLOW集 FIRST、 画预测分析表
2
语法分析部分回顾
应用LL(1)分析方法的步骤 应用LL(1)分析方法的步骤 • 判定文法是否是LL(1)文法 判定文法是否是LL(1) LL(1)文法 – 如果不是,则改写文法 如果不是, • 消除左递归 • 提取左因子
S->AaS | bAe | BeS | bBa A->d B->d
d
I2 : A→d· B→d·
e属于FOLLOW(A),同 属于FOLLOW(A),同 时也属于 FOLLOW(B), I2里存 I2里存 在归约在归约-归约冲突
23
LR(1)分析练习题目
基于LR(1)项目来构造识别 活前缀的DFA,并基于DFA构建 基于LR(1)项目来构造识别G′活前缀的DFA,并基于DFA构建 项目来构造识别G 分析表.
18
语法分析内容总结 自下而上分析部分知识点 • LR,LALR的构造方法(在SLR的基础上加上搜 LR,LALR的构造方法 的构造方法( SLR的基础上加上搜 索符) 索符)
–搜索符的求法,根据造成目前项目出现的那个父 搜索符的求法, 项目来求。 项目来求。 –求闭包的过程中可能出现要添加的项目已经存在 但是搜索符不同的情况, ,但是搜索符不同的情况,相当于其父项目已经 改变,此时需要再求一遍搜索符。 改变,此时需要再求一遍搜索符。
接上表
栈 $bcQ $bcQ’a $bcQ’ $bc $b $
输入 acb$ acb$ cb$ cb$ b$ $
输出 P’->Qc Q->aQ’ Q’-> ε
11
语法分析部分回顾 例2 文法G[E]: 文法G[E]: E-> [ T T-> TE | F ] F-> a | aF (1) 判断这个文法是不是LL(1)的? 判断这个文法是不是LL(1)的 (2) 消除左递归、提取左因子之后的文法G’是否 消除左递归、提取左因子之后的文法G’是否 LL(1)的 是LL(1)的?
5
文法G: 文法
S->aSb | P P->bPc | bQc Q->Qa | a (3)给出提取左因子、消除左递归之后的文法 )给出提取左因子、 答: S->aSb | P P->bP’ P’->Pc | Qc Q->aQ’ Q’->aQ’ | ε
6
集和Follow集 (4)求出每个非终结符的 )求出每个非终结符的First集和 集和 集
V → id •
I3 S → E •
26
LR(1)分析练习解答过程 • Step 2: 构建识别(拓广)文法活前缀的DFA
I 6: E I : 10 I 0: S->V=·E, $ >V=· S->V=E·, $ >V=E· = S’->·S, $ E->·V, $ V S->·V=E, $ V->·*E, $ 指向I 指向I7 I 2: V S->V·=E, $ S->·E, $ V->·id, $ id >V· I11: V->·*E, =/$ E->V·, $ >V· V->id·, $ >id· * V->·id, =/$ I 7: E E->V·, $ >V· E->·V, $ I 3: I12 : E I13: S->E·, $ >E· V->*·E, $ >*· S->*E·, $ >*E· I 8: * id E->·V, $ >*E· E S->*E·, =/$ V V->·*E, $ 指向I 指向I7 I 4: V I 9: * V->·id, $ I 5: V->*·E, =/$ >*· >V· V->id·, =/$ E->·V, =/$ >id· * E->V·, =/$ id 指向I 指向I11 V->·*E, =/$ V->·id, =/$ id 指向I5 指向I