- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.2.1 算符优先文法及优先表构造 1、算符文法 2、算符优先关系的定义 3、算符优先文法 4、优先关系表的构造 4、优先关系表的构造 1) 定义 FIRSTVT集 和 LASTVT集 2) 根据 FIRSTVT集 和 LASTVT集 计算 三种优先关系 3) 计算FIRSTVT集和 LASTVT集 4) 构造优先关系表 1) 定义FIRSTVT集 和 LASTVT集 FIRSTVT(P) = {a | P a??? 或 P Qa???} 2) 根据 FIRSTVT集 和 LASTVT集计算三种优先关系 : 直接查看产生式右部,如有 P→ ???ab??? 或 P→???aQb??? , 则a b 成 立 3) 计算FIRSTVT集和 LASTVT集 (1) 根据定义直观计算FIRSTVT集 (2) 用形式化算法计算FIRSTVT (3) 由简单关系图形计算FIRSTVT* (1) 根据定义直观计算FIRSTVT集 a) 若有产生式 P→a??? 或 p→Qa??? 则 a∈FIRSTVT(P) b) 若有产生式 P→Q??? , 若 a∈FIRSTVT(Q) 则 a∈FIRSTVT(P) 例5.4 p90 (0) E→#E# (1) E→E+T (2) E→T (3) T→T*F (4) T→F (5) F→P↑F (6) F→P (7) P→(E) (8) P→i (2) 用形式化算法计算FIRSTVT集 建立一个布尔数组F[P, a] , 和栈STACK F[P, a]=TRUE , 当且仅当 a?FIRSTVT(P) MAIN BEGIN (MAIN) FOR 每个非终结符P和终结符a DO F[P, a]:= FALSE; FOR 每个形如P→a…或P→Q a… 的产生式 DO INSERT(P, a) WHILE STACK 非空 DO BEGIN 把STACK的顶项记为(Q,a) , 托出去 FOR 每个形如P→Q … 的产生式 DO INSERT(P, a) END END (MAIN) 例5.4 p90 (0) E→#E# (1) E→E+T (2) E→T (3) T→T*F (4) T→F (5) F→P↑F (6) F→P (7) P→(E) (8) P→i (3) 由简单关系图形计算FIRSTVT 图中的结点为非终结符的FIRSTVT(P)和终结符 对每个形如P→a…或P→Q a… 的产生式, 由FIRSTVT(P)结点到结点a用箭弧连接 对每个形如P→Q … 的产生式, 由FIRSTVT(P)到FIRSTVT(Q)用箭弧连接 对每个非终结符的FIRSTVT(P) , 经箭弧有路径能到达的终结符结点a , 则有a? FIRSTVT(P) 4) 构造优先关系表 FOR 每个产生式 P?X1 X2 ……Xn DO FOR i:=1 TO n-1 DO IF Xi 和 X i+1 均为终结符 THEN 置 Xi X i+1 IF Xi 和 X i+2 均为终结符, X i+1 为非终结符 , i ≤n-2, THEN 置 Xi X i+2 IF Xi为终结符, 但X i+1 为非终结符 THEN FOR FIRSTVT(X i+1 )中的每个a DO 置 Xi a IF Xi为非终结符, 但X i+1 为终结符 THEN FOR LASTVT(X i
文档评论(0)