Crate cucumber_expressions
source · [−]Expand description
Cucumber Expressions for Rust
Rust implementation of Cucumber Expressions.
This crate provides AST parser, and Regex expansion of Cucumber Expressions.
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 features
into-regex: Enables expansion intoRegex.
Grammar
This implementation follows a context-free grammar, which isn’t yet merged. Original grammar is impossible to follow while creating a performant parser, as it consists errors and describes not an exact Cucumber Expressions language, but rather some superset language, while being also context-sensitive. In case you’ve found some inconsistencies between this implementation and the ones in other languages, please file an issue!
EBNF spec of the current context-free grammar implemented by this crate:
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 Production Rules
Follows original production rules.
License
This project is licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Modules
Cucumber Expressions AST into Regex expansion.
Cucumber Expressions AST parser.
Structs
alternation defined in the grammar spec, allowing to match one of
SingleAlternations.
Top-level expression defined in the grammar spec.
optional defined in the grammar spec, allowing to match an optional
Input.
parameter defined in the grammar spec, allowing to match some special
Input described by a Parameter name.
Enums
alternative defined in the grammar spec.
single-expression defined in the grammar spec, representing a single
entry of an Expression.
Type Definitions
single-alternation defined in the grammar spec, representing a
building block of an Alternation.