Stanford Compiler Week 1 Introduction and The Cool Programming Language
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
最近开始学习编译原理,选择斯坦福的编译原理进行学习,这次回顾第一周的内容,这一周主要是课程介绍以及Cool变成语言。
介绍
编译器和解释器的区别
编译器编译完程序后,运行是离线的,解释器运行程序是在线的,区别如下:
编译器的结构
编译器由如下几个部分构成:
- 词法分析(Lexical Analysis)
- 解析(Parsing)
- 语义分析(Semantic Analysis)
- 优化(Optimization)
- 代码生成(Code Generation)
第一步:识别单词(字母以上最小单位)
词法分析
词法分析将程序文本分为“单词”或“符号”:
解析
一旦单词理解了,下一步就是理解句子结构。解析=句子绘图,这里的图是一棵树:
语义分析
一旦理解了句子结构,我们可以试着理解“含义”,这一步是非常难的,来看如下例子:
上述句子中的his指谁是不明确的。
编程语言定义了严格的规则以避免这种模糊性,例如c语言中使用大括号:
{
int Jack = 3;
{
int Jack = 4;
cout << Jack;
}
}
除了变量绑定之外,编译器还执行许多语义检查。例子
Jack left her homework at home.
her和Jack的类型不匹配,我们知道他们是不同的人。
优化
优化是指自动修改程序,使其运行的快一点,使用更少的内存。但是优化不能随意进行,考虑如下例子:
X = Y * 0 is the same as X = 0
当Y=NAN时不能使用上述优化。
代码生成
生成程序代码(通常) ,即翻译成另一种语言,类似于人工翻译。
现在的编译器侧重于优化,过去和现在编译器的结构对比:
程序设计语言的经济性
简单介绍了如下三个问题:
- 为什么会有这么多的编程语言?
- 为什么会有新的编程语言?
- 什么是好的编程语言?
这部分的内容这里略过。
Cool语言简介
- Classroom Object Oriented Language = COOL
- 设计为可在短时间内实现
- 体会现代语言的实现
- 抽象
- 静态输入
- 重用(继承)
- 内存管理
- 和更多 …
- 但是很多该语言忽略了很多内容
- 本课程将完成一个完整的编译器
- Cool -> MIPS汇编语言
- 5个编程作业(PA)中
- 写一个Cool程序
- 词法分析
- 解析
- 语义分析
- 代码生成
- 当然也包括优化
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Doraemonzzz!
评论
ValineLivere