190 likes | 382 Views
编译原理教案. 制作者:谭建富 学号: 200310141580 2003 级计算机系本科( 2 )班. 编译原理. 教学目标 : 了解 算符文法 和 算符优先文法 掌握 FIRSTVT 集和 LASTVT 集的构造 学会优先表的构造 重点 : FIRSTVT 集和 LASTVT 集的构造 难点 : 优先表的构造. 3.4.2 算符优先分析法.
E N D
编译原理教案 • 制作者:谭建富 • 学号:200310141580 • 2003级计算机系本科(2)班
编译原理 教学目标:了解算符文法和算符优先文法 掌握FIRSTVT集和LASTVT集的构造 学会优先表的构造 重点: FIRSTVT集和LASTVT集的构造 难点:优先表的构造
3.4.2 算符优先分析法 算符优先分析法是一种简单直观、广为使用的自下而上分析法,特别适合于表达式分析且宜于手工实现。它实际上是依照表达式四则运算过程来进行语法分析。 所谓算符优先分析,就是预先规定运算符(确切地说是终结符)之间的优先关系和结合性质,借助于这种优先关系来比较相邻运算符的优先级,以确定句型的可归约串并进行归约。 注意:算符优先分析不是规范归约。
1. 算符优先文法 算符文法: 若一个文法的任一产生式的 右部都不含两个相继的非终结符, 即不含…QR…这样的右部,则称 该文法为算符文法。 算符优先文法: 算符优先文法首先应是算符文法, 其次还要定义任意两个可能相继 出现的终结符的优先关系。 具体定义如下:
+ + + + 假定G是一个不含ε产生式的算符文法, 对任一对终结符a,b, 定义 (1) a=b当且仅当文法G中含有形如 P→…ab… 或 P→…aQb…的产生式; (2) a<b当且仅当G中含有形如 P→…aR…的产生式, 而Rb… 或 R Qb…; (3) a>b当且仅当G中含有形如 P→…Rb…的产生式, 而R …a或 RaQ。
若一个算符文法G中任一终结符对(a,b) 至多满足下述三种关系之一 : a=b,a<b,a>b 则称文法G是一个算符优先文法。 例3.10试说明下述文法G是算符文法, 但不是算符优先文法。 E→E+E∣E*E∣(E)∣i 解: 由于文法G的任一产生式右部都不 含两个相邻的非终结符, 故文法G是算符文法。
(1)由于存在E→E+E,而E+E中第二 个E可推出E*E,故有+<* (2)由于存在E→E*E,而E*E中第一 个E可推出E+E,即有+>* 可见, 运算符+和*之间同时存在两种不同的优先关系,故文法G不是算符优先文法。
+ + + + 2. 算符优先关系表的构造 通过检查文法的每个产生式的各个侯选式,可找出所有满足a=b的终结符对。 为找出所有满足关系 “<”和“>”的终结符对,需先对文法的每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P): FIRSTVT(P)={a | P a…或 P Qa…, a∈VT而Q∈VN} LASTVT(P)={a | P …a或 P …aQ, a∈VT而Q∈VN}
FIRSTVT集的构造方法: (1)若有产生式P→a…或P→Qa…, 则a∈FIRSTVT(P); (2)若有产生式P→Q…,且a∈FIRSTVT(Q), 则a∈FIRSTVT(P)。
例如 试构造文法G[E]的FIRSTVT集。 G[E]: E→E+T∣T T→T*F∣F F→(E)∣i 解: ①根据规则(1)知: 由E→E+…得, FIRSTVT(E)={+}; 由T→T*…得, FIRSTVT(T)={*}; 由F→(…和F→i得,FIRSTVT(F)={(,i} ②根据规则(2)知: 由T→F和FIRSTVT(F)={(,i}得, FIRSTVT(T)={*, (, i}; 由E→T和FIRSTVT(T)得, FIRSTVT(E)={+, *, (, i}
LASTVT集构造方法: (1)若有产生式P→…a或P→…aQ, 则a∈LASTVT(P); (2)若有产生式P→…Q,且 a∈LASTVT(Q), 则a∈LASTVT(P)。
例如 试构造文法G[E]的LASTVT集。 G[E]: E→E+T∣T T→T*F∣F F→(E)∣i 解: ①根据规则(1)知: 由E→…+T得, LASTVT(E)={+} 由T→…*F得, LASTVT(T)={*} 由F→…)和F→i得,LASTVT(F)={),i} ②根据规则(2)知: 由T→F和LASTVT(F)得, LASTVT(T)={*, ), i}; 由E→T和LASTVT(T)得, LASTVT(E)={+, *, ), i}。
构造优先关系表的方法: (1) 对形如P→…ab…或P→…aQb…的 产生式, 有a=b; (2) 对形如P→…aR…的产生式, 若 b∈FIRSTVT(R), 则a<b; (3) 对形如P→…Rb…的产生式, 若 a∈LASTVT(R),则a>b。 (4) 对于语句括号#,有 # = # #< FIRSTVT(S)中的元素 LASTVT(S)中的元素 > #
例3.11构造文法G[E]的算符优先关系表。 G[E]: E→E+T∣T T→T*F∣F F→(E)∣i 解: 构造FIRSTVT集 ①根据规则(1)知: 由E→E+…得, FIRSTVT(E)={+}; 由T→T*…得, FIRSTVT(T)={*}; 由F→(…和F→i得,FIRSTVT(F)={(,i} ②根据规则(2)知: 由T→F和FIRSTVT(F)={(,i}得, FIRSTVT(T)={*, (, i}; 由E→T和FIRSTVT(T)得, FIRSTVT(E)={+, *, (, i}
构造LASTVT集 ①根据规则(1)知: 由E→…+T得, LASTVT(E)={+}; 由T→…*F得, LASTVT(T)={*}; 由F→…)和F→i得,LASTVT(F)={),i}。 ②根据规则(2)知: 由T→F和LASTVT(F)得, LASTVT(T)={*, ), i}; 由E→T和LASTVT(T)得, LASTVT(E)={+, *, ), i}。
构造优先关系表 ①根据规则(1), 由“(E)”知, (=)。 ②根据规则(2), 由E→…+T知, + < FIRSTVT(T), 即 + < *, + < (, + < i 由T→…*F知, * < FIRSTVT(F), 即* < (, * < i 由F→(E…知, (<FIRSTVT(E), 即( < +, ( < *, ( < (, ( < i
③根据规则(3)知: 由E→E+…知, LASTVT(E)>+, 即+ > +,* > +,) > +,i > + 由T→T*…知, LASTVT(T)>*, 即* > *,) > *,i > * 由F→…E)知, LASTVT(E)>), 即+ > ),* > ),) > ),i > ) ④由#E#知, #= #; #<FIRSTVT(E), 即#<+,#<*,#<(,#<i LASTVT(E)>#, 即+>#,*>#,)>#,i>#
+ * i ( ) # + > < < < > > * > > < < > > i > > > > ( < < < < ) > > > > # < < < < 故算术表达式文法的优先关系表如下: = =