diff --git a/src/main/antlr/VSLParser.g b/src/main/antlr/VSLParser.g index 3559c02..66ff1bb 100644 --- a/src/main/antlr/VSLParser.g +++ b/src/main/antlr/VSLParser.g @@ -69,19 +69,22 @@ instruction [SymTable table] returns [Instruction out]: $out =new Return_instrImp($e.out);} //| //ASSIGN //i=ident ASSIGN e=expression [table] - // { + //{ // $out = new AssignImp($i.out, $e.out); - // } + //} | //DECLARATION t=type i=ident + { - $table.addVar($i.out,$t.return_type); - $out = new DeclarationImp($t.return_type, $i.out); + ArrayList declare= new ArrayList(); + declare.add($i.out); + $table.addVar($i.out,$t.return_type); }(VIRGULE i2=ident { $table.addVar($i2.out,$t.return_type); - $out = new DeclarationImp($t.return_type, $i2.out); + declare.add($i2.out); })* + {$out = new DeclarationImp($t.return_type, declare);} ; //Priorité lit(val, const ou paranthese) -> td_exp (*/%) -> exp (+-) @@ -137,6 +140,12 @@ lit [SymTable table] returns [Expression out, Type return_Type]: $out=$e.out; $return_Type=$e.return_Type; } + // | t=ident{ + // if($table.searchVar($t.out)){ + // $out=$t.out; + // $return_Type=$table.getvar_Type($t.out); + // } + // } ; ident returns [String out]: diff --git a/src/main/java/TP2/Error/TypeChecking.java b/src/main/java/TP2/Error/TypeChecking.java new file mode 100644 index 0000000..7015a32 --- /dev/null +++ b/src/main/java/TP2/Error/TypeChecking.java @@ -0,0 +1,5 @@ +package TP2.Error; + +public class TypeChecking { + +} diff --git a/src/main/java/TP2/asd/Interface.java b/src/main/java/TP2/asd/Interface.java index 6a65645..f2e28dd 100644 --- a/src/main/java/TP2/asd/Interface.java +++ b/src/main/java/TP2/asd/Interface.java @@ -59,6 +59,7 @@ public interface Interface{ public interface ExprVisitor { public S visitConst(ConstImp e,H h); public S visitBinOp(BinopExpressionImp e, H h); + //public S visitVal(ValImp e,H h); } public interface Type{ diff --git a/src/main/java/TP2/asd/Program.java b/src/main/java/TP2/asd/Program.java index be1845a..d573f2f 100644 --- a/src/main/java/TP2/asd/Program.java +++ b/src/main/java/TP2/asd/Program.java @@ -169,8 +169,7 @@ public class Program{ @Override public String prettyprinter(String indent) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'prettyprinter'"); + return t+ " :=" + e.toString(); } @Override @@ -184,7 +183,7 @@ public class Program{ } } - public static record DeclarationImp(Type t, String s) implements Instruction{ + public static record DeclarationImp(Type t, ArrayList s) implements Instruction{ @Override public S accept(InstrVisitor v, H h) { @@ -193,17 +192,21 @@ public class Program{ @Override public String prettyprinter(String indent) { - return "declare "+t.toString()+s; + String str = indent + "declare "+t.prettyprinter() + " "; + for(int i = 0; i toLLVM() { // TODO Auto-generated method stub throw new UnsupportedOperationException("Unimplemented method 'toLLVM'"); - } - + } } + //Type public static record Type_voidImp() implements Type{ public String prettyprinter() { return "VOID"; @@ -264,9 +267,7 @@ public class Program{ } @Override public Integer visitAssign(AssignImp e, Map h) { - //h.put(e.t(), e.e()); - //TODO - return 1; + return e.accept(this, h); } @Override public Integer visitDeclaration(DeclarationImp e, Map h) { diff --git a/src/main/java/TP2/asd/SymTable.java b/src/main/java/TP2/asd/SymTable.java index 9ac003f..2fb71cc 100644 --- a/src/main/java/TP2/asd/SymTable.java +++ b/src/main/java/TP2/asd/SymTable.java @@ -46,6 +46,15 @@ public class SymTable { return false; } + public Type getvar_Type(String s){ + for(int i= stackMap.size()-1; i>=0; i--){ + if(stackMap.get(i).containsKey(s)){ + return stackMap.get(i).get(s); + } + } + return null; + } + public String print_all(){ StringBuilder str = new StringBuilder(); for(int i= stackMap.size()-1; i>=0; i--){ diff --git a/tests/aLaMain.vsl b/tests/aLaMain.vsl index ea5d850..ed17c4c 100644 --- a/tests/aLaMain.vsl +++ b/tests/aLaMain.vsl @@ -1,3 +1,3 @@ FUNC INT main() { - INT a + INT a,b,c RETURN 4 + 6 * 5 + 3 } \ No newline at end of file