Chen Lang 是一个用 Rust 实现的简单编程语言解释器,支持基本的编程语言特性。
- 负责将源代码转换为 Token 流
- 支持关键字、标识符、数字、字符串、操作符等
- 特殊支持:浮点数、注释(以
#开头)
- 将 Token 流转换为 AST(抽象语法树)
- 支持表达式、语句、函数定义等语法结构
- 将 AST 编译为字节码指令
- 支持函数定义、循环、条件语句等
- 实现变量作用域和类型检查
- 执行字节码指令
- 栈式虚拟机,支持函数调用和返回
- 内置函数:
print,println
- 统一的值类型系统
- 支持:整数、浮点数、布尔值、字符串、空值
- 自动类型提升和转换
int: 32位整数float: 32位浮点数bool: 布尔值string: 字符串null: 空值
- 算术:
+,-,*,/,% - 比较:
==,!=,<,<=,>,>= - 逻辑:
&&,||,! - 字符串连接:
+(自动类型转换)
- 条件语句:
if/else - 循环:
for - 函数定义:
def function_name() { ... } - 函数调用:
function_name()
- 声明:
let variable_name = value - 赋值:
variable_name = value - 作用域:块级作用域
# 运行所有测试
cargo test
# 运行特定测试套件
cargo test --test value_tests
cargo test --test function_tests
cargo test --test complex_tests
# 运行单元测试
cargo test --lib# 运行demo文件
cargo run --bin chen_lang -- run demo_codes/fibonacci.ch
cargo run --bin chen_lang -- run demo_codes/9x9.ch
# 直接运行代码
echo 'let x = 5; let y = 3; print(x + y)' | cargo run --bin chen_lang -- run -- 在
value.rs的Value枚举中添加新变体 - 实现相应的运算方法
- 更新
Displaytrait 实现 - 添加类型检查逻辑
- 在
token.rs中添加 Token 定义 - 在
parse.rs中添加解析逻辑 - 在
lib.rs中添加编译逻辑 - 在
vm.rs中添加执行逻辑 - 在
value.rs中添加运算实现
- 在
expression.rs中定义 AST 节点 - 在
parse.rs中添加解析函数 - 在
lib.rs中添加编译逻辑 - 在
vm.rs中添加执行指令
- 使用
thiserror定义自定义错误类型 - 运行时错误使用
RuntimeError枚举 - 编译时错误使用
ParseError和TokenError枚举
- 单元测试放在相应模块的
tests模块中 - 集成测试放在
tests/目录下 - 每个新特性都需要相应的测试覆盖
- 使用
tracing进行日志记录 - 默认日志级别为
INFO - 调试时可设置为
DEBUG或TRACE
chen_lang/
├── src/
│ ├── bin/chen_lang.rs # CLI入口
│ ├── lib.rs # 编译器主逻辑
│ ├── token.rs # 词法分析器
│ ├── parse.rs # 语法分析器
│ ├── expression.rs # AST定义
│ ├── value.rs # 值系统
│ ├── vm.rs # 虚拟机
│ └── tests/ # 单元测试
├── tests/ # 集成测试
│ ├── value_tests.rs # 值系统测试
│ ├── function_tests.rs # 函数测试
│ ├── complex_tests.rs # 复杂功能测试
│ └── ...
├── demo_codes/ # 示例代码
└── Cargo.toml
cargo test- 所有类型转换都是安全的
- 运行时进行类型检查
- 编译时进行基本的类型推断
- 栈式虚拟机,执行效率高
- 字符串使用引用计数,避免不必要的复制
- 指令集设计简洁,易于优化
- 模块化设计,易于添加新特性
- 统一的指令集,便于VM优化
- 类型系统支持扩展新的数据类型
A: 在 vm.rs 的 Call 指令处理中添加新的匹配分支。
A: 在 parse.rs 的运算符优先级定义中添加新的优先级。
A: 设置参数 cargo run -- run --log-level=DEBUG <FILE> 查看详细日志。
A: 在语法分析阶段将语法糖转换为等价的AST节点。
- Fork 项目
- 创建特性分支
- 编写测试
- 实现功能
- 确保所有测试通过
- 提交 Pull Request
- 用户显性要求提交代码才提交代码,否则保存代码即可
此文档由 AI 助手维护,请及时更新以反映最新代码变更。