1 编程语言
发展:机器语言 => 汇编语言 => 高级语言
1.1 c语言
“中级语言”过程式语言代表
可对位字节和地址直接进行操作,有汇编语言的特点也有高级语言的特点
功能齐全
可移植性强
1.2 c++
面向对象语言代表 有了继承,虚函数,多态的概念
1.3 Lisp
函数式语言的代表
操作与机器无关
有了闭包的概念
代码即数据
1.4 javaScript
- 多范式语言
- 面向对象
- 函数式
- 响应式
2 编程范式
程序语言特性:
- 是否允许副作用
- 操作执行顺序
- 代码组织
- 状态管理
- 语法和词法
编程范式
命令式:
- 面向过程:自顶向下、结构化编程
- 面向对象:封装、继承、多态、依赖注入
声明式:
- 函数式
- 响应式
面向过程问题:
- 数据关联弱
- 不利于修改和扩充
- 不利于代码重用
面向对象的依赖注入:
面向对象五大原则:
- 单一职责原则SRP
- 开闭原则OCP
- 里氏替换原则LSP
- 依赖倒置原则DIP
- 接口分离原则ISP
面向对象问题:
- 它总附带着所有它需要的隐含环境
函数式编程
- 函数是“第一等公民”
- 纯函数、无副作用
- 高阶函数、闭包
常见的函数式 - currying
- Functor:不用考虑所有原子的异常情况,把异常和处理逻辑写到容器中去。
- Monad:可以去除嵌套容器的容器类型。例如:Array.flatMap Promise.then
- Application:直接对两个容器直接操作
响应式编程
借助RXjs来实现
- Observable
- Monad:去除嵌套的Observable
总结
语言运行
lexer:词法解析器,解析成各种短语
parser:语法解析器,转化成语法书
visit:对语法树进行遍历分析转化成机器语言(编译)
lexer
作用:将语言转化为有意义的token
例如:SQL Token分类:
- 注释
- 关键字
- 操作符
- 空格
- 字符串
- 变量
Parser语法规则
上下文无关的语法规则
- 推导式:表示非终结符到(非终结符或终结符)的关系。
- 终结符:构成句子的实际内容。可以简单理解为词法分析中的token。
- 非终结符:符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。