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 次下载
17KB
402 行
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 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