编译原理5.2.1-4-算符优先关系表构造

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
建立一个布尔数组F[P, a] , 和栈 和栈STACK 建立一个布尔数组 F[P, a]=TRUE , 当且仅当 a∈FIRSTVT(P) ∈
PROCEDUE INSERT(P, a) IF NOT F[P, a] THEN BEGIN F[P, a]:=TRUE PUSH(P, a) ONTO STACK END
补充
1.图中的结点为非终结符的 图中的结点为非终结符的FIRSTVT(P)和终结符 和 2.对每个形如 对每个形如P→a…或P→Q a… 的产生式 的产生式, 或
结点到 由FIRSTVT(P)结点到结点 用箭弧连接 结点 结点a用箭弧连接
3.对每个形如 对每个形如P→Q … 的产生式, 的产生式,
由FIRSTVT(P)到FIRSTVT(Q)用箭弧连接 到 用箭弧连接 经箭弧有路径能到达的终结符结点 经箭弧有路径能到达的终结符结点a , 终结符结点 则有a∈ FIRSTVT(P) 则有 ∈
*
FIRSTVT(P)
↑ ( i
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 )中的每个 中的每个a 中的每个 DO 置 a X i+1
根据定义直观计算FIRSTVT FIRSTVT集 (1) 根据定义直观计算FIRSTVT集 a) 若有产生式 P→a 或 p→Qa ∈ 则 a∈FIRSTVT(P) b) 若有产生式 P→Q , ∈ 若 a∈FIRSTVT(Q) ∈ 则 a∈FIRSTVT(P)
(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
4.对每个非终结符的 对每个非终结符的FIRSTVT(P) ,
FIRSTVT(E’)
FIRSTVT(E) FIRSTVT(T)
(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

+
FIRSTVT(F)
BEGIN (MAIN) FOR 每个非终结符 和终结符 每个非终结符P和终结符 和终结符a DO F[P, a]:= FALSE; FOR 每个形如 每个形如P→a…或P→Q a… 的产生式 或 DO INSERT(P, a) WHILE STACK 非空 DO BEGIN 的顶项记为(Q, 把STACK的顶项记为 ,a) , 托出去 的顶项记为 FOR 每个形如 每个形如P→Q … 的产生式 DO INSERT(P, a) END END (MAIN)
5.2.1 算符优先文法及优先表构造 1、算符文法 、 2、算符优先关系的定义 、 3、算符优先文法 、 4、优先关系表的构造 、
4、优先关系表的构造 、
FIRSTVT集 LASTVT集 1) 定义 FIRSTVT集 和 LASTVT集 FIRSTVT集 LASTVT集 2) 根据 FIRSTVT集 和 LASTVT集 计算 三种优先关系 计算FIRSTVT FIRSTVT集 LASTVT集 3) 计算FIRSTVT集和 LASTVT集 4) 构造优先关系表
定义FIRSTVT FIRSTVT集 LASTVT集 1) 定义FIRSTVT集 和 LASTVT集
FIRSTVT(P) = {a | P a 或 P Qa}
注意: 在算符文法中 一个非终结符推导出的 在算符文法中,
首个算符的位置要么是第一个, 首个算符的位置要么是第一个 要么是第二个
LASTVT(P) = {a | P
a 或 P
aQ}
FIRSTVT集 LASTVT集 2) 根据 FIRSTVT集 和 LASTVT集 计算三种优先关系
: 直接查看产生式右部,如有 直接查看产生式右部, P→ ab 或 P→aQb , 则a : 假定有产生式的候选形为 aP , 对任何 b∈FIRSTVT(P) , 有a ∈ b成立 成立 b成立
↑ FIRSTVT(F) ( ) (
FIRSTVT(E) LASTVT(E)
算符优先关系表 (p90 表5.1)
+ + * ↑ i ( ) # * ↑ i ( ) #
(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
例5.4 p90 E' E T F P FIRSTVT LASTVT # # + *↑ ( i + *↑ ) i *↑ ( i *↑) i ↑( i ↑) i ( i ) i 构造算符优先关系表
: 假定有产生式的候选形为 Pb , 对任何 a∈LASTVT(P) , 有a ∈ b成立 成立
计算FIRSTVT FIRSTVT集和 LASTVT集 3) 计算FIRSTVT集和 LASTVT集
根据定义直观计算FIRSTVT FIRSTVT集 (1) 根据定义直观计算FIRSTVT集 用形式化算法计算FIRSTVT (2) 用形式化算法计算FIRSTVT (3) 由简单关系图形计算FIRSTVT* 由简单关系图形计算FIRSTVT*
MAIN
(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
例5.4 p90 用形式化算法计算 FIRSTVT集 集 过程见黑板
由简单关系图形计算FIRSTVT (3) 由简单关系图形计算FIRSTVT
例5.4 p90 FIRSTVT LASTVT E' # # E + *↑ ( i + *↑ ) i T *↑ ( i *↑) i F ↑( i ↑) i P ( i ) i
E′→#E# 为对原文法的扩充 ‘#' 表示句子括号
用形式化算法计算FIRSTVT FIRSTVT集 (2) 用形式化算法计算FIRSTVT集
(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
P→…ab… P→…aQb… # #
P→…aR… # + *
P→…Rb… # + * ↑ )
FIRSTVT(E) LASTVT(E) FIRSTVT(T) LASTVT(E) FIRSTVT(F) LASTVT(T) LASTVT(P)
相关文档
最新文档