pgsql-ast-parser icon indicating copy to clipboard operation
pgsql-ast-parser copied to clipboard

Expression that subtracts a literal number without space fails to parse

Open gthb opened this issue 1 year ago • 1 comments

This existing test passes just fine:

        checkTreeExpr(['42+51', '42 + 51'], {
            type: 'binary',
            op: '+',
            left: {
                type: 'integer',
                value: 42,
            },
            right: {
                type: 'integer',
                value: 51,
            }
        });

... but adding this corresponding test for subtraction fails:

        checkTreeExpr(['42-51', '42 - 51'], {
            type: 'binary',
            op: '-',
            left: {
                type: 'integer',
                value: 42,
            },
            right: {
                type: 'integer',
                value: 51,
            }
        });

... with a syntax error saying: Unexpected int token: "-51" in the spaceless case, so presumably the problem is that lexical analysis outputs the two tokens LITERAL 42, LITERAL -51, but the parsing only works if the tokens are LITERAL 42, MINUS, LITERAL 51, i.e. the minus token should have a higher precedence than the negative integer literal token.

Full test failure output
     Error: Syntax error at line 1 col 3:

42-51 ^ Unexpected int token: "-51". Instead, I was expecting to see one of the following:

A op_cast token based on: expr_member → expr_member$subexpression$3 ● %op_cast data_type expr_various_constructs$macrocall$4 → ● expr_member expr_various_constructs$macrocall$1 → ● expr_various_constructs$macrocall$4 expr_various_constructs → ● expr_various_constructs$macrocall$1 expr_string_compare$macrocall$4 → ● expr_various_constructs expr_string_compare$macrocall$1 → ● expr_string_compare$macrocall$4 expr_string_compare → ● expr_string_compare$macrocall$1 expr_unary_add$macrocall$4 → ● expr_string_compare expr_unary_add$macrocall$1 → ● expr_unary_add$macrocall$4 expr_unary_add → ● expr_unary_add$macrocall$1 expr_exp$macrocall$4 → ● expr_unary_add expr_exp$macrocall$1 → ● expr_exp$macrocall$4 expr_exp → ● expr_exp$macrocall$1 expr_mult$macrocall$4 → ● expr_exp expr_mult$macrocall$1 → ● expr_mult$macrocall$4 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_member token based on: ops_member$subexpression$1 → ● %op_member ops_member → ● ops_member$subexpression$1 expr_member → expr_member$subexpression$1 ● ops_member expr_member$subexpression$2 expr_various_constructs$macrocall$4 → ● expr_member expr_various_constructs$macrocall$1 → ● expr_various_constructs$macrocall$4 expr_various_constructs → ● expr_various_constructs$macrocall$1 expr_string_compare$macrocall$4 → ● expr_various_constructs expr_string_compare$macrocall$1 → ● expr_string_compare$macrocall$4 expr_string_compare → ● expr_string_compare$macrocall$1 expr_unary_add$macrocall$4 → ● expr_string_compare expr_unary_add$macrocall$1 → ● expr_unary_add$macrocall$4 expr_unary_add → ● expr_unary_add$macrocall$1 expr_exp$macrocall$4 → ● expr_unary_add expr_exp$macrocall$1 → ● expr_exp$macrocall$4 expr_exp → ● expr_exp$macrocall$1 expr_mult$macrocall$4 → ● expr_exp expr_mult$macrocall$1 → ● expr_mult$macrocall$4 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_membertext token based on: ops_member$subexpression$1 → ● %op_membertext ops_member → ● ops_member$subexpression$1 expr_member → expr_member$subexpression$1 ● ops_member expr_member$subexpression$2 expr_various_constructs$macrocall$4 → ● expr_member expr_various_constructs$macrocall$1 → ● expr_various_constructs$macrocall$4 expr_various_constructs → ● expr_various_constructs$macrocall$1 expr_string_compare$macrocall$4 → ● expr_various_constructs expr_string_compare$macrocall$1 → ● expr_string_compare$macrocall$4 expr_string_compare → ● expr_string_compare$macrocall$1 expr_unary_add$macrocall$4 → ● expr_string_compare expr_unary_add$macrocall$1 → ● expr_unary_add$macrocall$4 expr_unary_add → ● expr_unary_add$macrocall$1 expr_exp$macrocall$4 → ● expr_unary_add expr_exp$macrocall$1 → ● expr_exp$macrocall$4 expr_exp → ● expr_exp$macrocall$1 expr_mult$macrocall$4 → ● expr_exp expr_mult$macrocall$1 → ● expr_mult$macrocall$4 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A word token based on: kw_at → ● %word various_binaries → ● kw_at kw_time kw_zone expr_various_constructs$macrocall$2$macrocall$2 → ● various_binaries expr_various_constructs$macrocall$2$macrocall$1 → ● expr_various_constructs$macrocall$2$macrocall$2 expr_various_constructs$macrocall$2 → ● expr_various_constructs$macrocall$2$macrocall$1 expr_various_constructs$macrocall$1 → expr_various_constructs$macrocall$1$subexpression$1 ● expr_various_constructs$macrocall$2 expr_various_constructs$macrocall$1$subexpression$2 expr_various_constructs → ● expr_various_constructs$macrocall$1 expr_string_compare$macrocall$4 → ● expr_various_constructs expr_string_compare$macrocall$1 → ● expr_string_compare$macrocall$4 expr_string_compare → ● expr_string_compare$macrocall$1 expr_unary_add$macrocall$4 → ● expr_string_compare expr_unary_add$macrocall$1 → ● expr_unary_add$macrocall$4 expr_unary_add → ● expr_unary_add$macrocall$1 expr_exp$macrocall$4 → ● expr_unary_add expr_exp$macrocall$1 → ● expr_exp$macrocall$4 expr_exp → ● expr_exp$macrocall$1 expr_mult$macrocall$4 → ● expr_exp expr_mult$macrocall$1 → ● expr_mult$macrocall$4 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A word token based on: kw_contains → ● %word ops_string_compare → ● kw_contains expr_string_compare$macrocall$2$macrocall$2 → ● ops_string_compare expr_string_compare$macrocall$2$macrocall$1 → ● expr_string_compare$macrocall$2$macrocall$2 expr_string_compare$macrocall$2 → ● expr_string_compare$macrocall$2$macrocall$1 expr_string_compare$macrocall$1 → expr_string_compare$macrocall$1$subexpression$1 ● expr_string_compare$macrocall$2 expr_string_compare$macrocall$1$subexpression$2 expr_string_compare → ● expr_string_compare$macrocall$1 expr_unary_add$macrocall$4 → ● expr_string_compare expr_unary_add$macrocall$1 → ● expr_unary_add$macrocall$4 expr_unary_add → ● expr_unary_add$macrocall$1 expr_exp$macrocall$4 → ● expr_unary_add expr_exp$macrocall$1 → ● expr_exp$macrocall$4 expr_exp → ● expr_exp$macrocall$1 expr_mult$macrocall$4 → ● expr_exp expr_mult$macrocall$1 → ● expr_mult$macrocall$4 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A word token based on: kw_matches → ● %word ops_string_compare → ● kw_matches expr_string_compare$macrocall$2$macrocall$2 → ● ops_string_compare expr_string_compare$macrocall$2$macrocall$1 → ● expr_string_compare$macrocall$2$macrocall$2 expr_string_compare$macrocall$2 → ● expr_string_compare$macrocall$2$macrocall$1 expr_string_compare$macrocall$1 → expr_string_compare$macrocall$1$subexpression$1 ● expr_string_compare$macrocall$2 expr_string_compare$macrocall$1$subexpression$2 expr_string_compare → ● expr_string_compare$macrocall$1 expr_unary_add$macrocall$4 → ● expr_string_compare expr_unary_add$macrocall$1 → ● expr_unary_add$macrocall$4 expr_unary_add → ● expr_unary_add$macrocall$1 expr_exp$macrocall$4 → ● expr_unary_add expr_exp$macrocall$1 → ● expr_exp$macrocall$4 expr_exp → ● expr_exp$macrocall$1 expr_mult$macrocall$4 → ● expr_exp expr_mult$macrocall$1 → ● expr_mult$macrocall$4 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A word token based on: kw_ends → ● %word kw_endswith → ● kw_ends %kw_with ops_string_compare → ● kw_endswith expr_string_compare$macrocall$2$macrocall$2 → ● ops_string_compare expr_string_compare$macrocall$2$macrocall$1 → ● expr_string_compare$macrocall$2$macrocall$2 expr_string_compare$macrocall$2 → ● expr_string_compare$macrocall$2$macrocall$1 expr_string_compare$macrocall$1 → expr_string_compare$macrocall$1$subexpression$1 ● expr_string_compare$macrocall$2 expr_string_compare$macrocall$1$subexpression$2 expr_string_compare → ● expr_string_compare$macrocall$1 expr_unary_add$macrocall$4 → ● expr_string_compare expr_unary_add$macrocall$1 → ● expr_unary_add$macrocall$4 expr_unary_add → ● expr_unary_add$macrocall$1 expr_exp$macrocall$4 → ● expr_unary_add expr_exp$macrocall$1 → ● expr_exp$macrocall$4 expr_exp → ● expr_exp$macrocall$1 expr_mult$macrocall$4 → ● expr_exp expr_mult$macrocall$1 → ● expr_mult$macrocall$4 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A word token based on: kw_starts → ● %word kw_startswith → ● kw_starts %kw_with ops_string_compare → ● kw_startswith expr_string_compare$macrocall$2$macrocall$2 → ● ops_string_compare expr_string_compare$macrocall$2$macrocall$1 → ● expr_string_compare$macrocall$2$macrocall$2 expr_string_compare$macrocall$2 → ● expr_string_compare$macrocall$2$macrocall$1 expr_string_compare$macrocall$1 → expr_string_compare$macrocall$1$subexpression$1 ● expr_string_compare$macrocall$2 expr_string_compare$macrocall$1$subexpression$2 expr_string_compare → ● expr_string_compare$macrocall$1 expr_unary_add$macrocall$4 → ● expr_string_compare expr_unary_add$macrocall$1 → ● expr_unary_add$macrocall$4 expr_unary_add → ● expr_unary_add$macrocall$1 expr_exp$macrocall$4 → ● expr_unary_add expr_exp$macrocall$1 → ● expr_exp$macrocall$4 expr_exp → ● expr_exp$macrocall$1 expr_mult$macrocall$4 → ● expr_exp expr_mult$macrocall$1 → ● expr_mult$macrocall$4 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A word token based on: kw_operator → ● %word expr_exp$macrocall$2$macrocall$1 → ● kw_operator lparen ident dot expr_exp$macrocall$2$macrocall$2 rparen expr_exp$macrocall$2 → ● expr_exp$macrocall$2$macrocall$1 expr_exp$macrocall$1 → expr_exp$macrocall$1$subexpression$1 ● expr_exp$macrocall$2 expr_exp$macrocall$1$subexpression$2 expr_exp → ● expr_exp$macrocall$1 expr_mult$macrocall$4 → ● expr_exp expr_mult$macrocall$1 → ● expr_mult$macrocall$4 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_exp token based on: expr_exp$macrocall$2$macrocall$2 → ● %op_exp expr_exp$macrocall$2$macrocall$1$macrocall$2 → ● expr_exp$macrocall$2$macrocall$2 expr_exp$macrocall$2$macrocall$1$macrocall$1 → ● expr_exp$macrocall$2$macrocall$1$macrocall$2 expr_exp$macrocall$2$macrocall$1 → ● expr_exp$macrocall$2$macrocall$1$macrocall$1 expr_exp$macrocall$2 → ● expr_exp$macrocall$2$macrocall$1 expr_exp$macrocall$1 → expr_exp$macrocall$1$subexpression$1 ● expr_exp$macrocall$2 expr_exp$macrocall$1$subexpression$2 expr_exp → ● expr_exp$macrocall$1 expr_mult$macrocall$4 → ● expr_exp expr_mult$macrocall$1 → ● expr_mult$macrocall$4 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A star token based on: expr_mult$macrocall$2$macrocall$2$subexpression$1 → ● %star expr_mult$macrocall$2$macrocall$2 → ● expr_mult$macrocall$2$macrocall$2$subexpression$1 expr_mult$macrocall$2$macrocall$1$macrocall$2 → ● expr_mult$macrocall$2$macrocall$2 expr_mult$macrocall$2$macrocall$1$macrocall$1 → ● expr_mult$macrocall$2$macrocall$1$macrocall$2 expr_mult$macrocall$2$macrocall$1 → ● expr_mult$macrocall$2$macrocall$1$macrocall$1 expr_mult$macrocall$2 → ● expr_mult$macrocall$2$macrocall$1 expr_mult$macrocall$1 → expr_mult$macrocall$1$subexpression$1 ● expr_mult$macrocall$2 expr_mult$macrocall$1$subexpression$2 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_div token based on: expr_mult$macrocall$2$macrocall$2$subexpression$1 → ● %op_div expr_mult$macrocall$2$macrocall$2 → ● expr_mult$macrocall$2$macrocall$2$subexpression$1 expr_mult$macrocall$2$macrocall$1$macrocall$2 → ● expr_mult$macrocall$2$macrocall$2 expr_mult$macrocall$2$macrocall$1$macrocall$1 → ● expr_mult$macrocall$2$macrocall$1$macrocall$2 expr_mult$macrocall$2$macrocall$1 → ● expr_mult$macrocall$2$macrocall$1$macrocall$1 expr_mult$macrocall$2 → ● expr_mult$macrocall$2$macrocall$1 expr_mult$macrocall$1 → expr_mult$macrocall$1$subexpression$1 ● expr_mult$macrocall$2 expr_mult$macrocall$1$subexpression$2 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_mod token based on: expr_mult$macrocall$2$macrocall$2$subexpression$1 → ● %op_mod expr_mult$macrocall$2$macrocall$2 → ● expr_mult$macrocall$2$macrocall$2$subexpression$1 expr_mult$macrocall$2$macrocall$1$macrocall$2 → ● expr_mult$macrocall$2$macrocall$2 expr_mult$macrocall$2$macrocall$1$macrocall$1 → ● expr_mult$macrocall$2$macrocall$1$macrocall$2 expr_mult$macrocall$2$macrocall$1 → ● expr_mult$macrocall$2$macrocall$1$macrocall$1 expr_mult$macrocall$2 → ● expr_mult$macrocall$2$macrocall$1 expr_mult$macrocall$1 → expr_mult$macrocall$1$subexpression$1 ● expr_mult$macrocall$2 expr_mult$macrocall$1$subexpression$2 expr_mult → ● expr_mult$macrocall$1 expr_add$macrocall$4 → ● expr_mult expr_add$macrocall$1 → ● expr_add$macrocall$4 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_plus token based on: expr_add$macrocall$2$macrocall$2$subexpression$1 → ● %op_plus expr_add$macrocall$2$macrocall$2 → ● expr_add$macrocall$2$macrocall$2$subexpression$1 expr_add$macrocall$2$macrocall$1$macrocall$2 → ● expr_add$macrocall$2$macrocall$2 expr_add$macrocall$2$macrocall$1$macrocall$1 → ● expr_add$macrocall$2$macrocall$1$macrocall$2 expr_add$macrocall$2$macrocall$1 → ● expr_add$macrocall$2$macrocall$1$macrocall$1 expr_add$macrocall$2 → ● expr_add$macrocall$2$macrocall$1 expr_add$macrocall$1 → expr_add$macrocall$1$subexpression$1 ● expr_add$macrocall$2 expr_add$macrocall$1$subexpression$2 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_minus token based on: expr_add$macrocall$2$macrocall$2$subexpression$1 → ● %op_minus expr_add$macrocall$2$macrocall$2 → ● expr_add$macrocall$2$macrocall$2$subexpression$1 expr_add$macrocall$2$macrocall$1$macrocall$2 → ● expr_add$macrocall$2$macrocall$2 expr_add$macrocall$2$macrocall$1$macrocall$1 → ● expr_add$macrocall$2$macrocall$1$macrocall$2 expr_add$macrocall$2$macrocall$1 → ● expr_add$macrocall$2$macrocall$1$macrocall$1 expr_add$macrocall$2 → ● expr_add$macrocall$2$macrocall$1 expr_add$macrocall$1 → expr_add$macrocall$1$subexpression$1 ● expr_add$macrocall$2 expr_add$macrocall$1$subexpression$2 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_additive token based on: expr_add$macrocall$2$macrocall$2$subexpression$1 → ● %op_additive expr_add$macrocall$2$macrocall$2 → ● expr_add$macrocall$2$macrocall$2$subexpression$1 expr_add$macrocall$2$macrocall$1$macrocall$2 → ● expr_add$macrocall$2$macrocall$2 expr_add$macrocall$2$macrocall$1$macrocall$1 → ● expr_add$macrocall$2$macrocall$1$macrocall$2 expr_add$macrocall$2$macrocall$1 → ● expr_add$macrocall$2$macrocall$1$macrocall$1 expr_add$macrocall$2 → ● expr_add$macrocall$2$macrocall$1 expr_add$macrocall$1 → expr_add$macrocall$1$subexpression$1 ● expr_add$macrocall$2 expr_add$macrocall$1$subexpression$2 expr_add → ● expr_add$macrocall$1 expr_in$macrocall$4 → ● expr_add expr_in$macrocall$1 → ● expr_in$macrocall$4 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_not token based on: ops_in$ebnf$1 → ● %kw_not ops_in → ● ops_in$ebnf$1 %kw_in expr_in$macrocall$2$macrocall$2 → ● ops_in expr_in$macrocall$2$macrocall$1 → ● expr_in$macrocall$2$macrocall$2 expr_in$macrocall$2 → ● expr_in$macrocall$2$macrocall$1 expr_in$macrocall$1 → expr_in$macrocall$1$subexpression$1 ● expr_in$macrocall$2 expr_in$macrocall$1$subexpression$2 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_in token based on: ops_in → ops_in$ebnf$1 ● %kw_in expr_in$macrocall$2$macrocall$2 → ● ops_in expr_in$macrocall$2$macrocall$1 → ● expr_in$macrocall$2$macrocall$2 expr_in$macrocall$2 → ● expr_in$macrocall$2$macrocall$1 expr_in$macrocall$1 → expr_in$macrocall$1$subexpression$1 ● expr_in$macrocall$2 expr_in$macrocall$1$subexpression$2 expr_in → ● expr_in$macrocall$1 expr_like$macrocall$4 → ● expr_in expr_like$macrocall$1 → ● expr_like$macrocall$4 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_not token based on: ops_like_keywors$ebnf$1 → ● %kw_not ops_like_keywors → ● ops_like_keywors$ebnf$1 ops_like_keywors$subexpression$1 ops_like → ● ops_like_keywors expr_like$macrocall$2$macrocall$2 → ● ops_like expr_like$macrocall$2$macrocall$1 → ● expr_like$macrocall$2$macrocall$2 expr_like$macrocall$2 → ● expr_like$macrocall$2$macrocall$1 expr_like$macrocall$1 → expr_like$macrocall$1$subexpression$1 ● expr_like$macrocall$2 expr_like$macrocall$1$subexpression$2 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_like token based on: ops_like_operators$subexpression$1 → ● %op_like ops_like_operators → ● ops_like_operators$subexpression$1 ops_like → ● ops_like_operators expr_like$macrocall$2$macrocall$2 → ● ops_like expr_like$macrocall$2$macrocall$1 → ● expr_like$macrocall$2$macrocall$2 expr_like$macrocall$2 → ● expr_like$macrocall$2$macrocall$1 expr_like$macrocall$1 → expr_like$macrocall$1$subexpression$1 ● expr_like$macrocall$2 expr_like$macrocall$1$subexpression$2 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_ilike token based on: ops_like_operators$subexpression$2 → ● %op_ilike ops_like_operators → ● ops_like_operators$subexpression$2 ops_like → ● ops_like_operators expr_like$macrocall$2$macrocall$2 → ● ops_like expr_like$macrocall$2$macrocall$1 → ● expr_like$macrocall$2$macrocall$2 expr_like$macrocall$2 → ● expr_like$macrocall$2$macrocall$1 expr_like$macrocall$1 → expr_like$macrocall$1$subexpression$1 ● expr_like$macrocall$2 expr_like$macrocall$1$subexpression$2 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_not_like token based on: ops_like_operators$subexpression$3 → ● %op_not_like ops_like_operators → ● ops_like_operators$subexpression$3 ops_like → ● ops_like_operators expr_like$macrocall$2$macrocall$2 → ● ops_like expr_like$macrocall$2$macrocall$1 → ● expr_like$macrocall$2$macrocall$2 expr_like$macrocall$2 → ● expr_like$macrocall$2$macrocall$1 expr_like$macrocall$1 → expr_like$macrocall$1$subexpression$1 ● expr_like$macrocall$2 expr_like$macrocall$1$subexpression$2 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_not_ilike token based on: ops_like_operators$subexpression$4 → ● %op_not_ilike ops_like_operators → ● ops_like_operators$subexpression$4 ops_like → ● ops_like_operators expr_like$macrocall$2$macrocall$2 → ● ops_like expr_like$macrocall$2$macrocall$1 → ● expr_like$macrocall$2$macrocall$2 expr_like$macrocall$2 → ● expr_like$macrocall$2$macrocall$1 expr_like$macrocall$1 → expr_like$macrocall$1$subexpression$1 ● expr_like$macrocall$2 expr_like$macrocall$1$subexpression$2 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_like token based on: ops_like_keywors$subexpression$1 → ● %kw_like ops_like_keywors → ops_like_keywors$ebnf$1 ● ops_like_keywors$subexpression$1 ops_like → ● ops_like_keywors expr_like$macrocall$2$macrocall$2 → ● ops_like expr_like$macrocall$2$macrocall$1 → ● expr_like$macrocall$2$macrocall$2 expr_like$macrocall$2 → ● expr_like$macrocall$2$macrocall$1 expr_like$macrocall$1 → expr_like$macrocall$1$subexpression$1 ● expr_like$macrocall$2 expr_like$macrocall$1$subexpression$2 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_ilike token based on: ops_like_keywors$subexpression$1 → ● %kw_ilike ops_like_keywors → ops_like_keywors$ebnf$1 ● ops_like_keywors$subexpression$1 ops_like → ● ops_like_keywors expr_like$macrocall$2$macrocall$2 → ● ops_like expr_like$macrocall$2$macrocall$1 → ● expr_like$macrocall$2$macrocall$2 expr_like$macrocall$2 → ● expr_like$macrocall$2$macrocall$1 expr_like$macrocall$1 → expr_like$macrocall$1$subexpression$1 ● expr_like$macrocall$2 expr_like$macrocall$1$subexpression$2 expr_like → ● expr_like$macrocall$1 expr_others$macrocall$4 → ● expr_like expr_others$macrocall$1 → ● expr_others$macrocall$4 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A ops_others token based on: expr_others$macrocall$2$macrocall$2 → ● %ops_others expr_others$macrocall$2$macrocall$1$macrocall$2 → ● expr_others$macrocall$2$macrocall$2 expr_others$macrocall$2$macrocall$1$macrocall$1 → ● expr_others$macrocall$2$macrocall$1$macrocall$2 expr_others$macrocall$2$macrocall$1 → ● expr_others$macrocall$2$macrocall$1$macrocall$1 expr_others$macrocall$2 → ● expr_others$macrocall$2$macrocall$1 expr_others$macrocall$1 → expr_others$macrocall$1$subexpression$1 ● expr_others$macrocall$2 expr_others$macrocall$1$subexpression$2 expr_others → ● expr_others$macrocall$1 expr_range$macrocall$5 → ● expr_others expr_range$macrocall$1 → ● expr_range$macrocall$5 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_not token based on: ops_between$ebnf$1 → ● %kw_not ops_between → ● ops_between$ebnf$1 kw_between expr_range$macrocall$2 → ● ops_between expr_range$macrocall$1 → expr_range$macrocall$1$subexpression$1 ● expr_range$macrocall$2 expr_range$macrocall$1$subexpression$2 expr_range$macrocall$3 expr_range$macrocall$1$subexpression$3 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_is token based on: expr_is → expr_is$subexpression$5 ● %kw_is expr_is$ebnf$1 expr_is$subexpression$6 expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_notnull token based on: expr_is$subexpression$4 → ● %kw_notnull expr_is → expr_is$subexpression$3 ● expr_is$subexpression$4 expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_is token based on: expr_is$subexpression$4 → ● %kw_is kw_not_null expr_is → expr_is$subexpression$3 ● expr_is$subexpression$4 expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_isnull token based on: expr_is$subexpression$2 → ● %kw_isnull expr_is → expr_is$subexpression$1 ● expr_is$subexpression$2 expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_is token based on: expr_is$subexpression$2 → ● %kw_is %kw_null expr_is → expr_is$subexpression$1 ● expr_is$subexpression$2 expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A word token based on: kw_between → ● %word ops_between → ops_between$ebnf$1 ● kw_between expr_range$macrocall$2 → ● ops_between expr_range$macrocall$1 → expr_range$macrocall$1$subexpression$1 ● expr_range$macrocall$2 expr_range$macrocall$1$subexpression$2 expr_range$macrocall$3 expr_range$macrocall$1$subexpression$3 expr_range → ● expr_range$macrocall$1 expr_compare$macrocall$4 → ● expr_range expr_compare$macrocall$1 → ● expr_compare$macrocall$4 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_compare token based on: expr_compare$macrocall$2$macrocall$2 → ● %op_compare expr_compare$macrocall$2$macrocall$1$macrocall$2 → ● expr_compare$macrocall$2$macrocall$2 expr_compare$macrocall$2$macrocall$1$macrocall$1 → ● expr_compare$macrocall$2$macrocall$1$macrocall$2 expr_compare$macrocall$2$macrocall$1 → ● expr_compare$macrocall$2$macrocall$1$macrocall$1 expr_compare$macrocall$2 → ● expr_compare$macrocall$2$macrocall$1 expr_compare$macrocall$1 → expr_compare$macrocall$1$subexpression$1 ● expr_compare$macrocall$2 expr_compare$macrocall$1$subexpression$2 expr_compare → ● expr_compare$macrocall$1 expr_is → ● expr_compare expr_eq$macrocall$4 → ● expr_is expr_eq$macrocall$1 → ● expr_eq$macrocall$4 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_eq token based on: expr_eq$macrocall$2$macrocall$2$subexpression$1 → ● %op_eq expr_eq$macrocall$2$macrocall$2 → ● expr_eq$macrocall$2$macrocall$2$subexpression$1 expr_eq$macrocall$2$macrocall$1$macrocall$2 → ● expr_eq$macrocall$2$macrocall$2 expr_eq$macrocall$2$macrocall$1$macrocall$1 → ● expr_eq$macrocall$2$macrocall$1$macrocall$2 expr_eq$macrocall$2$macrocall$1 → ● expr_eq$macrocall$2$macrocall$1$macrocall$1 expr_eq$macrocall$2 → ● expr_eq$macrocall$2$macrocall$1 expr_eq$macrocall$1 → expr_eq$macrocall$1$subexpression$1 ● expr_eq$macrocall$2 expr_eq$macrocall$1$subexpression$2 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A op_neq token based on: expr_eq$macrocall$2$macrocall$2$subexpression$1 → ● %op_neq expr_eq$macrocall$2$macrocall$2 → ● expr_eq$macrocall$2$macrocall$2$subexpression$1 expr_eq$macrocall$2$macrocall$1$macrocall$2 → ● expr_eq$macrocall$2$macrocall$2 expr_eq$macrocall$2$macrocall$1$macrocall$1 → ● expr_eq$macrocall$2$macrocall$1$macrocall$2 expr_eq$macrocall$2$macrocall$1 → ● expr_eq$macrocall$2$macrocall$1$macrocall$1 expr_eq$macrocall$2 → ● expr_eq$macrocall$2$macrocall$1 expr_eq$macrocall$1 → expr_eq$macrocall$1$subexpression$1 ● expr_eq$macrocall$2 expr_eq$macrocall$1$subexpression$2 expr_eq → ● expr_eq$macrocall$1 expr_not$macrocall$4 → ● expr_eq expr_not$macrocall$1 → ● expr_not$macrocall$4 expr_not → ● expr_not$macrocall$1 expr_and$macrocall$4 → ● expr_not expr_and$macrocall$1 → ● expr_and$macrocall$4 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_and token based on: expr_and$macrocall$2$macrocall$2 → ● %kw_and expr_and$macrocall$2$macrocall$1 → ● expr_and$macrocall$2$macrocall$2 expr_and$macrocall$2 → ● expr_and$macrocall$2$macrocall$1 expr_and$macrocall$1 → expr_and$macrocall$1$subexpression$1 ● expr_and$macrocall$2 expr_and$macrocall$1$subexpression$2 expr_and → ● expr_and$macrocall$1 expr_or$macrocall$4 → ● expr_and expr_or$macrocall$1 → ● expr_or$macrocall$4 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar A kw_or token based on: expr_or$macrocall$2$macrocall$2 → ● %kw_or expr_or$macrocall$2$macrocall$1 → ● expr_or$macrocall$2$macrocall$2 expr_or$macrocall$2 → ● expr_or$macrocall$2$macrocall$1 expr_or$macrocall$1 → expr_or$macrocall$1$subexpression$1 ● expr_or$macrocall$2 expr_or$macrocall$1$subexpression$2 expr_or → ● expr_or$macrocall$1 expr_nostar → ● expr_or expr → ● expr_nostar

  at Parser.feed (node_modules/nearley/lib/nearley.js:343:27)
  at doParse (src/syntax/spec-utils.ts:165:24)
  at /Users/gthb/git/pgsql-ast-parser/src/syntax/spec-utils.ts:182:56
  at tracking (src/lexer.ts:190:16)
  at Context.<anonymous> (src/syntax/spec-utils.ts:182:49)
  at processImmediate (node:internal/timers:476:21)

gthb avatar Aug 08 '23 15:08 gthb