下载此文档

编译原理作业.docx


文档分类:IT计算机 | 页数:约34页 举报非法文档有奖
1/34
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/34 下载此文档
文档列表 文档介绍
编译原理作业.docx:源语言、目标语言、翻译器、编译器和解释器。答:源语言是指待翻译的语言,和目标语言相对。目标语言是指被翻译的语言,与源语言相对。能够完成从一种语言到另一种语言的变换的软件称为翻译器,这两种语言分别叫做该翻译器的源语言和目标语言。编译器是一种特殊的翻译器,它进行语言变换的特点是目标语言比源语言低级。解释器是不同于编译器的另一类语言处理器。它不像编译器那样通过翻译来生成目标程序,而是直接执行源程序所指定的运算。它的执行方式是一边翻译一边执行,因此其执行效率一般偏低。?各阶段的主要功能是什么?答:典型的编译器可以划分成七个主要的逻辑阶段,分别是词法分析器、语法分析器、语义分析器、中间代码生成器、独立于机器的代码优化器、代码生成器、依赖于机器的代码优化器。各阶段的主要功能:词法分析器:词法分析阅读构成源程序的字符流,按编程语言的词法规则把它们组成词法记号流。语法分析器:按编程语言的语法规则检查词法分析输出的记号流是否符合这些规则,并依据这些规则所体现出的该语言的各种语言构造的层次性,用各记号的第一元建成一种树形的中间表示,这个中间表示用抽象语法的方式描绘了该记号流的语法情况。语义分析器:使用语法树和符号表屮的信息,依据语言定义來检查源程序的语义一致性,以保证程序各部分能有意义地结合在一起。它述收集类型信息,把它们保存在符号表或语法树中。中间代码生成器:为源程序产生更低级的显示中间表示,可以认为这种中间表示是一种抽象机的程序。独立于机器的代码优化器:试图改进屮间代码,以便产生较好的冃标代码。通常,较好是指执行较快,但也可能是其他目标,如目标代码较短或目标代码执行时能耗较低。代码牛成器:取源程序的一种中间表示作为输入并把它映射到一种目标语言。如果目标语言是机器代码,则需要为源程序所用的变量选择寄存器或内存单元,然后把屮间指令序列翻译为完成同样任务的机器指令序列。依赖于机器的代码优化器:试图改进目标机器代码,以便产生较好的目标机器代码。:由题目分析可知,一个符号串由0和1组成,则0和1的个数只能有四种情况:偶数个0和偶数个1(用状态0表示);偶数个0和奇数个1(用状态1表示);奇数个0和偶数个1(用状态2表示);奇数个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);状态I(偶数个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(状态l)o因为,所求为由偶数个0和偶数个1构成的所有0和1的串,故状态0既为初始状态,又为终结状态,其状态转换图如下面的图1所示:2 * ' 3/ \1•解:由状态转换图可以写出其正规文法为:-> IS1IOS2I£f lSo|0S3|lf 1S3I0S0I0f 1S2IOS1在不考虑So->e产生式的情况下,可以将文法变形为:So=1S1+0S2Si=ISo+OS3+ 1s2二1S3+OSo+0Sb=1S2+0S1所以So = (OOlll)So + (01110)S3 + 11+00S3 = (00|ll)S3 + (01110)So + 01 + 10解(2)式得:S3二(00|ll)*((01|10)So+(01|10))代入(1)式得:So=(00|ll)So+(01|10)(00|11)*((01|10)So+(01|10))+(00|11)二〉s°=(00111)So+((n10)(00ii)'(oi|io)So+(oil10)(oo|ii)*(oi10)+(00111)二〉S(f((00|ll)+(01|10)(00ll)*(01lO))So+(01|10)(00|ll)*(01|10)+(00|ll)=>So=((OO|ll)1(01|10)(00111)*(01110))X(01110)(00丨ll)'(01110)+(00111))=>So=((OO|ll)1(01|10)(00|ll)*(01|10))"(001ll)+(01|10)(00|ll)"01|10))=>So=((OO|ll)1(01|10)(OOl11)*(01110

编译原理作业 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数34
  • 收藏数0 收藏
  • 顶次数0
  • 上传人sssmppp
  • 文件大小545 KB
  • 时间2019-07-15