From 7fecbd04b3598d7495e0769451a6b9a2eef94910 Mon Sep 17 00:00:00 2001 From: bronku Date: Tue, 25 Nov 2025 18:16:45 +0100 Subject: [PATCH] precedence --- src/parser.y | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/src/parser.y b/src/parser.y index f2f836e..cfcb691 100644 --- a/src/parser.y +++ b/src/parser.y @@ -24,12 +24,41 @@ %parse-param { Scanner* scanner } -%token IDENTIFIER -%token STRING +// ---------------------- Semantic tokens ---------------------- +%token IDENTIFIER STRING %token 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 -%token EOF NEWLINE INDENT DEDENT + +// ---------------------- Keywords ---------------------- +%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 + %%