今天无意去听了下斯坦福的编译原理课程。发现和西安交大的课程比,更偏向工程实践。
这明显是中美两国的教学差别。中国的老师主要是数学系风格,美国则是工程师风格。
听课笔记:
Compiler(编译器) 与 Interpreter(解析器)区别
Compile:
Input : Source File
Ouput: Exe程序
Interpreter:
Input : Source File + Data
Ouput: 执行结果
通俗的来说, 编译器只负责语言的翻译,比如将C语言翻译成机器语言,或者将高级语法翻译成汇编语言。
而解析器不但负责语言的翻译,还要执行,并输出结果给用户。
即 编译器 Off-line Interpreter On-line
编译器主要结构:
词法分析 Lexical Analysis tokens ( 二元组,Word, Property)
Parsing 自上而下 自下而上 语法树
Semantic Analysis 解决语境与语意 二义性问题
Optimization Run faster 运行速度 Use Less Resources 资源最少
Code Generation 生成目标代码
为什么要发明新的语言
1》不同的领域有不同的需求
2》主要考虑到教育成本(Programmer Training) 旧语言使用的人越多,适应新功能的成本越高
3》新的语言一般和旧语言比较像
其实将上面的语言换成开发的产品,很多工程观点是一致的。
国内的课主要是学数学,国外的课让你有更多工程思考。
课程地址:
https://www.coursera.org/course/compilers
英语听力还行的建议去听听。