欢迎来到天天文库
浏览记录
ID:42936452
大小:746.50 KB
页数:75页
时间:2019-09-26
《编译2高级语言及其语法描述(zss)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理(第三版)陈火旺等编著(2012年9月-12月)主讲:朱世松计算机学院第二章高级语言及其语法描述常用的高级语言FORTRAN数值计算COBOL事务处理PASCAL结构程序设计ADA大型程序、嵌入式实时系统PROLOG逻辑程序设计ALGOL算法语言C/C++系统程序设计JavaInternet程序设计7/16/20212与机器语言或汇编语言比较,高级语言的优点:较接近于数学语言和工程语言,比较直观、自然和易于理解;便于验证其正确性,易于改错;编写效率高;易于移植.7/16/202132.1程序语言的定义程序语言由两方面定义:语法语义(语用-语言成分的使用方法)7/16/20214
2、一.语法程序本质上是一定字符集上的字符串。语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序。7/16/20215词法规则:单词符号的形成规则。单词符号是语言中具有独立意义的最基本结构。一般包括:常数、标识符、基本字、算符、界符等。描述工具:有限自动机语法规则:语法单位的形成规则。语法单位通常包括:表达式、语句、分程序、过程、函数、程序等;描述工具:上下文无关文法7/16/20216E→iE→E+EE→E*EE→(E)语法规则和词法规则定义了程序的的形式结构。定义语法单位的意义属于语义问题。7/16/20217二.语义语义:一组规则,用它可以定义一个程序的意义。
3、描述方法:自然语言描述:隐藏错误、二义性和不完整性形式描述:操作语义(PL/1)指称语义(ADA)代数语义(PASCAL)7/16/20218三.程序语言的基本功能和层次结构程序语言的基本功能:描述数据和对数据的运算。所谓程序,本质上说是描述一定数据的处理过程。7/16/20219程序的层次结构:程序
4、子程序或分程序、过程、函数
5、语句
6、表达式
7、数据引用算符函数调用7/16/202110程序语言每个组成成分的逻辑和实现意义抽象的逻辑的意义数学意义计算机实现的意义具体实现7/16/2021112.2高级语言的一般特性2.2.1高级语言的分类强制式语言(ImperativeLanguge)也
8、称过程式语言:命令驱动,面向语句FORTRAN、C、Pascal,Ada应用式语言(ApplicativeLanguage):注重程序所表示的功能,而不是一个语句接一个语句地执行LISP、ML7/16/202112基于规则的语言(Rule-basedLanguage):检查一定的条件,当它满足值,则执行适当的动作Prolog面向对象语言(Object-OrientedLanguage):封装性、继承性和多态性Smalltalk,C++,Java7/16/2021132.2.2程序结构FORTRAN一个程序由一个主程序段和若干辅程序段组成。辅程序段可以是子程序、函数段或数据块。每个程序段
9、有一系列的说明语句和执行语句组成。各段可以独立编译。模块结构,没有嵌套和递归各程序段中的名字相互独立,同一个标识符在不同的程序段中代表不同的名字。7/16/202114主程序PROGRAM……end辅程序1SUBROUTINE……end辅程序2FUNCTION……end7/16/202115PASCALPASCAL程序本身可以看成是一个操作系统所调用的过程,过程可以嵌套和递归。一个PASCAL过程:过程头;说明段(由一系列的说明语句组成);begin执行体(由一系列的执行语句组成);end7/16/202116作用域:一个名字能被使用的区域范围称作这个名字的作用域。允许同一个标识符在不
10、同的过程中代表不同的名字。名字作用域规则--"最近嵌套原则"一个在子程序B1中说明的名字X只在B1中有效(局部于B1);如果B2是B1的一个内层子程序且B2中对标识符X没有新的说明,则原来的名字X在B2中仍然有效。如果B2对X重新作了说明,那么,B2对X的任何引用都是指重新说明过的这个X。7/16/202117programmainvarA,B:real;…procedureP1varB:boolean;…begin…endprocedureP2varA:integer;…begin…endbegin…endA(real)B(real)B(bool)A(integer)7/16/202
11、118PASCAL提供了丰富的数据类型和运算方式,它允许用户动态地申请和退还存贮空间。7/16/202119ADA程序包(package):把数据和操作代码封装在一起,支持数据抽象。一个程序包分为两部分:可见的规范说明部分,它定义了程序包外面可以访问的对象。程序包体,它实际定义程序包的实现细节。7/16/202120packageSTACKSistypeELEMisprivate;typeSTACKislimitedprivate;proced
此文档下载收益归作者所有