汪道之

有人的地方就有江湖

0%

编译原理第一章

语言的本质

一组规则的组合

  1. 字母表的定义
  2. 词法规则
  3. 语法规则
  4. 语义规则
  5. 语用规则

与编译有关的三种语言和三种程序

源语言 工具语言 目标语言
源程序 编译程序 目标程序

程序设计语言的分类

强制式语言 函数式语言 逻辑式语言 对象式语言
冯·诺依曼模型 数学函数(函数运算) 数理逻辑、谓词演算 抽象数据类型

冯·诺依曼体系结构

  1. 构成基础
    存储器、控制器、处理器、ip
  2. 特点
    • 数据、指令以二进制形式存储
    • 存储程序的工作方式
    • 程序顺序执行,可强制修改执行顺序
    • 存储器内容可以被修改

变量的4个属性

  1. 作用域

    • 静态绑定:依据变量定义的位置
    • 动态绑定:依据过程的调用关系
    • 全局变量
    • 局部变量
    • 非局部变量
  2. 生存期

    • 全局变量静态分配
    • 局部变量运行前静态分配,运行时动态分配
    • 非局部变量可静态分配可动态分配
    • 匿名变量是通过指针访问,是动态分配
    • 二进制编码
    • 按类型解释
    • 变量与值的绑定是动态的
    • 常量的值不能修改
    • 数据对象表示存储区和它保存的值
  3. 类型

    静态绑定语言是面向编译的语言
    动态绑定语言是面向解释的语言

虚拟机

M1是实际的机器
机器语言是汇编语言的M2=M1+汇编程序
机器语言是高级语言的M3=M2+编译程序

程序单元

  1. 定义:程序执行过程中被独立调用单元,包括子程序、分程序、过程等

  2. 表示:

    • 编译时:单元的源程序

    • 运行时:一个代码段和一个活动记录组成,称为单元实例

    • 活动记录:执行单元需要的信息和局部变量等数据存储区

  3. 实例:

    • 非局部变量:一个程序单元可以引用未被本单元说明而被其它单元说明的变量
    • 全局变量:一个程序中各个程序单元都可以引用的变量

C程序运行时的存储空间

  1. 程序代码区:存储程序代码(编译后形成的二进制机器指令序列)

  2. 数据静态存储区:存储程序的常量数据、全局数据、static数据

  3. 数据动态存储区:

    栈:存储返回地址、CPU现场、临时变量、形参、局部变量
    堆:存储动态内存申请数据