diff --git a/src/main/antlr/VSLParser.g b/src/main/antlr/VSLParser.g index d384ac1..18384b6 100644 --- a/src/main/antlr/VSLParser.g +++ b/src/main/antlr/VSLParser.g @@ -39,11 +39,11 @@ functions returns [ArrayList out] function returns [Function out]: FUNCTION t=type i=ident ParO ParF - ( - BacO instrs=list_instr BacF + 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); @@ -51,6 +51,18 @@ function returns [Function out]: ) ; +declaration returns [Declaration out]: + (t=type i=ident + { + ArrayList declare= new ArrayList(); + declare.add($i.out); + }(VIRGULE i2=ident + { + declare.add($i2.out); + })* + {$out = new DeclarationImp($t.return_type, declare);})+ + ; + list_instr returns [ArrayList out] @init{ $out = new ArrayList<>(); @@ -65,21 +77,21 @@ instruction returns [Instruction out]: RETURN e=expression { $out =new Return_instrImp($e.out);} + | //BLOC + BacO + (dec=declaration instr4=list_instr + { + $out=new BlocDec($dec.out,$insts4.out); + } + | instr3=list_instr + { $out= new Bloc($instr3.out); + } + ) BacF | //ASSIGN i=ident ASSIGN e=expression { $out = new AssignImp($i.out, $e.out); } - | //DECLARATION - t=type i=ident - { - ArrayList declare= new ArrayList(); - declare.add($i.out); - }(VIRGULE i2=ident - { - declare.add($i2.out); - })* - {$out = new DeclarationImp($t.return_type, declare);} | // PRINT PRINT {ArrayList printer= new ArrayList();} diff --git a/src/main/java/TP2/asd/Interface.java b/src/main/java/TP2/asd/Interface.java index 9b3f042..90b71c6 100644 --- a/src/main/java/TP2/asd/Interface.java +++ b/src/main/java/TP2/asd/Interface.java @@ -32,6 +32,8 @@ public interface Interface{ public interface InstrVisitor{ public S visitReturn(Return_instrImp instr, H h); + public S visitBloc(BlocImp instr, H h); + public S visitBlocDec (BlocDecImp instr, H h); public S visitAssign(AssignImp instr, H h); public S visitDeclaration(DeclarationImp instr,H h); public S visitPrint(PrintImp instr, H h); diff --git a/src/main/java/TP2/asd/PrettyprinterVisitor.java b/src/main/java/TP2/asd/PrettyprinterVisitor.java index a59a3d2..0414862 100644 --- a/src/main/java/TP2/asd/PrettyprinterVisitor.java +++ b/src/main/java/TP2/asd/PrettyprinterVisitor.java @@ -43,6 +43,18 @@ public class PrettyprinterVisitor implements ProgramVisitor, return indent+"RETURN " + instr.e().accept(this,""); } + @Override + public String visitBloc(BlocImp instr, String h) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitBloc'"); + } + + @Override + public String visitBlocDec(BlocDecImp instr, String h) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitBlocDec'"); + } + @Override public String visitAssign(AssignImp instr, String indent) { return indent + instr.t()+ " := " + instr.e().accept(this,""); diff --git a/src/main/java/TP2/asd/Program.java b/src/main/java/TP2/asd/Program.java index 3ee9477..a1a171e 100644 --- a/src/main/java/TP2/asd/Program.java +++ b/src/main/java/TP2/asd/Program.java @@ -61,6 +61,18 @@ public class Program{ } } + public static record BlocDecImp(Declaration e, ArrayList l) implements Instruction{ + public S accept(InstrVisitor v, H h) { + return v.visitBlocDec(this, h); + } + } + + public static record BlocImp(ArrayList l) implements Instruction{ + public S accept(InstrVisitor v, H h) { + return v.visitBloc(this, h); + } + } + public static record AssignImp(String t, Expression e) implements Instruction{ public S accept(InstrVisitor v, H h) { return v.visitAssign(this, h); diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index 3feae62..c5635bd 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -68,6 +68,18 @@ public class toLLVM_Visitor implements ProgramVisitor return result; } + @Override + public ArrayList visitBloc(BlocImp instr, SymTable h) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitBloc'"); + } + + @Override + public ArrayList visitBlocDec(BlocDecImp instr, SymTable h) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitBlocDec'"); + } + @Override public ArrayList visitAssign(AssignImp instr, SymTable h) { InstrAndVal res = instr.e().accept(this,h);