编译原理(二)--高级语言及其语法描述

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

2.1 程序语言的定义

2.1.2语法

词法规则

字母表是一个有穷字符集

词法规则是指单词符号的形成规则

正规式和有穷自动机是描述词法结构和进行词法分析的有效工具

语法规则

语法规则规定了如何从单词符号形成更大的结构(即语法单位),换而言之,语法规则是语法单位的形成规则

一般的语法单位:

表达式,语句,分程序,函数,过程和程序等

下推自动机理论和上下文无关文法是我们讨论语法分析的理论基础

2.1.2语义

对于一个语言来说,不仅要给出它的词法、语法规则,而且要定义它的单词符号和语法单位的意义,这就是语义问题

对于编译程序来说,只有了解程序的语义,才知道应把它翻译成什么样的目标指令代码

2.2构造基础

2.2.1程序结构介绍

一个高级语言程序通常由若干子程序段(过程、函数等)组成,许多语言还引入了类、程序包等更高级的结构

2.2.2构造基础

名字

程序设计语言的数据对象:数据,函数,过程

特性

一个名字对于一个对象----->普通变量

多个名字对于一个对象----->common

一个名字对于多个对象----->数组,重载,局部变量,重写

每个对象可以看成一个存储单元,可能是一个字,也可能是多个字

名字具有属性,包括:类型和作用域

类型决定了它有什么样的值。值在计算机内的表示,以及对它能施加什么样的运算

作用域规定了值的存在范围

数据类型
  1. 数值数据:整形、实型、双精度等,可施行算术运算
  2. 逻辑数据:可施行逻辑运算
  3. 字符数据:
  4. 指针类型:
数据结构
数组

从逻辑上讲,一个数组是由同类型数据所组成的n 维矩形结构

一个数组所需的存贮空间大小在编译时就已知道的,则称此数组是一个确定的数组;否则称为可变数组

在编译的时候,当遇到说明时,必须吧数组的有关信息记录在一个“内情向量”中,用于数组元素地址计算

内情向量:

维度,各维的上下限,首地址及数组的类型

对于确定数组来说,内情向量可登记在符号表中;

对于可变数组,内情向量的信息在编译时无法全部知道,只有到运行阶段才能全部确定下来,存贮分配也要等到运行时方能进行

记录

从逻辑上讲,记录是由已知的数据组合起来的一种结构

记录结构最简单的存储方式是连续存放

字符串,表格和队列
抽象数据结构

一个抽象数据类型包括:

  1. 数据对象的一个集合

  2. 作用于这些数据对象的抽象运算的集合

  3. 这种类型对象的封装

语句与控制结构

1.表达式

要解决的问题:

1.优先级

2.结合率

2.语句

语句可以分为

说明语句:定义数据类型的变量和运算

可执行语句:描述语句的动作

执行语句分为:赋值,控制和I/O语句

赋值句:

A=B

控制语句

无条件转移语句 goto

条件语句 if

循环语句 while

过程调用语句 Call

返回语句 Return

说明语句

说明语句用于定义名字的性质

编译程序把这些性质登记在符号表中,并检查程序中名字的引用和说明是否一致

许多说明语句不产生目标代码

但有的说明语句,如过程说明和可变数组说明,则要产生相应的目标代码

简单句和复合句

简单句是指不包含其他语句成分的基本句。赋值,goto语句等

复合句则指句中含有的语句

2.2.3 参数传递

实在参数与形式参数结合的方法:

传值调用,应用调用,复制恢复,传名调用

1.传值调用

主调过程计算实在参数,并把它们的右值放入到形式参数的存储空间中

子程序为每个形参开辟一个存储单元,用于存放相应实参

子程序执行时,每当访问形参时,就直接访问形参单元

2.引用调用

把实在参数的地址传递给相应的形式参数, 在目标代码中,在被调用过程中对形式参数的一次引用就成为对传递给被调用过程的指针的一个间接引用。

3.复制恢复

实现过程

  1. 当控制流入到被调用过程之前,把实在参数 的右-值和左-值传递到被调用过程中;

  2. 当控制返回时,把形式参数的现行右-值复制回到相应的实在参数的左-值中。

解释

子程序为每个形参分配两个存贮单元B1和B2,B1用于存放实参地址,B2用于存放实参值。

执行时,对B2单元使用直接访问形式;返回前,按B1中的地址把B2中的内容存入主调程序的实参单元中。

4.传名调用

在主调程序中设置计算实参地址和右值的形实替换子程序THUNK

子程序中为相应实参开辟一个形式单元,用于存放该实参的THUNK子程序的入口地址。

执行时,每当要对形参进行访问时,就调用THUNK子程序,以获得相应实参地址或值

对形参的访问是发生在实参单元上的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值