当前位置: 首页 > news >正文

【编译原理】第四章 习题

目录

LL(1)文法的条件(是否是LL(1)文法)

左递归的消除

间接左递归的消除

消除文法中全部左递归的算法

FIRST集

FOLLOW集

习题123


LL(1)文法的条件(是否是LL(1)文法)

左递归的消除

间接左递归的消除

消除文法中全部左递归的算法

前提:该文法不含回路。

FIRST集

FOLLOW集

习题123

考虑下面文法G1:
S→a|∧|(T)
T→T,S|S

(1)消除G1的左递归。然后,对每个非终结符,写出不带回溯的递归子程序
(2)经改写或的文法是否是LL(1)的?给出它的预测分析表

对下面的文法G:
E→TE’
E’→+ Elε
T→FT’
T’→Tlε
F→PF’
F’→*F’lε
P→(E)|a|b|^
(1)计算这个文法的每个非终结符的FIRST和 FOLIOW。
(2证明这个文法是LL(1)的。
(3)构造它的预测分析表。

下面文法中,哪些是LL(1)的,说明理由。
(1)
S->Abc
A->a|ε
B→b|ε
(2)
S->Ab
A→a|B|ε
B->b|ε
(3)
S→ABBA
A->a|ε
B->b|ε
(4)
S->aSe|B
B→bBe|C
C->cCe|d

3)对i+i*i进行预测分析的过程表

步骤分析栈余留输入串所用产生式
1#Ei+i*i#E->TE'
2#E'Ti+i*i#T->FT'
3#E'T'Fi+i*i#F->i
4#E'T'ii+i*i#
5#E'T'+i*i#T'->\varepsilon
6#E'+i*i#E'->ATE'
7#E'TA+i*i#A->+
8#E'T++i*i#
9#E'Ti*i#T->FT'
10#E'T'Fi*i#F->i
11#E'T'ii*i#
12#E'T'*i#T'->MFT'
13#E'T'FM*i#M->*
14#E'T'F**i#
15#E'T'Fi#F->i
16#E'T'ii#
17#E'T'#T'->\varepsilon
18#E'#E'->\varepsilon
19##分析成功

 

 

 

 

 

消除G2的左递归,判断改造后文法是否是LL(1)文法。
文法G2:
S→a|∧|(T)
T→T,S|S

消除G2的左递归
S→a|∧|(T)
T->ST'
T'->,ST'|ε
是LL(1)文法

不含左递归
非终结符的各个产生式首符集不相交
First(S)={a,∧,(}
Filrst(T)={a,∧,(}
Filrst(T')={,,ε}
T'首符集存在ε 
Filrst(T')={,,ε}
Follow(T')={)}
First(T')∩Follow(T')=∅

G[E]:
    E→TE’      
    E’→+TE’|ε     
    T→FT’
    T’→*FT’|ε
    F→(E)|i

 

First(E’T’)={+,*,ε}

FIRST(E)={(,i} 
FIRST(T)={(,i} 
FIRST(F)={(,i} 
FIRST(E')={+,ε}
FIRST(T')={*,ε}

Follow(E)={#,)} 
Follow(T)={#,)} 
Follow(F)={+,#,)} 
Follow(E')={+,#,)} 
Follow(T')={*,+,#,)} 

 

消除下列文法G[S]的左递归,获得与其等价的、无左递归的文法G’[S]。

G[S]:S→Qc︱c
Q→Rb︱b
R→Sa︱a

S->Qc|c

Q->Rb|b

R->(bca|ca|a)R'

R'->bcaR'|ε

设文法G]S]: S→^ | a | (T)

T→T,S | S

G’[S]:  S→^ | a | (T)

T→ST’ | S

T’→,ST’ |ε 


FIRST(S)={a, ^, (}, FOLLOW(S)={#,  ,, )} 
FIRST(T)={a, ^, (} ,FOLLOW(T)={)} 
FIRST(T’)={,, ε} ,FOLLOW(F)={)}

 

a^(),#
SS->aS->^S->(T)
TT->ST'T->ST'T->ST'
T'T'->\varepsilonT'->ST'

 

已知文法G[S]:S→a | ^ | (T)

T→T,S | S

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

短语:((T,S),a)  (T,S),a  (T,S)  T,S  a

直接短语:T,S  a

设文法G[S]:

S→(T) | a

T→T+S | S
(1)计算FIRST 和FOLLOW;
(2)构造优先关系表。

FIRST(S)={a,  ( }        
FIRST(T)={+,  a, (}         
FOLLOW(S)={a,  ) } 
FOLLOW(T)={+,  a,  )}

 

a+()#
a.>.>.>
+<..><..>
(<.<.<.=.
).>.>.>
#<.<.=.

 

已知文法G[S]:
E→E+T | T
T→T*F| F
F→(E)| i

(1) 给出句型 (i+i)*i+i的最左推导及画出语法树;

(2) 给出句型 (E+T)*i+F 的短语,素短语和最左素短语。

E=>E+T=>T+T=>T*F+T=>F*F+T=>(E)*F+T=>(E+T)*F+T=>(T+T)*F+T

=>(F+T)*F+T=>(i+T)*F+T=>(i+F)*F+T=>(i+i)*F+T

=>(i+i)*i+T=>(i+i)*i+F=>(i+i)*i+i

短语: i, F,  E+T,  (E+T),  (E+T)*i,  (E+T)*i+F

素短语: i,  E+T 

最左素短语: E+T

相关文章:

  • pandas读取Excel数据(.xlsx和.xls)到treeview
  • 传感器的精度,灵敏度等概念介绍
  • terraform实现本地加密与解密
  • vue3内置组件Suspense的使用
  • 在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
  • Nginx 核心功能02
  • WGCLOUD使用 - 如何监控RabbitMQ运行参数
  • Python10天冲刺-设计模型之策略模式
  • 机器学习经典算法:用决策树原理优化新能源汽车续航能力
  • 【Redis】String详细介绍及其应用场景
  • 深度学习系统学习系列【1】之基本知识
  • npm宿主依赖、宿主环境依赖(peerDependencies)(指由宿主环境提供的依赖)
  • Ubuntu20.04如何优雅的安装ROS 1(胎教级教程)
  • Ocelot与.NETcore7.0部署(基于腾讯云)
  • loads、dumps、jsonpath使用场景
  • 上位机知识篇---二进制操作
  • 科学养生,解锁健康生活密码
  • 【信息系统项目管理师-论文真题】2023下半年论文详解(包括解题思路和写作要点)
  • 【DeepMLF】具有可学习标记的多模态语言模型,用于情感分析中的深度融合
  • npm命令介绍(Node Package Manager)
  • 苹果第二财季营收增长5%,受关税政策影响预计下一财季新增9亿美元成本
  • 澎湃读报丨解放日报8个版聚焦:牢记嘱托,砥砺奋进
  • 武汉楼市新政:二孩、三孩家庭购买新房可分别享受6万元、12万元购房补贴
  • 平安资管总经理罗水权因个人工作原因辞职
  • 《求是》杂志发表习近平总书记重要文章《激励新时代青年在中国式现代化建设中挺膺担当》
  • 普京与卢卡申科举行会晤,将扩大在飞机制造等领域合作