3 个版本
0.1.2 | 2022 年 2 月 14 日 |
---|---|
0.1.1 | 2022 年 1 月 10 日 |
0.1.0 | 2022 年 1 月 10 日 |
#1634 在 Rust 模式 中
16KB
270 行
nanopre
nanopre
是一个零依赖、无安全风险的极简 C 风格文本预处理器实现。目前,nanopre
处于最小可行产品状态,这意味着尽管它具有功能并且据我所知没有错误,但它尚未经过实战测试,不稳定,也不是功能完整的。
功能
Context::define
允许指定 '宏',形式为[a-zA-z_][a-zA-Z0-9_]*
的字符串,这些字符串应替换为任意字符串,在输入中出现时(当被单词边界包围时)。宏目前不能接受参数或展开为其他宏或预处理器指令。- 指令
#if
、#elseif
、#else
和#endif
允许根据简单的布尔表达式的评估条件性地包含代码。字面量是0
和1
,支持的运算符是&&
、||
和!
,可以使用括号进行分组。评估是左结合的。虽然在这些表达式中不允许使用其他标记,但它们在宏替换后评估,因此您可以使用评估为1
或0
的宏作为变量的替代。 - 可选地,可以通过定义一个实现了
Includes
trait 的结构体来支持#include
。然后将这个结构体传递给Context::with_includes
方法。这个结构体负责将包含路径映射到其内容。
计划中的功能
- 在输入中定义宏的
#define
。 - 可选地捕获未知预处理器指令。目前,这些指令保持原样。
- 更详细的错误处理,具体取决于实现的复杂度。
致谢
nanopre
部分灵感来自 Diggsey 的 minipre
,我在构建此项目之前使用了它。