Closed amascolo closed 1 year ago
Looks related to nullable productions: #108 #112 #117
This grammar fails to match when we change a production from left-recursive to right-recursive.
The left-recursive grammar failed on 0.4.0 ≤ bnf ≤ 0.4.1 – the right-recursive still fails on 0.4.0 ≤ bnf ≤ 0.4.3
0.4.0 ≤ bnf ≤ 0.4.1
0.4.0 ≤ bnf ≤ 0.4.3
So this issue must have been partially addressed by @CrockAgile in #109 (0.4.2)
0.4.2
Happy to help battle-testing any proposed fixes ⚔️
use bnf::Grammar; #[test] fn test() { let input = "aa a"; let left_recursive: &str = " <conjunction> ::= <conjunction> <ws> <predicate> | <predicate> <predicate> ::= <string_null_one> | <special-string> '.' <string_null_one> ::= <string_null_two> <string_null_two> ::= <string_null_three> <string_null_three> ::= <string> <string> ::= <char_null> | <string> <char_null> <special-string> ::= <special-char> | <special-string> <special-char> <char_null> ::= <char> <char> ::= 'a' <special-char> ::= <char_null> | <whitespace> <whitespace> ::= ' ' <ws> ::= ' ' | ' ' <ws> "; assert!(left_recursive.parse::<Grammar>().unwrap().parse_input(input).next().is_some()); let right_recursive = left_recursive.replace( // rewrite production from left- to right- recursive "<string> ::= <char_null> | <string> <char_null>", "<string> ::= <char_null> | <char_null> <string>", ); assert!( right_recursive.parse::<Grammar>().unwrap().parse_input(input).next().is_some(), "right-recursive grammar failed to parse: {input}" ); }
Looks related to nullable productions: #108 #112 #117
This grammar fails to match when we change a production from left-recursive to right-recursive.
The left-recursive grammar failed on
0.4.0 ≤ bnf ≤ 0.4.1
– the right-recursive still fails on0.4.0 ≤ bnf ≤ 0.4.3
So this issue must have been partially addressed by @CrockAgile in #109 (
0.4.2
)Happy to help battle-testing any proposed fixes ⚔️