编译原理习题

算符优先文法

Posted by viewsetting on October 22, 2018

编译原理练习

设文法为:

$E’ \rightarrow $#$E$# $T \rightarrow F$
$E \rightarrow E+T$ $F \rightarrow P \uparrow F \vert P $
$E \rightarrow T$ $P \rightarrow (E)$
$T \rightarrow T*F$ $P\rightarrow i$

求算符优先关系表,并分析$i+i$#是否为该文法的句子。

解:

$bool\space array​$:

求$FIRSTVT$:

  + * $ \uparrow $ $i$ ( ) #
$E’$             1
$E$ 1 1 1 1 1    
$T$   1 1 1 1    
$F$     1 1 1    
$P$       1 1    

求$LASTVT$:

  + * $\uparrow$ $i$ ( ) #
$E’$             1
$E$ 1 1 1 1   1  
$T$   1 1 1   1  
$F$     1 1   1  
$P$       1   1  

$FIRSTVT$与$LASTVT$如表所示:

$VN$ $FIRSTVT$ $LASTVT$
$E$ +,*,$\uparrow$,(,$i$ +,*,$\uparrow$,),$i$
$E’$ # #
$T$ *,$\uparrow$,(,$i$ *,$\uparrow$,),$i$
$F$ $\uparrow$,(,$i$ $\uparrow$,),$i$
$T$ (,$i$ ),$i$
步骤 优先关系 当前符号 剩余输出串 移进或规约
1 # < $i$ +$i$# 移进
2 #$i$ > + $i$# 规约
3 #$F$ < + $i$# 移进
4 #$F+$ < $i$ # 移进
5 #$F+i$ > #   规约
6 #$F+F$ > #   规约
7 #$F$ = #   Accepted

综上,$i+i$# 是该文法的句子