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