11 个版本

0.2.0 2024 年 8 月 14 日
0.1.9 2024 年 8 月 10 日
0.1.5 2024 年 7 月 26 日
0.1.2 2024 年 6 月 25 日

#3 in #ebnf

Download history 613/week @ 2024-06-12 1293/week @ 2024-06-19 267/week @ 2024-06-26 43/week @ 2024-07-03 1/week @ 2024-07-17 763/week @ 2024-07-24 144/week @ 2024-07-31 609/week @ 2024-08-07

1,517 每月下载量
用于 2 个 crate(通过 kbnf

MIT 许可证

105KB
2.5K SLoC

ebnf

Crates.io Docs

此 crate 从 ebnf 分支出来以支持 knbf 语法。目前这是一个用于 crate kbnf 的内部 crate。


lib.rs:

ebnf - bnf 解析库的后续者,用于解析扩展巴科斯-诺尔范式上下文无关语法

代码在 GitHub 上可用

免责声明

EBNF 有多种变体,使用略有不同的句法约定。此库以 EBNF 评估器 的示例代码作为标准,该代码在维基百科页面上有几乎所有的句法约定。

有效的 EBNF 语法是什么样的?

以下示例取自 EBNF 评估器

filter ::= ( first ' ' )? ( number '~ ' )? ( number '-' number ) ( ' ' number '~' )? ( ' hz' )? ( ' b' )? ( ' i' )? ( ' a' )?;
first  ::= #'[a-za-z][a-za-z0-9_+]*';
number ::= digits ( ( '.' | ',' ) digits? )?;
digits ::= #'[0-9]+';

如何使用此库?

extern crate kbnf_syntax;

fn main() {
    let source = r"
        filter ::= ( first ' ' )? ( number '~ ' )? ( number '-' number ) ( ' ' number '~' )? ( ' hz' )? ( ' b' )? ( ' i' )? ( ' a' )?;
        first  ::= #'[a-za-z][a-za-z0-9_+]*';
        number ::= digits ( ( '.' | ',' ) digits? )?;
        digits ::= #'[0-9]+';
    ";

    let result = kbnf_syntax::get_grammar(source);
}

依赖项

~8MB
~136K SLoC