Parse && and ||

This commit is contained in:
Richard Feldman 2019-07-11 22:03:48 -04:00
parent 79951cec5e
commit 21c98d6364
2 changed files with 21 additions and 0 deletions

View file

@ -404,10 +404,12 @@ where I: Stream<Item = char, Position = IndentablePosition>,
I::Error: ParseError<I::Item, I::Range, I::Position>
{
choice((
string("&&").map(|_| Operator::And),
attempt(string("==")).map(|_| Operator::Equals),
attempt(string("<=")).map(|_| Operator::LessThanOrEq),
attempt(string(">=")).map(|_| Operator::GreaterThanOrEq),
attempt(string("|>")).map(|_| Operator::Pizza),
string("||").map(|_| Operator::Or),
char('+').map(|_| Operator::Plus),
char('-').map(|_| Operator::Minus),
char('*').map(|_| Operator::Star),

View file

@ -1392,4 +1392,23 @@ mod test_parse {
""))
);
}
#[test]
fn compare_and() {
assert_eq!(
parse_with_precedence("x > 1 || True"),
Ok((Operator(
loc_box(
Operator(
loc_box(Var("x".to_string())),
loc(GreaterThan),
loc_box(Int(1))
)
),
loc(Or),
loc_box(ApplyVariant("True".to_string(), None))
),
""))
);
}
}