7 个不稳定版本
0.3.0 | 2023 年 4 月 24 日 |
---|---|
0.2.1 | 2022 年 3 月 9 日 |
0.2.0 | 2022 年 2 月 10 日 |
0.1.2 | 2022 年 1 月 11 日 |
0.0.0 | 2021 年 11 月 5 日 |
#702 in 解析器实现
168,113 每月下载量
用于 2 crates
145KB
3K SLoC
Cucumber Expressions for Rust
Rust 实现 Cucumber Expressions。
此包提供 AST 解析器和 Regex
扩展的 Cucumber Expressions。
# // `Regex` expansion requires `into-regex` feature.
# #[cfg(feature = "into-regex")] {
use cucumber_expressions::Expression;
let re = Expression::regex("I have {int} cucumbers in my belly").unwrap();
let caps = re.captures("I have 42 cucumbers in my belly").unwrap();
assert_eq!(&caps[0], "I have 42 cucumbers in my belly");
assert_eq!(&caps[1], "42");
# }
Cargo 功能
into-regex
: 启用扩展到Regex
。
语法
此实现遵循一个上下文无关语法,尚未合并。原始语法在创建性能解析器时难以遵循,因为它包含错误,并不精确描述 Cucumber Expressions 语言,而是一个超集语言,并且是上下文相关的。如果您在此实现与其他语言实现之间发现了一些不一致之处,请提交问题!
此包实现的当前上下文无关语法的 EBNF 规范
expression = single-expression*
single-expression = alternation
| optional
| parameter
| text-without-whitespace+
| whitespace+
text-without-whitespace = (- (text-to-escape | whitespace))
| ('\', text-to-escape)
text-to-escape = '(' | '{' | '/' | '\'
alternation = single-alternation, (`/`, single-alternation)+
single-alternation = ((text-in-alternative+, optional*)
| (optional+, text-in-alternative+))+
text-in-alternative = (- alternative-to-escape)
| ('\', alternative-to-escape)
alternative-to-escape = whitespace | '(' | '{' | '/' | '\'
whitespace = ' '
optional = '(' text-in-optional+ ')'
text-in-optional = (- optional-to-escape) | ('\', optional-to-escape)
optional-to-escape = '(' | ')' | '{' | '/' | '\'
parameter = '{', name*, '}'
name = (- name-to-escape) | ('\', name-to-escape)
name-to-escape = '{' | '}' | '(' | '/' | '\'
Regex
生成规则
遵循原始 生成规则。
许可证
本项目许可在以下之一下:
- Apache 许可证 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
您可选。
依赖
~1.3–2.6MB
~52K SLoC