1module.exports = grammar({
2 name: 'context_predicate',
3
4 rules: {
5 source: $ => $._expression,
6
7 _expression: $ => choice(
8 $.identifier,
9 $.not,
10 $.and,
11 $.or,
12 $.equal,
13 $.not_equal,
14 $.parenthesized,
15 ),
16
17 identifier: $ => /[A-Za-z0-9_-]+/,
18
19 not: $ => prec(3, seq("!", field("expression", $._expression))),
20
21 and: $ => prec.left(2, seq(field("left", $._expression), "&&", field("right", $._expression))),
22
23 or: $ => prec.left(1, seq(field("left", $._expression), "||", field("right", $._expression))),
24
25 equal: $ => seq(field("left", $.identifier), "==", field("right", $.identifier)),
26
27 not_equal: $ => seq(field("left", $.identifier), "!=", field("right", $.identifier)),
28
29 parenthesized: $ => seq("(", field("expression", $._expression), ")"),
30 }
31});