0
点赞
收藏
分享

微信扫一扫

第四章 作业(123)【编译原理】



第四章 作业【编译原理】

  • 前言
  • 推荐
  • 第四章 作业
  • 1
  • 2
  • 3
  • 随堂练习
  • 随堂练习03-27
  • 随堂练习03-27
  • 最后


前言

2023-3-28 18:32:18

以下内容源自《【编译原理】》
仅供学习交流使用

推荐

第三章 作业(78CE)【编译原理】

第四章 作业

1

考虑下面文法G1:
S→a|∧|(T)
T→T,S|S

(1)消除G1的左递归。然后,对每个非终结符,写出不带回溯的递归子程序。
(2)经改写或的文法是否是LL(1)的?给出它的预测分析表。

(1)①
消除G1的左递归
S→a|∧|(T)
T->ST'
T'->,ST'|ε

分析--消除G2的左递归
S→a|∧|(T) 无左递归
T→T,S|S 左递归 
生成 S{,S} 转为右递归 
T->ST'
T'->,ST'|ε

(1)②
写出不带回溯的递归子程序
PROCEDURE S;
BEGIN
	IF SYM='a' OR SYM='∧'
		THEN ADVANCE;
	ELSE IF SYM='('
		THEN BEGIN
			ADVANCE T;
			IF SYM=')'
				ADVACE
			ELSE
				ERROR
		END
	ELSE
	 	ERROR
END;

PROCEDURE T;
BEGIN
	S;T
END;

PROCEDURE T';
BEGIN
	IF SYM=',' 
		THEN BEGIN
			ADVANCE
			S;T'
		END
END;

(2)①
是LL(1)文法

分析--是否是LL(1)文法
①不含左递归
②非终结符的各个产生式首符集不相交
First(S)={a,∧,(}
Filrst(T)={a,∧,(}
Filrst(T')={,,ε}
③T'首符集存在ε 
Filrst(T')={,,ε}
Follow(T')={)}
First(T')∩Follow(T')=∅

(2)②
给出它的预测分析表

	a		∧		(		)		,		#
S 	S->a  	S->∧	S->(T)
T	T->ST'	T->ST'	T->ST'
T'							T->ε	T->,ST'

.

2

2.对下面的文法G:
E→TE’
E’→+ Elε
T→FT’
T’→Tlε
F→PF’
F’→*F’lε
P→(E)|a|b|^
(1)计算这个文法的每个非终结符的FIRST和 FOLIOW。
(2证明这个文法是LL(1)的。
(3)构造它的预测分析表。

(1)
		FIRST			FOLLOW
E	 	{(,a,b,∧}		{#,)}
E'		{+,ε}			{#,)}
T	    {(,a,b,∧}		{+,),#}
T' 		{(,a,b,∧,ε}		{+,),#}
F		{(,a,b,∧}		{(,a,b,∧,+,),#}
F' 		{*,ε}			{(,a,b,∧,+,),#}
P 		{(,a,b,∧}		{*,(,a,b,∧,+,),#}

(2)
是LL(1)文法

分析--是否是LL(1)文法
①不含左递归
②非终结符的各个产生式首符集不相交
③对于文法中的每一个非终结符A,首符集存在ε 
First(A)∩Follow(A)=∅

(3)构造它的预测分析表。

	+		*		(		)		a		b		∧		#
E					E->TE'			E->TE'	E->TE'	E->TE'	
E'	E'->+E					E'->ε							E'->ε
T					T->FT'			T->FT'	T->FT'	T->FT'
T'	T'->ε			T'->T	T'->ε	T'->T	T'->T	T'->T	T'->ε
F					F->PF'			F->PF'	F->PF'	F->PF'
F'	F'->ε	F'->ε	F'->ε	F'->ε	F'->ε	F'->ε	F'->ε	F'->ε
P					P->(E)			P->a	P->B	P->∧

3

3.下面文法中,哪些是LL(1)的,说明理由。
(1)
S->Abc
A->a|ε
B→b|ε
(2)
S->Ab
A→a|B|ε
B->b|ε
(3)
S→ABBA
A->a|ε
B->b|ε
(4)
S->aSe|B
B→bBe|C
C->cCe|d

(1)是LL(1)文法
FIRST(S)={a,b}			FOLLOW(S)={#}
FIRST(A)={a,ε}			FOLLOW(A)={b}
FIRST(B)={b,ε}			FOLLOW(B)={#}

(2)不是LL(1)文法
FIRST(S)={a,b}			FOLLOW(S)={#}
FIRST(A)={a,b,ε}		FOLLOW(A)={b}
FIRST(B)={b,ε}			FOLLOW(B)={b}

(3)不是LL(1)文法
FIRST(S)={a,b,ε}		FOLLOW(S)={#}
FIRST(A)={a,ε}			FOLLOW(A)={a,b,#}
FIRST(B)={b,ε}			FOLLOW(B)={a,b,#}

(4)是LL(1)文法
FIRST(S)={a,b,c,d}		FOLLOW(S)={e,#}
FIRST(B)={b,c,d}		FOLLOW(A)={e,#}
FIRST(C)={c,d}			FOLLOW(B)={e,#}

随堂练习

随堂练习03-27

消除G2的左递归,判断改造后文法是否是LL(1)文法。

1(简答题)
表格结构文法G2:
S→a|∧|(T)
T→T,S|S

消除G2的左递归,判断改造后文法是否是LL(1)文法。

消除G2的左递归
S→a|∧|(T)
T->ST'
T'->,ST'|ε
是LL(1)文法

分析--消除G2的左递归
S→a|∧|(T) 无左递归
T→T,S|S 左递归 
生成 S{,S} 转为右递归 
T->ST'
T'->,ST'|ε

分析--是否是LL(1)文法
①不含左递归
②非终结符的各个产生式首符集不相交
First(S)={a,∧,(}
Filrst(T)={a,∧,(}
Filrst(T')={,,ε}
③T'首符集存在ε 
Filrst(T')={,,ε}
Follow(T')={)}
First(T')∩Follow(T')=∅

2023-5-3 22:07:40

随堂练习03-27

1(简答题)

G[E]:
	E→TE’      
	E’→+TE’|ε     
	T→FT’
	T’→*FT’|ε
	F→(E)|i

First(E’T’)={+,*,ε}

另外:

FIRST(E)={(,i} 
FIRST(T)={(,i} 
FIRST(F)={(,i} 
FIRST(E')={+,ε}
FIRST(T')={*,ε}

Follow(E)={#,)} 
Follow(T)={#,)} 
Follow(F)={+,#,)} 
Follow(E')={+,#,)} 
Follow(T')={*,+,#,)}

最后

2023-5-3 22:38:35

祝大家逢考必过
点赞收藏关注哦


举报

相关推荐

0 条评论