[基础软件理论与实践:第一课讨论] 编译阶段(Compilation Phases) 术语

编译器助手 2022-10-15 21:01:20

背景

课程信息:张宏波:基础软件理论与实践

第一节第6页讲到编译阶段:

img

问题

在讨论中,大家对上述术语的翻译有需求,这些翻译合适么?:

  • Lexing: 词法分析
  • Parsing: 语法分析
  • Abstract Syntax Tree: 抽象语法树
  • Semantics Analysis: 语义分析
  • Typed Abstract Syntax Tree: 有类型抽象语法树
  • Lowering: ?,@千里冰封 认为可以翻译为「转译」,但是感觉太普通了,根据这里的bobzhang1988的评论,可以看到它的作用之一:
    • 第一个eval 是递归调用,通过lowering, 后续解释执行就不需要递归了(隐式的消耗宿主语言的栈)

  • Multi-level IR: 多级别中间表示
  • Linearization: 线性化
  • Optimization: 优化
  • IR: 中间表示,全称intermediate representation,也叫中间代码
  • Code Generation: 代码生成
  • Machine Code: 机器码

请在留言区留下你的见解

--end--

...全文
555 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
採石 2022-10-22
  • 打赏
  • 举报
回复

萬種編碼皆返璞歸真。
lowering叫“初次返璞”
Linearization叫“線性返璞”

中文编程 2022-10-16
  • 打赏
  • 举报
回复 2

从 SO 此帖看,lowering的含义似乎有点接近“化简”或者“归约”?

编译器助手 2022-10-15
  • 打赏
  • 举报
回复

img


img


img

这三个图实际上是上面的顺序

  • 第一张图原始的 env 是 list<(string,int)> 例如:[("a",1),("b",2),...,("z",26)]
  • 第二张图,通过递归定义,引入 cenv 是 list 例如:["a",...,"z"]
  • 那么var(x) = var( index(cenv,x) ),如果 x="a",那么 var(x) = var( index(["a",...,"z"],"a") ) = var(0) ,此时,将env转到第三张图的 env,也就是 list,例如:[0,1,...,25]
  • 同理,第1图的 let(x,e1,e2) 通过第2图的定义,let(x,e1,e2) = let(comp(x,e1),comp(e2,list{x,...env}))就转成了第3图的env去计算。
编译器助手 2022-10-15
  • 打赏
  • 举报
回复

img

img

这两张图里的定义,Let 是比较不容易直接读懂的,除非习惯了。

  • 首先,第一个图蓝框里的含义是:Let(x,e1,e2)定义为,eval(e2, env_for_e2),而 env_for_e2 定义为在 env 里面加入 <x,e1> 这个元素。例如 env =[(str1,int1),...,(strn,intn)],那么 env_for_e2 = [(x,e1),(str1,int1),...,(strn,intn)]
  • 那么,第二个图蓝框里的含义就清晰了:
    • e1在环境T作用下值是v1
    • 把 (e1,v1) 更新到环境T里面,也就是T[x:v1],然后如果e2在更新后的环境下值是v,则Let(x,e1,e2)在原环境下的值是v
编译器助手 2022-10-15
  • 打赏
  • 举报
回复

img

一个可能表达式解析例子:


  • "Add,Add,Mul,Mul", "1,2,1,3,4"
  • "Add,Mul,Mul", "1+2,1,3,4"
    • "Add,Mul,Mul", "3,1,3,4"
  • "Mul,Mul", "3+1,3,4"
    • "Mul,Mul", "4,3,4"
  • "Mul", "4*3,4"
    • "Mul", "12,4"
  • "", "12*4"
    • "", "48"

230

社区成员

发帖
与我相关
我的任务
社区描述
日程:https://bbs.csdn.net/topics/608593392 主页:https://bobzhang.github.io/courses/ B站: “张宏波的基础软件课程”
rescript开发语言 个人社区 广东省·深圳市
社区管理员
  • raelidea
  • MoonBit月兔
  • 幻灰龙
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧