【习题答案】第04章 自顶向下的语法分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
( ( a a a , , a a ) ) #
a,a)# a,a)# ,a)# ,a)# ,a)# a)# a)# )# )# # #
S→(T)
#)T( #)T #)NS #)Na #)N #)NS, #)NS #)Na #)N #) #
T→SN S→a
N→,SN S→a N→ε
可见输入串(a,a)#是文法的句子。
对左部为 N 的产生式可知: FIRST(→, S N)={,} FIRST(→ε)={ε} FOLLOW(N)={)} 由于 SELECT(N →, S N)∩SELECT(N →ε) ={,}∩ { )}= 所以文法是 LL(1)的。
共 4 页,第 3 页
《编译原理》 课后练习参考答案
第 04 章 自顶向下的语法分析
L→ )
给定文法 G=( { i,d,'(',')' } , {E,A} , E, P ), 其中 P: E→ iA E→ EA A→ i A→ d A→ ( E )
(1)消除左递归; (2)计算改写后文法中各非终结符的 FIRST 集和 FOLLOW 集; (3)构造改写后文法的预测分析表;该文法是 LL(1) 文法吗?
共 4 页,第 4 页
(2)对输入串 “ (a, ) ”的分析处理过程如下表所示。 步骤 0 1 2 3 4 5 6 7 8 2. 分析栈 #S #L ( #L #L , S #L , a #L, #L #) # 输入串 (a, )# (a, )# a, )# a, )# a, )# , )# )# )# # 所用产生式 S→(L L→ S, L S→a
共 4 页,第 1 页
《编译原理》 课后练习参考答案
第 04 章 自顶向下的语法分析
【解】 (1) 消除左递归后的文法为: E → iAE' E'→ | AE' A → i A → d A → (E) (2) 各非终结符的 FISRT 集和 FOLLOW 集 FIRST( E ) ={i} FIRST( E') = {i, d, (, } FIRST( A ) ={i, d, ( } FOLLOW( E ) ={ , # } FOLLOW( E') ={ , # } FOLLOW( A ) ={i, d, (, ), # } (3) 改写后文法的预测分析表:
i E E' A E→iAE' E'→AE' A→i E'→AE' A→d E'→AE' A→ (E) E → E→ d ( ) #
预测分析表中无多重入口,因此该文法是 LL(1) 文法.
3. 对文法 G[S] :S→a|∧|(T) T→T,S|S (1) 给出(a,(a,a))和(((a,a),∧,(a)),a)的最左推导。 (2) 对文法 G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。 (3) 经改写后的文法是否是 LL(1)的?给出它的预测分析表。 (4) 给出输入串(a,a)#的分析过程,并说明该串是否为 G 的句子。 【解】 (1) 对(a,(a,a)的最左推导为: S→(T) →(T,S) →(S,S) →(a,S) →(a,(T)) →(a,(T,S)) →(a,(S,S)) →(a,(a,S)) →(a,(a,a))
《编译原理》 课后练习参考答案
第 04 章 自顶向下的语法分析
课后练习参考答案 第 04 章 自顶向下的语法分析
1. 已知文法 G: S →(L | a L → S , L |) (1)构造文法 G 的预测分析表。 (2)若输入串为“ (a, ) ” ,请给出语法分析过程。 【解】 (1)求各非终结符的 FISRT 集和 FOLLOW 集: FIRST(S) = { (, a } FIRST(L) = { ) } FIRST(S) = { (, ), a } FOLLOW(S) = { ’,’, # } FOLLOW(L) = FOLLOW(S) ={ ’,’, # } 预测分析表: S L ( S→ ( L L→ S , L a S→ a L→ S , L , } L → ) #
共 4 页,第 2 页
ຫໍສະໝຸດ Baidu
《编译原理》 课后练习参考答案
第 04 章 自顶向下的语法分析
对(((a,a),∧,(a)),a)的最左推导为: S→(T) →(T,S) →(S,S) →((T),S) →((T,S),S) →((T,S,S),S) →((S,S,S),S) →(((T),S,S),S) →(((T,S),S,S),S) →(((S,S),S,S),S) →(((a,S),S,S),S) →(((a,a),S,S),S) →(((a,a),∧,S),S) →(((a,a),∧,(T)),S) →(((a,a),∧,(S)),S) →(((a,a),∧,(a)),S) →(((a,a),∧,(a)),a) (2) 改写文法为: 0) S→a 1) S→∧ 2) S→( T ) 3) T→S N 4) N→, S N 5) N→ε 非终结符 S T N FIRST 集 {a,∧,(} {a,∧,(} {,,ε} FOLLOW 集 { #, , , ) } {)} {)}
预测分析表(Predicting Analysis Table) S T N a → →S N ∧ → →S N ( →(T →S N ) , #
→ε
→, S N
也可由预测分析表中无多重入口判定文法是 LL(1)的。
(4) 对输入串(a,a)#的分析过程为: 栈(STACK) #S 当前输入符 (CUR_CHAR) 剩余输入符 (INOUT_STRING) 所用产生式 (OPERATION)