grammar.js

 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});