编译原理

什么是编译程序?

从功能上看,一个编译程序就是一个语言翻译程序.语言翻译程序是把一种语言(称作源语言)书写的程序翻译成另外一种语言(称作目标语言)的等价程序.

编译原理_第1张图片
编译程序功能及高级源程序的处理过程
  • 编译的各个阶段


    编译原理_第2张图片
    编译各个阶段
  • 编译程序的结构
    编译程序 按照执行顺序包含 词法分析程序 语法分析程序 语义分析程序 中间代码生成程序 代码优化程序 目标代码生成程序
    另外 表格管理程序出错处理程序 伴随整个编译过程.
    表格管理程序主要负责编译过程中各种信息的保留;编译过程发现源程序有错误,编译程序应报告错误性质和错误发生的位置,并将错误造成的影响限制在最小范围内,这些工作由出错处理程序来完成.

解释程序和编译程序的区别?

编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器的汇编语言程序或二进制代码程序,这个二进制代码程序在机器上运行以生成结果;
解释程序不需要在运行前先把源程序翻译成目标代码,也可以实现在某台机器上运行程序并生成结果.

解释程序接收某个语言的程序并立即运行这个源程序.它的工作模式是一个个的获取,分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果,它特别适合程序员以交互方式工作的情况,即希望在获取下一个语句之前了解每个语句的执行结果,允许执行时修改程序. (如Shell解释程序,SQL解释程序)

运行时存储组织

目标程序在目标机环境中运行时,都置身于自己的一个运行时存储空间.
编译程序所产生的目标程序本身大小通常是确定的,一般存放在指定的专用存储区域,即代码区
相应地,目标程序运行过程中需要创建或访问的数据对象将存储在数据区,数据对象包括用户定义的各种类型的命名对象(如变量和常量),作为保留中间结果和传递参数的临时对象及调用过程时所需的连接信息等.

面向数据对象的运行时存储组织所关注的几个重要问题:

  • 数据对象的表示
    需要明确源语言中各类数据对象在目标机中的表示形式.
  • 表达式计算
    需要明确如何正确有效地组织表达式的计算过程
  • 存储分配策略
    核心问题是如何正确有效地分配不同作用域或不同生命周期的数据对象的存储
  • 过程实现
    如何实现过程/函数调用以及参数传递

程序运行时存储空间的布局

运行时的存储空间从逻辑上可分为代码区数据区两个主要部分,一般情况下至少含有 保留地址区 代码区 静态数据区 动态数据区

存储分配策略
1.静态存储分配, 即在编译期间为数据对象分配存储空间.
2.栈式存储分配 内存地址由高到低
3.堆式存储分配 内存地址由低到高

面向对象语言存储分配策略

类和对象的角色

  • 类扮演的角色是程序的静态定义.类是一组运行时对象的共同性质的静态描述.类包含两类特征成员,属性和方法
  • 对象扮演的角色是程序运行时的动态结构. 每个对象都是某个类的实例.
    面向对象机制的主要特点, 封装 继承 多态 重载 动态绑定

面向对象程序运行时的特征

  • 对象是类的一个实例
  • 执行一个面向对象程序就是创建系统根类的一个实例,并调用该实例的创建该过程.
  • 创建对象的过程实现该对象的初始化;对于根类而言,创建其对象即执行该系统.

对象的存储包含对象各个属性的存储以及方法索引表,
方法的动态绑定,是将当前实例方法对应的实例作为参数传进去(即self 或 this 指向的实例作为参数传给该方法 )

你可能感兴趣的:(编译原理)