编绎试卷答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
词法分析器(扫描器) :输入源程序,进行词法分析,输出单词符号。
语法分析器(分析器) :对单词符号串进行语法分析,识别出各类语法单位。
语义分析与中间代码产生器:按照语义规则对语法分析器归约出的语法单位进行语义分析并翻译成一定形式的中间代码。
优化器:对中间代码进行优化处理。
目标代码生成器:把中间代码翻译成目标程序。
2.
(1)
G(S): S →A B
A →aAb | ξ
B →aA b | ξ
(2)
G(S): S → 1S0 | A
A →0A1 | ξ
3、构造一个 DFA,它接收∑={a, b}上所有满足下述条件的字符串:字符串中的每个 a 都有至少一个 b 直接跟在其右边。
解:已知∑={a, b} ,根据题意得出相应的的正规式为: (b*abb*)*
根据正规式画出相应的 DFA M,如下图所示
用子集法将其确定化
4:有文法 G[s]:
S→BA A→BS|d B→aA|bS|c
(1)证明文法 G 是 LL(1) 文法。
(2)构造 LL(1) 分析表。
(3)写出句子 abccd 的分析过程
解:
(1)一个 LL(1) 文法的充要条件是:对每一个非终结符 A 的任何两个不同产生式 A→α|β,有
下面的条件成立:
①FIRST(α)∩FIRST(β)=Φ;
② 若β*ε, 则有 FIRST(α)∩FOLLOW(A)=Φ 。
对于文法 G[s]:
S→BA A→BS|d B→aA|bS|c
其 FIRST 集如下:
FIRST(B)={a, b, c}; FIRST(A)={a, b, c, d}; FIRST(S)={a, b, c} 。
其 FOLLOW 集如下:
首先, FOLLOW(S)={#};
对 S→BA 有: FIRST(A)\{ε}加入 FOLLOW(B), 即 FOLLOW(B)={a, b, c, d };
对 A→BS 有: FIRST(S)\{ε}加入 FOLLOW(B), 即 FOLLOW(B)={a, b, c, d };
对 B→aA 有: FOLLOW(B)加入 FOLLOW(A), 即 FOLLOW(A)={a, b, c, d };
对B→bS 有: FOLLOW(B)加入 FOLLOW(S), 即 FOLLOW(S)={#, a, b, c, d };
由A→BS|d 得:
FIRST(BS) ∩FIRST(d) = { a, b, c } ∩{d} = Φ;
由B→aA|bS|c 得:
FIRST(aA) ∩FIRST(bS) ∩FIRST(c) ={a} ∩{b} ∩{c}= Φ 。
由于文法 G[s]不存在形如β→ε 的产生式,故无需求解形如 FIRST(α)∩FOLLOW(A) 的值。
也即,文法 G[S]是一个 LL(1)文法。
(2) 由 G[s]:S→BA A→BS|d B→aA|bS|c 的
FIRST(B)={a, b, c}; FOLLOW(B)={a, b, c, d };
FIRST(A)={a, b, c, d}; FOLLOW(A)={a, b, c, d };
FIRST(S)={a, b, c} 。
FOLLOW(S)={#, a, b, c, d } 可构造 LL(1) 预测分析表如下:
6.
7.
10.
9.。