- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
04-05编译原理及实践(A)卷
一、填空题(每空1分,共22分)
编译器的编译过程一般包括了6个逻辑阶段,它们分别是 词法分析、 语法分析、 语义分析 、 中间代码生成 、 代码优化、目标代码生成。
正规表达式是单词的描述工具,用来定义描述单词结构(定义单词)。有穷自动机是单词的识别系统,作为一种识别装置,它能准确地识别正规集,即识别正规式所表示的集合。
Chomsky把文法及语言分为4类,上下文无关文法是描述程序设计语言语法结构的形式工具。
给定文法A -b A | c c,则符号串① cc ② bcbc ③ bcbcc ④ bccbcc ⑤ bbbcc中,①⑤是该文法所定义的句子。
编译过程中,语法分析器的任务是以词法分析程序输出的记号序列为输入,分析源程序的语法结构,判断它是否为相应程序设计语言的合法程序,语法分析的结果表示为分析树(parse tree)或语法树(syntax tree)。
文法G只有 递规定义 定义,L(G)中句子才是无穷的 。
两个文法等价,当且仅当 L(G1)=L(G2) 。
语法分析算法可分为自上而下分析法和自下而上分析法两大类。(16)是从文法的开始符号出发,反复使用文法的产生式,寻找与输入符号串匹配的推导。(17)是从输入符号串开始,逐步进行归约,直至归约到文法的开始符号。
规范句型每次规约的是句型的句柄。
文法符号的属性有综合 和 继承两种。
10.我们可以将包含了正规表达式的文本文件作为输入,利用工具lex为我们自动生成词法分析程序。Yacc是一个 语法分析器 自动生成器。
11.语法分析算法可分为自上而下分析法和自下而上分析法两大类。(16)是从文法的开始符号出发,反复使用文法的产生式,寻找与输入符号串匹配的推导。(17)是从输入符号串开始,逐步进行归约,直至归约到文法的开始符号。
二、(10)现给你一个程序设计语言的词法和语法,要求你编写词法分析器和语法分析器,请分别试述你着手编写词法分析器和语法分析器的基本步骤。
词法分析器的构造:正规式-NFA-DFA-最小DFA-编写程序-测试
三、(10)目标代码运行时,系统为目标程序分配的存储空间按用途可划分为几个部分?什么是活动记录?请给出C语言活动记录的内容。
系统为目标程序分配的存储空间按用途可划分为:代码区域,
全程/静态区域,栈,自由空间,堆。
活动记录是:一段连续的存储区,用以存放过程的一次执行所需要的信息。
C语言所调用函数的活动记录示例(函数调用分析中的举例)
四、(8分)文法G[S]的产生式如下:
S-SaA | A A-AbB | B B-cSd | e
证明AacAbcBaAdbed是文法G的一个句型;
给出该句型的短语、直接短语和句柄。
五、(10分)考虑文法G[S]:
S- A︱B A-b|c B-( C ) C-C S | S
消除该文法的左递归。
为消除左递归后的文法的非终结符构造First集合和Follow集合。
六、(6分)试述编译程序过程中引入中间代码的优点。
中间代码使编译器更容易重定向:不同机器上的编译器可以在已有前端的基础上附加一个适合这这台新机器的后端来生成。
可以在中间代码上进行与机器无关的代码优化。
七、(6分)通过下面文法给出的数的整数值(val属性),写出一个属性文法:
number→number digit |digit
digit→0|1|2|3|4|5|6|7|8|9
七、(6分)通过下面文法给出的十进制数的浮点数值,写出一个属性文法(提示:使用一个属性count计算小数点右面数字的个数):
dnum - num.num
num-num digit |digit
digit→0|1|2|3|4|5|6|7|8|9
八、(每题5分,共20分)
给定文法G[A]:A-( A )︱a
构造文法G[S]的识别所有活前缀LR(1)项目的DFA。
构造相应的LR(1)分析表。
合并同心集,构造LALR(1)分析表
写出句子 ( ( a ) ) 的分析过程。
九、(8分)
假设if语句 if-stmt→if(E) S1 | if(E) S1 else S2 生成下面的三地址码模式:
code to evaluate E to t1
if_false t1 goto L1
code for S1
goto L2
label L1
code for S2
label L2
while语句 while-stmt→while (E) S
生成下面的三地址码模式:
label L1
code to evaluate E to t1
if_false t1 goto L2
code for S
goto L1
label L2
试写出语句
if (tr
您可能关注的文档
最近下载
- 废旧塑料购销合同6篇.docx VIP
- 山东省烟台市芝罘区2022-2023学年七年级(五四学制)上学期期中地理试题(含答案).docx VIP
- 建筑工程施工技术交底大全.docx
- 柔性光伏钢构及组件安装施工方案.docx VIP
- 中成药学讲稿祛暑中成药.docx VIP
- 石油化工企业设计防火规范(GB50160-2018-).doc
- 山东省烟台市芝罘区(五四制)2023-2024学年六年级上学期期中考试生物试题(解析版).docx VIP
- 医疗机构医院感染管理专职人员管理办法(2020年版).pdf
- 南宁师范大学信息技术课程与教学考研真题试题2019年.pdf
- 加强风电设备管理提升风机可利用率(电力系统及自动化范文).doc
文档评论(0)