Skip to content

XJTUSE-编译原理-第四章-homework ​

第一题 ​

问题描述 ​

第一问 ​

将文法 G[S]改写为不含左递归:

T→hiTT'

T'→oPT'|ε

改成公共左因子:

S→PuTS'

S'→in|ε

综上所述,得文法 G'[S]:

S→PuTS'

S'→in|ε

T→hiTT'

T'→oPT'|ε

P→union

第二问 ​

只有S→PuTS'需要 P 的 First 集,剩下的非终结符可以得到:

		非终结符

		First 集

		S'

		{i,ε}

		P

		{u}

		T

		{h}

		T'

		{o,ε}

然后,可以得到 S 的 First 集

		非终结符

		First 集

		S

		{u}

然后,计算非终结符的 Follow 集合:

  • 首先将#放入 S 的 Follow 集中,查看S→PuTS'- #加入 S‘的 Follow 集合- i,#加入 T 的 Follow 集合- u 加入 P 的 Follow 集合- 查看T→hiTT'- 将 T’的 First 集合的终结符(o)加入 T 的 Follow 集合- i,o,#加入 T’的 Follow 集合- 查看T'→oPT'|ε- o 加入 P 的 Follow 集合- i,#加入 P 的 Follow 集合- 发现任何非终结符的 Follow 集不再增加,结束!

      	非终结符
    
      	Follow 集
    
      	S
    
      	{#}
    
      	S'
    
      	{#}
    
      	P
    
      	{i,o,u,#}
    
      	T
    
      	{i,o,#}
    
      	T'
    
      	{i,o,#}
    

综上所述:

		非终结符

		First 集

		Follow 集

		S

		{u}

		{#}

		S'

		{i,ε}

		{#}

		P

		{u}

		{i,o,u,#}

		T

		{h}

		{i,o,#}

		T'

		{o,ε}

		{i,o,#}

第三问 ​

由文法得预测分析表如下:

		h

		i

		n

		o

		u

		#

		S

		S→PuTS'

		S'

		S'→in

		S'→ε

		P

		P→union

		T

		T→hiTT'

		T'

		T'→ε

		T'→ε

		T'→oPT'

		T'→ε

第四问 ​

预测分析表中 M[T',o]存在多重定义入口,不满足 LL(1)文法

第二题 ​

问题描述 ​

第一问 ​

将文法 G[S]改写成不含左递归:

N→aSSN'

N'→atoN'|ε

提取公共左因子:

S→NoWS'

S'→ar|ε

综上,G[S']文法为:

N→aSSN'

N'→atoN'|ε

S→NoWS'

S'→ar|ε

W→SiN

第二问 ​

做法与第一题相似,不再展开。

		非终结符

		First 集

		S

		{a}

		S'

		{a,ε}

		N

		{a}

		N'

		{a,ε}

		W

		{a}

求 Follow 集合步骤如下:

  • 首先将#放入 S 的 Follow 集中,查看S→NoWS'- #加入 S'的 Follow 集合- a,#加入 W 的 Follow 集合- o 加入 N 的 Follow 集合- 查看N→aSSN'- a 加入 S 的 Follow 集合- o 加入 N‘的 Follow 集合- 查看W→SiN- i 加入 S 的 Follow 集合- a,#加入 N 的 Follow 集合- 查看S→NoWS'- a,i 加入 S’的 Follow 集合- a,i 加入 W 的 Follow 集合- 查看N→aSSN'- o 加入 S 的 Follow 集合- a,o,#加入 N’的 Follow 集合- 查看S→NoWS'- o 加入 S’的 Follow 集合- o 加入 W 的 Follow 集合- 查看W→SiN- i 加入 N 的 Follow 集合- 查看N→aSSN'- i 加入 N‘的 Follow 集合- 不再添加,算法结束

      	非终结符
    
      	First 集
    
      	Follow 集
    
      	S
    
      	{a}
    
      	{a,i,o,#}
    
      	S'
    
      	{a,ε}
    
      	{a,i,o,#}
    
      	N
    
      	{a}
    
      	{a,i,o,#}
    
      	N'
    
      	{a,ε}
    
      	{a,i,o,#}
    
      	W
    
      	{a}
    
      	{a,i,o,#}
    

第三问 ​

N→aSSN'

N'→atoN'|ε

S→NoWS'

S'→ar|ε

W→SiN

		a

		i

		o

		r

		t

		#

		S

		S→NoWS'

		S'

		S'→ar

		S'→ε

		S'→ε

		S'→ε

		S'→ε

		N

		N→aSSN'

		N'

		N'→atoN'

		N'→ε

		N'→ε

		N'→ε

		N'→ε

		W

		W→SiN

第四问 ​

预测分析表中 M[S',a],M[N',a]存在多重定义入口,不满足 LL(1)文法