编译原理5.2.2-算符优先分析算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算符优先分析 语法树的框架 N N i + N i
规范归约过程
步骤 符号栈 1 2 3 4 5 6 7 8 9 10 # #i #F #T #E #E+ #E+i #E+F #E+T #E 剩余 动作 输入串 i+i# 移进 +i# +i# +i# +i# i# # # 归约 归约 归约 移进 移进 归约 归约 F→i F→i T→F T→F E→T E→T
补充例 1: 写出句型 #T+T*F+i# 的算符优先分析过程
求出算符优先关系表 (p90 表5.1) E→E+T | T T→T*F | F F→P↑F | P P→(E) | i
+ + * ↑ i ( ) # * ↑ i ( ) #
步骤 符号栈 优先 关系 1 2 3 4 5 6 7 8 9 10 11 12 # #T #T+ #T+T #T+T* #T+T*F #T+N #N #N+ #N+i #N+N #N
根据算符文法性质 2
4、算符优先文法 句型 的性质
如果aNb(或ab)出现在句型 中, 或 出现在句型r中 出现在句型 如果 一种优先关系, 则a和b之间有且只有 一种优先关系 和 之间 则在r中 若a b , 则在 中 必有 含b而不含 的短语存在。 而不含a的短语存在。 而不含 的短语存在 则在r中 若a b , 则在 中 必有 含a而不含 的短语存在。 而不含b的短语存在 而不含 的短语存在。 则在r中 若a b , 则在 中 含有a的短语必含有 的短语必含有b,反之亦然。 含有 的短语必含有 ,反之亦然。
# 接受
算符优先分析 语法树的框架
N E N T + N T * F + N i E T +
语法树
E + T T F
T * F P i
算符优先分析过程跳过了对单非终结符的归约 所以: 算符优先分析过程不是规范归约 所以:
补充例 2: 写出 规范归约分析过程
和 算符优先分析过程
E→E+T | T T→T*F | F F→(E) | i
短语: T+T*F+i ,
T+T*F , i , T, T*F 素短语: i , T*F 最左素短语: T*F
T * F P i
7、算符优先分析算法 、
k:=1; S[k]:= ‘#’ REPEAT …… UNTIL a= ‘#’
# 1
p93
REPEAT j指向栈顶或次栈顶的终结符 把下一个符号读入a中 把下一个符号读入 中; IF S[k]∈VT THEN j:= k ELSE j:=k-1; ∈ WHILE S[j] a DO //归约 归约 { REPEAT Q:= S[j]; 寻找可归约串 IF S[j-1]∈VT THEN j:=j-1 ∈ ELSE j:=j-2 UNTIL S[j] Q; 归约为某个N; 把S[j+1]...S[k] 归约为某个 k:=j+1; S[k]:=N; } IF S[j] a OR S[j] a //移进 移进 BEGIN k:=k+1; S[k]:=a END ELSE ERROR UNTIL a= ‘#’
; ; ( ) a + # ( ) a + #
课后思考: 课后思考:
1.给出输入串#(a+a)#的算符优先分析过程 1.给出输入串#(a+a)#的算符优先分析过程 给出输入串#(a+a)# 2.#(a+a)# 是文法的句子吗? 2.#(a+a)# 是文法的句子吗?
5.2.3 优先函数 优先函数* 5.2.4 算符优先分析中的出错处理 算符优先分析中的出错处理* 作业: 作业:p133 - 1 3.(1)(2)(4)
Βιβλιοθήκη Baidu
剩余 动作 输入串 T+T*F+i# 移进 +T*F+i# T*F+i# *F+i# F+i# 移进 移进 移进 移进
算符优先分析 归约过程
N N T + N T * F + N i
+i# 归约 T*F +i# 归约 T+N +i# 移进 i# # # 移进 归约 i 归约 N+N
算符优先分析 语法树的框架
的两个性质* 1、算符文法 的两个性质*
性质1: 在算符文法中任何 句型 都不包含两个相邻
的非终结符. 的非终结符
性质2: 如果 或(bA)出现在算符文法的句型γ中, 如果Ab或 出现在算符文法的句型
A∈VN ,b∈VT, ∈ ∈ 中任何含b的短语必含有 则γ中任何含 的短语必含有 中任何含 的短语必含有A.
语法树 E E T F i + T F i
输入串 i+i#
求出算符优先关系表 E→E+T | T T→T*F | F F→(E) | i
+ + * i ( ) #
参考 (p90 表5.1)
* i ( ) #
算符优先分析 归约过程
步骤 符号栈 优先 剩余 动作 关系 输入串 1 # i+i# 移进 +i# 归约 i 2 #i +i# 移进 3 #N i# 移进 4 #N+ # 归约 i 5 #N+i # 归约 N+N 6 #N+N # 接受 7 #N
语法树
E E T F + T F i
F→i F→i T→F T→F
i
E→E+T # 归约 E→E+T # 接受
算符优先分析 语法树的框架 F F i + E F T i F i
语法树 E + T F i
补充: 算符优先分析法的局限性
G: S→S;D|D D→D(T)|H H→a|(S) T→T+S|S
2、算符文法 句型 的一般形式 # N1a1N2a2 ... Nnan Nn+1 # Ni 为非终结符或空, 为非终结符或空, ai 为终结符 根据算符文法性质 1
3、算符文法 短语 的一般形式
句型: # N1a1N2a2 ... Nnan Nn+1 # 短语: Niai ... ajNj+1 或 Ni
5、算符优先文法 的可归约串
句型: # N1a1N2a2 ... Nnan Nn+1 #
短语: Niai ... ajNj+1 或 Ni
可归约串
ai-1 ai ai+1 …
aj-1 aj
aj+1
6、素短语、最左素短语 、素短语、
设文法 上下文无关文法 , 设文法G(上下文无关文法 上下文无关文法),
第五章 语法分析 5.1 自下而上分析基本问题 5.2 算符优先分析 5.3 LR分析 分析 5.4 YACC
5.2.2 算符优先分析算法
1、算符文法 的两个性质* 的两个性质* 2、算符文法 句型 的一般形式 3、算符文法 短语 的一般形式 4、算符优先文法 句型 的性质 5、算符优先文法 的 可归约串 素短语、 6、素短语、最左素短语 7、算符优先分析算法
是一个短语, 其句型的素短语 是一个短语, 它至少包含一个终结符, 它至少包含一个终结符, 并除自身外不包含其它素短语. 并除自身外不包含其它素短语 最左边的素短语称最左素短语.
E→E+T | T T→T*F | F F→P↑F | P P→(E) | i 句型 #T+T*F+i#
补充例
E E E T + + T T F