precedence
This commit is contained in:
parent
712c903849
commit
7fecbd04b3
1 changed files with 34 additions and 5 deletions
39
src/parser.y
39
src/parser.y
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue