#preprocessor #c-style #text #macro #unsafe #zero-dependency #substitution

nanopre

一个零依赖、无安全风险的极简 C 风格文本预处理器实现

3 个版本

0.1.2 2022 年 2 月 14 日
0.1.1 2022 年 1 月 10 日
0.1.0 2022 年 1 月 10 日

#1634Rust 模式

Apache-2.0

16KB
270

nanopre

nanopre 是一个零依赖、无安全风险的极简 C 风格文本预处理器实现。目前,nanopre 处于最小可行产品状态,这意味着尽管它具有功能并且据我所知没有错误,但它尚未经过实战测试,不稳定,也不是功能完整的。

功能

  • Context::define 允许指定 '宏',形式为 [a-zA-z_][a-zA-Z0-9_]* 的字符串,这些字符串应替换为任意字符串,在输入中出现时(当被单词边界包围时)。宏目前不能接受参数或展开为其他宏或预处理器指令。
  • 指令 #if#elseif#else#endif 允许根据简单的布尔表达式的评估条件性地包含代码。字面量是 01,支持的运算符是 &&||!,可以使用括号进行分组。评估是左结合的。虽然在这些表达式中不允许使用其他标记,但它们在宏替换后评估,因此您可以使用评估为 10 的宏作为变量的替代。
  • 可选地,可以通过定义一个实现了Includes trait 的结构体来支持 #include。然后将这个结构体传递给 Context::with_includes 方法。这个结构体负责将包含路径映射到其内容。

计划中的功能

  • 在输入中定义宏的 #define
  • 可选地捕获未知预处理器指令。目前,这些指令保持原样。
  • 更详细的错误处理,具体取决于实现的复杂度。

致谢

nanopre 部分灵感来自 Diggsey 的 minipre,我在构建此项目之前使用了它。

无运行时依赖