第二章高级语言及其语法描述..pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二义文法改造为无二义文法 文法G[E]:E?E+E?E*E? (E) ? i 是二义性的,如果规定“×”和“+”的优先性,并服从左结合,上式就可以构造出无二义性文法。 文法G[E]: E ?T | E×T T ?F | T+F F?( E ) | i 句子的推导过程唯一:如:i×i+i * * * * 语境:指理解和实现程序设计语言的环境,包括编译环境和运行环境 * 赋值语句语法的非形式化描述为:赋值语句由一个变量,后随一个符号“=”,再在后面跟一个表达式所构成。 赋值语句的语义为:先对该语句的右部表达式求值,然后把所得结果与语句左部的变量相结合,并取代该变量原有的值。 赋值语句的语用为:赋值语句可用来计算和保存表达式的值。 * 注意这里提到三个概念:a.一个程序只是用一个有限字符集作为字母表;b.词法规则是指单词符号的形成规则。单词符号一般包括:各类型的常数、标识符、基本字、算符和界符等。C.语言的语法规则规定了如何从单词符号形成更大的结构(即语法单位),换言之,语法规则是语法单位的形成规则。一般程序语言的语法单位有:表达式、语句、分程序、函数、过程和程序等。 * 软件发展的三个里程碑:子程序、高级语言、结构化程序设计 自上而下看上述层次结构:顶端是程序本身,他是一个完整的执行单位。一个程序通常是由若干个子程序或分程序组成的,他们常常含有自己的数据(局部名)。子程序或分程序是由语句组成的。而组成语句的成分是各种类型的表达式。表达式是描述数据运算的基本结构,它通常含有数据引用、算符和函数调用。 自下而上看上述层次结构:我们希望通过对下层成分的了解掌握上层成分,从而掌握整个程序。 在学习编译原理的过程中特别注意:程序语言的每个组成成分都有(抽象的)逻辑和计算机实现两方面的意义。当从数学上考虑每一个组成成分时,我们注重它的逻辑意义,当从计算机这个角度来看时,我们注重他在机内的表示和实现的可能性与效率。 * * 强制式:命令驱动,面向语句 * 辅助程序段可以是子程序、函数段或数据。每程序段由一系列说明语句和执行语句组成。各程序段可以独立编辑。这对模块设计甚为方便。 一个FORTRAN 程序个程序段所定义的各种名字通常是彼此独立的。同一个标识符在不同的程序段中一般都可以代表不同的名字,即代表不同的存储单元,个程序段对它们的引用或赋值是彼此无关的。但是,不同程序段里的同名公用块(Common Block)却代表同一个存储区域。因此,出现在COMMON语句中的名字所代表的单元在其他程序块中也可以引用。所以说,公用区具有全局性。不出现在COMMON中的名字所代表的单元具有局部性。 * * 数据结构、数据类型和抽象数据类型,它们在含义上既有区别又有联系。 数据结构是用来反映一个数据的内部构成,即一个数据由哪些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,物理上的数据结构反映成分数据在计算机内的存储安排。数据结构是数据存在的形式。 数据是按照数据结构分类的,具有相同数据结构的数据属同一类。同一类数据的全体称为一个数据类型。在程序设计高级语言中,数据类型用来说明一个数据在数据分类中的归属。它是数据的一种属性。这个属性限定了该数据的变化范围。 抽象数据类型可理解为数据类型的进一步抽象。即把数据类型和数据类型上的运算捆在一起,进行封装。引入抽象数据类型的目的是把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔开,使它们相互独立。对于抽象数据类型的描述,除了必须描述它的数据结构外,还必须描述定义在它上面的运算(过程或函数)。抽象数据类型上定义的过程和函数以该抽象数据类型的数据所应具有的数据结构为基础。 * * * * 在多数语言中算术算符和逻辑算符的优先顺序一般规定如下: 乘幂 ( ** 或 ↑ ) 一元负 ( - ) 乘、除 ( * , /, ÷ ) 加、减 ( + , - ) 关系符 ( , = , , =, , = ) 非 ( ﹁, not, 或 .NOT. ) 与 (∧, , and 或 .AND. ) 或 ( ∨,∣, or 或 .OR . ) 隐含 ( ? 或 imp ) 等值 ( ≡, ~ 或 equi ) 算符的代数性质(交换率、结合率和分配率)常常可用来优化目标程序的质量。但是必须注意两点: (1) 代数性质引用到什么程度视具体语言的不同而不同。如在ALGOL中把 A*B+C*D 处理成C*D+A*B, 则至少是对ALGOL不够忠实。 (2)数学上成立的代数性质

文档评论(0)

peain + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档