✏️

中间代码生成

Created
Oct 16, 2024 03:10 AM

波兰表示

前 / 后序遍历表达式树
逆波兰构建算法
notion image

三 / 四元式

  • 直接三元
  • 间接三元
  • 四元式
 
 

语法制导翻译

翻译文法:后缀表达式 → 逆波兰
方法:插入动作符号
 
属性翻译文法
  • 综合属性
    • 自右向左,自底而上赋值
  • 继承属性
    • 反向
 
L-ATG
  • 要求是LL(1)
  • 综合属性
    • 右:下面推
    • 左:右部综合属性推
  • 继承
    • 右:左部的继承属性 + 右部中位于符号左边的任意属性
    • 左:上面推
SL-ATG
  • 在L-ATG的基础上,最右继承属性和最左综合属性的值是常量(算出来确定的)
  • 通过添加动作序列,进行变量计算后将结果赋给某属性
 
 

中间代码生成

  • 声明语句
    • 填表
    • 数组声明:记录维数
    • notion image
    • 函数声明:要填参数表,累计参数个数
  • 表达式
    • 简单值的计算和读入
      • 逆波兰处理,
    • 类型检查
      • 根据已知类型的变量推断
    • 数组
      • notion image
      • 不断读入维数,判断越界问题并计算VP(i)(即这目标数组位置的某一维的起始位置相对于LOC的offset),最终找到最后的偏移,拿到LOC[offset]放到栈顶
      • k是从大到小迭代计算的,注意P(k)计算
    • 逻辑表达式
    • 赋值
      • 判断变量为左值还是右值
    • 控制流
      • 注意打标签