ajouter dans LLVM de mul, sdiv et srem (modulo)

This commit is contained in:
Rochas
2025-04-05 14:24:55 +02:00
parent 56df584b9f
commit 7f30185289
6 changed files with 93 additions and 7 deletions

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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<String, Integer> h) {
//h.put(e.t(), e.e());

View File

@@ -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();