From 7f301852893234421873125908a8e790f0c20421 Mon Sep 17 00:00:00 2001 From: Rochas Date: Sat, 5 Apr 2025 14:24:55 +0200 Subject: [PATCH] ajouter dans LLVM de mul, sdiv et srem (modulo) --- src/main/antlr/.antlr/VSLLexer.java | 2 +- src/main/antlr/.antlr/VSLParser.java | 82 ++++++++++++++++++- .../antlr/.antlr/VSLParserBaseListener.java | 1 - src/main/antlr/.antlr/VSLParserListener.java | 1 - src/main/java/TP2/asd/Program.java | 3 +- src/main/java/TP2/llvm/ProgramLLVM.java | 11 ++- 6 files changed, 93 insertions(+), 7 deletions(-) diff --git a/src/main/antlr/.antlr/VSLLexer.java b/src/main/antlr/.antlr/VSLLexer.java index 7700158..191f1cb 100644 --- a/src/main/antlr/.antlr/VSLLexer.java +++ b/src/main/antlr/.antlr/VSLLexer.java @@ -1,4 +1,4 @@ -// Generated from /home/tuanvu/Desktop/M1/S8/PDS/tp2-vsl-pds/src/main/antlr/VSLLexer.g by ANTLR 4.13.1 +// Generated from c:/Users/Thibaut/Documents/Git/PDS/tp2-vsl-pds/src/main/antlr/VSLLexer.g by ANTLR 4.13.1 package TP2; diff --git a/src/main/antlr/.antlr/VSLParser.java b/src/main/antlr/.antlr/VSLParser.java index 3b19aa0..32d4d39 100644 --- a/src/main/antlr/.antlr/VSLParser.java +++ b/src/main/antlr/.antlr/VSLParser.java @@ -1,4 +1,4 @@ -// Generated from /home/tuanvu/Desktop/M1/S8/PDS/tp2-vsl-pds/src/main/antlr/VSLParser.g by ANTLR 4.13.1 +// Generated from c:/Users/Thibaut/Documents/Git/PDS/tp2-vsl-pds/src/main/antlr/VSLParser.g by ANTLR 4.13.1 package TP2; import TP2.asd.Program.*; @@ -118,6 +118,14 @@ public class VSLParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_program; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).enterProgram(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).exitProgram(this); + } } public final ProgramContext program() throws RecognitionException { @@ -184,6 +192,14 @@ public class VSLParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_function; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).enterFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).exitFunction(this); + } } public final FunctionContext function() throws RecognitionException { @@ -244,6 +260,14 @@ public class VSLParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_prototype; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).enterPrototype(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).exitPrototype(this); + } } public final PrototypeContext prototype() throws RecognitionException { @@ -282,6 +306,14 @@ public class VSLParser extends Parser { this.table = table; } @Override public int getRuleIndex() { return RULE_list_instr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).enterList_instr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).exitList_instr(this); + } } public final List_instrContext list_instr(SymTable table) throws RecognitionException { @@ -339,6 +371,14 @@ public class VSLParser extends Parser { this.table = table; } @Override public int getRuleIndex() { return RULE_instruction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).enterInstruction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).exitInstruction(this); + } } public final InstructionContext instruction(SymTable table) throws RecognitionException { @@ -394,6 +434,14 @@ public class VSLParser extends Parser { this.table = table; } @Override public int getRuleIndex() { return RULE_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).enterExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).exitExpression(this); + } } public final ExpressionContext expression(SymTable table) throws RecognitionException { @@ -491,6 +539,14 @@ public class VSLParser extends Parser { this.table = table; } @Override public int getRuleIndex() { return RULE_td_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).enterTd_expression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).exitTd_expression(this); + } } public final Td_expressionContext td_expression(SymTable table) throws RecognitionException { @@ -576,6 +632,14 @@ public class VSLParser extends Parser { this.table = table; } @Override public int getRuleIndex() { return RULE_lit; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).enterLit(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).exitLit(this); + } } public final LitContext lit(SymTable table) throws RecognitionException { @@ -635,6 +699,14 @@ public class VSLParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_ident; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).enterIdent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).exitIdent(this); + } } public final IdentContext ident() throws RecognitionException { @@ -668,6 +740,14 @@ public class VSLParser extends Parser { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_type; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).enterType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof VSLParserListener ) ((VSLParserListener)listener).exitType(this); + } } public final TypeContext type() throws RecognitionException { diff --git a/src/main/antlr/.antlr/VSLParserBaseListener.java b/src/main/antlr/.antlr/VSLParserBaseListener.java index 1b05a5b..6a12806 100644 --- a/src/main/antlr/.antlr/VSLParserBaseListener.java +++ b/src/main/antlr/.antlr/VSLParserBaseListener.java @@ -4,7 +4,6 @@ import TP2.asd.Program.*; import TP2.asd.*; import TP2.asd.Interface.*; - import TP2.asd.Eval.*; import org.antlr.v4.runtime.ParserRuleContext; diff --git a/src/main/antlr/.antlr/VSLParserListener.java b/src/main/antlr/.antlr/VSLParserListener.java index ab73cf1..51ae6f2 100644 --- a/src/main/antlr/.antlr/VSLParserListener.java +++ b/src/main/antlr/.antlr/VSLParserListener.java @@ -4,7 +4,6 @@ import TP2.asd.Program.*; import TP2.asd.*; import TP2.asd.Interface.*; - import TP2.asd.Eval.*; import org.antlr.v4.runtime.tree.ParseTreeListener; diff --git a/src/main/java/TP2/asd/Program.java b/src/main/java/TP2/asd/Program.java index caee95d..f8ee78d 100644 --- a/src/main/java/TP2/asd/Program.java +++ b/src/main/java/TP2/asd/Program.java @@ -33,8 +33,6 @@ public class Program{ } return new ProgramLLVMImpl(new ArrayList<>(),fonctionLLVM); } - - } @@ -244,6 +242,7 @@ public class Program{ ExprEval exprEval = new ExprEval(); return e.e().accept(exprEval, h); } + @Override public Integer visitAssign(AssignImp e, Map h) { //h.put(e.t(), e.e()); diff --git a/src/main/java/TP2/llvm/ProgramLLVM.java b/src/main/java/TP2/llvm/ProgramLLVM.java index 220244e..03ff2ef 100644 --- a/src/main/java/TP2/llvm/ProgramLLVM.java +++ b/src/main/java/TP2/llvm/ProgramLLVM.java @@ -126,7 +126,16 @@ public class ProgramLLVM { str.append("add "); break; case MINUS: - str.append("minus "); + str.append("sub "); + break; + case TIMES: + str.append("mul "); + break; + case DIV: + str.append("sdiv "); //division signé + break; + case MOD: + str.append("srem "); //modulo signé ( break; default: throw new AssertionError();