编译原理 第2章:基础知识

1. 参数传递

在这里插入图片描述

1.1 传地址

  1. 实在参数的地址传递给相应的形式参数。>PASCAL的变量参数方式
  2. 在过程段中每个形式参数都有一个相应的单元,称为形式单元,用来存放相应的实在参数地址。
  3. 调用一个过程时,调用段必须把实在参数的地址传递到一个为被调用段可以拿得到的地方。
  4. 如果实在参数是一个变量(包括下标变量),则直接传递它的地址;如果实在参数是常数或其它表达式(如A+B),那就先把它的值计算出来并存放在某一临时单元之中,然后传送这个临时单元的地址。
  5. 当程序控制转入被调用段之后,被调用段首先把实参地址抄进自己相应的形式单元中,过程体对形式参数的任何引用或赋值都被处理成对形式单元的间接访问
  6. 当被调用段工作完毕返回时,形式单元(它们都是指示器)所指的实在参数单元就持有所期望的值。
    在这里插入图片描述
    参数调用后,形式参数M的值是I的地址,N的值是J的地址,这样通过M的值可以间接访问到I的值,通过N的值可以间接访问到J的值,函数调用返回后,I和J的值被交换。

1.2 得结果

在这里插入图片描述

  • 对于得结果,上面函数调用的参数传递过程如下图所示。图中参数调用后,形式参数M的值是I的值,N的值是J的值,但是在函数中无法访问到I和J所在的内存单元,只有在函数返回前将M和N的值分别抄送到I和J所在的内存单元中。 这种方式的函数调用,I和J的值也被交换。
    在这里插入图片描述

1.3 传值

  1. 是一种简单的参数传递方法,也是当今高级语言中使用最多的参数传递方法之一。把实在参数的值传递给相应的形式参数。 PASCAL的值参数
  2. 调用段把实在参数的值计算出来并存放在一个被调用段可以拿得到的地方。 被调用段开始工作时,首先把这些值抄入到形参单元中,然后就像使用局部名一样使用这些形式单元。
  3. 如果实在参数不为指示器(指针)(因此无法回存!),那么,在被调用段中无法改变实参的值。
  4. 对于传值,上面函数调用的参数传递过程如下图所示:
    在这里插入图片描述
    参数调用后,形式参数M的值是I的值,N的值是J的值,但在函数中无法改变I和J的值,函数调用结束后,I和J的值也不会改变。

1.4 传名

传名是ALGOL 60所定义的一种特殊的形-实参数结合方式

  1. 过程调用的作用相当于把被调用段的过程体抄到调用出现的地方,但把其中任一出现的形式参数都换成相应的实在参数(文字替换)
  2. 它与“传地址”或“传值”的方式所产生的结果均不相同。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 程序设计语言概述

在这里插入图片描述
“程序设计教科书中的语言侧重于语言成分的意义,它常常只讲到语言的一部分,因此,不能把这种描述作为构造编译程序的基础”
程序语言由两方面进行定义:语法 语义
语法
在这里插入图片描述
语义
在这里插入图片描述

2.1 高级语言的分类

  1. 强制式语言(Imperative Language),也称过程式语言:命令驱动,面向语句 FORTRAN、C、Pascal,Ada
  2. 应用式语言(Applicative Language):注重程序所表示的功能,而不是一个语句接一个语句地执行 LISP、ML
  3. 基于规则的语言(Rule-based Language):检查一定的条件,当它满足值,则执行适当的动作 Prolog
  4. 面向对象语言(Object-Oriented Language):封装性、继承性和多态性 Smalltalk,C++,Java

2.2 程序结构

FORTRAN
在这里插入图片描述
PASCAL
在这里插入图片描述
在这里插入图片描述
ADA
在这里插入图片描述
JAVA
在这里插入图片描述

2.3 数据类型与操作

一个数据类型通常包括以下三种要素:

  • 用于区别这种类型数据对象的属性
  • 这种类型的数据对象可以具有的值
  • 可以作用于这种类型的数据对象的操作

初等数据类型:

  • 数据类型:整型、实型、复数、双精度、 运算:+,-,*,/等
  • 逻辑类型:布尔运算:∨,∧,┑
  • 字符类型:符号处理
  • 指针类型
  • 标识符:以字母开头的,由字母数字组成的字符串。
  • 标识符与名字两者有本质区别:
    - 标识符是语法概念
    - 名字有确切的意义和属性
    在这里插入图片描述
    数据结构
  1. 数组
    逻辑上,数组是由同一类型数据所组成的某种n维矩形结构,沿着每一维的距离,称为下标
    • 数组可变与不可变:编译时能否确定其存储空间的大小
    • 访问:给出数组名和下标值
    • 存放方式:按行存放,按列存放

在这里插入图片描述

  1. 记录
    在这里插入图片描述

  2. 字符串、表格、栈
    在这里插入图片描述

2.4 语句与控制结构

  1. 表达式

在这里插入图片描述
2. 语句
在这里插入图片描述

3.程序语言的语法描述

在这里插入图片描述
在这里插入图片描述

3.1 上下文无关

文法: 描述语言的语法结构的形式规则
在这里插入图片描述

上下文无关文法G包括四个组成部分:一组终结符号、一组非终结符号、一个开始符号以及一组产生式。
在这里插入图片描述

上下文无关文法的定义
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 语法树与二义性

用一张图表示一个句型的推导,称为语法树
在这里插入图片描述
在这里插入图片描述
定义:如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的
G(E): E  i|E+E|E*E|(E) 是二义文法

语言的二义性:一个语言是二义性的,如果对它不存在无二义性的文法。
在这里插入图片描述
例题:
在这里插入图片描述

3.3 形式语言鸟瞰

在这里插入图片描述
在这里插入图片描述

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵远疴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值