From 4ef2a77b900f5aa9921395390983c2b64264c3bb Mon Sep 17 00:00:00 2001 From: Santiago Lo Coco Date: Tue, 19 Apr 2022 13:16:58 -0300 Subject: [PATCH] Add precedence directive Co-authored-by: Ezequiel Bellver Co-authored-by: Juan Barmasch --- src/frontend/syntactic-analysis/bison-grammar.y | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/frontend/syntactic-analysis/bison-grammar.y b/src/frontend/syntactic-analysis/bison-grammar.y index d36e898..372490d 100644 --- a/src/frontend/syntactic-analysis/bison-grammar.y +++ b/src/frontend/syntactic-analysis/bison-grammar.y @@ -61,6 +61,10 @@ %token STRING // Reglas de asociatividad y precedencia (de menor a mayor): + +%precedence CLOSE_PARENTHESIS +%precedence ELSE + %left GREATER GREATER_EQUAL LESSER LESSER_EQUAL EQUAL NOT_EQUAL %left ADD SUB NOT %left MUL DIV AND OR @@ -213,16 +217,16 @@ derivative: DERIVATIVE STRING IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS | derivative ERR positive_constant ; -if_statement: IF OPEN_PARENTHESIS boolean CLOSE_PARENTHESIS OPEN_BRACKETS statements CLOSE_BRACKETS - | IF OPEN_PARENTHESIS boolean CLOSE_PARENTHESIS statement +if_statement: IF OPEN_PARENTHESIS boolean CLOSE_PARENTHESIS statement + | IF OPEN_PARENTHESIS boolean CLOSE_PARENTHESIS OPEN_BRACKETS statements CLOSE_BRACKETS ; -ifelse_statement: if_statement ELSE OPEN_BRACKETS statements CLOSE_BRACKETS - | ELSE statement +ifelse_statement: if_statement ELSE statement + | if_statement ELSE OPEN_BRACKETS statements CLOSE_BRACKETS ; -for_statement: FOR OPEN_PARENTHESIS declare_variable SEMICOLON boolean SEMICOLON assign_variable CLOSE_PARENTHESIS OPEN_BRACKETS statements CLOSE_BRACKETS - | FOR OPEN_PARENTHESIS SEMICOLON boolean SEMICOLON assign_variable CLOSE_PARENTHESIS OPEN_BRACKETS statements CLOSE_BRACKETS +for_statement: FOR OPEN_PARENTHESIS declare_variable SEMICOLON boolean SEMICOLON assign_variable CLOSE_PARENTHESIS OPEN_BRACES statements CLOSE_BRACES + | FOR OPEN_PARENTHESIS SEMICOLON boolean SEMICOLON assign_variable CLOSE_PARENTHESIS OPEN_BRACES statements CLOSE_BRACES | FOR OPEN_PARENTHESIS declare_variable SEMICOLON boolean SEMICOLON assign_variable CLOSE_PARENTHESIS statement | FOR OPEN_PARENTHESIS SEMICOLON boolean SEMICOLON assign_variable CLOSE_PARENTHESIS statement ;