编译原理PPT总结Word格式.docx
《编译原理PPT总结Word格式.docx》由会员分享,可在线阅读,更多相关《编译原理PPT总结Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
将(6)代入
(1)式中的A,得
Z=0(0+01)*0
即正规文法G[Z]所生成语言的正规式是:
R=0(0|01)*0
例2设有正规文法G:
AaB|bB
BaC|a|b
CaB
A=aB+bB
(1)
B=aC+a+b
(2)
C=aB(3)
将(3)代入
(2)中的C得
B=aaB+a+b(4)
对(4)使用求解规则得
B=(aa)*(a+b)(5)
(5)代入
(1)中的B得
A=(a+b)(aa)*(a+b)
即正规文法G[A]所生成语言的正规式是:
R=(a|b)(aa)*(a|b)
2.正规式到正规文法的转换:
(1)令VT=Σ
(2)对任何正规式R选择一个非终结符Z生成规则ZR并令S=Z。
(3)若a和b都是正规式,对形如Aab的规则转换成AaB和Bb两规则,其中B是新增的非终结符。
(4)对已转换的文法中,形如Aa*b的规则,进一步转换成AaA|b。
(5)不断利用规则(3)和(4)进行变换,直到每条规则最多含有一个终结符为止。
例1将R=(a|b)(aa)*(a|b)转换成相应的正规文法。
解:
令A是文法开始符号,根据规则
(2)变换为:
A(a|b)(aa)*(a|b)
根据规则(3)变换为:
A(a|b)B
B(aa)*(a|b)
对B根据规则(4)变换为
BaaB|a|b
根据规则(3)变换为
3.确定有限自动机(DFA)的定义:
确定的有限自动机DFAM是一个五元式
M=(S,,δ,s0,F)
(1)S是一个非空有限集,它的每个元素称为一个状态
(2)是一个有穷字母表,它的每个元素称为一个输入符号,所以也称为输入符号字母表
(3)δ是状态转换函数,是在S×
→S上的单值映射。
δ(s,a)=s’意味着:
当先行状态为s、输入字符为a时,将转到下一状态s’。
我们称s’为s的一个后继状态。
(4)s0∈S,是唯一的一个初态
(5)FS,是一个终态集(可空),终态也称可接受状态或结束状态。
例如有DFAM=({0,1,2,3},{a,b},δ,0,{3})其中δ定义为:
δ(0,a)=1δ(0,b)=2δ(1,a)=3
δ(1,b)=2δ(2,a)=1δ(2,b)=3
δ(3,a)=3δ(3,b)=3
其它表示形式:
状态转换矩阵和状态转换图
NFA和DFA的不同在于:
1)δ的值域是S的子集
2)开始状态有不止一个
3)在NFA中每个结点可射出若干条弧与别的结点相连接,每条弧用∑中的一个正规式做标记。
例如NFAM=({0,1,2,3,4},{a,b},δ,{0},{1,2})
其中:
δ(0,a)={0,3}δ(0,b)={0,4}
δ(1,a)={1}δ(1,b)={1}
δ(2,a)={2}δ(2,b)={2}
δ(3,a)={1}δ(3,b)=φ
δ(4,a)=φδ(4,b)={2}
状态转换矩阵和状态转换图:
例1试构造识别语言R=(a|b)*abb的NFAN,使L(N)=L(R)。
首先将R表示成如下拓广转换图
4.从NFAM构造正规式r举例
从NFAM构造正规式r举例:
5.由NFA确定DFA:
将NFA确定化为DFA的原因:
•使用NFA判定某个输入符号串的时候,可能出现不确定的情况:
不知道下面选择那个状态。
如果选择不好,该输入符号串可能不能到达终止状态。
但是,我们不能说该输入符号串不能被该NFA接受
•如果通过尝试的方法,不断试探来确定输入符号串是否可被接受,那么判定的效率将降低。
解决的方法是将NFA转换为等价的DFA
例1构造下述文法G[Z]的有穷自动机。
Z→0AA→0A|0BB→1A|ε解:
f(Z,0)=Af(Z,1)=Φf(z,ε)=Φ
f(A,0)=A,Bf(A,0)=A,Bf(A,1)=Φf(A,ε)=Φ
f(B,0)=Φff(B,0)=Φf(B,1)=Af(B,ε)=D
例4.设字母表Σ={a,b},给出Σ上的正规式
R=b*ab(b|ab)*
1.试构造状态最小化的DFAM,使得
L(M)=L(R)。
2.求右线性文法G,使L(G)=L(M)。
解:
对正规式R=b*ab(b|ab)*采用分列法构造NFA,
见下图。
对NFA采用子集法构造其等价的DFA的状态转换矩阵
对DFA采用分化的方法得到状态最小化的DFA
消去文法G[S]的左递归
求非终结符A的Follow集的算法
1.如果A是开始符号,#∈Follow(A)
2.若有产生式BαAaβ,a∈VT,则
把a加入到Follow(A)中;
3.若有产生式BαAXβ,X∈VN,则
把First(Xβ)中非ε元素加入Follow(A)中;
4.若BαA或BαAβ,β=>
ε,则
把Follow(B)加入到Follow(A)中;
5.连续使用上述规则,直到Follow(A)不再增大。
设文法G(S):
S→(L)|aS|a
L→L,S|S
(1)消除左递归和回溯;
(2)计算每个非终结符的First和Follow集;
•(3)构造预测分析表。
练习1:
文法G[V]:
V→N|N[E]E→V|V+EN→i
是否为LL
(1)文法,如不是,如何将其改造成LL
(1)文法。
LL
(1)文法的基本条件是不含左递归和回溯(公共左因子),而G[V]中含有回溯,所以先消除回溯得到文法G’[V]:
G’[V]:
V→NV’V’→ε|[E]
E→VE’E’→ε|+E
N→i
由LL
(1)文法的充要条件可证G’[V]是LL
(1)文法。
练习2:
有文法G[s]:
S→BAA→BS|dB→aA|bS|c
(1)证明文法G是LL
(1)文法。
(2)构造LL
(1)分析表。
(3)写出句子abccd的分析过程
(1)对于文法G[s]:
S→BAA→BS|dB→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→BAA→BS|dB→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)预测分析表如下:
6.自下而上分析基本思想:
从输入串出发,逐步进行归约,直至归约到文法的开始符号,那么输入串是文法的句子,否则输入串有语法错误
或者说,从语法树的末端开始,步步向上归约,修剪语法树,直到只剩根结点
归约——用产生式的左部替代右部
关键——寻找每步句型中可归约串
寻找方式不同,分析方法不同
效率更高,对语法限制更少
直接短语(P85)
若S*αAδ且Aβ,则称β是句
αβδ相对于非终结符号A的直接短语一个句型的最左直接短语称为该句型的句柄素短语
(1)是一个短语
(2)至少包含一个终结符
(3)且除自身外不再包含其它素短语
FIRSTVT和LASTVT集合的定义
关于文法G中的每个非终结符P:
FIRSTVT(P)={a|P+a…,或者P+Qa…,
a∈VT且Q∈VN}
含义:
由P往下推导所有可能出现的首个终结符
例如:
有F→(E)|i,则(,i∈FIRSTVT(F)
有E→E+T,则EE+T,+∈FIRSTVT(E)
LASTVT(P)={a|P+…a,或者P+…aQ,
a∈VT且Q∈VN}
由P往下推导所有可能出现的最后一个终结符
有F→(E)|i,则),i∈LASTVT(F)
有E→E+T,则EE+T,+∈LASTVT(E)
连续使用下面两条规则,直到FIRSTVT(P)不再扩大为止
若有P→a…或P→Qa…,则a∈FIRSTVT(P)
若a∈FIRSTVT(Q),且有P→Q…,则a∈FIRSTVT(P)
即FIRSTVT(Q)加入FIRSTVT(P)
连续使用下面两条规则,直到LASTVT(P)不再扩大为止
若有P→…a或P→…aQ,则a∈LASTVT(P)
若a∈LASTVT(Q),且有P→…Q,则a∈LASTVT(P)
即把LASTVT(Q)中加入LASTVT(P)中
确定算符的优先关系,构造文法的算符优先表
若有A→…ab…或A→…aPb…,则a=b
若有A→…aP…,对b∈FIRSTVT(P),则a<
b
若有A→…Pb…,对a∈LASTVT(P),则a>
1.可归前缀是指A。
A规范句型的(可归)前缀B活前缀
C含有句柄的活前缀D句柄
2.若a为终结符,则A→α.aβ为A项目。
A移进B待约C规约D接受
3.LR分析器核心部分是一张分析表,该表由组成。
(D)
AACTION表BGOTO表CLL
(1)分析表DACTION表和GOTO表
4.算符优先分析法每次都是对进行规约。
(B)
A短语B最左素短语C素短语D句柄
5自下而上语法分析的基本思想是:
从待输入的符号串出发,利用文法的产生式步步向上规约,试图直至规约到文法的开始符号。
6最右推导也被称为规范推导,其所得到的句型称为规范句型。
7规范归约每次归约的是当前句型的句柄,算符优先文法每次归约的是当前句型的最左素短语。
8、LR(0)分析法的名字中,“L”的含义是从左到右扫描输入串,“R”的含义是构造一个最右推导的逆过程,“0含义是每步顶多向前检查0个输入字符。
9所谓素短语是指这样的一个短语,它至少含有一个终结符并且,除它自身之外不再含有任何更小的素短语。