1.接上个作业(P121练习1),完成4),5)两个步骤。
1)计算FIRSTVT和 LASTVT。
2)找三种关系对。
3)构造算符优先关系表。
4)是否算符优先文法?
5)给出输入串(a,(a,a))#的算符优先分析过程。
可以只写表达式部分。
参考同学代码:
void Isleft( )
{
Stack s;
k=1;
S[k]=’#’;
do{
a=S[k+1]//把下一个输入符号读进a中;
if (S[k]∈VT) j=k;
else j=k-1;
while(S[j]>a)
{
do{
Q=S[j];
if(S[j-1] ∈VT) j=j-1;
else j=j-2;
}while(S[j]>Q);
// 把S[j+1]…S[k]归约为某个N;
k=j+1;
S[k]=N;
}
if(S[j]<a || S[j]=a)
{
k=k+1;
S[k]=a;
}
}while(a!=’#’);
}
3.给出下面语句的三元式、四元式和逆波兰式。
a*b+(c-d)/e
三元式:
(1) (*,a,b)
(2) (-,c,d)
(3) (/,(2),e)
(4) (+,(1),(3))
四元式:
(1) (*,a,b,t1)
(2) (-,c,d,t2)
(3) (/,t2,e,t3)
(4) (+,t1,t3,t4)
逆波兰式:
ab*cd-e/+