编译原理作业.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
习题1 1.1解释名词:源语言、目标语言、翻译器、编译器和解释器。 答:源语言是指待翻译的语言,和 目标语言相对。 目标语言是指被翻译的语言,与源语言相对。 能够完成从一种语言到另一种语言的变换的软件称为翻译器,这两种语言分别叫做该翻译器的源语言和目标语言。 编译器是一种特殊的翻译器,它进行语言变换的特点是目标语言比源语言低级。 解释器是不同于编译器的另一类语言处理器。它不像编译器那样通过翻译来生成目标程序,而是直接执行源程序所指定的运算。它的执行方式是一边翻译一边执行,因此其执行效率一般偏低。 1.2典型的编译器可以划分成几个主要的逻辑阶段?各阶段的主要功能是什么? 答:典型的编译器可以划分成七个主要的逻辑阶段,分别是词法分析器、语法分析器、语义分析器、中间代码生成器、独立于机器的代码优化器、代码生成器、依赖于机器的代码优化器。 各阶段的主要功能: (1)词法分析器:词法分析阅读构成源程序的字符流,按编程语言的词法规则把它们组成词法记号流。 (2)语法分析器:按编程语言的语法规则检查词法分析输出的记号流是否符合这些规则,并依据这些规则所体现出的该语言的各种语言构造的层次性,用各记号的第一元建成一种树形的中间表示,这个中间表示用抽象语法的方式描绘了该记号流的语法情况。 (3)语义分析器:使用语法树和符号表中的信息,依据语言定义来检查源程序的语义一致性,以保证程序各部分能有意义地结合在一起。它还收集类型信息,把它们保存在符号表或语法树中。 (4)中间代码生成器:为源程序产生更低级的显示中间表示,可以认为这种中间表示是一种抽象机的程序。 (5)独立于机器的代码优化器:试图改进中间代码,以便产生较好的目标代码。通常,较好是指执行较快,但也可能是其他目标,如目标代码较短或目标代码执行时能耗较低。 (6)代码生成器:取源程序的一种中间表示作为输入并把它映射到一种目标语言。如果目标语言是机器代码,则需要为源程序所用的变量选择寄存器或内存单元,然后把中间指令序列翻译为完成同样任务的机器指令序列。 (7)依赖于机器的代码优化器:试图改进目标机器代码,以便产生较好的目标机器代码。 第二章 2.解:由题目分析可知,一个符号串由0和1组成,则0和1的个数只能有四种情况:? eq \o\ac(○,1)偶数个0和偶数个1(用状态0表示); eq \o\ac(○,2)偶数个0和奇数个1(用状态1表示); eq \o\ac(○,3)奇数个0和偶数个1(用状态2表示); eq \o\ac(○,4)奇数个0和奇数个1(用状态3表示)。 所以,状态0(偶数个0和偶数个1)读入1,则0和1的数目变为:偶数个0 和奇数个1(状态1); 状态0(偶数个0和偶数个1)读入0,则0和1的数目变为:奇数个0 和偶数个1(状态2); ?状态1(偶数个0和奇数个1)读入1,则0和1的数目变为:偶数个0 和偶数个1(状态0); ?状态1(偶数个0和奇数个1)读入0,则0和1的数目变为:奇数个0 和奇数个1(状态3); ?状态2(奇数个0和偶数个1)读入1,则0和1的数目变为:奇数个0 和奇数个1(状态3); ? 状态2(奇数个0和偶数个1)读入0,则0和1的数目变为:偶数个0和偶数个1(状态0); ?状态3(奇数个0和奇数个1)读入1,则0和1的数目变为:奇数个0 和偶数个1(状态2); ?状态3(奇数个0和奇数个1)读入0,则0和1的数目变为:偶数个0 和奇数个1(状态1)。 因为,所求为由偶数个0和偶数个1构成的所有0和1的串,故状态0既为初始状态,又为终结状态,其状态转换图如下面的 REF _Ref366324387 \h 图1所示: 2 2 0 0 0 1 1 1 1 1 3 0 0 start 图 SEQ 图表 \* ARABIC 1 1.解: 由状态转换图可以写出其正规文法为:? S0?→?1S1|0S2|ε S1?→?1S0|0S3|1 S2?→?1S3|0S0|0 S3?→?1S2|0S1 在不考虑S0→ε产生式的情况下,可以将文法变形为: S0?=?1S1?+?0S2? S1?=?1S0?+?0S3?+?1 S2?=?1S3?+?0S0?+?0? S3?=?1S2?+?0S1 所以 S0?=?(00|11)S0?+?(01|10)S3?+?11?+?00????????(1)? ??? S3?=?(00|11)S3?+?(01|10)S0?+?01?+?10???? ?? ?(2) 解(2)式得: S3?=?(00|11)*((01|10)S0+(01|10)) 代入(1)式得:????? S0=(00|11)S0+(01|10)(00|11)*((01|10)S0?+(01|10))+(00|11) =S0=(00|11)S0+(01|10)(

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档