HyLex: 高性能混合自动机词法分析器生成库
一个使用 F# 编写的轻量级词法分析器生成库。它采用混合自动机架构,结合了 DFA(确定有限自动机)的查询速度与 NFA(非确定有限自动机)的表达灵活性,并针对 .NET 进行了深度的零堆内存分配优化。
---
目录
- 特性
- 环境要求
- 快速开始
- 核心概念
- 技术实现亮点
- 示例词法器
- 许可证
---
特性
- 🚄 混合自动机:将词法规则编译为“DFA 字典查找 + NFA 动态谓词”的混合结构,兼顾速度与灵活性。
- 🗑️ 零堆内存分配:核心路径使用 ReadOnlyMemory<char、预分配数组和栈式 DFS,最大限度减少 GC 压力。
- 🛠️ 声明式规则 DSL:支持字符序列、范围、可选、重复(Kleene 星号/加号)、选择等常见正则构造。
- 🛡️ 健壮性:内置最长匹配原则、规则优先级冲突解决、以及“恐慌模式”错误恢复机制。
---
环境要求
- 开发环境:.NET 10 SDK 及以上(低版本未测试,建议使用 .NET 10)。
- 运行时:兼容 .NET 10 及以上运行时。
---
快速开始
1. 引入代码
由于暂未发布 NuGet 包,请直接将 HyLex.Core/HybridAutomation.fs 文件复制到你的 F# 项目中。
2. 定义你的 Token 类型
// 定义一个简单的计算器 Token 类型
type CalcToken =
| Number // 数字
| Plus // +
| Minus // -
| Multiply // *
| Divide // /
| LeftParen // (
| RightParen // )
| Whitespace // 空白符