Add logical and comparison expressions
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
const PREC = {
|
||||
DEFAULT: 1,
|
||||
PATCH: 2,
|
||||
AND: 3,
|
||||
ADD: 4,
|
||||
MUL: 5,
|
||||
UNARY: 6,
|
||||
CALL: 7,
|
||||
PATH: 8,
|
||||
COMPOSE: 3,
|
||||
OR: 4,
|
||||
LOGICAL_AND: 5,
|
||||
COMPARE: 6,
|
||||
ADD: 7,
|
||||
MUL: 8,
|
||||
UNARY: 9,
|
||||
CALL: 10,
|
||||
PATH: 11,
|
||||
};
|
||||
|
||||
function commaSep(rule) {
|
||||
@@ -163,17 +166,32 @@ module.exports = grammar({
|
||||
field('field', $.identifier),
|
||||
)),
|
||||
|
||||
comparison_constraint: $ => prec(6, seq(
|
||||
comparison_constraint: $ => prec.right(PREC.UNARY + 1, seq(
|
||||
field('operator', choice('>', '>=', '<', '<=')),
|
||||
field('value', $._expression),
|
||||
)),
|
||||
|
||||
unary_expression: $ => prec(PREC.UNARY, seq(
|
||||
field('operator', '-'),
|
||||
field('operator', choice('-', '!')),
|
||||
field('operand', $._expression),
|
||||
)),
|
||||
|
||||
binary_expression: $ => choice(
|
||||
prec.left(PREC.OR, seq(
|
||||
field('left', $._expression),
|
||||
field('operator', token(prec(2, '||'))),
|
||||
field('right', $._expression),
|
||||
)),
|
||||
prec.left(PREC.LOGICAL_AND, seq(
|
||||
field('left', $._expression),
|
||||
field('operator', token(prec(2, '&&'))),
|
||||
field('right', $._expression),
|
||||
)),
|
||||
prec.left(PREC.COMPARE, seq(
|
||||
field('left', $._expression),
|
||||
field('operator', choice('==', '!=', '>', '>=', '<', '<=')),
|
||||
field('right', $._expression),
|
||||
)),
|
||||
prec.left(PREC.ADD, seq(
|
||||
field('left', $._expression),
|
||||
field('operator', choice('+', '-')),
|
||||
@@ -184,7 +202,7 @@ module.exports = grammar({
|
||||
field('operator', choice('*', '/')),
|
||||
field('right', $._expression),
|
||||
)),
|
||||
prec.left(PREC.AND, seq(
|
||||
prec.left(PREC.COMPOSE, seq(
|
||||
field('left', $._expression),
|
||||
field('operator', '&'),
|
||||
field('right', $._expression),
|
||||
|
||||
Reference in New Issue
Block a user