《语言翻译问题》PPT课件.ppt
《《语言翻译问题》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《语言翻译问题》PPT课件.ppt(59页珍藏版)》请在三一办公上搜索。
1、,第3 语言翻译问题,学习目标:学习和掌握语言的语法的基本概念和基本要素,理解翻译的步骤;学习和掌握BNF文法。了解通用语法的标准,学习语法的基本要素;了解几种语言的特点;学习和掌握源程序分析和目标程序综合的原理和方法;掌握和使用BNF文法;,重点和难点:本章的重点是:源程序的分析和目标程序综合的原理与方法;BNF文法;本章的难点是:语法二义性,语义分析原理;,知识点:语法;语义;二义性;独立子程序定义;独立数据定义;嵌套子程序定义;独立接口定义;词法分析;语法分析;语义分析;优化;连接与载入;系统自举;语法树;BNF文法,对于在虚拟计算机上实现的高级语言程序,必须经过翻译才能在实际的计算机上
2、运行。翻译一般要经“词法分析”“语法分析”“语义分析”“代码优化”“目标程序生成”等5个阶段。其中,“语法分析”阶段最为重要,它是描述程序结构的主要手段。“遍”的概念?“一遍”翻译?“二遍”翻译?“三遍”翻译?,本章概述,本章主要内容,3.1 编程语言语法3.2 翻译步骤3.3 BNF文法,3.1 编程语言语法,语法:以句子中词的排列来表明它们的彼此关系。如C语言中,x=y+z具有正确的语法,而x+-则语法错误。语法是理解一个程序的重要手段,也为将源程序翻译成目标程序提供了必要的信息。但,只有语法是不够的。如“张三踢足球”和“足球踢张三”,语法都正确,但语义?如 x=2.54+3.67,结果为
3、5,6,6.21?,本节主要内容,通用语法标准语言的语法要素主程序-子程序结构,通用语法标准,可读性:如果一个程序的算法和数据结构能够明显的从程序文本中观察出来,则这个程序是可读的。可读的程序称之为自引证的。可读性成为如今程序编制的重要目标是一。增加可读性的方法:用自然语句格式、结构化、自由使用关键字和噪声码、注释、不限标识符长度、助记符、自由域格式、完整的声明。,可写性:可写性是指程序易于编写。语法结构简单的语言程序可写性好。增加可写性的方法:设计简洁、整齐的语法结构。允许保留不明确声明和操作的隐含。可写性与可读性是一对矛盾。简洁的结构可增强程序的可写性,但降低了程序的可读性。如C语言,可写
4、性较好,但可读性差。允许保留不明确声明和操作的隐含可增强可写性,但会降低可读性,同时可检验性差。,易检验性:证明程序的正确性。这不仅涉及到语法,主要涉及到语义的正确性验证。目前,主要通过一些测试方法,以及谓词演算方法来验证。,易翻译性:源程序容易翻译成可执行的目标程序。易翻译性与翻译器密切关联。易于翻译的关键是结构的规范化。易翻译性与可读性和可写性之间存在矛盾。如LISP程序易于翻译,但可读性和可写性较差。COBOL语言程序的语义较为简单,可读性和可写性较好,但由于存在数量庞大的语句和声明,翻译极为困难。,无二义性:所谓二义性是指:相同的语法结构存在两种或更多种理解。无二义性是每个程序语言设计
5、的中心问题。二义性问题通常不是出现在单个的程序元素中,而是在不同结构的相互作用下表现出来的。例1:C语言中存在两种不同的条件形式:if(ConE)S if(ConE)S1 else S2每一条语句均清楚的解释了语义,不存在二义性。但将两个语句组合为:if(ConE1)if(ConE2)S1 else S2 此时,存在二义性。,语句S2的执行控制存在不同的理解,是ConE1为假时执行,还是ConE1为假时执行?解决方法:插入定界符,如 if(ConE1)if(ConE1)if(ConE2)S1;或 if(ConE2)S1;else S2;else S2;二者语义中强制的选择一种作为合法的解释,如
6、就近匹配原则,即else与最近的 if 匹配。,例2:Fortran语言中,函数调用和数组引用语法是完全相同的。如语句 x=A(i,j)存在二义性。此时A(i,j)是函数A的调用?还是数组A的引用?解决方法:若没有数组A的声明,就默认为是函数A的调用。Pasacl和C语言中的解决方案是:用表示数组,()表示函数,如Ai,j理解为数组引用,A(i,j)解释为函数调用。,返回本节,语言的语法要素,选用不同的基本语法要素就形成了一种语言的基本风格。下面,将简介一些语法要素。字符集:字符集的选择是语法设计的第一步。通常选择的字符集是ASCII字符集。目前,通常使用8为(一个Byte)来表示一个字符,这
7、足够表示52个大小写字母、10个数字、标点符号以及一些特殊字符。但如今,计算机工业越来越国际化,各个国家的文字、货币符号等已远远超过256。因此,考虑使用16位表示字符集。,标识符:大多数语言都遵循以字母开始字母和数字组成的字符串作为标识符的原则。有的语言还允许包括“.”和“_”之类的特殊字符。如name_student是C中的合法标识符。这样,可以增强可读性和改善长度方面的限制。标识符长度应该不受限制。,操作符:大多数语言均使用“+”和“-”来表示基本的数学运算操作,除此之外,很少有相同的。如Pascal使用“:=”作为赋值操作,而C使用“=”。Pascal使用“=”作为比较操作,而C使用“
8、=”,Fortran 使用字符串.EQ.。,关键字和保留字:关键字是语句语法中固定部分使用的标识符。当关键字不能用作程序的标识符时,该关键字就是一个保留字。如C语言中的 if,for,while等。使用保留字使翻译过程中的语法分析变得简单。作为反面例子,Fortran 中用户可以使用DO 和 IF作为标识符,因此以DO 和 IF 开始的语句实际上并不一定是循环或条件语句,所以Fortran 的语法分析较为困难。使用保留字可增加程序的可读性。但保留字也不能太多,否则难以记忆,编程不方便。如COBOL的保留字太多。但当语言扩充而扩充新的保留字时,会引来麻烦。,噪声码:插入在于语句中用来增加可读性的
9、可选代码。如Basic 语言中“GOTO”语句中的“GO”是必需的关键字,而“TO”是可选的噪声码。如汇编语言中,return n 中的n是噪声码。,注释:注释是程序文档中的重要组成部分。一种语言可以使用多种方法引入注释。如:Basic 中使用 REM 引导单独的注释行;C、Java语言中使用“/*”和“*/”作为多行注释定界符。Ada中的“-”,C+中的“/”,Fortran 语言中的“!”,Basic中的“”都可以从语句行的人以位置开始标示注释。,空白符(空格)各种语言使用空白符的规则不太相同。如C语言中,空白符在除字符串数据以外的任何地方没有重要的意义。?起分隔符号的作用。在词法分析中有
10、重要的作用。多余的空白符被忽略。在SNOBOL4语言中,空白符起基本连接操作作用。,定界符:定界符一般用于简单的标示诸如语句或表达式这些语法单位的语法元素。定界符有时仅用来增强可读性和使语法分析变得简单,更多的时候用于清楚的界定特定语法结构的边界以消除二义性。如Pascal语言中的begin end。C语言中的花括号。,自由或固定字段格式:如果程序中的语句可以书写在一行的任意位置,则该语言的语法是自由字段格式的。目前绝大多数的高级语言均采用该语法。若要求程序中的语句每一元素必须在一输入行的指定位置书写,则该语言的语法是固定字段格式的。固定字段格式语言的语法利用输入行的位置来传递信息。如Fort
11、ran77语言的一行80列分为四个区:15列为标号区;第6列为“续行标志区”;第772列为语句区;第7380列为注释区。,表达式:表达式的作用是访问程序中的数据对象并返回值。表达式是语句的基本元素,有时甚至是程序的基本元素。如C中,表达式组成了改变机器状态的基本操作。在ML和LISP语言中,表达式形成了驱动程序执行的基本顺序控制。,语句:语句是命令式语言中最重要的语法单元。语句的语法对整个语言的规则性、可读性和可写性有着决定性的作用。侧重于规则性的语言使用一个基本的语句格式。如SNOBOL4语言只使用一种基本的语句语法,即模式匹配替代语句。侧重于可读性的语言则对不同类型的语句是用不同的语法。大
12、多数的语言采用该方式。,返回本节,主程序-子程序结构,主程序-子程序结构的语法组织的定义与其他语言语法一样千差万别。独立子程序定义C语言的语法组织结构将每个子程序定义看作独立的语法单元。每个子程序能够独立的编译并在装入的时候通过连接形成一个完整的程序。面向对象语言要求信息能够在独立编译的单元中传递。类定义的继承性要求编译器在程序装入运行之前处理所有独立子程序,int aa(x,y)void bb(x,y)int x,y;float x;int y;main()float a;int b,c;bb(a,b);aa(c,b);,独立数据定义:将所有对一个给定数据对象的操作组织在一起。一个子程序可能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言翻译问题 语言 翻译 问题 PPT 课件

链接地址:https://www.31ppt.com/p-5606776.html