diff --git a/src/main/antlr/VSLParser.g b/src/main/antlr/VSLParser.g index 9a2ae61..61e0fdb 100644 --- a/src/main/antlr/VSLParser.g +++ b/src/main/antlr/VSLParser.g @@ -93,6 +93,17 @@ instruction returns [Instruction out]: } )* {$out = new PrintImp(printer);} + | //READ + READ i1=ident + { + ArrayList read= new ArrayList(); + read.add($i1.out); + }(VIRGULE i2=ident + { + read.add($i2.out); + })* + {$out = new ReadImp(read);} + ; //Priorité lit(val, const ou paranthese) -> td_exp (*/%) -> exp (+-) diff --git a/src/main/java/TP2/asd/Interface.java b/src/main/java/TP2/asd/Interface.java index ffee595..2a61d9c 100644 --- a/src/main/java/TP2/asd/Interface.java +++ b/src/main/java/TP2/asd/Interface.java @@ -36,6 +36,7 @@ public interface Interface{ public S visitAssign(AssignImp instr, H h); public S visitDeclaration(DeclarationImp instr,H h); public S visitPrint(PrintImp instr, H h); + public S visitRead(ReadImp instr,H h); } diff --git a/src/main/java/TP2/asd/PrettyprinterVisitor.java b/src/main/java/TP2/asd/PrettyprinterVisitor.java index 0ce0ff6..baa6055 100644 --- a/src/main/java/TP2/asd/PrettyprinterVisitor.java +++ b/src/main/java/TP2/asd/PrettyprinterVisitor.java @@ -61,12 +61,24 @@ public class PrettyprinterVisitor implements ProgramVisitor, @Override public String visitPrint(PrintImp instr, String indent) { String str = indent + "PRINT "; - for (String elem: instr.t()){ - str += "\"" +elem +"\""; + for(int i = 0; i t) implements Instruction{ + public static record PrintImp(ArrayList t) implements Instruction{ @Override public S accept(InstrVisitor v, H h) { return v.visitPrint(this, h); } } + public static record ReadImp(ArrayList t) implements Instruction{ + @Override + public S accept(InstrVisitor v, H h) { + return v.visitRead(this, h); + } + } + //Type public static record Type_voidImp() implements Type{ @Override diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index 70e7ccf..7d4ce7a 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -93,10 +93,19 @@ public class toLLVM_Visitor implements ProgramVisitor @Override public ArrayList visitPrint(PrintImp instr, SymTable h) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitPrint'"); + ArrayList l = new ArrayList<>(); + l.add(new PrintLLVMImp(new ArrayList())); //TODO + return l; } + @Override + public ArrayList visitRead(ReadImp instr, SymTable h) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitRead'"); + } + + //EXPRESSION + @Override public InstrAndVal visitConst(ConstImp e, SymTable h) { ValLLVM val = new ValLLVMImpl(new IntLLVMImpl(),e.c()); diff --git a/src/main/java/TP2/llvm/Interface.java b/src/main/java/TP2/llvm/Interface.java index fb78361..0d9dfe5 100644 --- a/src/main/java/TP2/llvm/Interface.java +++ b/src/main/java/TP2/llvm/Interface.java @@ -29,6 +29,8 @@ public interface Interface { public S visitReturnLLVM(ReturnLLVMImp instr, H h); public S visitAssignLLVM(AssignLVMImp instr, H h); public S visitStoreLLVM(StoreLLVMImp instr, H h); + public S visitPrintLLVM(PrintLLVMImp instr, H h); + public S visitReadLLVM(ReadLLVMImp instr, H h); } //////////ExpressionLLVM (expression) diff --git a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java index 713df61..0c1b56b 100644 --- a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java +++ b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java @@ -100,6 +100,17 @@ TypeLLVMVisitor return "load" + " i" + e.nbBits() + ", i"+ e.nbBits2() + "* %" + e.val().accept(this, h); } + @Override + public String visitPrintLLVM(PrintLLVMImp instr, String h) { + return INDENT+"print"; + } + + @Override + public String visitReadLLVM(ReadLLVMImp instr, String h) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitReadLLVM'"); + } + @Override public String visitValLLVM(ValLLVMImpl e, String h) { return e.val() + ""; @@ -121,4 +132,5 @@ TypeLLVMVisitor } + } diff --git a/src/main/java/TP2/llvm/ProgramLLVM.java b/src/main/java/TP2/llvm/ProgramLLVM.java index 65db65c..82c44e9 100644 --- a/src/main/java/TP2/llvm/ProgramLLVM.java +++ b/src/main/java/TP2/llvm/ProgramLLVM.java @@ -61,6 +61,21 @@ public class ProgramLLVM { } } + public static record PrintLLVMImp(ArrayList l) implements InstructionLLVM{ + @Override + public S accept(InstructionLLVMVisitor v, H h) { + return v.visitPrintLLVM(this, h); + } + } + + public static record ReadLLVMImp(ArrayList l) implements InstructionLLVM{ + + @Override + public S accept(InstructionLLVMVisitor v, H h) { + return v.visitReadLLVM(this, h); + } + + } //Expression : public static record BinOpLLVMImp(TypeLLVM type,Op op, ValLLVM val1,ValLLVM val2) implements ExpressionLLVM{