6 个版本
0.0.7 | 2023 年 10 月 8 日 |
---|---|
0.0.6 | 2023 年 7 月 29 日 |
0.0.4 | 2023 年 6 月 16 日 |
0.0.2 | 2023 年 4 月 17 日 |
#277 in 编程语言
150KB
3K SLoC
regen-lang
Regen 是一种定义语言的编程语言。使用 Regen 语言定义的语言,Regen 编译器会生成支持通用编程语言的解析器
- Rust
- TypeScript(原计划但近期不会工作 - 目前请使用 Rust WASM)
- Python(可能)
- C++(可能)
Regen 适用于小型应用特定语法,例如自定义字符串插值函数或自定义命令解析器。它的目的是用更健壮且易于使用的解析器替换 parse(cmd.split(" "))
,而不是替换现有编程语言的完整解析器,因为这些解析器更优化,具有更多功能,如错误恢复和更好的错误信息。
特性
- Regen 定义 LL(左到右,最左推导)语法。
- 词法分析器/标记器使用正则表达式(基本上是确定有限自动机)解析标记。
- 语义注解内置到抽象语法树中。
- 解析树节点可以与自定义代码挂钩,以直接生成应用特定对象,无需单独的遍历。
- 生成的解析器 API 是类型安全的(如果目标语言支持)。
- 将语法着色为 HTML,可选的类名映射,以便您可以使用任何现有主题。
语法
这里 是 Regen 的语法,使用 Regen 定义并使用生成的解析器和 Prism.js 主题进行突出显示。
安装
安装编译器
cargo install regen-lang
如果您为 Rust 生成,您还需要添加库
cargo add regen-lang
如果您不需要 CLI,可以使用 --no-default-features
以避免依赖 clap
有关 https://docs.rs/regen-lang 的文档。
依赖关系
~3.5–5MB
~93K SLoC