diff --git a/src/main/antlr/VSLLexer.g b/src/main/antlr/VSLLexer.g index c636717..e4716b8 100644 --- a/src/main/antlr/VSLLexer.g +++ b/src/main/antlr/VSLLexer.g @@ -38,7 +38,7 @@ PRINT : 'PRINT' ; RETURN: 'RETURN' ; -TEXT : '"' (ASCII)+ '"' +TEXT : '"' (ASCII)+ '"' ; NUMBER : (DIGIT)+ ; diff --git a/src/main/antlr/VSLParser.g b/src/main/antlr/VSLParser.g index 1331016..8dace01 100644 --- a/src/main/antlr/VSLParser.g +++ b/src/main/antlr/VSLParser.g @@ -72,7 +72,6 @@ instruction returns [Instruction out]: } | //DECLARATION t=type i=ident - { ArrayList declare= new ArrayList(); declare.add($i.out); @@ -81,6 +80,12 @@ instruction returns [Instruction out]: declare.add($i2.out); })* {$out = new DeclarationImp($t.return_type, declare);} + | // PRINT + PRINT TEXT + { + String text= $TEXT.getText(); + $out = new PrintImp(text.substring(1,text.length()-1)); + } ; //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 1fe5261..ffee595 100644 --- a/src/main/java/TP2/asd/Interface.java +++ b/src/main/java/TP2/asd/Interface.java @@ -35,6 +35,7 @@ public interface Interface{ public S visitReturn(Return_instrImp 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 ed2ab3b..aec2402 100644 --- a/src/main/java/TP2/asd/PrettyprinterVisitor.java +++ b/src/main/java/TP2/asd/PrettyprinterVisitor.java @@ -58,6 +58,11 @@ public class PrettyprinterVisitor implements ProgramVisitor, return str; } + @Override + public String visitPrint(PrintImp instr, String indent) { + return indent+ "PRINT \""+instr.t() +"\""; + } + //EXPRESSION @Override diff --git a/src/main/java/TP2/asd/Program.java b/src/main/java/TP2/asd/Program.java index f1941a2..013000e 100644 --- a/src/main/java/TP2/asd/Program.java +++ b/src/main/java/TP2/asd/Program.java @@ -5,7 +5,7 @@ import TP2.asd.Interface.*; import TP2.llvm.ProgramLLVM.*; public class Program{ - + //Prog public static record ProgramImp(ArrayList fonctions) implements ProgramI{ public S accept(ProgramVisitor v, H h) { return v.visitProgram(this, h); @@ -23,7 +23,7 @@ public class Program{ } } - + //Fonction public static record FunctionImp(Type type, String nom, ArrayList instructions)implements Function { public FunctionImp(Type type, String name, Instruction instruction) { this(type, name, new ArrayList<>() {{ add(instruction); }}); @@ -34,14 +34,13 @@ public class Program{ } } - + //Expression public static record ConstImp(int c) implements Expression{ public S accept(ExprVisitor v, H h) { return v.visitConst(this, h); } } - public static record BinopExpressionImp(Op op,Expression e1, Expression e2) implements Expression{ public S accept(ExprVisitor v, H h) { return v.visitBinOp(this, h); @@ -54,15 +53,13 @@ public class Program{ } } - + //Instructions public static record Return_instrImp(Expression e) implements Instruction{ public S accept(InstrVisitor v, H h) { return v.visitReturn(this,h); } - } - public static record AssignImp(String t, Expression e) implements Instruction{ public S accept(InstrVisitor v, H h) { return v.visitAssign(this, h); @@ -76,6 +73,13 @@ public class Program{ } } + public static record PrintImp(String t) implements Instruction{ + @Override + public S accept(InstrVisitor v, H h) { + return v.visitPrint(this, h); + } + } + //Type public static record Type_voidImp() implements Type{ @Override diff --git a/src/main/java/TP2/asd/test_symtable.java b/src/main/java/TP2/asd/test_symtable.java index 5c8d9bb..8e20266 100644 --- a/src/main/java/TP2/asd/test_symtable.java +++ b/src/main/java/TP2/asd/test_symtable.java @@ -11,5 +11,7 @@ public class test_symtable{ //test_symTable.peppapeek(); test_symTable.addVar("a", Type_intImp); System.out.print(test_symTable.print_all()); + String a =" addsqdqsdqs"; + a.substring(1, a.length()-1); } } \ No newline at end of file diff --git a/src/main/java/TP2/asd/toLLVM_Visitor.java b/src/main/java/TP2/asd/toLLVM_Visitor.java index 0f9060c..bcafaa8 100644 --- a/src/main/java/TP2/asd/toLLVM_Visitor.java +++ b/src/main/java/TP2/asd/toLLVM_Visitor.java @@ -91,6 +91,12 @@ public class toLLVM_Visitor implements ProgramVisitor return list; } + @Override + public ArrayList visitPrint(PrintImp instr, SymTable h) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitPrint'"); + } + @Override public InstrOrVal visitConst(ConstImp e, SymTable h) { ValLLVM val = new ValLLVMImpl(new IntLLVMImpl(),e.c()); diff --git a/tests/aLaMain.vsl b/tests/aLaMain.vsl index 1a2790c..43130d4 100644 --- a/tests/aLaMain.vsl +++ b/tests/aLaMain.vsl @@ -2,5 +2,5 @@ FUNC INT main() { INT a,b,c b:=3 c:=1 - a := b+c + PRINT "coucou, tu peux réparer le visitPrint dans LLVM stp" RETURN 4 + 6 * 5 + 2 } \ No newline at end of file