1 个不稳定版本
0.1.0 | 2023 年 7 月 19 日 |
---|
#2633 在 解析器实现
14KB
279 行
LBNF
用于解析 LBNF 的库。
这是一个用于解析 LBNF 的库。该库仅负责解析 LBNF。一些组件,如词法分析器、解析器和抽象语法树生成,尚缺,需要生成完整的上下文无关文法解析器。
什么是 LBNF?
标签化的巴科斯-诺尔形式(LBNF)是 BNF 的扩展,由工具 BNFC 正式化。除了常规 BNF 语法外,每个产生式还给出了一个标签,用于生成上下文无关语言的抽象语法。
此库不遵循 BNFC 的 LBNF 参考 中指定的所有规则。一些更改,特别是宏语法,已被做出,以使 LBNF 适用于更广泛的应用。
用法
let source = r#"
EAdd. Expr ::= Expr "+" Num ;
ENum. Expr ::= Num ;
NZero. Num ::= "0" ;
"#;
if let Ok(grammar) = lbnf::parse(source) {
// The parsed grammar can now be used to generate the following structure:
enum Expr {
EAdd(Box<Expr>, Num),
ENum(Num),
}
enum Num {
NZero
}
}
许可证
许可协议为以下之一
- Apache 许可证 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则,根据 Apache-2.0 许可证定义,任何有意提交以包含在作品中的贡献,均应按照上述方式双许可,而无需附加条款或条件。
依赖关系
~5.5–8.5MB
~147K SLoC