沉淀个人对于编译原理学习、实践的仓库。
实现了
- 词法解析
- 语法解析
- 程序执行
支持:
- 操作符: - + / * == != ! < >
- 界符: , ; { } ( ) [ ]
- 保留字: let if else fn false true return while
支持:
- 表达式类型:error integer boolean string null 数组 类对象 前序表达式 中序表达式 fn表达式 fnCall表达式
- 语句类型:let声明语句 赋值语句 return语句 表达式语句 块级语句 if-else语句 while语句
// 1. 前序表达式 boolean integer
!true
-3
// 2. 字符串
'hello world'
// 3. 中序表达式 integer
1 + 1
1 + 2 * (3 + 4)
// 4. let声明语句 fn表达式 fnCall表达式(函数调用)
let add = fn(a, b) {
// return 语句 块级语句
return a + b;
}
add(1, 2);
// 5. if-else语句
if (true) {
return 1;
} else {
return 0;
}
// 6. while语句
let a = 0;
while(a < 5) {
// 赋值语句
a = a + 1;
}
let count = 4;
while(count > 0) {
move(1);
turnLeft();
move(1);
turnRight();
count = count -1;
}
// 7. 数组
let arr = [1, 2, 3, 4];
arr[0]; // key取值 1
// 8. 类对象
let person = {
"name": "lky"
};
person["name"]; // key取值 lky支持:
- integer操作:
- 一元操作符 ! -
- 二元操作符 + - * / == != > <
- boolean操作:
- 一元操作符 !
- 二元操作符 == !=
- string操作:
- 一元操作符 !
- 二元操作符 + == !=
- if-else 执行
- fn执行 支持闭包
- let 与简单赋值语句
- while执行
- 支持内置函数
- move(step)
- canMove: 用于判断坦克是否可以向前移动
- turnLeft() turnRight()
- 执行中代码高亮
- 任务执行器
难点:
- 程序执行中canMove()结果需返回给程序执行使用
- 任务执行 异步调度
Todo...
- 词法分析
- 语法分析
- 语义分析
- 中间代码生成
- 代码优化
- 后端:目标代码生成
- 文法 语言
- 正规集 -> (正规式 正规文法 DNA) NFA
- 自顶向下:LL(1) -> 提取左公因子 消除左递归 FIRST FOLLOW SELECT 预测表
- 自底向上:LR(1)
- 运行时存储管理:活动记录 DISPLAY表
快速刷完了B站廖力老师的视频 有了大体的认识
Todo...
Todo...

