git.delta.rocks / jrsonnet / refs/commits / 7c9753954b3b

difftreelog

fix(parser) infix operator precedence

Лач2020-05-31parent: #2e6febe.patch.diff
in: master

1 file changed

modifiedcrates/jsonnet-parser/src/lib.rsdiffbeforeafterboth
153 / var_expr()153 / var_expr()
154 / local_expr()154 / local_expr()
155 / if_then_else_expr()155 / if_then_else_expr()
156 / "-" _ expr:boxed_expr() { Expr::UnaryOp(UnaryOpType::Minus, expr) }
157 / "!" _ expr:boxed_expr() { Expr::UnaryOp(UnaryOpType::Not, expr) }
158156
159 / keyword("function") _ "(" _ params:params() _ ")" _ expr:boxed_expr() {Expr::Function(params, expr)}157 / keyword("function") _ "(" _ params:params() _ ")" _ expr:boxed_expr() {Expr::Function(params, expr)}
160 / assertion:assertion() _ ";" _ expr:boxed_expr() { Expr::AssertExpr(assertion, expr) }158 / assertion:assertion() _ ";" _ expr:boxed_expr() { Expr::AssertExpr(assertion, expr) }
223 a:(@) _ "%" _ b:@ {Expr::BinaryOp(Box::new(a), BinaryOpType::Mod, Box::new(b))}221 a:(@) _ "%" _ b:@ {Expr::BinaryOp(Box::new(a), BinaryOpType::Mod, Box::new(b))}
224 --222 --
225 e:expr_basic_with_suffix() {e}223 e:expr_basic_with_suffix() {e}
224 "-" _ expr:expr_basic_with_suffix() { Expr::UnaryOp(UnaryOpType::Minus, box expr) }
225 "!" _ expr:expr_basic_with_suffix() { Expr::UnaryOp(UnaryOpType::Not, box expr) }
226 "(" _ e:boxed_expr() _ ")" {Expr::Parened(e)}226 "(" _ e:boxed_expr() _ ")" {Expr::Parened(e)}
227 }227 }
228 / e:expr_basic_with_suffix() {e}228 / e:expr_basic_with_suffix() {e}
387 parse("a(b, null_fields)").unwrap();387 parse("a(b, null_fields)").unwrap();
388 }388 }
389
390 #[test]
391 fn infix_precedence() {
392 use Expr::*;
393 assert_eq!(parse("!a && !b").unwrap(), BinaryOp(
394 box UnaryOp(UnaryOpType::Not, box Var("a".to_owned())),
395 BinaryOpType::And,
396 box UnaryOp(UnaryOpType::Not, box Var("b".to_owned()))
397 ));
398 }
389399
390 #[test]400 #[test]
391 fn can_parse_stdlib() {401 fn can_parse_stdlib() {