课程重点
- 编程语言(机器语言、汇编语言、中级语言、高级语言)
- 编程范式(过程式、面向对象、函数式编程、响应式编程)
- 构建领域特定语言(词法解析、语法分析、工具生成、解释与编译)
课程内容
编程语言
几个典型的高级语言:
c/c++:
Lisp:(同c语言平行出现的一个流派):函数语言代表
- 与机器无关
- 列表:代码即数据
- 闭包
JavaScript:基于原型和头等函数的多范式语言
- 过程式
- 面向对象
- 函数式
- 响应式
小结一下:
编程范式
根据这些特性,我们可以对编程语言进行分类,比如:
过程式编程
- 自顶向下
- 结构化编程
JS中的面向过程
面向过程式编程有什么缺点?
面向过程具有几个问题:
- 数据与算法关联弱
- 不利于修改和扩充
- 不利于代码重用
为什么后面会出现面向对象? 因为以上几个缺点,所以我们后面有了面向对象编程。
面向对象编程
- 封装
将一些客观事物封装成类。关联数据与算法
- 继承
让我们某一个对象可以获得另一个对象的属性特点,无需重写的情况下进行功能扩充
- 多态
类中相同的方法在不同情况下的不同使用。不同的结构可以进行接口共享,进而达到函数的复用
- 依赖注入
去除代码耦合
面向对象有五大原则:
- 单一职责原则
- 开放封闭原则
- 里式替换原则
- 依赖倒置原则
- 接口分离原则
面向对象虽然解决了很多问题,但现在,我们更多的是推荐函数式编程。
那面向对象编程有什么缺点?又为什么我们推荐函数式编程?
函数式编程
纯函数:
函数组合:
Functor:
Monad:
Applocative:
直接对两个容器直接操作
响应式编程
它其实是异步/离散的函数式编程
observable:
操作符:
Monad:
小结一下:
领域特定语言
语言运行:
lexer
切分完之后就可以进行语法分析
Parser_语法规则
具体的语法对应有两种模式:
LL:从左到右检查,从左到右构建语法树。
LR:从左到右检查,从右到左构建语法树
tools
visitor
总结: