14.算符优先分析
1.接上个作业(P121练习1),完成4),5)两个步骤。
已知文法G[S]为:
S1->#S#
S->a|^|(T)
T->T,S|S
1)计算FIRSTVT和 LASTVT。
FIRSTVT(S) = { a,^,( }
FIRSTVT(T) = { ,,a,^,( }
LASTVT(S) = { a,^,)}
LASTVT(T) = { ,,a,^,)}
2)找三种关系对。
(1) =
#S#
(T)
(2) <
#S
(T
,S
(3) >
S#
T)
T,
3)构造算符优先关系表。
a | ^ | ( | ) | , | # | |
a | > | > | > | |||
^ | > | > | > | |||
( | < | < | < | = | < | |
) | > | > | > | |||
, | < | < | < | > | > | |
# | < | < | < | = |
4)是否算符优先文法?
是
5)给出输入串(a,(a,a))#的算符优先分析过程。
栈 | 关系 | 输入串 | 动作 |
# | < | (a,(a,a))# | 移进 |
#( | < | a,(a,a))# | 移进 |
#(a | > | ,(a,a))# | 归约 |
#(N | < | ,(a,a))# | 移进 |
#(N, | < | (a,a))# | 移进 |
#(N,( | < | a,a))# | 移进 |
#(N,(a | > | ,a))# | 归约 |
#(N,(N | < | ,a))# | 移进 |
#(N,(N, | < | ))# | 移进 |
#(N,(N,a | > | ))# | 归约 |
#(N,(N,N | > | ))# | 归约 |
#(N,(N | = | ))# | 移进 |
#(N(N) | > | )# | 归约 |
#(N,N | > | )# | 归约 |
#(N | = | )# | 移进 |
#(N) | > | # | 归约 |
#N | # | 接受 |
2.尝试编写自下而上的语法分析程序。
可以只写表达式部分。
3.给出下面语句的逆波兰式、三元式、树及四元式。
a*b+(c-d)/e
(1)逆波兰式
a*b+(c-d)/e ==>ab*cd-e/+
(2)三元式
1)(*,a,b)
2)(-,c,d)
3)(/,2),e)
4)(+,1),3))
(3)四元式
1)(*,a,b,t1)
2)(-,c,d,t2)
3)(/,t2,e,t3)
4)(+,t1,t3,t4)