#上下文无关文法 #巴科斯-诺尔范式 #解析器 #形式 #扩展 #后继者 #巴克士-诺尔

ebnf

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

5 个版本

0.1.4 2023年4月14日
0.1.3 2023年2月8日
0.1.2 2022年3月20日
0.1.1 2022年3月18日
0.1.0 2022年3月18日

#2#successor

每月 38 次下载

MIT 许可证

17KB
402

ebnf

Crates.io Docs .github/workflows/push.yml

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 ebnf;

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 = ebnf::get_grammar(source);
}

依赖项

~1.8–2.6MB
~54K SLoC