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 编程语言

GPL-3.0-or-later

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