precedence

This commit is contained in:
bronku 2025-11-25 18:16:45 +01:00
parent 712c903849
commit 7fecbd04b3

View file

@ -24,12 +24,41 @@
%parse-param { Scanner* scanner } %parse-param { Scanner* scanner }
%token <std::string> IDENTIFIER // ---------------------- Semantic tokens ----------------------
%token <std::string> STRING %token <std::string> IDENTIFIER STRING
%token <int> NUMBER %token <int> NUMBER
%token ASSIGN PLUS MINUS L_PAREN R_PAREN COLON EQ NE LT GT LTE GTE MULTIPLY DIVIDE MODULO L_BRACKET L_BRACE R_BRACKET R_BRACE DOT SEMICOLON COMMA BIT_NOT BIT_AND BIT_OR BIT_XOR LSHIFT RSHIFT PLUS_ASSIGN MINUS_ASSIGN MULTIPLY_ASSIGN DIVIDE_ASSIGN MODULO_ASSIGN BIT_AND_ASSIGN BIT_OR_ASSIGN BIT_XOR_ASSIGN LSHIFT_ASSIGN RSHIFT_ASSIGN
%token KW_DEF KW_IF KW_RETURN KW_FOR KW_IN KW_NOT KW_AND KW_OR KW_PASS KW_ELSE KW_ELIF KW_CLASS // ---------------------- Keywords ----------------------
%token EOF NEWLINE INDENT DEDENT %left KW_OR
%left KW_AND
%right KW_NOT // unary logical NOT
%token KW_DEF KW_IF KW_RETURN KW_FOR KW_IN KW_PASS KW_ELSE KW_ELIF KW_CLASS
// ---------------------- Structure / punctuation ----------------------
%token L_PAREN R_PAREN L_BRACKET R_BRACKET L_BRACE R_BRACE
%token DOT COLON SEMICOLON COMMA
%token INDENT DEDENT NEWLINE EOF
// ---------------------- Operators ----------------------
// Bitwise
%left BIT_OR
%left BIT_XOR
%left BIT_AND
%left LSHIFT RSHIFT
%token BIT_NOT
// Comparison
%nonassoc EQ NE LT LTE GT GTE
// Arithmetic
%left PLUS MINUS
%left MULTIPLY DIVIDE MODULO
%right UMINUS // unary minus
// Assignment (right-associative)
%right ASSIGN PLUS_ASSIGN MINUS_ASSIGN MULTIPLY_ASSIGN DIVIDE_ASSIGN MODULO_ASSIGN
%right BIT_AND_ASSIGN BIT_OR_ASSIGN BIT_XOR_ASSIGN LSHIFT_ASSIGN RSHIFT_ASSIGN
%% %%