diff --git a/src/sa.cfg b/src/sa.cfg index 60ff9b85148f3e6fe9b397212b275494b2853a94..142f147ef573426ca3fdf63fe0888335c6f46510 100644 --- a/src/sa.cfg +++ b/src/sa.cfg @@ -30,12 +30,14 @@ saexpinf = 'SaExpInf'; saexpint = 'SaExpInt'; saexplire = 'SaExpLire'; saexpmult = 'SaExpMult'; +saexpmodulo = 'SaExpModulo'; saexpnot = 'SaExpNot'; saexpor = 'SaExpOr'; saexpsub = 'SaExpSub'; saexpvar = 'SaExpVar'; saexpvrai = 'SaExpVrai'; sainstaffect = 'SaInstAffect'; +saincr= 'SaIncr'; sainstbloc = 'SaInstBloc'; sainstecriture = 'SaInstEcriture'; sainstretour = 'SaInstRetour'; @@ -73,6 +75,7 @@ exp = {add} po saexpadd [op1]:exp [op2]:exp pf | {equal} po saexpequal [op1]:exp [op2]:exp pf | {inf} po saexpinf [op1]:exp [op2]:exp pf | {mult} po saexpmult [op1]:exp [op2]:exp pf + | {modulo} po saexpmodulo [op1]:exp [op2]:exp pf | {or} po saexpor [op1]:exp [op2]:exp pf | {sub} po saexpsub [op1]:exp [op2]:exp pf | {not} po saexpnot exp pf @@ -85,6 +88,7 @@ exp = {add} po saexpadd [op1]:exp [op2]:exp pf ; inst = {affect} po sainstaffect var exp pf + | {incr} po saincr var exp pf | {bloc} po sainstbloc linst pf | {ecriture} po sainstecriture exp pf | {retour} po sainstretour exp pf diff --git a/src/sa/LoadSa.java b/src/sa/LoadSa.java index 209de9c85c26193b813e1b9c8c4cdc4c544cf142..758a85184eeb8e9f242cdf15826a30c815e9de80 100644 --- a/src/sa/LoadSa.java +++ b/src/sa/LoadSa.java @@ -159,7 +159,20 @@ public class LoadSa extends DepthFirstAdapter { outAMultExp(node); } -// exp = {or} po saexpor [op1]:exp [op2]:exp pf + @Override + public void caseAModuloExp(AModuloExp node) + { + inAModuloExp(node); + node.getOp1().apply(this); + SaExp op1 = (SaExp) returnValue; + node.getOp2().apply(this); + SaExp op2 = (SaExp) returnValue; + returnValue = new SaExpModulo(op1,op2); + outAModuloExp(node); + } + + + // exp = {or} po saexpor [op1]:exp [op2]:exp pf @Override public void caseAOrExp(AOrExp node) { @@ -267,6 +280,20 @@ public class LoadSa extends DepthFirstAdapter { outAAffectInst(node); } + @Override + public void caseAIncrInst(AIncrInst node) + { + inAIncrInst(node); + node.getVar().apply(this); + SaVar var = (SaVar) returnValue; + node.getExp().apply(this); + SaExp exp = (SaExp) returnValue; + returnValue = new SaIncr(var, exp); + outAIncrInst(node); + } + + + // inst = {bloc} po sainstbloc linst pf @Override public void caseABlocInst(ABlocInst node) diff --git a/src/sa/SaDepthFirstVisitor.java b/src/sa/SaDepthFirstVisitor.java index 54796e8b2f557306d03078f5d1afe42674a77595..fb9886cc64e78b70ef68020bed19b0e434fd5684 100644 --- a/src/sa/SaDepthFirstVisitor.java +++ b/src/sa/SaDepthFirstVisitor.java @@ -186,6 +186,15 @@ public class SaDepthFirstVisitor <T> implements SaVisitor <T>{ defaultOut(node); return null; } + + public T visit(SaIncr node) throws Exception + { + defaultIn(node); + node.getLhs().accept(this); + node.getRhs().accept(this); + defaultOut(node); + return null; + } // LDEC -> DEC LDEC // LDEC -> null @@ -260,16 +269,25 @@ public class SaDepthFirstVisitor <T> implements SaVisitor <T>{ } // EXP -> mult EXP EXP - public T visit(SaExpMult node) throws Exception - { - defaultIn(node); - node.getOp1().accept(this); - node.getOp2().accept(this); - defaultOut(node); - return null; - } + public T visit(SaExpMult node) throws Exception + { + defaultIn(node); + node.getOp1().accept(this); + node.getOp2().accept(this); + defaultOut(node); + return null; + } - // EXP -> div EXP EXP + public T visit(SaExpModulo node) throws Exception + { + defaultIn(node); + node.getOp1().accept(this); + node.getOp2().accept(this); + defaultOut(node); + return null; + } + + // EXP -> div EXP EXP public T visit(SaExpDiv node) throws Exception { defaultIn(node); @@ -340,10 +358,7 @@ public class SaDepthFirstVisitor <T> implements SaVisitor <T>{ public T visit(SaInstBloc node) throws Exception { defaultIn(node); - if ( node.getVal() != null ) - { - node.getVal().accept(this); - } + node.getVal().accept(this); defaultOut(node); return null; } diff --git a/src/sa/SaEval.java b/src/sa/SaEval.java index afa7375e317144414ff5a0de4679741529683c3a..8bba44f7aed8331ffa50dd00a04fa3a375b01d63 100644 --- a/src/sa/SaEval.java +++ b/src/sa/SaEval.java @@ -23,9 +23,7 @@ public class SaEval extends SaDepthFirstVisitor <TypeVal> { try{ appelMain.accept(this); - } catch(Exception e){ - e.printStackTrace(); - } + } catch(Exception e){} } public TypeVal getVar(SaVarSimple saVar){ @@ -232,9 +230,9 @@ public class SaEval extends SaDepthFirstVisitor <TypeVal> { defaultOut(node); return null; } - - public TypeVal visit(SaInstAffect node) throws Exception - { + + public TypeVal visit(SaInstAffect node) throws Exception + { defaultIn(node); TypeVal typeVal = node.getRhs().accept(this); if(node.getLhs() instanceof SaVarIndicee){ // c'est une case de tableau, donc forcément globale @@ -247,9 +245,24 @@ public class SaEval extends SaDepthFirstVisitor <TypeVal> { defaultOut(node); return null; - } - - // LDEC -> DEC LDEC + } + public TypeVal visit(SaIncr node) throws Exception + { + defaultIn(node); + TypeVal incr = node.getRhs().accept(this); + + if(node.getLhs() instanceof SaVarIndicee){ // c'est une case de tableau, donc forcément globale + SaVarIndicee lhsIndicee = (SaVarIndicee) node.getLhs(); + TypeVal indice = lhsIndicee.getIndice().accept(this); + setVarGlobIndicee(lhsIndicee, indice, new TypeVal(getVarGlobIndicee(lhsIndicee, indice).valInt + incr.valInt)); + } else{ + setVar((SaVarSimple) node.getLhs(), new TypeVal(getVar((SaVarSimple) node.getLhs()).valInt + incr.valInt)); + } + defaultOut(node); + return null; + } + + // LDEC -> DEC LDEC // LDEC -> null /* public TypeVal visit(SaLDec node) throws Exception { @@ -335,16 +348,25 @@ public class SaEval extends SaDepthFirstVisitor <TypeVal> { } // EXP -> mult EXP EXP - public TypeVal visit(SaExpMult node) throws Exception - { + public TypeVal visit(SaExpMult node) throws Exception + { defaultIn(node); TypeVal op1 = node.getOp1().accept(this); TypeVal op2 = node.getOp2().accept(this); defaultOut(node); return new TypeVal(op1.valInt * op2.valInt); - } + } + + public TypeVal visit(SaExpModulo node) throws Exception + { + defaultIn(node); + TypeVal op1 = node.getOp1().accept(this); + TypeVal op2 = node.getOp2().accept(this); + defaultOut(node); + return new TypeVal(op1.valInt % op2.valInt); + } - // EXP -> div EXP EXP + // EXP -> div EXP EXP public TypeVal visit(SaExpDiv node) throws Exception { defaultIn(node); diff --git a/src/sa/SaExpModulo.java b/src/sa/SaExpModulo.java new file mode 100644 index 0000000000000000000000000000000000000000..4375d59235a61915c2351b9273ad865c7f2fa687 --- /dev/null +++ b/src/sa/SaExpModulo.java @@ -0,0 +1,31 @@ +package sa; + +import util.Type; + + +public class SaExpModulo implements SaExp{ + private SaExp op1; + private SaExp op2; + + public SaExpModulo(SaExp op1, SaExp op2){ + this.op1 = op1; + this.op2 = op2; + } + + public SaExp getOp1(){return this.op1;} + public SaExp getOp2(){return this.op2;} + + public Type getType(){ + return Type.ENTIER; + } + public <T> T accept(SaVisitor <T> visitor) throws Exception{ + return visitor.visit(this); + } + + @Override + public String toString() { + return "(" + this.getClass().getSimpleName() + " " + op1 + " " + op2 + ")"; + } + } + + diff --git a/src/sa/SaIncr.java b/src/sa/SaIncr.java new file mode 100644 index 0000000000000000000000000000000000000000..ce77df03cfac81963409faa7e4e90fecff67fc89 --- /dev/null +++ b/src/sa/SaIncr.java @@ -0,0 +1,24 @@ +package sa; + +public class SaIncr implements SaInst{ + private SaVar lhs; + private SaExp rhs; + + public SaIncr(SaVar lhs, SaExp rhs){ + this.lhs = lhs; + this.rhs = rhs; + } + public SaVar getLhs(){return this.lhs;} + public SaExp getRhs(){return this.rhs;} + + public <T> T accept(SaVisitor <T> visitor) throws Exception{ + return visitor.visit(this); + } + + @Override + public String toString() { + return "(" + this.getClass().getSimpleName()+ " " + lhs + " " + rhs + ")"; + } +} + + diff --git a/src/sa/SaVisitor.java b/src/sa/SaVisitor.java index 3d28bb7870f422fa6caa7a50066a819b40fa6c11..962d2f2b69c3ec037014c81c29cfae4580d16adc 100644 --- a/src/sa/SaVisitor.java +++ b/src/sa/SaVisitor.java @@ -28,6 +28,7 @@ interface SaVisitor <T> { public T visit(SaExpAdd node) throws Exception; public T visit(SaExpSub node) throws Exception; public T visit(SaExpMult node) throws Exception; + public T visit(SaExpModulo node) throws Exception; public T visit(SaExpDiv node) throws Exception; public T visit(SaExpInf node) throws Exception; public T visit(SaExpEqual node) throws Exception; @@ -35,4 +36,6 @@ interface SaVisitor <T> { public T visit(SaExpOr node) throws Exception; public T visit(SaExpNot node) throws Exception; public T visit(SaLExp node) throws Exception; + public T visit(SaIncr node) throws Exception; + } diff --git a/test2024/c3a-ref/incr1.c3a b/test2024/c3a-ref/incr1.c3a new file mode 100644 index 0000000000000000000000000000000000000000..ec719f2d44f7816633a0e9dd6e0343c20757b6af --- /dev/null +++ b/test2024/c3a-ref/incr1.c3a @@ -0,0 +1,8 @@ + @0 = call main + stop @0 +main fbegin #entree fonction + a = 4 + @1 = a + 1 + a = @1 + write a + fend diff --git a/test2024/c3a-ref/incr2.c3a b/test2024/c3a-ref/incr2.c3a new file mode 100644 index 0000000000000000000000000000000000000000..ec719f2d44f7816633a0e9dd6e0343c20757b6af --- /dev/null +++ b/test2024/c3a-ref/incr2.c3a @@ -0,0 +1,8 @@ + @0 = call main + stop @0 +main fbegin #entree fonction + a = 4 + @1 = a + 1 + a = @1 + write a + fend diff --git a/test2024/c3a-ref/incr3.c3a b/test2024/c3a-ref/incr3.c3a new file mode 100644 index 0000000000000000000000000000000000000000..672ec22a9add02f2c02eaa7cb305d31bec25b7df --- /dev/null +++ b/test2024/c3a-ref/incr3.c3a @@ -0,0 +1,8 @@ + @0 = call main + stop @0 +main fbegin #entree fonction + t[1] = 100 + @1 = t[1] + 10 + t[1] = @1 + write t[1] + fend diff --git a/test2024/c3a-ref/incr4.c3a b/test2024/c3a-ref/incr4.c3a new file mode 100644 index 0000000000000000000000000000000000000000..4d24d5553e6be5e281ec58c19a0682b3d4437717 --- /dev/null +++ b/test2024/c3a-ref/incr4.c3a @@ -0,0 +1,10 @@ + @0 = call main + stop @0 +main fbegin #entree fonction + a = 4 + @1 = 12 * 2 + @2 = a + @1 + @3 = a + @2 + a = @3 + write a + fend diff --git a/test2024/c3a-ref/incr5.c3a b/test2024/c3a-ref/incr5.c3a new file mode 100644 index 0000000000000000000000000000000000000000..9c09934b34b34e8f6f59c72edd7e0a7e581de840 --- /dev/null +++ b/test2024/c3a-ref/incr5.c3a @@ -0,0 +1,11 @@ + @0 = call main + stop @0 +main fbegin #entree fonction + t[1] = 2 + t[2] = 3 + t[3] = 1 + @1 = t[1] * t[2] + @2 = t[3] + @1 + t[3] = @2 + write t[3] + fend diff --git a/test2024/c3a-ref/modulo1.c3a b/test2024/c3a-ref/modulo1.c3a new file mode 100644 index 0000000000000000000000000000000000000000..1555c5b5e3211e14c2e8ee7badeafa591bdb26a9 --- /dev/null +++ b/test2024/c3a-ref/modulo1.c3a @@ -0,0 +1,8 @@ + @0 = call main + stop @0 +main fbegin #entree fonction + @1 = 5 / 3 + @2 = 3 * @1 + @3 = 5 - @2 + write @3 + fend diff --git a/test2024/c3a-ref/modulo2.c3a b/test2024/c3a-ref/modulo2.c3a new file mode 100644 index 0000000000000000000000000000000000000000..06843a024608b1f23eae248f4908af0bfdfefd71 --- /dev/null +++ b/test2024/c3a-ref/modulo2.c3a @@ -0,0 +1,9 @@ + @0 = call main + stop @0 +main fbegin #entree fonction + @1 = 12 / 7 + @2 = 7 * @1 + @3 = 12 - @2 + @4 = @3 + 5 + write @4 + fend diff --git a/test2024/c3a-ref/modulo3.c3a b/test2024/c3a-ref/modulo3.c3a new file mode 100644 index 0000000000000000000000000000000000000000..195a462cbff301f4e7b8fd4ac52047ab8d6f2331 --- /dev/null +++ b/test2024/c3a-ref/modulo3.c3a @@ -0,0 +1,10 @@ + @0 = call main + stop @0 +main fbegin #entree fonction + @1 = 2 * 7 + @2 = @1 / 5 + @3 = 5 * @2 + @4 = @1 - @3 + @5 = @4 + 5 + write @5 + fend diff --git a/test2024/c3a-ref/modulo4.c3a b/test2024/c3a-ref/modulo4.c3a new file mode 100644 index 0000000000000000000000000000000000000000..6b3257b33da0469a9cb1a2cd9d9ac848f7055ea5 --- /dev/null +++ b/test2024/c3a-ref/modulo4.c3a @@ -0,0 +1,10 @@ + @0 = call main + stop @0 +main fbegin #entree fonction + a = 12 + b = 5 + @1 = a / b + @2 = b * @1 + @3 = a - @2 + write @3 + fend diff --git a/test2024/c3a-ref/modulo5.c3a b/test2024/c3a-ref/modulo5.c3a new file mode 100644 index 0000000000000000000000000000000000000000..4eb777e42fa30dd03e13615fe16163347e6f5d25 --- /dev/null +++ b/test2024/c3a-ref/modulo5.c3a @@ -0,0 +1,11 @@ + @0 = call main + stop @0 +main fbegin #entree fonction + t[0] = 3164 + t[1] = 152 + @1 = t[0] / t[1] + @2 = t[1] * @1 + @3 = t[0] - @2 + t[2] = @3 + write t[2] + fend diff --git a/test2024/evaluate.py b/test2024/evaluate.py new file mode 100755 index 0000000000000000000000000000000000000000..a219043f09427613ad792734cda7fde22a11d66d --- /dev/null +++ b/test2024/evaluate.py @@ -0,0 +1,473 @@ +#! /usr/bin/python3 -u + +import sys +import os +import subprocess +import inspect +import argparse + +# code de sortie du compilateur + +NOERROR_CODE = 0 +ERR_TYPE_CODE = 3 +ERR_SYMBOL_TABLE_CODE = 4 +ERR_SYNTAX_CODE = 5 +ERR_LEX_CODE = 6 + +# coefficients pour le calcul de la note finale +SC_COEFF = 4 +SA_DIFF_COEFF = 0 +TS_DIFF_COEFF = 0 +SA_COEFF = 4 +C3A_DIFF_COEFF = 0 +C3A_COEFF = 4 +PRE_NASM_DIFF = 0 +PRE_NASM_COEFF = 4 +NASM_DIFF_COEFF = 0 +NASM_COEFF = 4 +EXE_COEFF = 0 +ERR_TS_COEFF = 0 +ERR_TYPE_COEFF = 0 + +# Paths relative to this file (evaluate.py) +inputPath = "./input/" +errInputPathTs = "./input_err_ts/" +errInputPathType = "./input_err_type/" +refPath = "./" +srcPath = "../src/" +# Keep empty +classpath = "" +# Outputs files (don't change this, it's set in the main) +outErr = sys.stderr +outScore = sys.stdout +outVerbose = open(os.devnull,"w") +outputFilename = "result.txt" + +################################################################################ +def compileCompiler() : + global classpath + for file in ["Compiler.java", "SaVM.java", "C3aVM.java", "NasmVM.java"] : + if not os.path.isfile(srcPath+file) : + print("Skipping compilation of %s"%file, file=outVerbose) + continue + package = file.lower().split('.')[0].replace('vm', '') + if package in ["c3a", "nasm"] and not os.path.isdir(srcPath+package) : + print("Skipping compilation of %s"%file, file=outVerbose) + continue + print("Compiling %s..."%file, end="", file=outVerbose) + proc = subprocess.Popen("cd %s && javac %s %s %s"%(srcPath, "-cp " if len(classpath) > 0 else "", classpath, file), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + errMess = proc.stderr.read().decode('utf8') + returnCode = proc.wait() + if returnCode == 0 : + print("Done", file=outVerbose) + else : + print("", file=outVerbose) + print("ERROR !", file=outErr) + print(errMess, file=outErr) + exit(1) + print("", file=outVerbose) + classpath = "../xerces-2_12_1/*:%s"%srcPath + classpath = "" +################################################################################ + +################################################################################ +def deleteClasses() : + + for root, subdirs, files in os.walk("%s.."%srcPath) : + if ".git" in root : + continue + for filename in files : + if os.path.splitext(filename)[1] == ".class" : + os.remove(root+"/"+filename) + + return classpath +################################################################################ + +################################################################################ +def findClasspath() : + global classpath + + if len(classpath) > 0 : + return classpath + + for root, subdirs, files in os.walk("%s.."%srcPath) : + if ".git" in root : + continue + for filename in files : + if os.path.splitext(filename)[1] in [".class", ".jar"] : + classpath += ("" if len(classpath) == 0 else ":") + root + break + + classpath += ("" if len(classpath) == 0 else ":")+"../xerces-2_12_1/*" + return classpath +################################################################################ + +################################################################################ +def compiler(verbose="-v 2") : + return "java -classpath %s Compiler %s"%(findClasspath(), verbose) +################################################################################ + +################################################################################ +def green(string) : + return "\033[92m%s\033[0m"%string +################################################################################ + +################################################################################ +def purple(string) : + return "\033[95m%s\033[0m"%string +################################################################################ + +################################################################################ +def red(string) : + return "\033[91m%s\033[0m"%string +################################################################################ + +################################################################################ +def changeExtension(filename, newExtension) : + return os.path.splitext(filename)[0] + newExtension +################################################################################ + +################################################################################ +def findInputFiles(path) : + inputFiles = [] + for filename in os.listdir(path) : + if os.path.splitext(filename)[1] == ".l" : + inputFiles.append(filename) + inputFiles.sort() + return inputFiles +################################################################################ + +################################################################################ +def deleteCompilationOutputs() : + outputExtensions = [".exe", ".exeout", ".o", ".out", ".sa", ".saout", ".sc", ".ts", ".nasm", ".nasmout", ".pre-nasm", ".pre-nasmout", ".c3a", ".c3aout", ".fg", ".fgs", ".ig"] + for filename in os.listdir(inputPath) : + if os.path.splitext(filename)[1] in outputExtensions : + os.remove(inputPath+filename) +################################################################################ + +################################################################################ +def compileInputFiles(inputFiles) : + evaluation = getNewEvaluationResult(ERR_SYNTAX_CODE) + for inputFile in inputFiles : + lightFilename = inputFile.split("/")[-1] + print("Compiling %s..."%inputFile, file=outVerbose, flush=True, end='') + returnCode = subprocess.Popen("{} {}{}".format(compiler(), inputPath, inputFile), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait() + if returnCode == NOERROR_CODE : + evaluation[1]["correct"].append(lightFilename) + print("Done", file=outVerbose) + else : + evaluation[1]["incorrect"].append(lightFilename) + print("ERROR !", file=outErr) + print("", file=outVerbose) + return evaluation +################################################################################ + +################################################################################ +def getNewEvaluationResult(name) : + return [name, {"correct" : [], "incorrect" : [], "notfound" : []}] +################################################################################ + +################################################################################ +def evaluateCompilationErrors(inputFiles, expectedCode, name) : + evaluation = getNewEvaluationResult(name) + + print(file=outVerbose) + + for inputFile in inputFiles : + if not os.path.isfile(inputFile) : + print("ERROR : could not find '%s'"%inputFile, file=outErr) + exit(1) + lightFilename = inputFile.split("/")[-1] + print("Compiling %s..."%lightFilename, end="", file=outVerbose) + returnCode = subprocess.Popen("{} {}".format(compiler(verbose=""), inputFile), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait() + print("Done (%d)"%returnCode, file=outVerbose) + if returnCode == expectedCode : + evaluation[1]["correct"].append(lightFilename) + else : + evaluation[1]["incorrect"].append(lightFilename) + print("", file=outVerbose) + + return evaluation +################################################################################ + +################################################################################ +def evaluateDiff(inputFiles, extension, extensionRef, path, name) : + evaluation = getNewEvaluationResult(name) + + for filename in inputFiles : + producedFile = changeExtension(filename, extension) + if not os.path.isfile(inputPath+producedFile) : + evaluation[1]["notfound"].append(producedFile) + continue + + ref = refPath+path+changeExtension(producedFile, extensionRef) + if not os.path.isfile(ref) : + print("ATTENTION : Fichier non trouvé : %s"%ref, file=sys.stderr) + continue + + refContent = [] + for line in open(ref, "r") : + line = line.strip() + if len(line) > 0 : + refContent.append(line) + producedContent = [] + for line in open(inputPath+producedFile, "r") : + line = line.strip() + if len(line) > 0 : + producedContent.append(line) + + if producedContent == refContent : + evaluation[1]["correct"].append(producedFile) + else : + evaluation[1]["incorrect"].append(producedFile) + + return evaluation +################################################################################ + +################################################################################ +def evaluateSa(inputFiles) : + errs = [] + for filename in inputFiles : + saFilename = inputPath+changeExtension(filename, ".sa") + outFilename = inputPath+changeExtension(filename, ".saout") + if not os.path.isfile(saFilename) : + continue + + command = "java -classpath %s SaVM -sa %s > %s"%(findClasspath(), saFilename, outFilename) + out = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read().decode() + if len(out) != 0 : + errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out)) + + return evaluateDiff(inputFiles, ".saout", ".out", "out-ref/", "Execution de sa"), errs +################################################################################ + +################################################################################ +def evaluateC3a(inputFiles) : + errs = [] + for filename in inputFiles : + c3aFilename = inputPath+changeExtension(filename, ".c3a") + tsFilename = inputPath+changeExtension(filename, ".ts") + outFilename = inputPath+changeExtension(filename, ".c3aout") + if not os.path.isfile(c3aFilename) or not os.path.isfile(tsFilename) : + continue + + command = "java -classpath %s C3aVM -c3a %s -ts %s > %s"%(findClasspath(), c3aFilename, tsFilename, outFilename) + out = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read().decode() + if len(out) != 0 : + errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out)) + + return evaluateDiff(inputFiles, ".c3aout", ".out", "out-ref/", "Execution du c3a"), errs +################################################################################ + +################################################################################ +def evaluatePreNasm(inputFiles) : + errs = [] + for filename in inputFiles : + nasmFilename = inputPath+changeExtension(filename, ".pre-nasm") + outFilename = inputPath+changeExtension(filename, ".pre-nasmout") + if not os.path.isfile(nasmFilename) : + continue + + command = "java -classpath %s NasmVM -nasm %s > %s"%(findClasspath(), nasmFilename, outFilename) + out = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read().decode() + if len(out) != 0 : + errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out)) + + return evaluateDiff(inputFiles, ".pre-nasmout", ".out", "out-ref/", "Execution du pre-nasm"), errs +################################################################################ + +################################################################################ +def evaluateNasm(inputFiles) : + errs = [] + for filename in inputFiles : + nasmFilename = inputPath+changeExtension(filename, ".nasm") + outFilename = inputPath+changeExtension(filename, ".nasmout") + if not os.path.isfile(nasmFilename) : + continue + + command = "java -classpath %s NasmVM -nasm %s > %s"%(findClasspath(), nasmFilename, outFilename) + out = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read().decode() + if len(out) != 0 : + errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out)) + + return evaluateDiff(inputFiles, ".nasmout", ".out", "out-ref/", "Execution du nasm"), errs +################################################################################ + +################################################################################ +def evaluateExecutable(inputFiles) : + errs = [] + for filename in inputFiles : + nasmFilename = changeExtension(filename, ".nasm") + objectFilename = changeExtension(filename, ".o") + execFilename = changeExtension(filename, ".exe") + outFilename = changeExtension(filename, ".exeout") + if not os.path.isfile(inputPath+nasmFilename) : + continue + + out = subprocess.Popen("cd {} && nasm -f elf -dwarf -g {}".format(inputPath+"..","input/"+nasmFilename), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read() + if not os.path.isfile(inputPath+objectFilename) : + errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out)) + continue + out = subprocess.Popen("ld -m elf_i386 -o {}{} {}{}".format(inputPath,execFilename,inputPath,objectFilename), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read() + if not os.path.isfile(inputPath+execFilename) : + errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out)) + continue + out = subprocess.Popen("{}{} > {}{}".format(inputPath,execFilename,inputPath,outFilename), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read() + if not os.path.isfile(inputPath+outFilename) : + errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out)) + continue + + return evaluateDiff(inputFiles, ".exeout", ".out", "out-ref/", "Execution du binaire"), errs +################################################################################ + +################################################################################ +def printListElements(destination, elements, colorFunction, useColor, resultStr) : + if len(elements) == 0 : + return + maxColumnSize = len(max(elements, key=len)) + for filename in elements : + if useColor : + print("\t{}".format(colorFunction(filename)), file=destination) + else : + print("\t{:{}} {}".format(filename, maxColumnSize+2, resultStr), file=destination) +################################################################################ + +################################################################################ +def printEvaluationResult(destination, evaluationResult, useColor) : + name = evaluationResult[0] + correct = evaluationResult[1]["correct"] + incorrect = evaluationResult[1]["incorrect"] + notfound = evaluationResult[1]["notfound"] + + nbCorrect = len(correct) + nbTotal = len(correct) + len(incorrect) + len(notfound) + + score = 0.0 + if nbTotal > 0 : + score = 100.0*nbCorrect/nbTotal + for dest, color in [(destination, useColor), (open(outputFilename, "a"), False)] : + print("Évaluation de %s :"%name, file=dest) + print("{}/{} correct ({:6.2f}%)".format(nbCorrect, nbTotal, score), file=dest) + if nbCorrect+len(incorrect) > 0 : + printListElements(dest, correct, green, color, "CORRECT") + printListElements(dest, incorrect, purple, color, "INCORRECT") + printListElements(dest, notfound, red, color, "NON-EXISTANT") + return score +################################################################################ + +################################################################################ +if __name__ == "__main__" : + parser = argparse.ArgumentParser() + parser.add_argument("--verbose", "-v", default=False, action="store_true", + help="Verbose output (obsolete, verbose is default).") + parser.add_argument("--silent", "-s", default=False, action="store_true", + help="Less verbose output.") + parser.add_argument("--noColors", default=False, action="store_true", + help="Disable colors in output.") + parser.add_argument("--clean", "-c", default=False, action="store_true", + help="Clean input dir then exit.") + parser.add_argument("--number", "-n", default=None, type=int, + help="Restrict tests to n inputs.") + parser.add_argument("--files", "-f", default=[], nargs="*", + help="Specify input files.") + args = parser.parse_args() + + args.verbose = not args.silent + + if args.verbose : + outVerbose = outScore + if args.clean : + deleteCompilationOutputs() + exit(0) + + with open(outputFilename, "w") as _ : + pass + + inputFiles = args.files[:args.number] + if len(inputFiles) == 0 : + inputFiles = findInputFiles(inputPath)[:args.number] + + errInputFilesTs = [errInputPathTs+"/"+f for f in findInputFiles(errInputPathTs)[:args.number]] + errInputFilesType = [errInputPathType+"/"+f for f in findInputFiles(errInputPathType)[:args.number]] + + deleteCompilationOutputs() + + compileCompiler() + + + scores = [] + names = [] + errors = [] + names.append("SC ") + res = compileInputFiles(inputFiles) + scores.append(printEvaluationResult(outVerbose, res, not args.noColors)) + msg = "Diff de %s" + dfSa = lambda files : (evaluateDiff(inputFiles, ".sa", ".sa", "sa-ref/", msg%"sa"), []) + dfTs = lambda files : (evaluateDiff(inputFiles, ".ts", ".ts", "ts-ref/", msg%"ts"), []) + dfC3a = lambda files : (evaluateDiff(inputFiles, ".c3a", ".c3a", "c3a-ref/", msg%"c3a"), []) + dfPreNasm = lambda files : (evaluateDiff(inputFiles, ".pre-nasm", ".pre-nasm", "pre-nasm-ref/", msg%"pre-nasm"), []) + dfNasm = lambda files : (evaluateDiff(inputFiles, ".nasm", ".nasm", "nasm-ref/", msg%"nasm"), []) + + # Evaluation of normal (working) examples + for evalTarget in [ + ("SA-DIFF ", dfSa), + ("TS-DIFF ", dfTs), + ("SA ", evaluateSa), + ("C3A-DIFF ", dfC3a), + ("C3A ", evaluateC3a), + ("PRE-NASM-DIFF", dfPreNasm), + ("PRE-NASM ", evaluatePreNasm), + ("NASM-DIFF ", dfNasm), + ("NASM ", evaluateNasm), + ("EXE ", evaluateExecutable), + ] : + names.append(evalTarget[0]) + res, err = evalTarget[1](inputFiles) + scores.append(printEvaluationResult(outVerbose, res, not args.noColors)) + errors += err + + # Evaluation of ill formed examples, that should trigger a compilation error + for evalTarget in [ + ("ERR_TS ", evaluateCompilationErrors, errInputFilesTs, ERR_SYMBOL_TABLE_CODE), + ("ERR_TYPE ", evaluateCompilationErrors, errInputFilesType, ERR_TYPE_CODE), + ] : + names.append(evalTarget[0]) + res = evalTarget[1](evalTarget[2], evalTarget[3], evalTarget[0]) + scores.append(printEvaluationResult(outVerbose, res, not args.noColors)) + + deleteClasses() + + # The rest of the script will now print the results + + if not args.noColors : + print("Légende : {} {} {}".format(green("CORRECT"), purple("INCORRECT"), red("NON-EXISTANT")), file=outVerbose) + + errorsStr = "" + + if len(errors) > 0 : + errorsStr = "%s\n%s"%((30*"-")+("EVALUATION ERRORS")+(30*"-"), "\n\n".join(errors)) + + print(errorsStr) + print(errorsStr, file=open(outputFilename, "a")) + + for i in range(len(scores)): + print(names[i], "\t", scores[i]) + + print("Copy-pastable scores :", file=outScore) + print("\t".join(names), file=outScore) + print("\t".join(["%6.2f"%scores[i] for i in range(len(scores))]), file=outScore) + + print("\nSauvegardé dans le fichier %s"%outputFilename) + +# les coefficients associés à chaque partie pour le calcul de la note finale + coeffs = [SC_COEFF, SA_DIFF_COEFF, TS_DIFF_COEFF, SA_COEFF, C3A_DIFF_COEFF, C3A_COEFF, PRE_NASM_DIFF, PRE_NASM_COEFF, NASM_DIFF_COEFF, NASM_COEFF, EXE_COEFF, ERR_TS_COEFF, ERR_TYPE_COEFF] + +# calcul de la note finale + + note = 0 + for i in range(len(scores)): + note += scores[i] / 100 * coeffs[i] + print ("note = ", note) + +################################################################################ + diff --git a/test2024/fg-ref/incr1.fg b/test2024/fg-ref/incr1.fg new file mode 100644 index 0000000000000000000000000000000000000000..8dc6a0827cfeafb2e629c87520c4c85127248359 --- /dev/null +++ b/test2024/fg-ref/incr1.fg @@ -0,0 +1,26 @@ +0 : ( 1 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +1 : ( 2 ) call main +2 : ( 3 ) pop @0 ;récupération de la valeur de retour +3 : ( 4 ) mov ebx, 0 ; valeur de retour du programme +4 : ( 5 ) mov eax, 1 ; code de sortie +5 : ( 6 ) int 0x80 +6 : ( 7 ) main : push ebp ;sauvegarde la valeur de ebp +7 : ( 8 ) mov ebp, esp ;nouvelle valeur de ebp +8 : ( 9 ) push eax ;sauvegarde de eax +9 : ( 10 ) push ebx ;sauvegarde de ebx +10 : ( 11 ) push ecx ;sauvegarde de ecx +11 : ( 12 ) push edx ;sauvegarde de edx +12 : ( 13 ) sub esp, 0 ;allocation des variables locales +13 : ( 14 ) mov dword [a], 4 ;Affect +14 : ( 15 ) mov @1, dword [a] +15 : ( 16 ) add @1, 1 +16 : ( 17 ) mov dword [a], @1 ;Affect +17 : ( 18 ) mov eax, dword [a] ;Write 1 +18 : ( 19 ) call iprintLF ;Write 2 +19 : ( 20 ) add esp, 0 ;désallocation des variables locales +20 : ( 21 ) pop edx ;restaure edx +21 : ( 22 ) pop ecx ;restaure ecx +22 : ( 23 ) pop ebx ;restaure ebx +23 : ( 24 ) pop eax ;restaure eax +24 : ( 25 ) pop ebp ;restaure la valeur de ebp +25 : ( ) ret diff --git a/test2024/fg-ref/incr2.fg b/test2024/fg-ref/incr2.fg new file mode 100644 index 0000000000000000000000000000000000000000..74721b52ad7011da6a00be732974cdbe966b8035 --- /dev/null +++ b/test2024/fg-ref/incr2.fg @@ -0,0 +1,26 @@ +0 : ( 1 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +1 : ( 2 ) call main +2 : ( 3 ) pop @0 ;récupération de la valeur de retour +3 : ( 4 ) mov ebx, 0 ; valeur de retour du programme +4 : ( 5 ) mov eax, 1 ; code de sortie +5 : ( 6 ) int 0x80 +6 : ( 7 ) main : push ebp ;sauvegarde la valeur de ebp +7 : ( 8 ) mov ebp, esp ;nouvelle valeur de ebp +8 : ( 9 ) push eax ;sauvegarde de eax +9 : ( 10 ) push ebx ;sauvegarde de ebx +10 : ( 11 ) push ecx ;sauvegarde de ecx +11 : ( 12 ) push edx ;sauvegarde de edx +12 : ( 13 ) sub esp, 4 ;allocation des variables locales +13 : ( 14 ) mov dword [ebp-4], 4 ;Affect +14 : ( 15 ) mov @1, dword [ebp-4] +15 : ( 16 ) add @1, 1 +16 : ( 17 ) mov dword [ebp-4], @1 ;Affect +17 : ( 18 ) mov eax, dword [ebp-4] ;Write 1 +18 : ( 19 ) call iprintLF ;Write 2 +19 : ( 20 ) add esp, 4 ;désallocation des variables locales +20 : ( 21 ) pop edx ;restaure edx +21 : ( 22 ) pop ecx ;restaure ecx +22 : ( 23 ) pop ebx ;restaure ebx +23 : ( 24 ) pop eax ;restaure eax +24 : ( 25 ) pop ebp ;restaure la valeur de ebp +25 : ( ) ret diff --git a/test2024/fg-ref/incr3.fg b/test2024/fg-ref/incr3.fg new file mode 100644 index 0000000000000000000000000000000000000000..d43dcd691a8a51ecaf374589685a74fbd6cc533a --- /dev/null +++ b/test2024/fg-ref/incr3.fg @@ -0,0 +1,34 @@ +0 : ( 1 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +1 : ( 2 ) call main +2 : ( 3 ) pop @0 ;récupération de la valeur de retour +3 : ( 4 ) mov ebx, 0 ; valeur de retour du programme +4 : ( 5 ) mov eax, 1 ; code de sortie +5 : ( 6 ) int 0x80 +6 : ( 7 ) main : push ebp ;sauvegarde la valeur de ebp +7 : ( 8 ) mov ebp, esp ;nouvelle valeur de ebp +8 : ( 9 ) push eax ;sauvegarde de eax +9 : ( 10 ) push ebx ;sauvegarde de ebx +10 : ( 11 ) push ecx ;sauvegarde de ecx +11 : ( 12 ) push edx ;sauvegarde de edx +12 : ( 13 ) sub esp, 0 ;allocation des variables locales +13 : ( 14 ) mov @8, 1 +14 : ( 15 ) imul @8, 4 +15 : ( 16 ) mov dword [t+@8], 100 ;Affect +16 : ( 17 ) mov @9, 1 +17 : ( 18 ) imul @9, 4 +18 : ( 19 ) mov @1, dword [t+@9] +19 : ( 20 ) add @1, 10 +20 : ( 21 ) mov @10, 1 +21 : ( 22 ) imul @10, 4 +22 : ( 23 ) mov dword [t+@10], @1 ;Affect +23 : ( 24 ) mov @12, 1 +24 : ( 25 ) imul @12, 4 +25 : ( 26 ) mov eax, dword [t+@12] ;Write 1 +26 : ( 27 ) call iprintLF ;Write 2 +27 : ( 28 ) add esp, 0 ;désallocation des variables locales +28 : ( 29 ) pop edx ;restaure edx +29 : ( 30 ) pop ecx ;restaure ecx +30 : ( 31 ) pop ebx ;restaure ebx +31 : ( 32 ) pop eax ;restaure eax +32 : ( 33 ) pop ebp ;restaure la valeur de ebp +33 : ( ) ret diff --git a/test2024/fg-ref/incr4.fg b/test2024/fg-ref/incr4.fg new file mode 100644 index 0000000000000000000000000000000000000000..6e826247c06ed05158a343495f11f9e40df5fe7e --- /dev/null +++ b/test2024/fg-ref/incr4.fg @@ -0,0 +1,30 @@ +0 : ( 1 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +1 : ( 2 ) call main +2 : ( 3 ) pop @0 ;récupération de la valeur de retour +3 : ( 4 ) mov ebx, 0 ; valeur de retour du programme +4 : ( 5 ) mov eax, 1 ; code de sortie +5 : ( 6 ) int 0x80 +6 : ( 7 ) main : push ebp ;sauvegarde la valeur de ebp +7 : ( 8 ) mov ebp, esp ;nouvelle valeur de ebp +8 : ( 9 ) push eax ;sauvegarde de eax +9 : ( 10 ) push ebx ;sauvegarde de ebx +10 : ( 11 ) push ecx ;sauvegarde de ecx +11 : ( 12 ) push edx ;sauvegarde de edx +12 : ( 13 ) sub esp, 0 ;allocation des variables locales +13 : ( 14 ) mov dword [a], 4 ;Affect +14 : ( 15 ) mov @1, 12 +15 : ( 16 ) imul @1, 2 +16 : ( 17 ) mov @2, dword [a] +17 : ( 18 ) add @2, @1 +18 : ( 19 ) mov @3, dword [a] +19 : ( 20 ) add @3, @2 +20 : ( 21 ) mov dword [a], @3 ;Affect +21 : ( 22 ) mov eax, dword [a] ;Write 1 +22 : ( 23 ) call iprintLF ;Write 2 +23 : ( 24 ) add esp, 0 ;désallocation des variables locales +24 : ( 25 ) pop edx ;restaure edx +25 : ( 26 ) pop ecx ;restaure ecx +26 : ( 27 ) pop ebx ;restaure ebx +27 : ( 28 ) pop eax ;restaure eax +28 : ( 29 ) pop ebp ;restaure la valeur de ebp +29 : ( ) ret diff --git a/test2024/fg-ref/incr5.fg b/test2024/fg-ref/incr5.fg new file mode 100644 index 0000000000000000000000000000000000000000..24b51c57e1b1df8b60bd1ce06a380a0bc7ad8c3d --- /dev/null +++ b/test2024/fg-ref/incr5.fg @@ -0,0 +1,46 @@ +0 : ( 1 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +1 : ( 2 ) call main +2 : ( 3 ) pop @0 ;récupération de la valeur de retour +3 : ( 4 ) mov ebx, 0 ; valeur de retour du programme +4 : ( 5 ) mov eax, 1 ; code de sortie +5 : ( 6 ) int 0x80 +6 : ( 7 ) main : push ebp ;sauvegarde la valeur de ebp +7 : ( 8 ) mov ebp, esp ;nouvelle valeur de ebp +8 : ( 9 ) push eax ;sauvegarde de eax +9 : ( 10 ) push ebx ;sauvegarde de ebx +10 : ( 11 ) push ecx ;sauvegarde de ecx +11 : ( 12 ) push edx ;sauvegarde de edx +12 : ( 13 ) sub esp, 0 ;allocation des variables locales +13 : ( 14 ) mov @9, 1 +14 : ( 15 ) imul @9, 4 +15 : ( 16 ) mov dword [t+@9], 2 ;Affect +16 : ( 17 ) mov @10, 2 +17 : ( 18 ) imul @10, 4 +18 : ( 19 ) mov dword [t+@10], 3 ;Affect +19 : ( 20 ) mov @11, 3 +20 : ( 21 ) imul @11, 4 +21 : ( 22 ) mov dword [t+@11], 1 ;Affect +22 : ( 23 ) mov @12, 1 +23 : ( 24 ) imul @12, 4 +24 : ( 25 ) mov @1, dword [t+@12] +25 : ( 26 ) mov @13, 2 +26 : ( 27 ) imul @13, 4 +27 : ( 28 ) imul @1, dword [t+@13] +28 : ( 29 ) mov @14, 3 +29 : ( 30 ) imul @14, 4 +30 : ( 31 ) mov @2, dword [t+@14] +31 : ( 32 ) add @2, @1 +32 : ( 33 ) mov @15, 3 +33 : ( 34 ) imul @15, 4 +34 : ( 35 ) mov dword [t+@15], @2 ;Affect +35 : ( 36 ) mov @17, 3 +36 : ( 37 ) imul @17, 4 +37 : ( 38 ) mov eax, dword [t+@17] ;Write 1 +38 : ( 39 ) call iprintLF ;Write 2 +39 : ( 40 ) add esp, 0 ;désallocation des variables locales +40 : ( 41 ) pop edx ;restaure edx +41 : ( 42 ) pop ecx ;restaure ecx +42 : ( 43 ) pop ebx ;restaure ebx +43 : ( 44 ) pop eax ;restaure eax +44 : ( 45 ) pop ebp ;restaure la valeur de ebp +45 : ( ) ret diff --git a/test2024/fg-ref/modulo1.fg b/test2024/fg-ref/modulo1.fg new file mode 100644 index 0000000000000000000000000000000000000000..4b9dc7317d27d871c55bfa6a6582df1061b7b628 --- /dev/null +++ b/test2024/fg-ref/modulo1.fg @@ -0,0 +1,32 @@ +0 : ( 1 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +1 : ( 2 ) call main +2 : ( 3 ) pop @0 ;récupération de la valeur de retour +3 : ( 4 ) mov ebx, 0 ; valeur de retour du programme +4 : ( 5 ) mov eax, 1 ; code de sortie +5 : ( 6 ) int 0x80 +6 : ( 7 ) main : push ebp ;sauvegarde la valeur de ebp +7 : ( 8 ) mov ebp, esp ;nouvelle valeur de ebp +8 : ( 9 ) push eax ;sauvegarde de eax +9 : ( 10 ) push ebx ;sauvegarde de ebx +10 : ( 11 ) push ecx ;sauvegarde de ecx +11 : ( 12 ) push edx ;sauvegarde de edx +12 : ( 13 ) sub esp, 0 ;allocation des variables locales +13 : ( 14 ) mov edx, 0 ;mise à 0 des bits de poids fort du dividende +14 : ( 15 ) mov eax, 5 ;affectation des bits de poids faible du dividende +15 : ( 16 ) mov @12, 3 +16 : ( 17 ) idiv @12 +17 : ( 18 ) mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée +18 : ( 19 ) mov @1, eax +19 : ( 20 ) mov @2, 3 +20 : ( 21 ) imul @2, @1 +21 : ( 22 ) mov @3, 5 +22 : ( 23 ) sub @3, @2 +23 : ( 24 ) mov eax, @3 ;Write 1 +24 : ( 25 ) call iprintLF ;Write 2 +25 : ( 26 ) add esp, 0 ;désallocation des variables locales +26 : ( 27 ) pop edx ;restaure edx +27 : ( 28 ) pop ecx ;restaure ecx +28 : ( 29 ) pop ebx ;restaure ebx +29 : ( 30 ) pop eax ;restaure eax +30 : ( 31 ) pop ebp ;restaure la valeur de ebp +31 : ( ) ret diff --git a/test2024/fg-ref/modulo2.fg b/test2024/fg-ref/modulo2.fg new file mode 100644 index 0000000000000000000000000000000000000000..6a6d3c5fd802fa19cd63f439744bcd5173476517 --- /dev/null +++ b/test2024/fg-ref/modulo2.fg @@ -0,0 +1,34 @@ +0 : ( 1 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +1 : ( 2 ) call main +2 : ( 3 ) pop @0 ;récupération de la valeur de retour +3 : ( 4 ) mov ebx, 0 ; valeur de retour du programme +4 : ( 5 ) mov eax, 1 ; code de sortie +5 : ( 6 ) int 0x80 +6 : ( 7 ) main : push ebp ;sauvegarde la valeur de ebp +7 : ( 8 ) mov ebp, esp ;nouvelle valeur de ebp +8 : ( 9 ) push eax ;sauvegarde de eax +9 : ( 10 ) push ebx ;sauvegarde de ebx +10 : ( 11 ) push ecx ;sauvegarde de ecx +11 : ( 12 ) push edx ;sauvegarde de edx +12 : ( 13 ) sub esp, 0 ;allocation des variables locales +13 : ( 14 ) mov edx, 0 ;mise à 0 des bits de poids fort du dividende +14 : ( 15 ) mov eax, 12 ;affectation des bits de poids faible du dividende +15 : ( 16 ) mov @13, 7 +16 : ( 17 ) idiv @13 +17 : ( 18 ) mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée +18 : ( 19 ) mov @1, eax +19 : ( 20 ) mov @2, 7 +20 : ( 21 ) imul @2, @1 +21 : ( 22 ) mov @3, 12 +22 : ( 23 ) sub @3, @2 +23 : ( 24 ) mov @4, @3 +24 : ( 25 ) add @4, 5 +25 : ( 26 ) mov eax, @4 ;Write 1 +26 : ( 27 ) call iprintLF ;Write 2 +27 : ( 28 ) add esp, 0 ;désallocation des variables locales +28 : ( 29 ) pop edx ;restaure edx +29 : ( 30 ) pop ecx ;restaure ecx +30 : ( 31 ) pop ebx ;restaure ebx +31 : ( 32 ) pop eax ;restaure eax +32 : ( 33 ) pop ebp ;restaure la valeur de ebp +33 : ( ) ret diff --git a/test2024/fg-ref/modulo3.fg b/test2024/fg-ref/modulo3.fg new file mode 100644 index 0000000000000000000000000000000000000000..a1042c3372555d639aa35a4a5c76546000a3aa3f --- /dev/null +++ b/test2024/fg-ref/modulo3.fg @@ -0,0 +1,36 @@ +0 : ( 1 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +1 : ( 2 ) call main +2 : ( 3 ) pop @0 ;récupération de la valeur de retour +3 : ( 4 ) mov ebx, 0 ; valeur de retour du programme +4 : ( 5 ) mov eax, 1 ; code de sortie +5 : ( 6 ) int 0x80 +6 : ( 7 ) main : push ebp ;sauvegarde la valeur de ebp +7 : ( 8 ) mov ebp, esp ;nouvelle valeur de ebp +8 : ( 9 ) push eax ;sauvegarde de eax +9 : ( 10 ) push ebx ;sauvegarde de ebx +10 : ( 11 ) push ecx ;sauvegarde de ecx +11 : ( 12 ) push edx ;sauvegarde de edx +12 : ( 13 ) sub esp, 0 ;allocation des variables locales +13 : ( 14 ) mov @1, 2 +14 : ( 15 ) imul @1, 7 +15 : ( 16 ) mov edx, 0 ;mise à 0 des bits de poids fort du dividende +16 : ( 17 ) mov eax, @1 ;affectation des bits de poids faible du dividende +17 : ( 18 ) mov @14, 5 +18 : ( 19 ) idiv @14 +19 : ( 20 ) mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée +20 : ( 21 ) mov @2, eax +21 : ( 22 ) mov @3, 5 +22 : ( 23 ) imul @3, @2 +23 : ( 24 ) mov @4, @1 +24 : ( 25 ) sub @4, @3 +25 : ( 26 ) mov @5, @4 +26 : ( 27 ) add @5, 5 +27 : ( 28 ) mov eax, @5 ;Write 1 +28 : ( 29 ) call iprintLF ;Write 2 +29 : ( 30 ) add esp, 0 ;désallocation des variables locales +30 : ( 31 ) pop edx ;restaure edx +31 : ( 32 ) pop ecx ;restaure ecx +32 : ( 33 ) pop ebx ;restaure ebx +33 : ( 34 ) pop eax ;restaure eax +34 : ( 35 ) pop ebp ;restaure la valeur de ebp +35 : ( ) ret diff --git a/test2024/fg-ref/modulo4.fg b/test2024/fg-ref/modulo4.fg new file mode 100644 index 0000000000000000000000000000000000000000..c7eb351e1a43a8b033ff2c84639891b288aba0ff --- /dev/null +++ b/test2024/fg-ref/modulo4.fg @@ -0,0 +1,33 @@ +0 : ( 1 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +1 : ( 2 ) call main +2 : ( 3 ) pop @0 ;récupération de la valeur de retour +3 : ( 4 ) mov ebx, 0 ; valeur de retour du programme +4 : ( 5 ) mov eax, 1 ; code de sortie +5 : ( 6 ) int 0x80 +6 : ( 7 ) main : push ebp ;sauvegarde la valeur de ebp +7 : ( 8 ) mov ebp, esp ;nouvelle valeur de ebp +8 : ( 9 ) push eax ;sauvegarde de eax +9 : ( 10 ) push ebx ;sauvegarde de ebx +10 : ( 11 ) push ecx ;sauvegarde de ecx +11 : ( 12 ) push edx ;sauvegarde de edx +12 : ( 13 ) sub esp, 0 ;allocation des variables locales +13 : ( 14 ) mov dword [a], 12 ;Affect +14 : ( 15 ) mov dword [b], 5 ;Affect +15 : ( 16 ) mov edx, 0 ;mise à 0 des bits de poids fort du dividende +16 : ( 17 ) mov eax, dword [a] ;affectation des bits de poids faible du dividende +17 : ( 18 ) idiv dword [b] +18 : ( 19 ) mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée +19 : ( 20 ) mov @1, eax +20 : ( 21 ) mov @2, dword [b] +21 : ( 22 ) imul @2, @1 +22 : ( 23 ) mov @3, dword [a] +23 : ( 24 ) sub @3, @2 +24 : ( 25 ) mov eax, @3 ;Write 1 +25 : ( 26 ) call iprintLF ;Write 2 +26 : ( 27 ) add esp, 0 ;désallocation des variables locales +27 : ( 28 ) pop edx ;restaure edx +28 : ( 29 ) pop ecx ;restaure ecx +29 : ( 30 ) pop ebx ;restaure ebx +30 : ( 31 ) pop eax ;restaure eax +31 : ( 32 ) pop ebp ;restaure la valeur de ebp +32 : ( ) ret diff --git a/test2024/fg-ref/modulo5.fg b/test2024/fg-ref/modulo5.fg new file mode 100644 index 0000000000000000000000000000000000000000..753a42fba743243e4dc787f392b4ed02d18fe9c5 --- /dev/null +++ b/test2024/fg-ref/modulo5.fg @@ -0,0 +1,50 @@ +0 : ( 1 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +1 : ( 2 ) call main +2 : ( 3 ) pop @0 ;récupération de la valeur de retour +3 : ( 4 ) mov ebx, 0 ; valeur de retour du programme +4 : ( 5 ) mov eax, 1 ; code de sortie +5 : ( 6 ) int 0x80 +6 : ( 7 ) main : push ebp ;sauvegarde la valeur de ebp +7 : ( 8 ) mov ebp, esp ;nouvelle valeur de ebp +8 : ( 9 ) push eax ;sauvegarde de eax +9 : ( 10 ) push ebx ;sauvegarde de ebx +10 : ( 11 ) push ecx ;sauvegarde de ecx +11 : ( 12 ) push edx ;sauvegarde de edx +12 : ( 13 ) sub esp, 0 ;allocation des variables locales +13 : ( 14 ) mov @10, 0 +14 : ( 15 ) imul @10, 4 +15 : ( 16 ) mov dword [t+@10], 3164 ;Affect +16 : ( 17 ) mov @11, 1 +17 : ( 18 ) imul @11, 4 +18 : ( 19 ) mov dword [t+@11], 152 ;Affect +19 : ( 20 ) mov @12, 1 +20 : ( 21 ) imul @12, 4 +21 : ( 22 ) mov edx, 0 ;mise à 0 des bits de poids fort du dividende +22 : ( 23 ) mov @15, 0 +23 : ( 24 ) imul @15, 4 +24 : ( 25 ) mov eax, dword [t+@15] ;affectation des bits de poids faible du dividende +25 : ( 26 ) idiv dword [t+@12] +26 : ( 27 ) mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée +27 : ( 28 ) mov @1, eax +28 : ( 29 ) mov @17, 1 +29 : ( 30 ) imul @17, 4 +30 : ( 31 ) mov @2, dword [t+@17] +31 : ( 32 ) imul @2, @1 +32 : ( 33 ) mov @18, 0 +33 : ( 34 ) imul @18, 4 +34 : ( 35 ) mov @3, dword [t+@18] +35 : ( 36 ) sub @3, @2 +36 : ( 37 ) mov @19, 2 +37 : ( 38 ) imul @19, 4 +38 : ( 39 ) mov dword [t+@19], @3 ;Affect +39 : ( 40 ) mov @21, 2 +40 : ( 41 ) imul @21, 4 +41 : ( 42 ) mov eax, dword [t+@21] ;Write 1 +42 : ( 43 ) call iprintLF ;Write 2 +43 : ( 44 ) add esp, 0 ;désallocation des variables locales +44 : ( 45 ) pop edx ;restaure edx +45 : ( 46 ) pop ecx ;restaure ecx +46 : ( 47 ) pop ebx ;restaure ebx +47 : ( 48 ) pop eax ;restaure eax +48 : ( 49 ) pop ebp ;restaure la valeur de ebp +49 : ( ) ret diff --git a/test2024/fgs-ref/incr1.fgs b/test2024/fgs-ref/incr1.fgs new file mode 100644 index 0000000000000000000000000000000000000000..474be0b29aeb58fe5982a910e1de0ef2a681f4a7 --- /dev/null +++ b/test2024/fgs-ref/incr1.fgs @@ -0,0 +1,27 @@ +iter num = 3 +use = () def = () in = () out = () sub esp, 4 ;allocation mémoire pour la valeur de retour +use = () def = () in = () out = () call main +use = () def = (0 ) in = () out = () pop @0 ;récupération de la valeur de retour +use = () def = (2 ) in = () out = () mov ebx, 0 ; valeur de retour du programme +use = () def = (3 ) in = () out = () mov eax, 1 ; code de sortie +use = () def = () in = () out = () int 0x80 +use = () def = () in = () out = () main : push ebp ;sauvegarde la valeur de ebp +use = () def = () in = () out = () mov ebp, esp ;nouvelle valeur de ebp +use = () def = () in = () out = () push eax ;sauvegarde de eax +use = () def = () in = () out = () push ebx ;sauvegarde de ebx +use = () def = () in = () out = () push ecx ;sauvegarde de ecx +use = () def = () in = () out = () push edx ;sauvegarde de edx +use = () def = () in = () out = () sub esp, 0 ;allocation des variables locales +use = () def = () in = () out = () mov dword [a], 4 ;Affect +use = () def = (1 ) in = () out = (1 ) mov @1, dword [a] +use = (1 ) def = (1 ) in = (1 ) out = (1 ) add @1, 1 +use = (1 ) def = () in = (1 ) out = () mov dword [a], @1 ;Affect +use = () def = (8 ) in = () out = () mov eax, dword [a] ;Write 1 +use = () def = () in = () out = () call iprintLF ;Write 2 +use = () def = () in = () out = () add esp, 0 ;désallocation des variables locales +use = () def = (9 ) in = () out = () pop edx ;restaure edx +use = () def = (10 ) in = () out = () pop ecx ;restaure ecx +use = () def = (11 ) in = () out = () pop ebx ;restaure ebx +use = () def = (12 ) in = () out = () pop eax ;restaure eax +use = () def = () in = () out = () pop ebp ;restaure la valeur de ebp +use = () def = () in = () out = () ret diff --git a/test2024/fgs-ref/incr2.fgs b/test2024/fgs-ref/incr2.fgs new file mode 100644 index 0000000000000000000000000000000000000000..90c7d4885461528553ebd23e35ed1236074951a8 --- /dev/null +++ b/test2024/fgs-ref/incr2.fgs @@ -0,0 +1,27 @@ +iter num = 3 +use = () def = () in = () out = () sub esp, 4 ;allocation mémoire pour la valeur de retour +use = () def = () in = () out = () call main +use = () def = (0 ) in = () out = () pop @0 ;récupération de la valeur de retour +use = () def = (2 ) in = () out = () mov ebx, 0 ; valeur de retour du programme +use = () def = (3 ) in = () out = () mov eax, 1 ; code de sortie +use = () def = () in = () out = () int 0x80 +use = () def = () in = () out = () main : push ebp ;sauvegarde la valeur de ebp +use = () def = () in = () out = () mov ebp, esp ;nouvelle valeur de ebp +use = () def = () in = () out = () push eax ;sauvegarde de eax +use = () def = () in = () out = () push ebx ;sauvegarde de ebx +use = () def = () in = () out = () push ecx ;sauvegarde de ecx +use = () def = () in = () out = () push edx ;sauvegarde de edx +use = () def = () in = () out = () sub esp, 4 ;allocation des variables locales +use = () def = () in = () out = () mov dword [ebp-4], 4 ;Affect +use = () def = (1 ) in = () out = (1 ) mov @1, dword [ebp-4] +use = (1 ) def = (1 ) in = (1 ) out = (1 ) add @1, 1 +use = (1 ) def = () in = (1 ) out = () mov dword [ebp-4], @1 ;Affect +use = () def = (8 ) in = () out = () mov eax, dword [ebp-4] ;Write 1 +use = () def = () in = () out = () call iprintLF ;Write 2 +use = () def = () in = () out = () add esp, 4 ;désallocation des variables locales +use = () def = (9 ) in = () out = () pop edx ;restaure edx +use = () def = (10 ) in = () out = () pop ecx ;restaure ecx +use = () def = (11 ) in = () out = () pop ebx ;restaure ebx +use = () def = (12 ) in = () out = () pop eax ;restaure eax +use = () def = () in = () out = () pop ebp ;restaure la valeur de ebp +use = () def = () in = () out = () ret diff --git a/test2024/fgs-ref/incr3.fgs b/test2024/fgs-ref/incr3.fgs new file mode 100644 index 0000000000000000000000000000000000000000..f9e3e83e5c125106502e9f4f6ab08d8799a0f1ee --- /dev/null +++ b/test2024/fgs-ref/incr3.fgs @@ -0,0 +1,35 @@ +iter num = 7 +use = () def = () in = () out = () sub esp, 4 ;allocation mémoire pour la valeur de retour +use = () def = () in = () out = () call main +use = () def = (0 ) in = () out = () pop @0 ;récupération de la valeur de retour +use = () def = (2 ) in = () out = () mov ebx, 0 ; valeur de retour du programme +use = () def = (3 ) in = () out = () mov eax, 1 ; code de sortie +use = () def = () in = () out = () int 0x80 +use = () def = () in = () out = () main : push ebp ;sauvegarde la valeur de ebp +use = () def = () in = () out = () mov ebp, esp ;nouvelle valeur de ebp +use = () def = () in = () out = () push eax ;sauvegarde de eax +use = () def = () in = () out = () push ebx ;sauvegarde de ebx +use = () def = () in = () out = () push ecx ;sauvegarde de ecx +use = () def = () in = () out = () push edx ;sauvegarde de edx +use = () def = () in = () out = () sub esp, 0 ;allocation des variables locales +use = () def = (8 ) in = () out = (8 ) mov @8, 1 +use = (8 ) def = (8 ) in = (8 ) out = (8 ) imul @8, 4 +use = (8 ) def = () in = (8 ) out = () mov dword [t+@8], 100 ;Affect +use = () def = (9 ) in = () out = (9 ) mov @9, 1 +use = (9 ) def = (9 ) in = (9 ) out = (9 ) imul @9, 4 +use = (9 ) def = (1 ) in = (9 ) out = (1 ) mov @1, dword [t+@9] +use = (1 ) def = (1 ) in = (1 ) out = (1 ) add @1, 10 +use = () def = (10 ) in = (1 ) out = (1 10 ) mov @10, 1 +use = (10 ) def = (10 ) in = (1 10 ) out = (1 10 ) imul @10, 4 +use = (1 10 ) def = () in = (1 10 ) out = () mov dword [t+@10], @1 ;Affect +use = () def = (12 ) in = () out = (12 ) mov @12, 1 +use = (12 ) def = (12 ) in = (12 ) out = (12 ) imul @12, 4 +use = (12 ) def = (11 ) in = (12 ) out = () mov eax, dword [t+@12] ;Write 1 +use = () def = () in = () out = () call iprintLF ;Write 2 +use = () def = () in = () out = () add esp, 0 ;désallocation des variables locales +use = () def = (13 ) in = () out = () pop edx ;restaure edx +use = () def = (14 ) in = () out = () pop ecx ;restaure ecx +use = () def = (15 ) in = () out = () pop ebx ;restaure ebx +use = () def = (16 ) in = () out = () pop eax ;restaure eax +use = () def = () in = () out = () pop ebp ;restaure la valeur de ebp +use = () def = () in = () out = () ret diff --git a/test2024/fgs-ref/incr4.fgs b/test2024/fgs-ref/incr4.fgs new file mode 100644 index 0000000000000000000000000000000000000000..17606c132796060cd33dcbeaf24836a74e82d371 --- /dev/null +++ b/test2024/fgs-ref/incr4.fgs @@ -0,0 +1,31 @@ +iter num = 5 +use = () def = () in = () out = () sub esp, 4 ;allocation mémoire pour la valeur de retour +use = () def = () in = () out = () call main +use = () def = (0 ) in = () out = () pop @0 ;récupération de la valeur de retour +use = () def = (4 ) in = () out = () mov ebx, 0 ; valeur de retour du programme +use = () def = (5 ) in = () out = () mov eax, 1 ; code de sortie +use = () def = () in = () out = () int 0x80 +use = () def = () in = () out = () main : push ebp ;sauvegarde la valeur de ebp +use = () def = () in = () out = () mov ebp, esp ;nouvelle valeur de ebp +use = () def = () in = () out = () push eax ;sauvegarde de eax +use = () def = () in = () out = () push ebx ;sauvegarde de ebx +use = () def = () in = () out = () push ecx ;sauvegarde de ecx +use = () def = () in = () out = () push edx ;sauvegarde de edx +use = () def = () in = () out = () sub esp, 0 ;allocation des variables locales +use = () def = () in = () out = () mov dword [a], 4 ;Affect +use = () def = (1 ) in = () out = (1 ) mov @1, 12 +use = (1 ) def = (1 ) in = (1 ) out = (1 ) imul @1, 2 +use = () def = (2 ) in = (1 ) out = (1 2 ) mov @2, dword [a] +use = (1 2 ) def = (2 ) in = (1 2 ) out = (2 ) add @2, @1 +use = () def = (3 ) in = (2 ) out = (2 3 ) mov @3, dword [a] +use = (2 3 ) def = (3 ) in = (2 3 ) out = (3 ) add @3, @2 +use = (3 ) def = () in = (3 ) out = () mov dword [a], @3 ;Affect +use = () def = (10 ) in = () out = () mov eax, dword [a] ;Write 1 +use = () def = () in = () out = () call iprintLF ;Write 2 +use = () def = () in = () out = () add esp, 0 ;désallocation des variables locales +use = () def = (11 ) in = () out = () pop edx ;restaure edx +use = () def = (12 ) in = () out = () pop ecx ;restaure ecx +use = () def = (13 ) in = () out = () pop ebx ;restaure ebx +use = () def = (14 ) in = () out = () pop eax ;restaure eax +use = () def = () in = () out = () pop ebp ;restaure la valeur de ebp +use = () def = () in = () out = () ret diff --git a/test2024/fgs-ref/incr5.fgs b/test2024/fgs-ref/incr5.fgs new file mode 100644 index 0000000000000000000000000000000000000000..fff9383232636b7026e2635849d7740c38f566a2 --- /dev/null +++ b/test2024/fgs-ref/incr5.fgs @@ -0,0 +1,47 @@ +iter num = 9 +use = () def = () in = () out = () sub esp, 4 ;allocation mémoire pour la valeur de retour +use = () def = () in = () out = () call main +use = () def = (0 ) in = () out = () pop @0 ;récupération de la valeur de retour +use = () def = (3 ) in = () out = () mov ebx, 0 ; valeur de retour du programme +use = () def = (4 ) in = () out = () mov eax, 1 ; code de sortie +use = () def = () in = () out = () int 0x80 +use = () def = () in = () out = () main : push ebp ;sauvegarde la valeur de ebp +use = () def = () in = () out = () mov ebp, esp ;nouvelle valeur de ebp +use = () def = () in = () out = () push eax ;sauvegarde de eax +use = () def = () in = () out = () push ebx ;sauvegarde de ebx +use = () def = () in = () out = () push ecx ;sauvegarde de ecx +use = () def = () in = () out = () push edx ;sauvegarde de edx +use = () def = () in = () out = () sub esp, 0 ;allocation des variables locales +use = () def = (9 ) in = () out = (9 ) mov @9, 1 +use = (9 ) def = (9 ) in = (9 ) out = (9 ) imul @9, 4 +use = (9 ) def = () in = (9 ) out = () mov dword [t+@9], 2 ;Affect +use = () def = (10 ) in = () out = (10 ) mov @10, 2 +use = (10 ) def = (10 ) in = (10 ) out = (10 ) imul @10, 4 +use = (10 ) def = () in = (10 ) out = () mov dword [t+@10], 3 ;Affect +use = () def = (11 ) in = () out = (11 ) mov @11, 3 +use = (11 ) def = (11 ) in = (11 ) out = (11 ) imul @11, 4 +use = (11 ) def = () in = (11 ) out = () mov dword [t+@11], 1 ;Affect +use = () def = (12 ) in = () out = (12 ) mov @12, 1 +use = (12 ) def = (12 ) in = (12 ) out = (12 ) imul @12, 4 +use = (12 ) def = (1 ) in = (12 ) out = (1 ) mov @1, dword [t+@12] +use = () def = (13 ) in = (1 ) out = (1 13 ) mov @13, 2 +use = (13 ) def = (13 ) in = (1 13 ) out = (1 13 ) imul @13, 4 +use = (1 13 ) def = (1 ) in = (1 13 ) out = (1 ) imul @1, dword [t+@13] +use = () def = (14 ) in = (1 ) out = (1 14 ) mov @14, 3 +use = (14 ) def = (14 ) in = (1 14 ) out = (1 14 ) imul @14, 4 +use = (14 ) def = (2 ) in = (1 14 ) out = (1 2 ) mov @2, dword [t+@14] +use = (1 2 ) def = (2 ) in = (1 2 ) out = (2 ) add @2, @1 +use = () def = (15 ) in = (2 ) out = (2 15 ) mov @15, 3 +use = (15 ) def = (15 ) in = (2 15 ) out = (2 15 ) imul @15, 4 +use = (2 15 ) def = () in = (2 15 ) out = () mov dword [t+@15], @2 ;Affect +use = () def = (17 ) in = () out = (17 ) mov @17, 3 +use = (17 ) def = (17 ) in = (17 ) out = (17 ) imul @17, 4 +use = (17 ) def = (16 ) in = (17 ) out = () mov eax, dword [t+@17] ;Write 1 +use = () def = () in = () out = () call iprintLF ;Write 2 +use = () def = () in = () out = () add esp, 0 ;désallocation des variables locales +use = () def = (18 ) in = () out = () pop edx ;restaure edx +use = () def = (19 ) in = () out = () pop ecx ;restaure ecx +use = () def = (20 ) in = () out = () pop ebx ;restaure ebx +use = () def = (21 ) in = () out = () pop eax ;restaure eax +use = () def = () in = () out = () pop ebp ;restaure la valeur de ebp +use = () def = () in = () out = () ret diff --git a/test2024/fgs-ref/modulo1.fgs b/test2024/fgs-ref/modulo1.fgs new file mode 100644 index 0000000000000000000000000000000000000000..9a9c6053eb301a52fe806d2abb87a32892396fa4 --- /dev/null +++ b/test2024/fgs-ref/modulo1.fgs @@ -0,0 +1,33 @@ +iter num = 38 +use = () def = () in = (13 ) out = (13 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +use = () def = () in = (13 ) out = (13 ) call main +use = () def = (0 ) in = (13 ) out = (13 ) pop @0 ;récupération de la valeur de retour +use = () def = (4 ) in = (13 ) out = (13 ) mov ebx, 0 ; valeur de retour du programme +use = () def = (5 ) in = (13 ) out = (13 ) mov eax, 1 ; code de sortie +use = () def = () in = (13 ) out = (13 ) int 0x80 +use = () def = () in = (13 ) out = (13 ) main : push ebp ;sauvegarde la valeur de ebp +use = () def = () in = (13 ) out = (13 ) mov ebp, esp ;nouvelle valeur de ebp +use = () def = () in = (13 ) out = (13 ) push eax ;sauvegarde de eax +use = () def = () in = (13 ) out = (13 ) push ebx ;sauvegarde de ebx +use = () def = () in = (13 ) out = (13 ) push ecx ;sauvegarde de ecx +use = () def = () in = (13 ) out = (13 ) push edx ;sauvegarde de edx +use = () def = () in = (13 ) out = (13 ) sub esp, 0 ;allocation des variables locales +use = () def = (10 ) in = (13 ) out = (10 13 ) mov edx, 0 ;mise à 0 des bits de poids fort du dividende +use = () def = (11 ) in = (10 13 ) out = (10 13 ) mov eax, 5 ;affectation des bits de poids faible du dividende +use = () def = (12 ) in = (10 13 ) out = (10 12 13 ) mov @12, 3 +use = (12 ) def = () in = (10 12 13 ) out = (10 13 ) idiv @12 +use = (10 ) def = (10 ) in = (10 13 ) out = (13 ) mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée +use = (13 ) def = (1 ) in = (13 ) out = (1 ) mov @1, eax +use = () def = (2 ) in = (1 ) out = (1 2 ) mov @2, 3 +use = (1 2 ) def = (2 ) in = (1 2 ) out = (2 ) imul @2, @1 +use = () def = (3 ) in = (2 ) out = (2 3 ) mov @3, 5 +use = (2 3 ) def = (3 ) in = (2 3 ) out = (3 ) sub @3, @2 +use = (3 ) def = (14 ) in = (3 ) out = () mov eax, @3 ;Write 1 +use = () def = () in = () out = () call iprintLF ;Write 2 +use = () def = () in = () out = () add esp, 0 ;désallocation des variables locales +use = () def = (15 ) in = () out = () pop edx ;restaure edx +use = () def = (16 ) in = () out = () pop ecx ;restaure ecx +use = () def = (17 ) in = () out = () pop ebx ;restaure ebx +use = () def = (18 ) in = () out = () pop eax ;restaure eax +use = () def = () in = () out = () pop ebp ;restaure la valeur de ebp +use = () def = () in = () out = () ret diff --git a/test2024/fgs-ref/modulo2.fgs b/test2024/fgs-ref/modulo2.fgs new file mode 100644 index 0000000000000000000000000000000000000000..67e16c37290e73699cc51b28b09ab575a55cbb35 --- /dev/null +++ b/test2024/fgs-ref/modulo2.fgs @@ -0,0 +1,35 @@ +iter num = 38 +use = () def = () in = (14 ) out = (14 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +use = () def = () in = (14 ) out = (14 ) call main +use = () def = (0 ) in = (14 ) out = (14 ) pop @0 ;récupération de la valeur de retour +use = () def = (5 ) in = (14 ) out = (14 ) mov ebx, 0 ; valeur de retour du programme +use = () def = (6 ) in = (14 ) out = (14 ) mov eax, 1 ; code de sortie +use = () def = () in = (14 ) out = (14 ) int 0x80 +use = () def = () in = (14 ) out = (14 ) main : push ebp ;sauvegarde la valeur de ebp +use = () def = () in = (14 ) out = (14 ) mov ebp, esp ;nouvelle valeur de ebp +use = () def = () in = (14 ) out = (14 ) push eax ;sauvegarde de eax +use = () def = () in = (14 ) out = (14 ) push ebx ;sauvegarde de ebx +use = () def = () in = (14 ) out = (14 ) push ecx ;sauvegarde de ecx +use = () def = () in = (14 ) out = (14 ) push edx ;sauvegarde de edx +use = () def = () in = (14 ) out = (14 ) sub esp, 0 ;allocation des variables locales +use = () def = (11 ) in = (14 ) out = (11 14 ) mov edx, 0 ;mise à 0 des bits de poids fort du dividende +use = () def = (12 ) in = (11 14 ) out = (11 14 ) mov eax, 12 ;affectation des bits de poids faible du dividende +use = () def = (13 ) in = (11 14 ) out = (11 13 14 ) mov @13, 7 +use = (13 ) def = () in = (11 13 14 ) out = (11 14 ) idiv @13 +use = (11 ) def = (11 ) in = (11 14 ) out = (14 ) mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée +use = (14 ) def = (1 ) in = (14 ) out = (1 ) mov @1, eax +use = () def = (2 ) in = (1 ) out = (1 2 ) mov @2, 7 +use = (1 2 ) def = (2 ) in = (1 2 ) out = (2 ) imul @2, @1 +use = () def = (3 ) in = (2 ) out = (2 3 ) mov @3, 12 +use = (2 3 ) def = (3 ) in = (2 3 ) out = (3 ) sub @3, @2 +use = (3 ) def = (4 ) in = (3 ) out = (4 ) mov @4, @3 +use = (4 ) def = (4 ) in = (4 ) out = (4 ) add @4, 5 +use = (4 ) def = (15 ) in = (4 ) out = () mov eax, @4 ;Write 1 +use = () def = () in = () out = () call iprintLF ;Write 2 +use = () def = () in = () out = () add esp, 0 ;désallocation des variables locales +use = () def = (16 ) in = () out = () pop edx ;restaure edx +use = () def = (17 ) in = () out = () pop ecx ;restaure ecx +use = () def = (18 ) in = () out = () pop ebx ;restaure ebx +use = () def = (19 ) in = () out = () pop eax ;restaure eax +use = () def = () in = () out = () pop ebp ;restaure la valeur de ebp +use = () def = () in = () out = () ret diff --git a/test2024/fgs-ref/modulo3.fgs b/test2024/fgs-ref/modulo3.fgs new file mode 100644 index 0000000000000000000000000000000000000000..cb9534a2227352cd6c4640a3314a16e18a8007ec --- /dev/null +++ b/test2024/fgs-ref/modulo3.fgs @@ -0,0 +1,37 @@ +iter num = 42 +use = () def = () in = (15 ) out = (15 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +use = () def = () in = (15 ) out = (15 ) call main +use = () def = (0 ) in = (15 ) out = (15 ) pop @0 ;récupération de la valeur de retour +use = () def = (6 ) in = (15 ) out = (15 ) mov ebx, 0 ; valeur de retour du programme +use = () def = (7 ) in = (15 ) out = (15 ) mov eax, 1 ; code de sortie +use = () def = () in = (15 ) out = (15 ) int 0x80 +use = () def = () in = (15 ) out = (15 ) main : push ebp ;sauvegarde la valeur de ebp +use = () def = () in = (15 ) out = (15 ) mov ebp, esp ;nouvelle valeur de ebp +use = () def = () in = (15 ) out = (15 ) push eax ;sauvegarde de eax +use = () def = () in = (15 ) out = (15 ) push ebx ;sauvegarde de ebx +use = () def = () in = (15 ) out = (15 ) push ecx ;sauvegarde de ecx +use = () def = () in = (15 ) out = (15 ) push edx ;sauvegarde de edx +use = () def = () in = (15 ) out = (15 ) sub esp, 0 ;allocation des variables locales +use = () def = (1 ) in = (15 ) out = (1 15 ) mov @1, 2 +use = (1 ) def = (1 ) in = (1 15 ) out = (1 15 ) imul @1, 7 +use = () def = (12 ) in = (1 15 ) out = (1 12 15 ) mov edx, 0 ;mise à 0 des bits de poids fort du dividende +use = (1 ) def = (13 ) in = (1 12 15 ) out = (1 12 15 ) mov eax, @1 ;affectation des bits de poids faible du dividende +use = () def = (14 ) in = (1 12 15 ) out = (1 12 14 15 ) mov @14, 5 +use = (14 ) def = () in = (1 12 14 15 ) out = (1 12 15 ) idiv @14 +use = (12 ) def = (12 ) in = (1 12 15 ) out = (1 15 ) mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée +use = (15 ) def = (2 ) in = (1 15 ) out = (1 2 ) mov @2, eax +use = () def = (3 ) in = (1 2 ) out = (1 2 3 ) mov @3, 5 +use = (2 3 ) def = (3 ) in = (1 2 3 ) out = (1 3 ) imul @3, @2 +use = (1 ) def = (4 ) in = (1 3 ) out = (3 4 ) mov @4, @1 +use = (3 4 ) def = (4 ) in = (3 4 ) out = (4 ) sub @4, @3 +use = (4 ) def = (5 ) in = (4 ) out = (5 ) mov @5, @4 +use = (5 ) def = (5 ) in = (5 ) out = (5 ) add @5, 5 +use = (5 ) def = (16 ) in = (5 ) out = () mov eax, @5 ;Write 1 +use = () def = () in = () out = () call iprintLF ;Write 2 +use = () def = () in = () out = () add esp, 0 ;désallocation des variables locales +use = () def = (17 ) in = () out = () pop edx ;restaure edx +use = () def = (18 ) in = () out = () pop ecx ;restaure ecx +use = () def = (19 ) in = () out = () pop ebx ;restaure ebx +use = () def = (20 ) in = () out = () pop eax ;restaure eax +use = () def = () in = () out = () pop ebp ;restaure la valeur de ebp +use = () def = () in = () out = () ret diff --git a/test2024/fgs-ref/modulo4.fgs b/test2024/fgs-ref/modulo4.fgs new file mode 100644 index 0000000000000000000000000000000000000000..f26ae7a3f66b864c08df2e990cded1bc3e7aaa42 --- /dev/null +++ b/test2024/fgs-ref/modulo4.fgs @@ -0,0 +1,34 @@ +iter num = 40 +use = () def = () in = (12 ) out = (12 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +use = () def = () in = (12 ) out = (12 ) call main +use = () def = (0 ) in = (12 ) out = (12 ) pop @0 ;récupération de la valeur de retour +use = () def = (4 ) in = (12 ) out = (12 ) mov ebx, 0 ; valeur de retour du programme +use = () def = (5 ) in = (12 ) out = (12 ) mov eax, 1 ; code de sortie +use = () def = () in = (12 ) out = (12 ) int 0x80 +use = () def = () in = (12 ) out = (12 ) main : push ebp ;sauvegarde la valeur de ebp +use = () def = () in = (12 ) out = (12 ) mov ebp, esp ;nouvelle valeur de ebp +use = () def = () in = (12 ) out = (12 ) push eax ;sauvegarde de eax +use = () def = () in = (12 ) out = (12 ) push ebx ;sauvegarde de ebx +use = () def = () in = (12 ) out = (12 ) push ecx ;sauvegarde de ecx +use = () def = () in = (12 ) out = (12 ) push edx ;sauvegarde de edx +use = () def = () in = (12 ) out = (12 ) sub esp, 0 ;allocation des variables locales +use = () def = () in = (12 ) out = (12 ) mov dword [a], 12 ;Affect +use = () def = () in = (12 ) out = (12 ) mov dword [b], 5 ;Affect +use = () def = (10 ) in = (12 ) out = (10 12 ) mov edx, 0 ;mise à 0 des bits de poids fort du dividende +use = () def = (11 ) in = (10 12 ) out = (10 12 ) mov eax, dword [a] ;affectation des bits de poids faible du dividende +use = () def = () in = (10 12 ) out = (10 12 ) idiv dword [b] +use = (10 ) def = (10 ) in = (10 12 ) out = (12 ) mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée +use = (12 ) def = (1 ) in = (12 ) out = (1 ) mov @1, eax +use = () def = (2 ) in = (1 ) out = (1 2 ) mov @2, dword [b] +use = (1 2 ) def = (2 ) in = (1 2 ) out = (2 ) imul @2, @1 +use = () def = (3 ) in = (2 ) out = (2 3 ) mov @3, dword [a] +use = (2 3 ) def = (3 ) in = (2 3 ) out = (3 ) sub @3, @2 +use = (3 ) def = (13 ) in = (3 ) out = () mov eax, @3 ;Write 1 +use = () def = () in = () out = () call iprintLF ;Write 2 +use = () def = () in = () out = () add esp, 0 ;désallocation des variables locales +use = () def = (14 ) in = () out = () pop edx ;restaure edx +use = () def = (15 ) in = () out = () pop ecx ;restaure ecx +use = () def = (16 ) in = () out = () pop ebx ;restaure ebx +use = () def = (17 ) in = () out = () pop eax ;restaure eax +use = () def = () in = () out = () pop ebp ;restaure la valeur de ebp +use = () def = () in = () out = () ret diff --git a/test2024/fgs-ref/modulo5.fgs b/test2024/fgs-ref/modulo5.fgs new file mode 100644 index 0000000000000000000000000000000000000000..e3a293e5f136af18c89f60b5abe156de3faa001d --- /dev/null +++ b/test2024/fgs-ref/modulo5.fgs @@ -0,0 +1,51 @@ +iter num = 56 +use = () def = () in = (16 ) out = (16 ) sub esp, 4 ;allocation mémoire pour la valeur de retour +use = () def = () in = (16 ) out = (16 ) call main +use = () def = (0 ) in = (16 ) out = (16 ) pop @0 ;récupération de la valeur de retour +use = () def = (4 ) in = (16 ) out = (16 ) mov ebx, 0 ; valeur de retour du programme +use = () def = (5 ) in = (16 ) out = (16 ) mov eax, 1 ; code de sortie +use = () def = () in = (16 ) out = (16 ) int 0x80 +use = () def = () in = (16 ) out = (16 ) main : push ebp ;sauvegarde la valeur de ebp +use = () def = () in = (16 ) out = (16 ) mov ebp, esp ;nouvelle valeur de ebp +use = () def = () in = (16 ) out = (16 ) push eax ;sauvegarde de eax +use = () def = () in = (16 ) out = (16 ) push ebx ;sauvegarde de ebx +use = () def = () in = (16 ) out = (16 ) push ecx ;sauvegarde de ecx +use = () def = () in = (16 ) out = (16 ) push edx ;sauvegarde de edx +use = () def = () in = (16 ) out = (16 ) sub esp, 0 ;allocation des variables locales +use = () def = (10 ) in = (16 ) out = (10 16 ) mov @10, 0 +use = (10 ) def = (10 ) in = (10 16 ) out = (10 16 ) imul @10, 4 +use = (10 ) def = () in = (10 16 ) out = (16 ) mov dword [t+@10], 3164 ;Affect +use = () def = (11 ) in = (16 ) out = (11 16 ) mov @11, 1 +use = (11 ) def = (11 ) in = (11 16 ) out = (11 16 ) imul @11, 4 +use = (11 ) def = () in = (11 16 ) out = (16 ) mov dword [t+@11], 152 ;Affect +use = () def = (12 ) in = (16 ) out = (12 16 ) mov @12, 1 +use = (12 ) def = (12 ) in = (12 16 ) out = (12 16 ) imul @12, 4 +use = () def = (13 ) in = (12 16 ) out = (12 13 16 ) mov edx, 0 ;mise à 0 des bits de poids fort du dividende +use = () def = (15 ) in = (12 13 16 ) out = (12 13 15 16 ) mov @15, 0 +use = (15 ) def = (15 ) in = (12 13 15 16 ) out = (12 13 15 16 ) imul @15, 4 +use = (15 ) def = (14 ) in = (12 13 15 16 ) out = (12 13 16 ) mov eax, dword [t+@15] ;affectation des bits de poids faible du dividende +use = (12 ) def = () in = (12 13 16 ) out = (13 16 ) idiv dword [t+@12] +use = (13 ) def = (13 ) in = (13 16 ) out = (16 ) mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée +use = (16 ) def = (1 ) in = (16 ) out = (1 ) mov @1, eax +use = () def = (17 ) in = (1 ) out = (1 17 ) mov @17, 1 +use = (17 ) def = (17 ) in = (1 17 ) out = (1 17 ) imul @17, 4 +use = (17 ) def = (2 ) in = (1 17 ) out = (1 2 ) mov @2, dword [t+@17] +use = (1 2 ) def = (2 ) in = (1 2 ) out = (2 ) imul @2, @1 +use = () def = (18 ) in = (2 ) out = (2 18 ) mov @18, 0 +use = (18 ) def = (18 ) in = (2 18 ) out = (2 18 ) imul @18, 4 +use = (18 ) def = (3 ) in = (2 18 ) out = (2 3 ) mov @3, dword [t+@18] +use = (2 3 ) def = (3 ) in = (2 3 ) out = (3 ) sub @3, @2 +use = () def = (19 ) in = (3 ) out = (3 19 ) mov @19, 2 +use = (19 ) def = (19 ) in = (3 19 ) out = (3 19 ) imul @19, 4 +use = (3 19 ) def = () in = (3 19 ) out = () mov dword [t+@19], @3 ;Affect +use = () def = (21 ) in = () out = (21 ) mov @21, 2 +use = (21 ) def = (21 ) in = (21 ) out = (21 ) imul @21, 4 +use = (21 ) def = (20 ) in = (21 ) out = () mov eax, dword [t+@21] ;Write 1 +use = () def = () in = () out = () call iprintLF ;Write 2 +use = () def = () in = () out = () add esp, 0 ;désallocation des variables locales +use = () def = (22 ) in = () out = () pop edx ;restaure edx +use = () def = (23 ) in = () out = () pop ecx ;restaure ecx +use = () def = (24 ) in = () out = () pop ebx ;restaure ebx +use = () def = (25 ) in = () out = () pop eax ;restaure eax +use = () def = () in = () out = () pop ebp ;restaure la valeur de ebp +use = () def = () in = () out = () ret diff --git a/test2024/ig-ref/incr1.ig b/test2024/ig-ref/incr1.ig new file mode 100644 index 0000000000000000000000000000000000000000..e40116d49a224eca62b01a95f95cfc4579d3cf0e --- /dev/null +++ b/test2024/ig-ref/incr1.ig @@ -0,0 +1,13 @@ +0 : ( ) +1 : ( ) +2 : ( ) +3 : ( ) +4 : ( ) +5 : ( ) +6 : ( ) +7 : ( ) +8 : ( ) +9 : ( ) +10 : ( ) +11 : ( ) +12 : ( ) diff --git a/test2024/ig-ref/incr2.ig b/test2024/ig-ref/incr2.ig new file mode 100644 index 0000000000000000000000000000000000000000..e40116d49a224eca62b01a95f95cfc4579d3cf0e --- /dev/null +++ b/test2024/ig-ref/incr2.ig @@ -0,0 +1,13 @@ +0 : ( ) +1 : ( ) +2 : ( ) +3 : ( ) +4 : ( ) +5 : ( ) +6 : ( ) +7 : ( ) +8 : ( ) +9 : ( ) +10 : ( ) +11 : ( ) +12 : ( ) diff --git a/test2024/ig-ref/incr3.ig b/test2024/ig-ref/incr3.ig new file mode 100644 index 0000000000000000000000000000000000000000..8ce7325acad647271b3e8cc72f72b7ad14dbcb9d --- /dev/null +++ b/test2024/ig-ref/incr3.ig @@ -0,0 +1,17 @@ +0 : ( ) +1 : ( 10 ) +2 : ( ) +3 : ( ) +4 : ( ) +5 : ( ) +6 : ( ) +7 : ( ) +8 : ( ) +9 : ( ) +10 : ( 1 ) +11 : ( ) +12 : ( ) +13 : ( ) +14 : ( ) +15 : ( ) +16 : ( ) diff --git a/test2024/ig-ref/incr4.ig b/test2024/ig-ref/incr4.ig new file mode 100644 index 0000000000000000000000000000000000000000..a637b5c215c99643d2fd5782881365f0526b9be3 --- /dev/null +++ b/test2024/ig-ref/incr4.ig @@ -0,0 +1,15 @@ +0 : ( ) +1 : ( 2 ) +2 : ( 3 1 ) +3 : ( 2 ) +4 : ( ) +5 : ( ) +6 : ( ) +7 : ( ) +8 : ( ) +9 : ( ) +10 : ( ) +11 : ( ) +12 : ( ) +13 : ( ) +14 : ( ) diff --git a/test2024/ig-ref/incr5.ig b/test2024/ig-ref/incr5.ig new file mode 100644 index 0000000000000000000000000000000000000000..572f7a69ec3ec8f01aacc2e4c202812603dd332d --- /dev/null +++ b/test2024/ig-ref/incr5.ig @@ -0,0 +1,22 @@ +0 : ( ) +1 : ( 2 14 13 ) +2 : ( 15 1 ) +3 : ( ) +4 : ( ) +5 : ( ) +6 : ( ) +7 : ( ) +8 : ( ) +9 : ( ) +10 : ( ) +11 : ( ) +12 : ( ) +13 : ( 1 ) +14 : ( 1 ) +15 : ( 2 ) +16 : ( ) +17 : ( ) +18 : ( ) +19 : ( ) +20 : ( ) +21 : ( ) diff --git a/test2024/ig-ref/modulo1.ig b/test2024/ig-ref/modulo1.ig new file mode 100644 index 0000000000000000000000000000000000000000..3b3ca61cf763e3c7dc7967127c6676dce1348299 --- /dev/null +++ b/test2024/ig-ref/modulo1.ig @@ -0,0 +1,19 @@ +0 : ( ) +1 : ( 2 ) +2 : ( 3 1 ) +3 : ( 2 ) +4 : ( ) +5 : ( ) +6 : ( ) +7 : ( ) +8 : ( ) +9 : ( ) +10 : ( 12 13 ) +11 : ( ) +12 : ( 13 10 ) +13 : ( 12 10 ) +14 : ( ) +15 : ( ) +16 : ( ) +17 : ( ) +18 : ( ) diff --git a/test2024/ig-ref/modulo2.ig b/test2024/ig-ref/modulo2.ig new file mode 100644 index 0000000000000000000000000000000000000000..8e846f4bdba57a00b65217097055c980b2652982 --- /dev/null +++ b/test2024/ig-ref/modulo2.ig @@ -0,0 +1,20 @@ +0 : ( ) +1 : ( 2 ) +2 : ( 3 1 ) +3 : ( 2 ) +4 : ( ) +5 : ( ) +6 : ( ) +7 : ( ) +8 : ( ) +9 : ( ) +10 : ( ) +11 : ( 13 14 ) +12 : ( ) +13 : ( 14 11 ) +14 : ( 13 11 ) +15 : ( ) +16 : ( ) +17 : ( ) +18 : ( ) +19 : ( ) diff --git a/test2024/ig-ref/modulo3.ig b/test2024/ig-ref/modulo3.ig new file mode 100644 index 0000000000000000000000000000000000000000..e892563a1b97e9168a45adb032d06ce824cd5516 --- /dev/null +++ b/test2024/ig-ref/modulo3.ig @@ -0,0 +1,21 @@ +0 : ( ) +1 : ( 3 2 14 12 15 ) +2 : ( 3 1 ) +3 : ( 4 2 1 ) +4 : ( 3 ) +5 : ( ) +6 : ( ) +7 : ( ) +8 : ( ) +9 : ( ) +10 : ( ) +11 : ( ) +12 : ( 14 15 1 ) +13 : ( ) +14 : ( 15 12 1 ) +15 : ( 14 12 1 ) +16 : ( ) +17 : ( ) +18 : ( ) +19 : ( ) +20 : ( ) diff --git a/test2024/ig-ref/modulo4.ig b/test2024/ig-ref/modulo4.ig new file mode 100644 index 0000000000000000000000000000000000000000..1651db72e36ec48a8a2faac0461618a97a0c80c7 --- /dev/null +++ b/test2024/ig-ref/modulo4.ig @@ -0,0 +1,18 @@ +0 : ( ) +1 : ( 2 ) +2 : ( 3 1 ) +3 : ( 2 ) +4 : ( ) +5 : ( ) +6 : ( ) +7 : ( ) +8 : ( ) +9 : ( ) +10 : ( 12 ) +11 : ( ) +12 : ( 10 ) +13 : ( ) +14 : ( ) +15 : ( ) +16 : ( ) +17 : ( ) diff --git a/test2024/ig-ref/modulo5.ig b/test2024/ig-ref/modulo5.ig new file mode 100644 index 0000000000000000000000000000000000000000..6c9f37052c4a480b78527cd1c204eb6ff09bdb62 --- /dev/null +++ b/test2024/ig-ref/modulo5.ig @@ -0,0 +1,26 @@ +0 : ( ) +1 : ( 2 17 ) +2 : ( 3 18 1 ) +3 : ( 19 2 ) +4 : ( ) +5 : ( ) +6 : ( ) +7 : ( ) +8 : ( ) +9 : ( ) +10 : ( 16 ) +11 : ( 16 ) +12 : ( 15 13 16 ) +13 : ( 15 16 12 ) +14 : ( ) +15 : ( 16 13 12 ) +16 : ( 15 13 12 11 10 ) +17 : ( 1 ) +18 : ( 2 ) +19 : ( 3 ) +20 : ( ) +21 : ( ) +22 : ( ) +23 : ( ) +24 : ( ) +25 : ( ) diff --git a/test2024/input/incr1.l b/test2024/input/incr1.l new file mode 100644 index 0000000000000000000000000000000000000000..5bad6b3348d44755094c568fdd38b0f1c390126d --- /dev/null +++ b/test2024/input/incr1.l @@ -0,0 +1,7 @@ +entier a +main() +{ +a = 4; +a += 1; +ecrire(a); +} diff --git a/test2024/input/incr2.l b/test2024/input/incr2.l new file mode 100644 index 0000000000000000000000000000000000000000..03c4d5c0ee8769f01e622d20854f8a26dc589485 --- /dev/null +++ b/test2024/input/incr2.l @@ -0,0 +1,7 @@ +main() +entier a +{ +a = 4; +a += 1; +ecrire(a); +} diff --git a/test2024/input/incr3.l b/test2024/input/incr3.l new file mode 100644 index 0000000000000000000000000000000000000000..0aa7a31cdfdf910d04194e4a460e180c022f8fd8 --- /dev/null +++ b/test2024/input/incr3.l @@ -0,0 +1,7 @@ +entier t[10] +main() +{ +t[1] = 100; +t[1] += 10; +ecrire(t[1]); +} diff --git a/test2024/input/incr4.l b/test2024/input/incr4.l new file mode 100644 index 0000000000000000000000000000000000000000..bf9a5625a54efcce06e18f51bb6728c368a8e461 --- /dev/null +++ b/test2024/input/incr4.l @@ -0,0 +1,7 @@ +entier a +main() +{ +a = 4; +a += a + 12 * 2; +ecrire(a); +} diff --git a/test2024/input/incr5.l b/test2024/input/incr5.l new file mode 100644 index 0000000000000000000000000000000000000000..e1f02d57de928c55b78f848ce2a2b8be0f7e2d7b --- /dev/null +++ b/test2024/input/incr5.l @@ -0,0 +1,9 @@ +entier t[10] +main() +{ +t[1] = 2; +t[2] = 3; +t[3] = 1; +t[3] += t[1] * t[2]; +ecrire(t[3]); +} diff --git a/test2024/input/modulo1.l b/test2024/input/modulo1.l new file mode 100644 index 0000000000000000000000000000000000000000..8196575a87015e81648b21103d05bb6a371f5c13 --- /dev/null +++ b/test2024/input/modulo1.l @@ -0,0 +1,4 @@ +main() +{ +ecrire(5 % 3); +} diff --git a/test2024/input/modulo2.l b/test2024/input/modulo2.l new file mode 100644 index 0000000000000000000000000000000000000000..908558aa164ea5da9555ffb65c372b639e10af62 --- /dev/null +++ b/test2024/input/modulo2.l @@ -0,0 +1,5 @@ + +main() +{ +ecrire(12 % 7 + 5); +} diff --git a/test2024/input/modulo3.l b/test2024/input/modulo3.l new file mode 100644 index 0000000000000000000000000000000000000000..5232774a349331039e870821a9f3d99cf0b4dad1 --- /dev/null +++ b/test2024/input/modulo3.l @@ -0,0 +1,5 @@ + +main() +{ +ecrire(2 * 7 % 5 + 5); +} diff --git a/test2024/input/modulo4.l b/test2024/input/modulo4.l new file mode 100644 index 0000000000000000000000000000000000000000..a1d159f2d2511fa2918770a914105d62951e0074 --- /dev/null +++ b/test2024/input/modulo4.l @@ -0,0 +1,7 @@ +entier a, entier b +main() +{ +a = 12; +b = 5; +ecrire(a % b); +} diff --git a/test2024/input/modulo5.l b/test2024/input/modulo5.l new file mode 100644 index 0000000000000000000000000000000000000000..0232a3a714e795362bdc5ad7e85bd6713cf7f76d --- /dev/null +++ b/test2024/input/modulo5.l @@ -0,0 +1,9 @@ +entier t[10] +main() +{ +t[0] = 3164; +t[1] = 152; +t[2] = t[0] % t[1]; + +ecrire(t[2]); +} diff --git a/test2024/io.asm b/test2024/io.asm new file mode 100644 index 0000000000000000000000000000000000000000..cee4da2ae3a4746873a75a15688938b608c91b87 --- /dev/null +++ b/test2024/io.asm @@ -0,0 +1,205 @@ + global iprintLF +;------------------------------------------ +; void readline +; Read a line from stdin, store string after [$eax] +; WARNING: does not check for buffer overflow - insecure! +readline: + push edx ; preserve edx on stack to be restored after function + push ecx ; preserve ecx on stack to be restored after function + push ebx ; preserve ebx on stack to be restored after function + push eax ; preserve eax on stack to be restored after function + mov ecx, eax ; address where store result +continue_reading: + mov eax, 3 ; syscall is read = 3 + mov ebx, 0 ; fd is stdin = 0 + mov edx, 1 ; nb. of bytes to read + int 80h ; call interruption + cmp eax, 0 ; if no byte read, then we reached EOF, stop + je end_reading + cmp BYTE [ecx], 10 ; Found '\n', stop reading string + je end_reading + cmp BYTE [ecx], 13 ; Found '\r', stop reading string + je end_reading + inc ecx ; None of above, increment pointer and read next byte + jmp continue_reading +end_reading: + mov BYTE [ecx], 0 ; Add zero to yield null-terminated string + pop eax ; restore eax from value pushed onto stack at start + pop ebx ; restore eax from value pushed onto stack at start + pop ecx ; restore eax from value pushed onto stack at start + pop edx ; restore eax from value pushed onto stack at start + ret + +;------------------------------------------ +; void iprint(Integer number) +; Integer printing function (itoa) +iprint: + push eax ; preserve eax on the stack to be restored after function runs + push ecx ; preserve ecx on the stack to be restored after function runs + push edx ; preserve edx on the stack to be restored after function runs + push esi ; preserve esi on the stack to be restored after function runs + + cmp eax, 0 + jge positive + push eax ; preserve eax value + mov ebx, '-' + push ebx + mov eax, esp + call sprint + pop eax ; remove '-' sign + pop eax ; retrieve eax value + neg eax +positive: + mov ecx, 0 ; counter of how many bytes we need to print in the end +divideLoop: + inc ecx ; count each byte to print - number of characters + mov edx, 0 ; empty edx + mov esi, 10 ; mov 10 into esi + idiv esi ; divide eax by esi + add edx, 48 ; convert edx to it's ascii representation - edx holds the remainder after a divide instruction + push edx ; push edx (string representation of an intger) onto the stack + cmp eax, 0 ; can the integer be divided anymore? + jnz divideLoop ; jump if not zero to the label divideLoop + +printLoop: + dec ecx ; count down each byte that we put on the stack + mov eax, esp ; mov the stack pointer into eax for printing + call sprint ; call our string print function + pop eax ; remove last character from the stack to move esp forward + cmp ecx, 0 ; have we printed all bytes we pushed onto the stack? + jnz printLoop ; jump is not zero to the label printLoop + + pop esi ; restore esi from the value we pushed onto the stack at the start + pop edx ; restore edx from the value we pushed onto the stack at the start + pop ecx ; restore ecx from the value we pushed onto the stack at the start + pop eax ; restore eax from the value we pushed onto the stack at the start + ret + + +;------------------------------------------ +; void iprintLF(Integer number) +; Integer printing function with linefeed (itoa) +iprintLF: + call iprint ; call our integer printing function + + push eax ; push eax onto the stack to preserve it while we use the eax register in this function + mov eax, 0Ah ; move 0Ah into eax - 0Ah is the ascii character for a linefeed + push eax ; push the linefeed onto the stack so we can get the address + mov eax, esp ; move the address of the current stack pointer into eax for sprint + call sprint ; call our sprint function + pop eax ; remove our linefeed character from the stack + pop eax ; restore the original value of eax before our function was called + ret + + +;------------------------------------------ +; int slen(String message) +; String length calculation function +slen: + push ebx + mov ebx, eax + +nextchar: + cmp byte [eax], 0 + jz finished + inc eax + jmp nextchar + +finished: + sub eax, ebx + pop ebx + ret + + +;------------------------------------------ +; void sprint(String message) +; String printing function +sprint: + push edx + push ecx + push ebx + push eax + call slen + + mov edx, eax + pop eax + + mov ecx, eax + mov ebx, 1 + mov eax, 4 + int 80h + + pop ebx + pop ecx + pop edx + ret + + +;------------------------------------------ +; void sprintLF(String message) +; String printing with line feed function +sprintLF: + call sprint + + push eax + mov eax, 0AH + push eax + mov eax, esp + call sprint + pop eax + pop eax + ret + + +;------------------------------------------ +; void exit() +; Exit program and restore resources +quit: + mov ebx, 0 + mov eax, 1 + int 80h + ret + +;------------------------------------------ +; int atoi(Integer number) +; Ascii to integer function (atoi) +atoi: + push ebx ; preserve ebx on the stack to be restored after function runs + push ecx ; preserve ecx on the stack to be restored after function runs + push edx ; preserve edx on the stack to be restored after function runs + push esi ; preserve esi on the stack to be restored after function runs + xor ebx, ebx ; initialize forming answer + xor ecx, ecx ; initialize sign flag + mov esi, eax +atoi1: + lodsb ; scan off whitespace + cmp al, ' ' ; ignore leading blanks + je atoi1 + cmp al, '+' ; if + sign proceed + je atoi2 + cmp al, '-' ; is it - sign? + jne atoi3 ; no, test if numeric + dec ecx ; was - sign, set flag for negative result +atoi2: + lodsb ; get next character +atoi3: + cmp al,'0' ; is character valid? + jb atoi4 ; jump if not '0' to '9' + cmp al,'9' + ja atoi4 ; jump if not '0' to '9' + and eax, 000fh ; isolate lower four bits + xchg ebx, eax ; multiply answer x 10 + mov edx, 10 + mul edx + add ebx, eax ; add this digit + jmp atoi2 ; convert next digit +atoi4: + mov eax,ebx ; result into AX + jcxz atoi5 ; jump if sign flag clear + neg eax ; make result negative +atoi5: + pop esi ; restore esi from the value we pushed onto the stack at the start + pop edx ; restore edx from the value we pushed onto the stack at the start + pop ecx ; restore ecx from the value we pushed onto the stack at the start + pop ebx ; restore ebx from the value we pushed onto the stack at the start + ret diff --git a/test2024/nasm-ref/incr1.nasm b/test2024/nasm-ref/incr1.nasm new file mode 100644 index 0000000000000000000000000000000000000000..b5fb7e008ad0437ecd20eb22ef0f73a330a64081 --- /dev/null +++ b/test2024/nasm-ref/incr1.nasm @@ -0,0 +1,35 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +a : resd 4 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop eax ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov dword [a], 4 ;Affect + mov eax, dword [a] + add eax, 1 + mov dword [a], eax ;Affect + mov eax, dword [a] ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/nasm-ref/incr2.nasm b/test2024/nasm-ref/incr2.nasm new file mode 100644 index 0000000000000000000000000000000000000000..174ae7b4b11ca19bb624a8125a8131b2439e3dda --- /dev/null +++ b/test2024/nasm-ref/incr2.nasm @@ -0,0 +1,34 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop eax ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 4 ;allocation des variables locales + mov dword [ebp-4], 4 ;Affect + mov eax, dword [ebp-4] + add eax, 1 + mov dword [ebp-4], eax ;Affect + mov eax, dword [ebp-4] ;Write 1 + call iprintLF ;Write 2 + add esp, 4 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/nasm-ref/incr3.nasm b/test2024/nasm-ref/incr3.nasm new file mode 100644 index 0000000000000000000000000000000000000000..eca125c3262d7454e21c7ff691db6eb2236a481e --- /dev/null +++ b/test2024/nasm-ref/incr3.nasm @@ -0,0 +1,43 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +t : resd 40 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop eax ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov eax, 1 + imul eax, 4 + mov dword [t+eax], 100 ;Affect + mov eax, 1 + imul eax, 4 + mov ebx, dword [t+eax] + add ebx, 10 + mov eax, 1 + imul eax, 4 + mov dword [t+eax], ebx ;Affect + mov eax, 1 + imul eax, 4 + mov eax, dword [t+eax] ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/nasm-ref/incr4.nasm b/test2024/nasm-ref/incr4.nasm new file mode 100644 index 0000000000000000000000000000000000000000..2e9b6d6074b845834c7add031b59b2ff8c9233d3 --- /dev/null +++ b/test2024/nasm-ref/incr4.nasm @@ -0,0 +1,39 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +a : resd 4 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop eax ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov dword [a], 4 ;Affect + mov eax, 12 + imul eax, 2 + mov ebx, dword [a] + add ebx, eax + mov eax, dword [a] + add eax, ebx + mov dword [a], eax ;Affect + mov eax, dword [a] ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/nasm-ref/incr5.nasm b/test2024/nasm-ref/incr5.nasm new file mode 100644 index 0000000000000000000000000000000000000000..6b8bd8f70c1c3c4cacd96e0ee423160702ae6424 --- /dev/null +++ b/test2024/nasm-ref/incr5.nasm @@ -0,0 +1,55 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +t : resd 40 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop eax ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov eax, 1 + imul eax, 4 + mov dword [t+eax], 2 ;Affect + mov eax, 2 + imul eax, 4 + mov dword [t+eax], 3 ;Affect + mov eax, 3 + imul eax, 4 + mov dword [t+eax], 1 ;Affect + mov eax, 1 + imul eax, 4 + mov ecx, dword [t+eax] + mov eax, 2 + imul eax, 4 + imul ecx, dword [t+eax] + mov eax, 3 + imul eax, 4 + mov ebx, dword [t+eax] + add ebx, ecx + mov eax, 3 + imul eax, 4 + mov dword [t+eax], ebx ;Affect + mov eax, 3 + imul eax, 4 + mov eax, dword [t+eax] ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/nasm-ref/modulo1.nasm b/test2024/nasm-ref/modulo1.nasm new file mode 100644 index 0000000000000000000000000000000000000000..d8baeedef254728675be1e9f3162e5cb99e4b691 --- /dev/null +++ b/test2024/nasm-ref/modulo1.nasm @@ -0,0 +1,40 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop eax ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov edx, 0 ;mise à 0 des bits de poids fort du dividende + mov eax, 5 ;affectation des bits de poids faible du dividende + mov ebx, 3 + idiv ebx + mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée + mov eax, eax + mov ebx, 3 + imul ebx, eax + mov eax, 5 + sub eax, ebx + mov eax, eax ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/nasm-ref/modulo2.nasm b/test2024/nasm-ref/modulo2.nasm new file mode 100644 index 0000000000000000000000000000000000000000..8276f6bb09339e7b8cfd487a46ab3dd8245ecdfd --- /dev/null +++ b/test2024/nasm-ref/modulo2.nasm @@ -0,0 +1,42 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop eax ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov edx, 0 ;mise à 0 des bits de poids fort du dividende + mov eax, 12 ;affectation des bits de poids faible du dividende + mov ebx, 7 + idiv ebx + mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée + mov eax, eax + mov ebx, 7 + imul ebx, eax + mov eax, 12 + sub eax, ebx + mov eax, eax + add eax, 5 + mov eax, eax ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/nasm-ref/modulo3.nasm b/test2024/nasm-ref/modulo3.nasm new file mode 100644 index 0000000000000000000000000000000000000000..a45f11f03afd44ecce513cb1c98f682b402ff6d5 --- /dev/null +++ b/test2024/nasm-ref/modulo3.nasm @@ -0,0 +1,44 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop eax ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov ebx, 2 + imul ebx, 7 + mov edx, 0 ;mise à 0 des bits de poids fort du dividende + mov eax, ebx ;affectation des bits de poids faible du dividende + mov ecx, 5 + idiv ecx + mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée + mov eax, eax + mov ecx, 5 + imul ecx, eax + mov eax, ebx + sub eax, ecx + mov eax, eax + add eax, 5 + mov eax, eax ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/nasm-ref/modulo4.nasm b/test2024/nasm-ref/modulo4.nasm new file mode 100644 index 0000000000000000000000000000000000000000..16eb9e38377aa557b4eb14940cc9aa06ef2075c4 --- /dev/null +++ b/test2024/nasm-ref/modulo4.nasm @@ -0,0 +1,43 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +a : resd 4 ;variable globale +b : resd 4 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop eax ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov dword [a], 12 ;Affect + mov dword [b], 5 ;Affect + mov edx, 0 ;mise à 0 des bits de poids fort du dividende + mov eax, dword [a] ;affectation des bits de poids faible du dividende + idiv dword [b] + mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée + mov eax, eax + mov ebx, dword [b] + imul ebx, eax + mov eax, dword [a] + sub eax, ebx + mov eax, eax ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/nasm-ref/modulo5.nasm b/test2024/nasm-ref/modulo5.nasm new file mode 100644 index 0000000000000000000000000000000000000000..af97ef79c14b878b1367fa84fd5834001bb0eb45 --- /dev/null +++ b/test2024/nasm-ref/modulo5.nasm @@ -0,0 +1,59 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +t : resd 40 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop eax ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov ebx, 0 + imul ebx, 4 + mov dword [t+ebx], 3164 ;Affect + mov ebx, 1 + imul ebx, 4 + mov dword [t+ebx], 152 ;Affect + mov ecx, 1 + imul ecx, 4 + mov edx, 0 ;mise à 0 des bits de poids fort du dividende + mov ebx, 0 + imul ebx, 4 + mov eax, dword [t+ebx] ;affectation des bits de poids faible du dividende + idiv dword [t+ecx] + mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée + mov ebx, eax + mov eax, 1 + imul eax, 4 + mov ecx, dword [t+eax] + imul ecx, ebx + mov eax, 0 + imul eax, 4 + mov ebx, dword [t+eax] + sub ebx, ecx + mov eax, 2 + imul eax, 4 + mov dword [t+eax], ebx ;Affect + mov eax, 2 + imul eax, 4 + mov eax, dword [t+eax] ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/out-ref/incr1.out b/test2024/out-ref/incr1.out new file mode 100644 index 0000000000000000000000000000000000000000..7ed6ff82de6bcc2a78243fc9c54d3ef5ac14da69 --- /dev/null +++ b/test2024/out-ref/incr1.out @@ -0,0 +1 @@ +5 diff --git a/test2024/out-ref/incr2.out b/test2024/out-ref/incr2.out new file mode 100644 index 0000000000000000000000000000000000000000..7ed6ff82de6bcc2a78243fc9c54d3ef5ac14da69 --- /dev/null +++ b/test2024/out-ref/incr2.out @@ -0,0 +1 @@ +5 diff --git a/test2024/out-ref/incr3.out b/test2024/out-ref/incr3.out new file mode 100644 index 0000000000000000000000000000000000000000..bc6298e80ad4b7c48ae27ed65630f31e1d1143de --- /dev/null +++ b/test2024/out-ref/incr3.out @@ -0,0 +1 @@ +110 diff --git a/test2024/out-ref/incr4.out b/test2024/out-ref/incr4.out new file mode 100644 index 0000000000000000000000000000000000000000..f5c89552bd3e62bfce023a230e90d141f7a46b2f --- /dev/null +++ b/test2024/out-ref/incr4.out @@ -0,0 +1 @@ +32 diff --git a/test2024/out-ref/incr5.out b/test2024/out-ref/incr5.out new file mode 100644 index 0000000000000000000000000000000000000000..7f8f011eb73d6043d2e6db9d2c101195ae2801f2 --- /dev/null +++ b/test2024/out-ref/incr5.out @@ -0,0 +1 @@ +7 diff --git a/test2024/out-ref/modulo1.out b/test2024/out-ref/modulo1.out new file mode 100644 index 0000000000000000000000000000000000000000..0cfbf08886fca9a91cb753ec8734c84fcbe52c9f --- /dev/null +++ b/test2024/out-ref/modulo1.out @@ -0,0 +1 @@ +2 diff --git a/test2024/out-ref/modulo2.out b/test2024/out-ref/modulo2.out new file mode 100644 index 0000000000000000000000000000000000000000..f599e28b8ab0d8c9c57a486c89c4a5132dcbd3b2 --- /dev/null +++ b/test2024/out-ref/modulo2.out @@ -0,0 +1 @@ +10 diff --git a/test2024/out-ref/modulo3.out b/test2024/out-ref/modulo3.out new file mode 100644 index 0000000000000000000000000000000000000000..ec635144f60048986bc560c5576355344005e6e7 --- /dev/null +++ b/test2024/out-ref/modulo3.out @@ -0,0 +1 @@ +9 diff --git a/test2024/out-ref/modulo4.out b/test2024/out-ref/modulo4.out new file mode 100644 index 0000000000000000000000000000000000000000..0cfbf08886fca9a91cb753ec8734c84fcbe52c9f --- /dev/null +++ b/test2024/out-ref/modulo4.out @@ -0,0 +1 @@ +2 diff --git a/test2024/out-ref/modulo5.out b/test2024/out-ref/modulo5.out new file mode 100644 index 0000000000000000000000000000000000000000..fc902f4f956b349ac5763a01f37a53ee607614d5 --- /dev/null +++ b/test2024/out-ref/modulo5.out @@ -0,0 +1 @@ +124 diff --git a/test2024/pre-nasm-ref/incr1.pre-nasm b/test2024/pre-nasm-ref/incr1.pre-nasm new file mode 100644 index 0000000000000000000000000000000000000000..f0c86db4012400ccd227e50d6c810431a0271f35 --- /dev/null +++ b/test2024/pre-nasm-ref/incr1.pre-nasm @@ -0,0 +1,35 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +a : resd 4 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop @0 ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov dword [a], 4 ;Affect + mov @1, dword [a] + add @1, 1 + mov dword [a], @1 ;Affect + mov eax, dword [a] ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/pre-nasm-ref/incr2.pre-nasm b/test2024/pre-nasm-ref/incr2.pre-nasm new file mode 100644 index 0000000000000000000000000000000000000000..30a80accb94eac4c33ad8f33b09e69cc0f620a40 --- /dev/null +++ b/test2024/pre-nasm-ref/incr2.pre-nasm @@ -0,0 +1,34 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop @0 ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 4 ;allocation des variables locales + mov dword [ebp-4], 4 ;Affect + mov @1, dword [ebp-4] + add @1, 1 + mov dword [ebp-4], @1 ;Affect + mov eax, dword [ebp-4] ;Write 1 + call iprintLF ;Write 2 + add esp, 4 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/pre-nasm-ref/incr3.pre-nasm b/test2024/pre-nasm-ref/incr3.pre-nasm new file mode 100644 index 0000000000000000000000000000000000000000..2ea0853c6089c6183b1c2f52cacee2ee4c048475 --- /dev/null +++ b/test2024/pre-nasm-ref/incr3.pre-nasm @@ -0,0 +1,43 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +t : resd 40 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop @0 ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov @8, 1 + imul @8, 4 + mov dword [t+@8], 100 ;Affect + mov @9, 1 + imul @9, 4 + mov @1, dword [t+@9] + add @1, 10 + mov @10, 1 + imul @10, 4 + mov dword [t+@10], @1 ;Affect + mov @12, 1 + imul @12, 4 + mov eax, dword [t+@12] ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/pre-nasm-ref/incr4.pre-nasm b/test2024/pre-nasm-ref/incr4.pre-nasm new file mode 100644 index 0000000000000000000000000000000000000000..04478d58a080d7c9c1fbc1b07329dc6381b1afb1 --- /dev/null +++ b/test2024/pre-nasm-ref/incr4.pre-nasm @@ -0,0 +1,39 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +a : resd 4 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop @0 ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov dword [a], 4 ;Affect + mov @1, 12 + imul @1, 2 + mov @2, dword [a] + add @2, @1 + mov @3, dword [a] + add @3, @2 + mov dword [a], @3 ;Affect + mov eax, dword [a] ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/pre-nasm-ref/incr5.pre-nasm b/test2024/pre-nasm-ref/incr5.pre-nasm new file mode 100644 index 0000000000000000000000000000000000000000..cb49aac42fd67e19105cf6f9f50eb6b466191712 --- /dev/null +++ b/test2024/pre-nasm-ref/incr5.pre-nasm @@ -0,0 +1,55 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +t : resd 40 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop @0 ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov @9, 1 + imul @9, 4 + mov dword [t+@9], 2 ;Affect + mov @10, 2 + imul @10, 4 + mov dword [t+@10], 3 ;Affect + mov @11, 3 + imul @11, 4 + mov dword [t+@11], 1 ;Affect + mov @12, 1 + imul @12, 4 + mov @1, dword [t+@12] + mov @13, 2 + imul @13, 4 + imul @1, dword [t+@13] + mov @14, 3 + imul @14, 4 + mov @2, dword [t+@14] + add @2, @1 + mov @15, 3 + imul @15, 4 + mov dword [t+@15], @2 ;Affect + mov @17, 3 + imul @17, 4 + mov eax, dword [t+@17] ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/pre-nasm-ref/modulo1.pre-nasm b/test2024/pre-nasm-ref/modulo1.pre-nasm new file mode 100644 index 0000000000000000000000000000000000000000..db5a4b55ffbbe1f5a8ea8963f80cae2af46b3210 --- /dev/null +++ b/test2024/pre-nasm-ref/modulo1.pre-nasm @@ -0,0 +1,40 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop @0 ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov edx, 0 ;mise à 0 des bits de poids fort du dividende + mov eax, 5 ;affectation des bits de poids faible du dividende + mov @12, 3 + idiv @12 + mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée + mov @1, eax + mov @2, 3 + imul @2, @1 + mov @3, 5 + sub @3, @2 + mov eax, @3 ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/pre-nasm-ref/modulo2.pre-nasm b/test2024/pre-nasm-ref/modulo2.pre-nasm new file mode 100644 index 0000000000000000000000000000000000000000..d2d423ba8baded077c5424a14f3255e9b7c4d130 --- /dev/null +++ b/test2024/pre-nasm-ref/modulo2.pre-nasm @@ -0,0 +1,42 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop @0 ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov edx, 0 ;mise à 0 des bits de poids fort du dividende + mov eax, 12 ;affectation des bits de poids faible du dividende + mov @13, 7 + idiv @13 + mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée + mov @1, eax + mov @2, 7 + imul @2, @1 + mov @3, 12 + sub @3, @2 + mov @4, @3 + add @4, 5 + mov eax, @4 ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/pre-nasm-ref/modulo3.pre-nasm b/test2024/pre-nasm-ref/modulo3.pre-nasm new file mode 100644 index 0000000000000000000000000000000000000000..12e390b912c08b33485605294fde412b87f54204 --- /dev/null +++ b/test2024/pre-nasm-ref/modulo3.pre-nasm @@ -0,0 +1,44 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop @0 ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov @1, 2 + imul @1, 7 + mov edx, 0 ;mise à 0 des bits de poids fort du dividende + mov eax, @1 ;affectation des bits de poids faible du dividende + mov @14, 5 + idiv @14 + mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée + mov @2, eax + mov @3, 5 + imul @3, @2 + mov @4, @1 + sub @4, @3 + mov @5, @4 + add @5, 5 + mov eax, @5 ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/pre-nasm-ref/modulo4.pre-nasm b/test2024/pre-nasm-ref/modulo4.pre-nasm new file mode 100644 index 0000000000000000000000000000000000000000..a3f92e601992db93f6a9e26997201df764109ac9 --- /dev/null +++ b/test2024/pre-nasm-ref/modulo4.pre-nasm @@ -0,0 +1,43 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +a : resd 4 ;variable globale +b : resd 4 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop @0 ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov dword [a], 12 ;Affect + mov dword [b], 5 ;Affect + mov edx, 0 ;mise à 0 des bits de poids fort du dividende + mov eax, dword [a] ;affectation des bits de poids faible du dividende + idiv dword [b] + mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée + mov @1, eax + mov @2, dword [b] + imul @2, @1 + mov @3, dword [a] + sub @3, @2 + mov eax, @3 ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/pre-nasm-ref/modulo5.pre-nasm b/test2024/pre-nasm-ref/modulo5.pre-nasm new file mode 100644 index 0000000000000000000000000000000000000000..e987491c166d3e819b0ae94def585c2c3046dec7 --- /dev/null +++ b/test2024/pre-nasm-ref/modulo5.pre-nasm @@ -0,0 +1,59 @@ +%include 'io.asm' + +section .bss +sinput : resb 255 ;reserve a 255 byte space in memory for the users input string +t : resd 40 ;variable globale + +section .text +global _start +_start: + sub esp, 4 ;allocation mémoire pour la valeur de retour + call main + pop @0 ;récupération de la valeur de retour + mov ebx, 0 ; valeur de retour du programme + mov eax, 1 ; code de sortie + int 0x80 +main : push ebp ;sauvegarde la valeur de ebp + mov ebp, esp ;nouvelle valeur de ebp + push eax ;sauvegarde de eax + push ebx ;sauvegarde de ebx + push ecx ;sauvegarde de ecx + push edx ;sauvegarde de edx + sub esp, 0 ;allocation des variables locales + mov @10, 0 + imul @10, 4 + mov dword [t+@10], 3164 ;Affect + mov @11, 1 + imul @11, 4 + mov dword [t+@11], 152 ;Affect + mov @12, 1 + imul @12, 4 + mov edx, 0 ;mise à 0 des bits de poids fort du dividende + mov @15, 0 + imul @15, 4 + mov eax, dword [t+@15] ;affectation des bits de poids faible du dividende + idiv dword [t+@12] + mov edx, edx ;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée + mov @1, eax + mov @17, 1 + imul @17, 4 + mov @2, dword [t+@17] + imul @2, @1 + mov @18, 0 + imul @18, 4 + mov @3, dword [t+@18] + sub @3, @2 + mov @19, 2 + imul @19, 4 + mov dword [t+@19], @3 ;Affect + mov @21, 2 + imul @21, 4 + mov eax, dword [t+@21] ;Write 1 + call iprintLF ;Write 2 + add esp, 0 ;désallocation des variables locales + pop edx ;restaure edx + pop ecx ;restaure ecx + pop ebx ;restaure ebx + pop eax ;restaure eax + pop ebp ;restaure la valeur de ebp + ret diff --git a/test2024/sa-ref/incr1.sa b/test2024/sa-ref/incr1.sa new file mode 100644 index 0000000000000000000000000000000000000000..cd0917c95a2818a082dd80d8150fb58984397ce4 --- /dev/null +++ b/test2024/sa-ref/incr1.sa @@ -0,0 +1 @@ +(SaProg (SaLDecVar (SaDecVarSimple a entier) null) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstAffect (SaVarSimple a) 4) (SaLInst (SaIncr (SaVarSimple a) 1) (SaLInst (SaInstEcriture (SaExpVar (SaVarSimple a))) null))))) null)) diff --git a/test2024/sa-ref/incr2.sa b/test2024/sa-ref/incr2.sa new file mode 100644 index 0000000000000000000000000000000000000000..d2c23186157cc5cec2d1759a8a5fa84a35585a67 --- /dev/null +++ b/test2024/sa-ref/incr2.sa @@ -0,0 +1 @@ +(SaProg null (SaLDecFonc (SaDecFonc main nul null (SaLDecVar (SaDecVarSimple a entier) null) (SaInstBloc (SaLInst (SaInstAffect (SaVarSimple a) 4) (SaLInst (SaIncr (SaVarSimple a) 1) (SaLInst (SaInstEcriture (SaExpVar (SaVarSimple a))) null))))) null)) diff --git a/test2024/sa-ref/incr3.sa b/test2024/sa-ref/incr3.sa new file mode 100644 index 0000000000000000000000000000000000000000..0fa3d6bd3816a4645eb28d31b44fb06f72be0f5e --- /dev/null +++ b/test2024/sa-ref/incr3.sa @@ -0,0 +1 @@ +(SaProg (SaLDecVar (SaDecTab t entier 10) null) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstAffect (SaVarIndicee t 1) 100) (SaLInst (SaIncr (SaVarIndicee t 1) 10) (SaLInst (SaInstEcriture (SaExpVar (SaVarIndicee t 1))) null))))) null)) diff --git a/test2024/sa-ref/incr4.sa b/test2024/sa-ref/incr4.sa new file mode 100644 index 0000000000000000000000000000000000000000..9ca73e49f4057e20085b87f64937d4a5d5d43d0e --- /dev/null +++ b/test2024/sa-ref/incr4.sa @@ -0,0 +1 @@ +(SaProg (SaLDecVar (SaDecVarSimple a entier) null) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstAffect (SaVarSimple a) 4) (SaLInst (SaIncr (SaVarSimple a) (SaExpAdd (SaExpVar (SaVarSimple a)) (SaExpMult 12 2))) (SaLInst (SaInstEcriture (SaExpVar (SaVarSimple a))) null))))) null)) diff --git a/test2024/sa-ref/incr5.sa b/test2024/sa-ref/incr5.sa new file mode 100644 index 0000000000000000000000000000000000000000..f3f5de2ce862d0664657e1092cdd73720e90941b --- /dev/null +++ b/test2024/sa-ref/incr5.sa @@ -0,0 +1 @@ +(SaProg (SaLDecVar (SaDecTab t entier 10) null) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstAffect (SaVarIndicee t 1) 2) (SaLInst (SaInstAffect (SaVarIndicee t 2) 3) (SaLInst (SaInstAffect (SaVarIndicee t 3) 1) (SaLInst (SaIncr (SaVarIndicee t 3) (SaExpMult (SaExpVar (SaVarIndicee t 1)) (SaExpVar (SaVarIndicee t 2)))) (SaLInst (SaInstEcriture (SaExpVar (SaVarIndicee t 3))) null))))))) null)) diff --git a/test2024/sa-ref/modulo1.sa b/test2024/sa-ref/modulo1.sa new file mode 100644 index 0000000000000000000000000000000000000000..50c5b647eb19a474cb25783c02df7085b02d09f1 --- /dev/null +++ b/test2024/sa-ref/modulo1.sa @@ -0,0 +1 @@ +(SaProg null (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstEcriture (SaExpModulo 5 3)) null))) null)) diff --git a/test2024/sa-ref/modulo2.sa b/test2024/sa-ref/modulo2.sa new file mode 100644 index 0000000000000000000000000000000000000000..49bf80e2ddb192908729343254626e929597aed4 --- /dev/null +++ b/test2024/sa-ref/modulo2.sa @@ -0,0 +1 @@ +(SaProg null (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstEcriture (SaExpAdd (SaExpModulo 12 7) 5)) null))) null)) diff --git a/test2024/sa-ref/modulo3.sa b/test2024/sa-ref/modulo3.sa new file mode 100644 index 0000000000000000000000000000000000000000..3529ada37d90a48875d135b18f13f562b3d22dc9 --- /dev/null +++ b/test2024/sa-ref/modulo3.sa @@ -0,0 +1 @@ +(SaProg null (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstEcriture (SaExpAdd (SaExpModulo (SaExpMult 2 7) 5) 5)) null))) null)) diff --git a/test2024/sa-ref/modulo4.sa b/test2024/sa-ref/modulo4.sa new file mode 100644 index 0000000000000000000000000000000000000000..d5b0f4ff87dc7503483d653bcb8d0f0c696aa272 --- /dev/null +++ b/test2024/sa-ref/modulo4.sa @@ -0,0 +1 @@ +(SaProg (SaLDecVar (SaDecVarSimple a entier) (SaLDecVar (SaDecVarSimple b entier) null)) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstAffect (SaVarSimple a) 12) (SaLInst (SaInstAffect (SaVarSimple b) 5) (SaLInst (SaInstEcriture (SaExpModulo (SaExpVar (SaVarSimple a)) (SaExpVar (SaVarSimple b)))) null))))) null)) diff --git a/test2024/sa-ref/modulo5.sa b/test2024/sa-ref/modulo5.sa new file mode 100644 index 0000000000000000000000000000000000000000..8bc98cc2d590ff354433c73edf4aeccbc213b910 --- /dev/null +++ b/test2024/sa-ref/modulo5.sa @@ -0,0 +1 @@ +(SaProg (SaLDecVar (SaDecTab t entier 10) null) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstAffect (SaVarIndicee t 0) 3164) (SaLInst (SaInstAffect (SaVarIndicee t 1) 152) (SaLInst (SaInstAffect (SaVarIndicee t 2) (SaExpModulo (SaExpVar (SaVarIndicee t 0)) (SaExpVar (SaVarIndicee t 1)))) (SaLInst (SaInstEcriture (SaExpVar (SaVarIndicee t 2))) null)))))) null)) diff --git a/test2024/sc-ref/incr1.sc b/test2024/sc-ref/incr1.sc new file mode 100644 index 0000000000000000000000000000000000000000..b2a2744bb9fcc0522dc341b9007b880e12870e85 --- /dev/null +++ b/test2024/sc-ref/incr1.sc @@ -0,0 +1,98 @@ +<Start> + <AProgramme> + <APremierListedecvar> + <AScalaireDecvar> + <AEntierType> + </AEntierType> + </AScalaireDecvar> + <AFinalListedecvarbis> + <AEpsilon> + </AEpsilon> + </AFinalListedecvarbis> + </APremierListedecvar> + <ARecursifListedecfonc> + <ADecfonc> + <AVideOpttype> + </AVideOpttype> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AInstrbloc> + <ARecursifListeinst> + <AAffectInstr> + <ASimpleVar> + </ASimpleVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AIncrInstr> + <ASimpleVar> + </ASimpleVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AIncrInstr> + <ARecursifListeinst> + <AEcritureInstr> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ASimpleVar> + </ASimpleVar> + </AVarExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AEcritureInstr> + <AFinalListeinst> + <AEpsilon> + </AEpsilon> + </AFinalListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </AInstrbloc> + </ADecfonc> + <AFinalListedecfonc> + <AEpsilon> + </AEpsilon> + </AFinalListedecfonc> + </ARecursifListedecfonc> + </AProgramme> +</Start> diff --git a/test2024/sc-ref/incr2.sc b/test2024/sc-ref/incr2.sc new file mode 100644 index 0000000000000000000000000000000000000000..b31f4a946573f8f532961e7c681f52ec909c5bc7 --- /dev/null +++ b/test2024/sc-ref/incr2.sc @@ -0,0 +1,98 @@ +<Start> + <AProgramme> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <ARecursifListedecfonc> + <ADecfonc> + <AVideOpttype> + </AVideOpttype> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <APremierListedecvar> + <AScalaireDecvar> + <AEntierType> + </AEntierType> + </AScalaireDecvar> + <AFinalListedecvarbis> + <AEpsilon> + </AEpsilon> + </AFinalListedecvarbis> + </APremierListedecvar> + <AInstrbloc> + <ARecursifListeinst> + <AAffectInstr> + <ASimpleVar> + </ASimpleVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AIncrInstr> + <ASimpleVar> + </ASimpleVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AIncrInstr> + <ARecursifListeinst> + <AEcritureInstr> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ASimpleVar> + </ASimpleVar> + </AVarExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AEcritureInstr> + <AFinalListeinst> + <AEpsilon> + </AEpsilon> + </AFinalListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </AInstrbloc> + </ADecfonc> + <AFinalListedecfonc> + <AEpsilon> + </AEpsilon> + </AFinalListedecfonc> + </ARecursifListedecfonc> + </AProgramme> +</Start> diff --git a/test2024/sc-ref/incr3.sc b/test2024/sc-ref/incr3.sc new file mode 100644 index 0000000000000000000000000000000000000000..cf78cbee1d670f3c34ae668e177b01d7ae1f9dbb --- /dev/null +++ b/test2024/sc-ref/incr3.sc @@ -0,0 +1,140 @@ +<Start> + <AProgramme> + <APremierListedecvar> + <ATableauDecvar> + <AEntierType> + </AEntierType> + </ATableauDecvar> + <AFinalListedecvarbis> + <AEpsilon> + </AEpsilon> + </AFinalListedecvarbis> + </APremierListedecvar> + <ARecursifListedecfonc> + <ADecfonc> + <AVideOpttype> + </AVideOpttype> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AInstrbloc> + <ARecursifListeinst> + <AAffectInstr> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AIncrInstr> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AIncrInstr> + <ARecursifListeinst> + <AEcritureInstr> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + </AVarExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AEcritureInstr> + <AFinalListeinst> + <AEpsilon> + </AEpsilon> + </AFinalListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </AInstrbloc> + </ADecfonc> + <AFinalListedecfonc> + <AEpsilon> + </AEpsilon> + </AFinalListedecfonc> + </ARecursifListedecfonc> + </AProgramme> +</Start> diff --git a/test2024/sc-ref/incr4.sc b/test2024/sc-ref/incr4.sc new file mode 100644 index 0000000000000000000000000000000000000000..7036e7b9ef450cac04c46a7541112e2828d90c56 --- /dev/null +++ b/test2024/sc-ref/incr4.sc @@ -0,0 +1,114 @@ +<Start> + <AProgramme> + <APremierListedecvar> + <AScalaireDecvar> + <AEntierType> + </AEntierType> + </AScalaireDecvar> + <AFinalListedecvarbis> + <AEpsilon> + </AEpsilon> + </AFinalListedecvarbis> + </APremierListedecvar> + <ARecursifListedecfonc> + <ADecfonc> + <AVideOpttype> + </AVideOpttype> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AInstrbloc> + <ARecursifListeinst> + <AAffectInstr> + <ASimpleVar> + </ASimpleVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AIncrInstr> + <ASimpleVar> + </ASimpleVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <APlusExp3> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ASimpleVar> + </ASimpleVar> + </AVarExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + <AFoisExp4> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AFoisExp4> + </APlusExp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AIncrInstr> + <ARecursifListeinst> + <AEcritureInstr> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ASimpleVar> + </ASimpleVar> + </AVarExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AEcritureInstr> + <AFinalListeinst> + <AEpsilon> + </AEpsilon> + </AFinalListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </AInstrbloc> + </ADecfonc> + <AFinalListedecfonc> + <AEpsilon> + </AEpsilon> + </AFinalListedecfonc> + </ARecursifListedecfonc> + </AProgramme> +</Start> diff --git a/test2024/sc-ref/incr5.sc b/test2024/sc-ref/incr5.sc new file mode 100644 index 0000000000000000000000000000000000000000..9a0b952d19c191bdb4913b957e98bbde3c2ddfc9 --- /dev/null +++ b/test2024/sc-ref/incr5.sc @@ -0,0 +1,246 @@ +<Start> + <AProgramme> + <APremierListedecvar> + <ATableauDecvar> + <AEntierType> + </AEntierType> + </ATableauDecvar> + <AFinalListedecvarbis> + <AEpsilon> + </AEpsilon> + </AFinalListedecvarbis> + </APremierListedecvar> + <ARecursifListedecfonc> + <ADecfonc> + <AVideOpttype> + </AVideOpttype> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AInstrbloc> + <ARecursifListeinst> + <AAffectInstr> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AAffectInstr> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AAffectInstr> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AIncrInstr> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AFoisExp4> + <AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + </AVarExp6> + </AExp6Exp5> + </AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + </AVarExp6> + </AExp6Exp5> + </AFoisExp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AIncrInstr> + <ARecursifListeinst> + <AEcritureInstr> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + </AVarExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AEcritureInstr> + <AFinalListeinst> + <AEpsilon> + </AEpsilon> + </AFinalListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </AInstrbloc> + </ADecfonc> + <AFinalListedecfonc> + <AEpsilon> + </AEpsilon> + </AFinalListedecfonc> + </ARecursifListedecfonc> + </AProgramme> +</Start> diff --git a/test2024/sc-ref/modulo1.sc b/test2024/sc-ref/modulo1.sc new file mode 100644 index 0000000000000000000000000000000000000000..e7c27e5c4cad28c5a6e14633c8c841428b836814 --- /dev/null +++ b/test2024/sc-ref/modulo1.sc @@ -0,0 +1,56 @@ +<Start> + <AProgramme> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <ARecursifListedecfonc> + <ADecfonc> + <AVideOpttype> + </AVideOpttype> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AInstrbloc> + <ARecursifListeinst> + <AEcritureInstr> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AModuloExp4> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AModuloExp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AEcritureInstr> + <AFinalListeinst> + <AEpsilon> + </AEpsilon> + </AFinalListeinst> + </ARecursifListeinst> + </AInstrbloc> + </ADecfonc> + <AFinalListedecfonc> + <AEpsilon> + </AEpsilon> + </AFinalListedecfonc> + </ARecursifListedecfonc> + </AProgramme> +</Start> diff --git a/test2024/sc-ref/modulo2.sc b/test2024/sc-ref/modulo2.sc new file mode 100644 index 0000000000000000000000000000000000000000..f14457a9255ce331f5a5024b04c7d950b8ca5238 --- /dev/null +++ b/test2024/sc-ref/modulo2.sc @@ -0,0 +1,64 @@ +<Start> + <AProgramme> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <ARecursifListedecfonc> + <ADecfonc> + <AVideOpttype> + </AVideOpttype> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AInstrbloc> + <ARecursifListeinst> + <AEcritureInstr> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <APlusExp3> + <AExp4Exp3> + <AModuloExp4> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AModuloExp4> + </AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </APlusExp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AEcritureInstr> + <AFinalListeinst> + <AEpsilon> + </AEpsilon> + </AFinalListeinst> + </ARecursifListeinst> + </AInstrbloc> + </ADecfonc> + <AFinalListedecfonc> + <AEpsilon> + </AEpsilon> + </AFinalListedecfonc> + </ARecursifListedecfonc> + </AProgramme> +</Start> diff --git a/test2024/sc-ref/modulo3.sc b/test2024/sc-ref/modulo3.sc new file mode 100644 index 0000000000000000000000000000000000000000..0fb9c2bb53ec6c65fd2fd4d4424925596493b46c --- /dev/null +++ b/test2024/sc-ref/modulo3.sc @@ -0,0 +1,70 @@ +<Start> + <AProgramme> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <ARecursifListedecfonc> + <ADecfonc> + <AVideOpttype> + </AVideOpttype> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AInstrbloc> + <ARecursifListeinst> + <AEcritureInstr> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <APlusExp3> + <AExp4Exp3> + <AModuloExp4> + <AFoisExp4> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AFoisExp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AModuloExp4> + </AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </APlusExp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AEcritureInstr> + <AFinalListeinst> + <AEpsilon> + </AEpsilon> + </AFinalListeinst> + </ARecursifListeinst> + </AInstrbloc> + </ADecfonc> + <AFinalListedecfonc> + <AEpsilon> + </AEpsilon> + </AFinalListedecfonc> + </ARecursifListedecfonc> + </AProgramme> +</Start> diff --git a/test2024/sc-ref/modulo4.sc b/test2024/sc-ref/modulo4.sc new file mode 100644 index 0000000000000000000000000000000000000000..31a7439138a0cfd33d42b0487a86f83ce8a56f4a --- /dev/null +++ b/test2024/sc-ref/modulo4.sc @@ -0,0 +1,112 @@ +<Start> + <AProgramme> + <APremierListedecvar> + <AScalaireDecvar> + <AEntierType> + </AEntierType> + </AScalaireDecvar> + <ARecursifListedecvarbis> + <AScalaireDecvar> + <AEntierType> + </AEntierType> + </AScalaireDecvar> + <AFinalListedecvarbis> + <AEpsilon> + </AEpsilon> + </AFinalListedecvarbis> + </ARecursifListedecvarbis> + </APremierListedecvar> + <ARecursifListedecfonc> + <ADecfonc> + <AVideOpttype> + </AVideOpttype> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AInstrbloc> + <ARecursifListeinst> + <AAffectInstr> + <ASimpleVar> + </ASimpleVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AAffectInstr> + <ASimpleVar> + </ASimpleVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AEcritureInstr> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AModuloExp4> + <AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ASimpleVar> + </ASimpleVar> + </AVarExp6> + </AExp6Exp5> + </AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ASimpleVar> + </ASimpleVar> + </AVarExp6> + </AExp6Exp5> + </AModuloExp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AEcritureInstr> + <AFinalListeinst> + <AEpsilon> + </AEpsilon> + </AFinalListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </AInstrbloc> + </ADecfonc> + <AFinalListedecfonc> + <AEpsilon> + </AEpsilon> + </AFinalListedecfonc> + </ARecursifListedecfonc> + </AProgramme> +</Start> diff --git a/test2024/sc-ref/modulo5.sc b/test2024/sc-ref/modulo5.sc new file mode 100644 index 0000000000000000000000000000000000000000..00d4badba705ed7c52d9896f18eb0cf6276224fd --- /dev/null +++ b/test2024/sc-ref/modulo5.sc @@ -0,0 +1,212 @@ +<Start> + <AProgramme> + <APremierListedecvar> + <ATableauDecvar> + <AEntierType> + </AEntierType> + </ATableauDecvar> + <AFinalListedecvarbis> + <AEpsilon> + </AEpsilon> + </AFinalListedecvarbis> + </APremierListedecvar> + <ARecursifListedecfonc> + <ADecfonc> + <AVideOpttype> + </AVideOpttype> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AVideListedecvar> + <AEpsilon> + </AEpsilon> + </AVideListedecvar> + <AInstrbloc> + <ARecursifListeinst> + <AAffectInstr> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AAffectInstr> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AAffectInstr> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AModuloExp4> + <AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + </AVarExp6> + </AExp6Exp5> + </AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + </AVarExp6> + </AExp6Exp5> + </AModuloExp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AAffectInstr> + <ARecursifListeinst> + <AEcritureInstr> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <AVarExp6> + <ATabVar> + <AExp1Exp> + <AExp2Exp1> + <AExp3Exp2> + <AExp4Exp3> + <AExp5Exp4> + <AExp6Exp5> + <ANombreExp6> + </ANombreExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </ATabVar> + </AVarExp6> + </AExp6Exp5> + </AExp5Exp4> + </AExp4Exp3> + </AExp3Exp2> + </AExp2Exp1> + </AExp1Exp> + </AEcritureInstr> + <AFinalListeinst> + <AEpsilon> + </AEpsilon> + </AFinalListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </ARecursifListeinst> + </AInstrbloc> + </ADecfonc> + <AFinalListedecfonc> + <AEpsilon> + </AEpsilon> + </AFinalListedecfonc> + </ARecursifListedecfonc> + </AProgramme> +</Start> diff --git a/test2024/ts-ref/incr1.ts b/test2024/ts-ref/incr1.ts new file mode 100644 index 0000000000000000000000000000000000000000..f223443e9d97dde78efbca5e6b59a7babdbdad38 --- /dev/null +++ b/test2024/ts-ref/incr1.ts @@ -0,0 +1,4 @@ +TABLE GLOBALE +a VAR entier 0 +main FCT nul 0 +TABLE LOCALE : main diff --git a/test2024/ts-ref/incr2.ts b/test2024/ts-ref/incr2.ts new file mode 100644 index 0000000000000000000000000000000000000000..53497cf7f8021a9a552389d69dc902e4b23b143f --- /dev/null +++ b/test2024/ts-ref/incr2.ts @@ -0,0 +1,4 @@ +TABLE GLOBALE +main FCT nul 0 +TABLE LOCALE : main +a VAR entier 0 diff --git a/test2024/ts-ref/incr3.ts b/test2024/ts-ref/incr3.ts new file mode 100644 index 0000000000000000000000000000000000000000..06329e6ca32d03deed7ef21f24142675ef6a81df --- /dev/null +++ b/test2024/ts-ref/incr3.ts @@ -0,0 +1,4 @@ +TABLE GLOBALE +t TAB entier 0 10 +main FCT nul 0 +TABLE LOCALE : main diff --git a/test2024/ts-ref/incr4.ts b/test2024/ts-ref/incr4.ts new file mode 100644 index 0000000000000000000000000000000000000000..f223443e9d97dde78efbca5e6b59a7babdbdad38 --- /dev/null +++ b/test2024/ts-ref/incr4.ts @@ -0,0 +1,4 @@ +TABLE GLOBALE +a VAR entier 0 +main FCT nul 0 +TABLE LOCALE : main diff --git a/test2024/ts-ref/incr5.ts b/test2024/ts-ref/incr5.ts new file mode 100644 index 0000000000000000000000000000000000000000..06329e6ca32d03deed7ef21f24142675ef6a81df --- /dev/null +++ b/test2024/ts-ref/incr5.ts @@ -0,0 +1,4 @@ +TABLE GLOBALE +t TAB entier 0 10 +main FCT nul 0 +TABLE LOCALE : main diff --git a/test2024/ts-ref/modulo1.ts b/test2024/ts-ref/modulo1.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b21c85dc34c7a75e67fc4ed59fb2e81df5afd70 --- /dev/null +++ b/test2024/ts-ref/modulo1.ts @@ -0,0 +1,3 @@ +TABLE GLOBALE +main FCT nul 0 +TABLE LOCALE : main diff --git a/test2024/ts-ref/modulo2.ts b/test2024/ts-ref/modulo2.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b21c85dc34c7a75e67fc4ed59fb2e81df5afd70 --- /dev/null +++ b/test2024/ts-ref/modulo2.ts @@ -0,0 +1,3 @@ +TABLE GLOBALE +main FCT nul 0 +TABLE LOCALE : main diff --git a/test2024/ts-ref/modulo3.ts b/test2024/ts-ref/modulo3.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b21c85dc34c7a75e67fc4ed59fb2e81df5afd70 --- /dev/null +++ b/test2024/ts-ref/modulo3.ts @@ -0,0 +1,3 @@ +TABLE GLOBALE +main FCT nul 0 +TABLE LOCALE : main diff --git a/test2024/ts-ref/modulo4.ts b/test2024/ts-ref/modulo4.ts new file mode 100644 index 0000000000000000000000000000000000000000..f49a3c588e2bb7fe978a904d92c4e0c156cd1d36 --- /dev/null +++ b/test2024/ts-ref/modulo4.ts @@ -0,0 +1,5 @@ +TABLE GLOBALE +a VAR entier 0 +b VAR entier 4 +main FCT nul 0 +TABLE LOCALE : main diff --git a/test2024/ts-ref/modulo5.ts b/test2024/ts-ref/modulo5.ts new file mode 100644 index 0000000000000000000000000000000000000000..06329e6ca32d03deed7ef21f24142675ef6a81df --- /dev/null +++ b/test2024/ts-ref/modulo5.ts @@ -0,0 +1,4 @@ +TABLE GLOBALE +t TAB entier 0 10 +main FCT nul 0 +TABLE LOCALE : main