编译原理 --- 高级程序设计语言概述

第一部分 --- 程序设计语言的定义

一个程序设计语言一般有三个定义:1.语法;2.语义;3.语用

在编译原理这门课中我们主要考虑语法和语义这两个定义

1.程序本质上是一定字符集合上的字符串,但是字符串并不一定都是程序,唯有符合一定规则的字符串才能够称之为程序,而这个规则就是 语法规则

2. 合式的意思就是:形式上正确

1.一个程序的语法又分为两部分,分别是

 词法规则和语法规则

2.词法规则是程序中的单词符号的形成规则,向机器描述这个规则的工具是有限状态机

3.语语法规则其实就是单词之间的组合规则,向机器描述语法规则的工具是上下文无关文法

1.通过语法规则和词法规则我们只能够生成程序的形式结构,这个形式结构是没有具体意义,如果要给这个形式结构赋予具体意义的话,就需要我们根据语义规则来给程序的形式结构赋予意义

比如我们通过词法规则和语法规则生成了 * 号,此时这个符号本身是不具有意义的,它只是一个符号,如果我们想让它表示乘法的话,就需要我们通过语义规则来赋予它乘法的意义

1.向机器描述语义时,我们不用自然语言来描述(原因如上),我们采用的是操作语义,指称语义以及代数语义这三种方式来描述

1.程序由子程序组成,子程序由语句组成,语句又由表达式组成,最后表达式由数据引用,运算符和函数调用这三部分组成


第二部分 --- 高级语言的一般特性 ​​​

1.强制式语言就是用一条一条的语句来描述数据处理的过程,所以又称为过程式语言

2.应用式语言则是侧重于程序的功能而不是过程

3.基于规则的语言则是可以通过我们给定的规则来自动数据的演算和推理

4.面向对象的语言支持继承,封装和多态,在这个语言中我们会将数据和对数据的操作封装在类中,然后将类实例化为对象,对象之间通过消息和消息响应来实现计算

 

 

 

 1.关于第三点的补充,重新说明后的X只在它所处的B2中有效

1.嵌套定义在过程里的过程P1的作用域是P1过程定义的开始到P1所在的主过程结束

1.语法概念是在构建程序的形式结构(形式结构本身不具有意义)

2.语义概念则是在给无意义的形式结构赋予意义

1.标识符是语法概念,是以字母开头,由字符和数字组成的字符串

2.名字则是语义概念,当标识符与程序中的对象联系在一起的时候(通过表示符莱表示对象时),我们称这个表示符为名字(所表示的对象的名字)

标识符与对象之间的关联称为绑定,当绑定成功后标识符就成为了名字(与其绑定的对象的名字)

 1.名字具有值和属性(类型和作用域)(这个值其实就是名字所对应的对象的值,属性就是名字所对应的对象的类型和作用域)

1.在将标识符与对象进行绑定的时候根据绑定的时间不同,分为静态绑定和动态绑定

2.静态绑定:在编译过程中执行的绑定操作,包括变量声明,类型定义和函数的定义

3.动态绑定:在程序运行时进行绑定,比如C++中的虚函数的定义就是动态绑定的


第三部分 --- 数据结构 

1.如果编译时能够确定数组的存储空间的大小的话,这是一个不可变数组,如果编译时不能确定其存储空间的大小,只有在运行时才能确定的话,这就是可变数组

1.每当我们创建了一个数组时,都会跟着创建一个数组的内情向量(内情向量中记录的数据如上) ,这个内情向量会被登记在编译时会用到的符号表中

由于数组中的域都是连续存放的,所以数组中的元素的地址都是相当于记录(数组)的结构起点的相对地址 


第四部分 --- 语句与控制结构

 

1.关于最后一条如果A和B都是函数引用的话,我们先访问A函数然后再访问B函数得到的结果可能和先访问B函数然后再访问A函数的结果完全不同。

1.名字:与对象绑定好的标识符

2.表达式只有右值没有左值

3.赋值号的意义是将赋值号右边表达式的内容存储到赋值号左边变量的对应的内存空间中

所以赋值号左边的变量必须具有左值,右边的表达式必须具有右值

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值