LoxSharp 是基于 Robert Nystrom 《Crafting Interpreters》一书的经典脚本语言 Lox 的 C# 实现。
项目通过逐步实现词法分析器(Scanner)、语法解析器(Parser)、抽象语法树(AST)、解释器(Interpreter)等模块,打造一门完整的解释型脚本语言。
- 词法分析:将源码拆分成词法单元(Token)
- 语法分析:递归下降解析生成抽象语法树(AST)
- 解释执行:树遍历解释器,支持表达式求值、变量、控制流等
- 作用域管理:环境链实现局部变量和全局变量
- 支持常见语言特性:变量声明、赋值、条件判断、循环、函数调用等
-
完成基础词法分析(Scanner)
- 支持单字符符号(括号、运算符、分号等)
- 支持数字字面量(整数和浮点数)
- 支持字符串字面量
- 支持标识符(变量名)和关键字识别
- 处理注释和空白字符
-
实现基础语法分析器(Parser)
- 递归下降解析表达式(加减乘除、括号)
- 解析变量声明和赋值语句
- 支持条件语句(if/else)
- 支持循环语句(while)
- 语法错误检测与报告
-
实现树遍历解释器(Interpreter)
- 表达式求值(算术、比较、逻辑运算)
- 变量绑定和作用域管理
- 执行语句(打印、条件、循环)
- 函数声明和调用
- 返回值和调用栈管理
-
扩展完整语法特性
- 支持类和对象的声明与实例化
- 实现继承和方法重写
- 支持闭包和匿名函数(Lambda)
- 实现异常处理机制(try/catch)
-
错误处理和调试支持
- 运行时错误捕获与详细信息输出
- 语法和词法错误高亮和定位
- 调试功能(断点、单步执行,简单堆栈跟踪)
-
未来性能优化方向
- 实现字节码生成器和字节码虚拟机
- 栈帧和寄存器优化
- 引入垃圾回收机制(标记-清扫GC)
- 即时编译(JIT)技术探索
我们会逐步构建如下模块:
LoxSharp/
├── Program.cs // 主入口
├── Scanner.cs // 词法分析器
├── Token.cs // 词法标记定义
├── Parser.cs // 语法解析器
├── Ast/ // 抽象语法树(AST)节点
│ ├── Expr.cs
│ ├── Stmt.cs
├── Interpreter.cs // 执行 AST 的解释器
├── Environment.cs // 变量作用域管理
├── RuntimeError.cs // 运行时错误处理
└── LoxException.cs // 自定义异常