过程化编程:有自顶向下和结构化编程的思想。
结构化编程有顺序结构、选择结构和循环结构。
面向对象编程:封装、继承、多态、依赖注入。
封装:关联数据和算法,将数据和算法封装在一个类中。
继承:无需重写的情况下进行功能扩充。
多态:不同的结构可以进行接口共享,进而达到函数复用。
依赖注入:去除代码耦合。
因为面向对象编程比较笼统,需要函数式编程细分,所以更推荐函数式编程。
函数式编程的手动组合不可以实现复杂功能,但是灵活性较差。
函数式编程
可以当做容器的类型,类型支持对容器内元素进行操作
常见的 functor:Array (lterable).map, Promise.then
可以去除嵌套容器的容器类型。
Applicative
直接对两个容器直接操作
响应式编程:在异步/离散的函数式编程,包括数据流和操作符。
Observable
分为观察者模式和迭代器模式
响应式编程的响应:合并、过滤、转化、异常处理和多播。Monda可以去除嵌套的observable。
领域特定语言
lexer词法分析器,输入的字符经过经过lexer处理输出一系列token
SQL Token分类:注释、关键字、操作符、空格、字符串和变量。
Parser_LL
LL:从左到右检查,从左到右构建语法树
select name from user
先转化为语法树
LR:从左到右检查,从右到左构建语法树
select name from user
自底向下构建语法树,LL(K)>LR(1)>LL(1)
lexer:制定词法规则和表达式
parser:制定语法规则
tools:通过一些工具生成语法分析器,生成语法树
visitors:通过遍历对语法树进行解析执行。