From 0959b54aa819f6938a577036cc05555cc7454517 Mon Sep 17 00:00:00 2001
From: Youssef <youssef.sellami@student-cs.fr>
Date: Sun, 16 Mar 2025 21:47:29 +0100
Subject: [PATCH] Grammar correction

---
 expr_grammar_action.g | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/expr_grammar_action.g b/expr_grammar_action.g
index b871578..5ab84b3 100644
--- a/expr_grammar_action.g
+++ b/expr_grammar_action.g
@@ -11,7 +11,7 @@ non-terminals MUL_EXPRS MUL_EXPR
 non-terminals CMP_EXPRS CMP_EXPR
 non-terminals EQ_EXPRS EQ_EXPR
 
-non-terminals AFTER_IDENTIFIER LARGS REST_ARGS
+non-terminals AFTER_IDENTIFIER_INSTR AFTER_IDENTIFIER_FACTOR LARGS REST_ARGS
 
 axiom S
 {
@@ -44,12 +44,12 @@ FUNDEF -> IDENTIFIER SYM_LPARENTHESIS LPARAMS SYM_RPARENTHESIS INSTR { Node(Tfun
 
 LPARAMS -> IDENTIFIER REST_PARAMS { Node(Targ, [$1])::$2 }
 LPARAMS -> { [] }
-REST_PARAMS -> SYM_COMMA LPARAMS { $2 }
+REST_PARAMS -> SYM_COMMA IDENTIFIER REST_PARAMS { Node(Targ, [$2])::$3 }
 REST_PARAMS -> { [] }
 
 LARGS -> EXPR REST_ARGS { $1::$2 }
 LARGS -> { [] }
-REST_ARGS -> SYM_COMMA LARGS { $2 }
+REST_ARGS -> SYM_COMMA EXPR REST_ARGS { $2::$3 }
 REST_ARGS -> { [] }
 
 LINSTRS -> INSTR INSTRS { Node(Tblock, $1::$2) }
@@ -61,7 +61,7 @@ INSTR -> SYM_IF SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS SYM_LBRACE LINSTRS SYM_RB
 INSTR -> SYM_WHILE SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS INSTR { Node(Twhile, [$3; $5]) }
 INSTR -> SYM_RETURN EXPR SYM_SEMICOLON { Node(Treturn, [$2]) }
 INSTR -> SYM_PRINT SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS SYM_SEMICOLON { Node(Tprint, [$3]) }
-INSTR -> IDENTIFIER AFTER_IDENTIFIER SYM_SEMICOLON { 
+INSTR -> IDENTIFIER AFTER_IDENTIFIER_INSTR SYM_SEMICOLON { 
   match $2 with
   | Assign exp -> Node(Tassign, [$1; exp]) 
   | Funcall args -> Node(Tcall, [$1; Node(Targs, args)]) 
@@ -69,9 +69,8 @@ INSTR -> IDENTIFIER AFTER_IDENTIFIER SYM_SEMICOLON {
 }
 INSTR -> SYM_LBRACE LINSTRS SYM_RBRACE { $2 }
 
-AFTER_IDENTIFIER -> SYM_ASSIGN EXPR { Assign $2 }
-AFTER_IDENTIFIER -> SYM_LPARENTHESIS LARGS SYM_RPARENTHESIS { Funcall $2 }
-AFTER_IDENTIFIER -> { Nothing }
+AFTER_IDENTIFIER_INSTR -> SYM_ASSIGN EXPR { Assign $2 }
+AFTER_IDENTIFIER_INSTR -> SYM_LPARENTHESIS LARGS SYM_RPARENTHESIS { Funcall $2 }
 
 ELSE -> SYM_ELSE SYM_LBRACE LINSTRS SYM_RBRACE { $3 }
 ELSE -> { NullLeaf }
@@ -104,7 +103,7 @@ MUL_EXPRS -> SYM_MOD MUL_EXPR MUL_EXPRS { (Tmod, $2)::$3 }
 MUL_EXPRS -> { [] }
 
 FACTOR -> INTEGER { $1 }
-FACTOR -> IDENTIFIER AFTER_IDENTIFIER { 
+FACTOR -> IDENTIFIER AFTER_IDENTIFIER_FACTOR { 
   match $2 with
   | Funcall args -> Node(Tcall, [$1; Node(Targs, args)])
   | Nothing -> $1
@@ -114,3 +113,6 @@ FACTOR -> SYM_LPARENTHESIS EXPR SYM_RPARENTHESIS { $2 }
 
 IDENTIFIER -> SYM_IDENTIFIER {StringLeaf $1}
 INTEGER -> SYM_INTEGER {IntLeaf $1}
+
+AFTER_IDENTIFIER_FACTOR -> { Nothing }
+AFTER_IDENTIFIER_FACTOR -> SYM_LPARENTHESIS LARGS SYM_RPARENTHESIS { Funcall $2 }
-- 
GitLab