【编译器】斯坦福公开课学习1

课程地址:https://class.coursera.org/compilers-004/lecture

 

01-01:

1.实现一门程序设计语言有两种方式:编译器解释器

2.解释器是在线的,输入程序和数据,解释器给出结果。

3.编译器是离线的,输入程序,编译器生成可执行文件,可执行文件根据数据生成结果。

4.编译器包括五个部分:词法分析、语法分析、语义分析(类型作用域检查等)、代码优化(减少时间内存)、代码生成(源程序翻译为目标代码)

 

01-02:

词法分析:将代码拆分成一个个token(标记)

       This is a sentence.

语法分析:分析代码的组成结构,用语法树的结构把token抽象成一个个部分。 类似于将句子划分为主谓宾结构。

语义分析:编译器难以理解程序的语义,但是会做代码不一致检查。对于变量指代不清,前后矛盾等情况会报错。

 

01-03:

1.为什么存在这么多语言?

  因为在不同的应用领域,对语言的需求是不同的。在科学计算领域,需要能够很好的支持浮点数、矩阵等(FORTAN)。在bussiness领域,需要很好的支持和保存数据(SQL)。在系统领域需要对数据在底层有较好的控制(C/C++)。

2.为什么要设计新的语言?

  语言教学需要花费大量的时间。

  越是广泛使用的语言,其迭代速度越慢,因为少量的修改需要大量的使用者来学习。

  新语言可以快速迭代,因为只有少量使用者。

  当出现一个新的应用领域时,老的语言难以覆盖其应用场景,这时新的语言可以通过快速迭代来实现对新场景的支持。

3.什么是一个好的语言?

     没定论。

posted @ 2016-04-08 22:28  匡子语  阅读(459)  评论(0编辑  收藏  举报