编程范式
l 机器语言
l 汇编语言,字母代替数字
l 高级语言
² C语言
面向过程代表,中级语言
Ø 可对位,字节,地址直接操作
Ø 代码和数据分离倡导结构化编程
Ø 功能齐全:数据类型和控制逻辑多样化
Ø 可移植能力强
² C++面向对象代表
Ø C with classes
Ø 继承
Ø 权限控制
Ø 虚函数
Ø 多态
² Lisp函数式语言代表
Ø 与机器无关
Ø 列表:代码即数据
Ø 闭包
² Javascript
Ø 基于原型和头等函数的多范式语言
Ø 过程式
Ø 面向对象
Ø 函数式
Ø 响应式
程序语言特性
² 是否允许副作用
² 操作的执行顺序
² 代码组织
² 状态管理
² 语法和词法
编程范式
² 命令式
Ø 面向过程
Ø 面向对象
i. 问题
1. 封装
关联数据与算法
2. 继承
无需重写的情况下进行功能扩充
3. 多态
不同的结构可以进行接口共享,进而达到函数复用
4. 依赖注入
去除代码耦合
ii. 原则
1. 单一职责原则srp
2. 开放封闭原则ocp
3. 里式替换原则lsp
4. 依赖倒置原则dip
5. 接口分离原则isp
² 声明式
Ø 函数式
1.优势
可缓存
可移植
可测试
可推理
可并行
2.composition
手动组合
3.functor
可以当做容器的类型,类型支持对容器内元素进行操作
4.monad
可以去除嵌套容器的容器类型
5. Applicative
直接对两个容器直接操作
Ø 响应式
异步/离散的函数式编程
1.数据流
2.操作符
异常处理
过滤
合并
转化
多播
高阶
Observable
n 观察者模式
n 迭代器模式
n Promise/eventtarget超集
Monad
去除嵌套的observable
过程式编程
Ø 自顶向下
程序
模块
变量-数据结构
函数-函数
-语句
Ø 结构化编程
顺序结构,选择结构,循环结构
面向过程问题
Ø 数据于算法关联弱
Ø 不利于修改和扩充
Ø 不利于代码重用
领域特定语言
l 语言运行
l Lexer
Sql token 分类
注释
关键字
操作符
空格
字符串
变量
l Parser语法规则
上下文无关语法规则
推导式:表示非终结符到非终结符或终结符的关系
终结符:构成句子的实际内容,可以简单理解为词法分析中的token
非终结符:符号或变量的有限集合,他们表示在句子中不同类型的短语或子句
LL:从左到右检查,从左到右构建语法树
LR:从左到右检查,从右到左构建语法树