fix function

This commit is contained in:
Vu Tuan Minh
2025-04-10 12:04:18 +02:00
parent bc2332037f
commit 2d7f4910ab
2 changed files with 16 additions and 14 deletions

View File

@@ -38,21 +38,23 @@ functions returns [ArrayList<Function> out]
; ;
function returns [Function out]: function returns [Function out]:
FUNCTION t=type i=ident ParO ParF FUNCTION t=type i=ident ParO ParF instr= instruction
BacO
(instrs=list_instr
{
$out=new FunctionImp($t.return_type, $i.out, $instrs.out);
} BacF
| instr= instruction
{ {
$out=new FunctionImp($t.return_type, $i.out, $instr.out); $out=new FunctionImp($t.return_type, $i.out, $instr.out);
} }
) ;
list_decls returns [ArrayList<Declaration> out]
@init{
$out = new ArrayList<>();
}:
(declaration {
$out.add($declaration.out);
})+
; ;
declaration returns [Declaration out]: declaration returns [Declaration out]:
(t=type i=ident t=type i=ident
{ {
ArrayList<String> declare= new ArrayList<String>(); ArrayList<String> declare= new ArrayList<String>();
declare.add($i.out); declare.add($i.out);
@@ -60,7 +62,7 @@ declaration returns [Declaration out]:
{ {
declare.add($i2.out); declare.add($i2.out);
})* })*
{$out = new DeclarationImp($t.return_type, declare);})+ {$out = new DeclarationImp($t.return_type, declare);}
; ;
list_instr returns [ArrayList<Instruction> out] list_instr returns [ArrayList<Instruction> out]
@@ -79,12 +81,12 @@ instruction returns [Instruction out]:
$out =new Return_instrImp($e.out);} $out =new Return_instrImp($e.out);}
| //BLOC | //BLOC
BacO BacO
(dec=declaration instr4=list_instr (dec=list_decls instr4=list_instr
{ {
$out=new BlocDec($dec.out,$insts4.out); $out=new BlocDecImp($dec.out,$insts4.out);
} }
| instr3=list_instr | instr3=list_instr
{ $out= new Bloc($instr3.out); { $out= new BlocImp($instr3.out);
} }
) BacF ) BacF
| //ASSIGN | //ASSIGN

View File

@@ -61,7 +61,7 @@ public class Program{
} }
} }
public static record BlocDecImp(Declaration e, ArrayList<Instruction> l) implements Instruction{ public static record BlocDecImp(ArrayList<Declaration> e, ArrayList<Instruction> l) implements Instruction{
public <H, S> S accept(InstrVisitor<H, S> v, H h) { public <H, S> S accept(InstrVisitor<H, S> v, H h) {
return v.visitBlocDec(this, h); return v.visitBlocDec(this, h);
} }