编译原理
  • 编译原理
  • 一些简答题
  • 绪论
    • 编译器简介
    • 程序设计语言
    • 静态与动态
    • 参数传递机制
  • 词法分析
    • 词法单元、模式、词素
    • 串和语言
    • 正则表达式
    • 状态转换图
    • 不确定有穷自动机NFA
    • 确定有穷自动机DFA
    • 算法:正则表达式转NFA
    • 自动机到词法分析器
  • 语法分析
    • 语法分析器
    • 上下文无关文法
    • 二义性和左递归
    • 递归下降语法分析
    • 算法:求解FIRST集和FOLLOW集
    • 算法:LL(1)
    • 自底向上语法分析
    • 移入-归约语法分析
    • 算法:LR(0)
    • 算法:SLR(1)
    • 算法:LR(1)
    • 算法:LALR
    • LR分析器和LALR分析器
  • 语法制导
    • 语法制导定义(SDD)
    • 综合属性和继承属性
    • 语法树上的SDD求值
    • 依赖图
    • L属性的SDD
    • 类型
    • SDD的应用
  • 中间代码生成
    • 三地址代码
    • SSA(静态单赋值)
    • 类型和声明
    • 表达式的翻译
    • 类型检查
    • 控制流
    • 回填
  • 运行时刻环境
    • 存储组织
    • 栈式分配
    • 栈中非局部数据的访问
    • 堆管理
    • 垃圾回收
  • 代码生成
    • 代码生成器的设计
    • 目标语言
    • 目标代码中的地址
    • 基本块和流图
    • 基本块的优化
Powered by GitBook
On this page
  • 名字、标识符和变量
  • 显式访问控制
  • 参数传递机制
  • 值调用(call-by-value)
  • 引用调用(call-by-reference)
  • 名调用(call-by-name)
  1. 绪论

参数传递机制

名字、标识符和变量

标识符(identifier)是一个字符串,通常由字母和数字组成。

所有的标识符都是名字,但名字不一定是标识符,也可以是表达式,如名字x.y 表示x 所指的结构中的字段y ,其中x,y 是标识符

变量指向存储中的某个特定的位置:

  • 同一个标识符可以被多次声明,每个声明引入一个新的变量

  • 即使只声明一次,递归中的局部标识符将在不同时刻指向不同的存储位置

显式访问控制

通过punlic、private、protected 这样的关键字,OOP语言提供了对超类中的成员名字的显式访问控制。

  • private 作用域仅包含该类和友类

  • protected 也可由子类访问

  • public 也可从类外访问

参数传递机制

值调用(call-by-value)

  • 对实参求值(如果它是表达式)或拷贝(如果它是变量),放在相应形参的内存位置上

  • 这种方法在C和Java中使用,也是C++语言以及大多数语言的一个常用选项

  • 改变形参的值不影响实参

  • 虽然Java只使用值调用,但是只要把一个对象的名字传递给一个被调用过程,那么过程收到的值实际上是这个对象的指针。因此,被调用过程是可以改变这个对象本身的值的。

引用调用(call-by-reference)

  • 实参的地址作为相应的形参的值被传递给被调用者

  • 改变形参看起来就像是改变了实在参数一样

名调用(call-by-name)

  • 被调用者的运行方式好像是用实参以字面方式替换了被调用者的代码中的形参一样

  • 形参是一个代表了实参的宏

Previous静态与动态Next词法单元、模式、词素

Last updated 4 months ago