- 编译器:将“高级”语言转换成“低级”语言的程序,不过转换成另一种语言也行。
- 高级:适合程序员
- 低级:适合机器
- 配置文件:yaml、properties、xml、toml
- 数据分析:csv/excel
- web领域:json文件
- 数据库领域:SQL引擎
- 分布式:TLA+(用于分析分布式协议的语言)eg:PaxosStore-tla/specification/TPaxos.tla at master · Starydark/PaxosStore-tla · GitHub
- Java字节码解释器:javac
- C/CPP编译器:gcc、llvm
- 排版绘图语言:Latex、Dot
- 演奏音乐的语言:alda.io :: Alda
- 前端(分析阶段):分析语言程序,收集必要信息
- 后端(综合阶段):利用收集到的信息,生产目标语言程序
- IR(Intermediate Representation):中间表示
添加优化阶段,这和系统无关
工业上前端的词法分析、语法分析、语义分析技术已经非常成熟,如华为方舟编译器的这几个部分全都没有。因此最后的中间代码优化才是最重要的。
position = initial + rate * 60
词法:标识符、数字、运算符 语法:包含算术运算 的 赋值语句 语义:position、initial、rate属于数值类型 物理定律:当前位置 = 初始位置 + 速度 * 时间
词法分析器(Lexer/Scanner):将字符流转换成词法单元(Token) 流
语法分析器:构建词法单元之间的语法结构,生成语法树
语义分析器:语义检查,如类型检查,“先声明后使用”等约束检查
中间代码优化器:编译时计算、消除冗余临时变量
符号表:收集&管理变量名、函数名相关信息
为了方便表达作用域、嵌套结构,符号表可能嵌套