编译原理课后习题答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
④ 抹去可能存在的无用状态与不可及状态。
解答:此有限状态自动机的状态转换表如表 3.1 所示:
表 2.1 M 的状态转换表
a
b
⊥
A
B
C
B
D
C
C
B
E
D
D
F
Accept
E
G
E
Accept
F
G
E
Accept
G
D
F
Accept
由此 看出: 此有限 状态自 动机是 确定的 。
最小 化: 初始划分由 2 个子集组成,即:({A,B,C},{D,E,F,G})
ε-Clo su re( mo v e( A 9,D )={8 ,9 ,3 ,y } ε-Clo su re( mo v e( A 9,E)= {4 } 得到的 DFA M’的初始状态是 A1,最终状态集由 A2,A6,A7,A9 组成。 图 2.5 是 M’的状态转换图,M’的状态转换表如表 2.3 所示。
图 2.2 3 条替代规则 ② 消除应用①所得到的传递图中的ε弧,可以分为两步:首先消除ε环路,其次消除其他ε弧。 a) ε环路的消除方法: i.将 ε 环路 的诸项 合并为 一个顶 点。 ii.修 改各个 相关的 有向弧 。 iii .若 ε环路 中某一 状态是 最终( 或初始 )状态 ,则新 顶点是 最终( 或初始 )状态 。 b )其它 ε弧的 消除有 两种方 法: 1)子集法:即计算ε-Closure(T),其表示从状态集 T 中任何一状态沿ε弧可以到达的状态全体。 其要点是:从初始状态 q0 的 X=ε-Closure(q0)开始,按如下方法构造状态集: i.令 Set ={X}; ii.若 Set 中还有未考察过的状态子集 Xi,则对于每一输入符号 a∈VT,求 T=ε-Closure(move(Xi,a)),Set=Set∪{T}(其中 move(Xi,a)={q|q∈δ(p,a),p∈Xi})。重复执行(2),直至不存在这样的 Xi。这样得到的 Set 即为消除ε弧后的确定的有限状态机 (DFA)。DFA 的初始状态就是ε-Closure(q0),最终状态由那些至少含有一个最终状态的状态子集组成。 2)逐 步消除 法: 其要点是找到类似于图 2.3 所示,但从 B 再无ε弧引出的ε弧。
集的 代表,然后 修改原 来的有 限状态 自动机 的状态 转换函 数δ,凡在δ 作用 下转向 某状态 子集中 任何一 个状态 的一律 改成转 向 该状 态子集 的代表。若一 个状态 子集中 某一状 态是原 来的开 始状态 ,则该 状态子 集的代 表就是 新的有 限状态 自动机 的开始 状
态。 同理, 若一个 状态子 集中的 状态均 是最终 状态, 则该状 态子集 的代表 就是新 的有限 状态自 动机的 最终状 态。
表 2.3 M’的状态转换表
D
E
·
+
A1
A2
A4
A3
A2
A2
A4
A5
A3
A6
A4
A7
A8
A5
A9
A6
A6
A4
A7
A7
A8
A7
A9
A9
A4
-
⊥
Accept
A8
Accept Accept
Accept
图 2.5 M’的状态转换图 ⑵采用 状态分 离法: 初始时分成 2 个子集,即:({A1,A3,A4,A5,A8},{A2,A6,A7,A9}) 考察子集{ A2,A6,A7,A9},它进一步可分成:({A6,A9},{A2},{A7}) 考察子集{ A1,A3,A4,A5,A8},它进一步分成:({A4},{A1},{A8},{A3,A5}) 不能再进一步划分了,得到的最小化的有限状态自动机如图 2.6 所示:
语法 分析器 ,对单 词符号 串进行 语法分 析(根据 语法规 则进行 推导或 归约),识别 出程序 中的各 类语法 单位 ,最终 判断 输入 串是否 构成语 法上正 确的“程序 ”。
语义 分析及 中间代 码产生 器,按照 语义规 则对语 法分析 器归约 出(或推 导出)的语 法单位 进行语 义分析 并把它 们翻译 成 一定 形式的 中间代 码。编译 程序可 以根据 不同的 需要选 择不同 的中间 代码形 式,有的 编译程 序甚至 没有中 间代码 形式 ,而直 接生 成目标 代码。
集合{D,E,F,G}不需 要进一 步划分 ,考察 子集 {A,B,C}。由 于
δ( B,a)=D∈ {D,E,F,G},而 δ(A,a)= δ (C,a)= B∈ {A,BC}, 因此 Q 可进一步划分为:({A,C},{B},{D,E,F,G})。由于 δ( A ,b)=C∈ { A, C },而 δ(C,b)= E∈ { D ,E , F, G }。 因此 Q 可进一步划分为:({A},{C},{B},{D,E,F,G})。
解答:⑴ 1(0|1)*1|1 ⑵ 0*10*10 *10* ⑶ 01|1 ⑷ (0|1)*111 2.⑴ 试写出非负整数集的正则表达式。⑵ 试写出以非 5 数字为头的所有非负整数集的正则表达式。 解答:⑴ 0|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* ⑵ 0|(1|2|3|4|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 3.试将 2.8 中所示的有限状态自动机 M 最小化。
翻译程序: 翻译程序(Translator)是一种语言处理程序,它将输入的用程序设计语言书写的程序(称为源程序)转换 为等 价的用 另一种 语言书 写的程 序( 称为 目标程 序)。若源 语言是 汇编语 言,目标 程序是 机器语 言,称这 种翻译 程序为 汇编 程序 。若源 语言是 高级语 言,目 标程序 是低级 语言, 称这种 翻译程 序为编 译程序 。
语言 处理程 序:由于 目前的 计算机 只能理 解和执 行机器 语言,因此 必须有 一个程 序将用 程序设 计语言 书写的 程序等 价( 执 行效 果完全 一致)地转 换为计 算机能 直接执 行的形 式,完成 这一工 作的程 序称为“ 语言 处理程 序”。它一 般可分 为解释 程序 和翻 译程序 两大类 。
这时不能再划分了,得到的最小化的有限状态自动机如表 3.2 所示:
表 2.2 最小化的有限状态自动机
a
b
⊥
A
B
C
C
B
E
B
D
C百度文库
D
D
D
Accept
4.某程序语言的无(正负)符号常数可以用下面正则表达式 R 来表示: (D+E|D +.D +E|E|.D +E)((+|-)D|D)D*|D +|D *.D + ⑴ 试把它转换成确定性有限状态自动机。 ⑵ 把上述有限状态自动机最小化。 ⑶ 在上述有限状态自动机中添加相应动作,取出无(正负)符号常数。 分析 :从正 则表达 式构造 有限状 态自动 机可以 分两步 进行。 ① 画一条从结点 X 到结点 Y 的有向弧,有向弧上标以正则表达式 R。结点 X 为标以“-”的初始状态,结点 Y 为标以“+”的 最终状态。从这一有向图出发反复应用图 3.2 所示的替代规则,直至所有有向弧都以 VT 中的符号或标记ε为止。
图 2.4 替代规则的应用过程 应用 子集法 消除?弧: ε-Closure(x)={x,2},令 A1={x,2},计算: ε-Closure( move( A 1,D ))= ε -Clos ure({7,10, 2, 1} )={7,10,2,1,y} ε-Clo su re( mo v e( A 1,·))= ε-Clo su re( {5,3 } )={5 ,3 } ε-Closure(move(A1,E))=ε-Closure({4} )={4} 令 A2={7,10,2,1,y},A3={5,3},A4={4},计算: ε-Clo su re( mo v e( A 2,D ))= {7 ,1 0, 2, 1, y } ε-Clo su re( mo v e( A 2,·))= {8,3 } ε-Clo su re( mo v e( A 2,E))= {4} ε-Clo su re( mo v e( A 3,D ))= {5 ,6 ,3 ,y } ε-Clo su re( mo v e( A 4,D ))= {1 2, y } ε-Clo su re( mo v e( A 4,+ ))= {11 } ε-Clo su re( mo v e( A 4,- ))= {11 } 令 A5={8,3},A6={5,6,3,y},A7={12,y},A8={11},计算: ε-Clo su re( mo v e( A 5,D )={8 ,9 ,3 ,y } ε-Clo su re( mo v e( A 6,D )={5 ,6 ,3 ,y } ε-Clo su re( mo v e( A 6,E)= {4 } ε-Clo su re( mo v e( A 7,D )={1 2, y } ε-Clo su re( mo v e( A 8,D )={1 2, y } 令 A9={8,9,3,y},计算:
给用 户。编 译程序 的各个 阶段都 有可能 发现错 误,出 错处理 程序要 对发现 的错误 进行处 理、记 录,并 反映给 用户
Chapter 2
1. 试写出 VT={0,1} 上下述集合的正则表达式: ⑴ 所有以 1 开始和结束的符号串。 ⑵ 恰含有 3 个 1 的所有符号所组成的集合。 ⑶ 集合{01,1} 。 ⑷ 所有以 111 结束的符号串。
解释 程序 : 解释 程序 (I n te r pr e te r)是 一种 语言处 理程 序,它 对源 程序逐 个语 句地进 行分 析,根 据每 个语句 的含 义执 行语 句指定 的功能 。 2. 解答:
编译程序的总框图见图 1.2。其中词法分析器,又称扫描器,它接受输入的源程序,对源程序进行词法分析,识别出一 个个 的单词 符号, 其输出 结果是 单词符 号。
表格 管理模 块保持 一系列 的表格 ,登记 源程序 的各类 信息和 编译各 阶段的 进展状 况。编译 程序各 个阶段 所产生 的中间 结 果都 记录在 表格中 ,所需 要的信 息也大 多从表 格中获 取,整 个编译 过程都 在不断 地和表 格打交 道。
出错 处理程 序对出 现在源 程序中 的错误 进行处 理。如果 源程序 有错误 ,编译 程序应 设法发 现错误,把有 关错误 信息报 告
Chapter 1
1.解答: 程序设计语言:程序设计语言是遵守一定规范的、描述 “计算”(Computing)过程的形式语言。一般可以划分为低级
语言 和高级 语言两 大类。低级 语言是 面向机 器的语 言,它是 为特定 的计算 机系统 设计的 语言,机器 指令、汇编 语言是 低级语 言。高级语言是与具体计算机无关的“通用”语言,它更接近于人类的自然语言和数学表示,例如 FORTRAN、Pascal、C 等 等我 们熟悉 的语言 是高级 语言。
分析 :只能 对确定 的有限 状态自 动机进 行最小 化,本 题的自 动机已 经是确 定的。
最小 化采用 状态分 离法, 具体做 法如下 :
① 进行 0 等价类的划分:Q 划分为 Qf 与 Q-Qf ② 若已进行了 k 等价划分,即 Q 已被划分成(Q1,Q2,…Qn),再进行 k+1 划分,对 Qi(i=1…n),若 q、q’∈Qi,使得 对某一个 a∈VT,δ(q,a)∈Qj 和δ(q’,a)∈Ql,j≠l 或δ(q,a)存在而δ(q’,a)不存在或反之。则将 Qi 划分为二个 子集 Qi1,Qi2,使 q∈Qi1,q’ ∈Qi2。 ③ 重复②直至无法进一步划分为止。对最后划分得到的状态子集中每一个子集,选择该子集中任何一个状态作为该状态子
图 2.3 逐步消除法 删除状态 A 到状态 B 的ε弧,对每一条从状态 B 到状态 C 标记为 ai 的弧,增加 1 条从状态 A 到状态 C 标记为 ai 的弧。若 B
是最终状态,则让 A 为最终状态。重复上述过程直至消除全部的ε弧,这样得到的一般是不确定的有限状态自动机(NFA)。 解答:⑴ 图 3.4 给出了从正则表达式 R 构造有限状态自动机 M 的过程。
优化 器对中 间代码 进行优 化处理 。一般 最初生 成的中 间代码 执行效 率都比 较低,因此 要做中 间代码 的优化 ,其过 程实际 上是 对中间 代码进 行等价 替换, 使程序 在执行 时能更 快,并 占用更 小的空 间。
目标 代码生 成器把 中间代 码翻译 成目标 程序 。中间 代码一 般是一 种机器 无关的 表示形 式,只有 把它再 翻译成 与机器 硬件 直接 相关的 机器能 识别的 语言, 即目标 程序, 才能在 机器上 运行。