1 / 18

编译原理教案

编译原理教案. 制作者:谭建富 学号: 200310141580 2003 级计算机系本科( 2 )班. 编译原理. 教学目标 : 了解 算符文法 和 算符优先文法 掌握 FIRSTVT 集和 LASTVT 集的构造 学会优先表的构造 重点 : FIRSTVT 集和 LASTVT 集的构造 难点 : 优先表的构造. 3.4.2 算符优先分析法.

percy
Download Presentation

编译原理教案

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 编译原理教案 • 制作者:谭建富 • 学号:200310141580 • 2003级计算机系本科(2)班

  2. 编译原理 教学目标:了解算符文法和算符优先文法 掌握FIRSTVT集和LASTVT集的构造 学会优先表的构造 重点: FIRSTVT集和LASTVT集的构造 难点:优先表的构造

  3. 3.4.2 算符优先分析法 算符优先分析法是一种简单直观、广为使用的自下而上分析法,特别适合于表达式分析且宜于手工实现。它实际上是依照表达式四则运算过程来进行语法分析。 所谓算符优先分析,就是预先规定运算符(确切地说是终结符)之间的优先关系和结合性质,借助于这种优先关系来比较相邻运算符的优先级,以确定句型的可归约串并进行归约。 注意:算符优先分析不是规范归约。

  4. 1. 算符优先文法 算符文法: 若一个文法的任一产生式的 右部都不含两个相继的非终结符, 即不含…QR…这样的右部,则称 该文法为算符文法。 算符优先文法: 算符优先文法首先应是算符文法, 其次还要定义任意两个可能相继 出现的终结符的优先关系。 具体定义如下:

  5. + + + +     假定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。

  6. 若一个算符文法G中任一终结符对(a,b) 至多满足下述三种关系之一 : a=b,a<b,a>b 则称文法G是一个算符优先文法。 例3.10试说明下述文法G是算符文法, 但不是算符优先文法。 E→E+E∣E*E∣(E)∣i 解: 由于文法G的任一产生式右部都不 含两个相邻的非终结符, 故文法G是算符文法。

  7. (1)由于存在E→E+E,而E+E中第二 个E可推出E*E,故有+<* (2)由于存在E→E*E,而E*E中第一 个E可推出E+E,即有+>* 可见, 运算符+和*之间同时存在两种不同的优先关系,故文法G不是算符优先文法。

  8. + + + +     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}

  9. FIRSTVT集的构造方法: (1)若有产生式P→a…或P→Qa…, 则a∈FIRSTVT(P); (2)若有产生式P→Q…,且a∈FIRSTVT(Q), 则a∈FIRSTVT(P)。

  10. 例如 试构造文法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}

  11. LASTVT集构造方法: (1)若有产生式P→…a或P→…aQ, 则a∈LASTVT(P); (2)若有产生式P→…Q,且 a∈LASTVT(Q), 则a∈LASTVT(P)。

  12. 例如 试构造文法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}。

  13. 构造优先关系表的方法: (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)中的元素 > #

  14. 例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}

  15. 构造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}。

  16. 构造优先关系表 ①根据规则(1), 由“(E)”知, (=)。 ②根据规则(2), 由E→…+T知, + < FIRSTVT(T), 即 + < *, + < (, + < i 由T→…*F知, * < FIRSTVT(F), 即* < (, * < i 由F→(E…知, (<FIRSTVT(E), 即( < +, ( < *, ( < (, ( < i

  17. ③根据规则(3)知: 由E→E+…知, LASTVT(E)>+, 即+ > +,* > +,) > +,i > + 由T→T*…知, LASTVT(T)>*, 即* > *,) > *,i > * 由F→…E)知, LASTVT(E)>), 即+ > ),* > ),) > ),i > ) ④由#E#知, #= #; #<FIRSTVT(E), 即#<+,#<*,#<(,#<i LASTVT(E)>#, 即+>#,*>#,)>#,i>#

  18. + * i ( ) # + > < < < > > * > > < < > > i > > > > ( < < < < ) > > > > # < < < < 故算术表达式文法的优先关系表如下: = =

More Related