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
1,517 每月下载量
用于 2 个 crate(通过 kbnf)
105KB
2.5K SLoC
ebnf
此 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