diff --git a/src/Compiler.java b/src/Compiler.java index 39aebb826badfb5cf6e1f659e38d62a28e717f9a..6d78befcd03da15d07a93737416e5d4dc7f39749 100644 --- a/src/Compiler.java +++ b/src/Compiler.java @@ -31,8 +31,8 @@ public class Compiler processCommandLine(args); System.out.println("[BUILD SC] "); buildSc(); - /* System.out.println("[BUILD SA] "); - buildSa(); + System.out.println("[BUILD SA] "); + buildSa();/* System.out.println("[BUILD TS] "); buildTs(); System.out.println("[TYPE CHECKING]"); diff --git a/src/sa/Sc2sa.java b/src/sa/Sc2sa.java index b24fce2bd2f3ad7e18b320a1e989c82ad0f9e989..225218976aab8f683bcde50f2db0d039a8f36827 100644 --- a/src/sa/Sc2sa.java +++ b/src/sa/Sc2sa.java @@ -31,7 +31,8 @@ public class Sc2sa extends DepthFirstAdapter @Override public void caseStart(Start node) { - super.caseStart(node); + inStart(node); + outStart(node); } @Override @@ -206,18 +207,8 @@ public class Sc2sa extends DepthFirstAdapter @Override public void caseAParenthesisExp6(AParenthesisExp6 node) { - SaExp op1 = null; - SaExp op2 = null; - SaExp op3 = null; inAParenthesisExp6(node); - node.getGpar().apply(this); - op1 = (SaExp) this.returnValue; node.getExp().apply(this); - op2 = (SaExp) this.returnValue; - node.getDpar().apply(this); - op3 = (SaExp) this.returnValue; - this.returnValue = new SaExp(op1,op2,op3); - outAParenthesisExp6(node); } @@ -233,126 +224,220 @@ public class Sc2sa extends DepthFirstAdapter @Override public void caseAVraiExp6(AVraiExp6 node) { inAVraiExp6(node); + this.returnValue = new SaExpVrai(); outAVraiExp6(node); } @Override public void caseAFauxExp6(AFauxExp6 node) { inAFauxExp6(node); + this.returnValue = new SaExpFaux(); outAFauxExp6(node); } @Override public void caseAAfExp6(AAfExp6 node) { inAAfExp6(node); + SaAppel appel = null; + node.getAf().apply(this); + appel = (SaAppel) this.returnValue; + this.returnValue = new SaExpAppel(appel); outAAfExp6(node); } @Override public void caseAVarExp6(AVarExp6 node) { inAVarExp6(node); + SaVar saVar = null; + node.getVar().apply(this); + saVar = (SaVar) this.returnValue; + this.returnValue = new SaExpVar(saVar); outAVarExp6(node); } @Override public void caseALireExp6(ALireExp6 node) { inALireExp6(node); + node.getLire().apply(this); + this.returnValue = new SaExpLire(); outALireExp6(node); } @Override public void caseAAffectationIns(AAffectationIns node) { inAAffectationIns(node); + SaVar lhs = null; + SaExp rhs = null; + node.getVar().apply(this); + lhs = (SaVar) this.returnValue; + node.getExp().apply(this); + rhs = (SaExp) this.returnValue; + this.returnValue = new SaInstAffect(lhs, rhs); outAAffectationIns(node); } @Override public void caseAFairetantqueIns(AFairetantqueIns node) { inAFairetantqueIns(node); + SaExp test = null; + SaInst faire = null; + node.getTantque().apply(this); + test = (SaExp) this.returnValue; + node.getBloc().apply(this); + faire = (SaInst) this.returnValue; + this.returnValue = new SaInstTantQue(test, faire); outAFairetantqueIns(node); } @Override public void caseAFonctionIns(AFonctionIns node) { inAFonctionIns(node); + node.getId().apply(this); + node.getGpar().apply(this); outAFonctionIns(node); } @Override public void caseASialorsIns(ASialorsIns node) { inASialorsIns(node); + SaExp test = null; + SaInst alors = null; + SaInst sinon = null; + node.getExp().apply(this); + test = (SaExp) this.returnValue; + node.getBloc().apply(this); + alors = (SaInst) this.returnValue; + this.returnValue = new SaInstSi(test, alors, sinon); outASialorsIns(node); } @Override public void caseASisinonIns(ASisinonIns node) { inASisinonIns(node); + SaExp test = null; + SaInst alors = null; + SaInst sinon = null; + node.getExp().apply(this); + test = (SaExp) this.returnValue; + node.getAlors1().apply(this); + alors = (SaInst) this.returnValue; + node.getSinon1().apply(this); + sinon = (SaInst) this.returnValue; + this.returnValue = new SaInstSi(test, alors, sinon); outASisinonIns(node); } @Override public void caseARetourIns(ARetourIns node) { inARetourIns(node); + SaExp val = null; + node.getExp().apply(this); + val = (SaExp) this.returnValue; + this.returnValue = new SaInstRetour(val); outARetourIns(node); } @Override public void caseAEcrireIns(AEcrireIns node) { inAEcrireIns(node); + SaExp arg = null; + node.getExp().apply(this); + arg = (SaExp) this.returnValue; + this.returnValue = new SaInstEcriture(arg); outAEcrireIns(node); } @Override public void caseABlocIns(ABlocIns node) { inABlocIns(node); + SaLInst linst = null; + node.getBloc().apply(this); + linst = (SaLInst) this.returnValue; + this.returnValue = new SaInstBloc(linst); outABlocIns(node); } @Override public void caseAAccoladesBloc(AAccoladesBloc node) { inAAccoladesBloc(node); + SaLInst linst = null; + node.getLins().apply(this); + linst = (SaLInst) this.returnValue; + this.returnValue = new SaInstBloc(linst); outAAccoladesBloc(node); } @Override public void caseALinsLins(ALinsLins node) { inALinsLins(node); + SaInst tete = null; + SaLInst queue = null; + node.getIns().apply(this); + tete = (SaInst) this.returnValue; + node.getLins().apply(this); + queue = (SaLInst) this.returnValue; + this.returnValue = new SaLInst(tete, queue); outALinsLins(node); } @Override public void caseAEpsilonLins(AEpsilonLins node) { inAEpsilonLins(node); + this.returnValue = null; outAEpsilonLins(node); } @Override public void caseALexp2Lexp(ALexp2Lexp node) { inALexp2Lexp(node); + SaExp tete = null; + SaLExp queue = null; + node.getExp().apply(this); + tete = (SaExp) this.returnValue; + node.getLexp2().apply(this); + queue = (SaLExp) this.returnValue; + this.returnValue = new SaLExp(tete, queue); outALexp2Lexp(node); } @Override public void caseAEpsilonLexp(AEpsilonLexp node) { inAEpsilonLexp(node); + this.returnValue = null; outAEpsilonLexp(node); } @Override public void caseAVirguleLexp2(AVirguleLexp2 node) { inAVirguleLexp2(node); + SaExp tete = null; + SaLExp queue = null; + node.getExp().apply(this); + tete = (SaExp) this.returnValue; + node.getLexp2().apply(this); + queue = (SaLExp) this.returnValue; + this.returnValue = new SaLExp(tete, queue); outAVirguleLexp2(node); } @Override public void caseAEpsilonLexp2(AEpsilonLexp2 node) { inAEpsilonLexp2(node); + this.returnValue = null; outAEpsilonLexp2(node); } @Override public void caseAAfAf(AAfAf node) { inAAfAf(node); + String id = null; + SaLExp lexp = null; + id = node.getId().getText(); + node.getGpar().apply(this); + node.getLexp().apply(this); + lexp = (SaLExp) this.returnValue; + node.getDpar().apply(this); + this.returnValue = new SaAppel(id, lexp); outAAfAf(node); } @@ -361,13 +446,20 @@ public class Sc2sa extends DepthFirstAdapter String id = ""; inAIdVar(node); id = node.getId().getText(); - this.returnValue = new SaId + this.returnValue = new SaVarSimple(id); outAIdVar(node); } @Override public void caseACrochetsVar(ACrochetsVar node) { inACrochetsVar(node); + String id = node.getId().getText(); + SaExp exp = null; + node.getGcro().apply(this); + node.getExp().apply(this); + exp = (SaExp) this.returnValue; + node.getDcro().apply(this); + this.returnValue = new SaVarIndicee(id, exp); outACrochetsVar(node); } @@ -388,12 +480,17 @@ public class Sc2sa extends DepthFirstAdapter @Override public void caseATypeTypeopt(ATypeTypeopt node) { inATypeTypeopt(node); + Type type = null; + node.getType().apply(this); + type = this.returnType; + this.returnType = Type.fromString(type.nom()); outATypeTypeopt(node); } @Override public void caseAEpsilonTypeopt(AEpsilonTypeopt node) { inAEpsilonTypeopt(node); + this.returnValue = null; outAEpsilonTypeopt(node); } @@ -413,12 +510,32 @@ public class Sc2sa extends DepthFirstAdapter @Override public void caseATableauDecvar(ATableauDecvar node) { inATableauDecvar(node); + String nom = node.getId().getText(); + Type type; + node.getType().apply(this); + type = this.returnType; + int taille = Integer.parseInt(node.getNombre().getText()); + this.returnValue = new SaDecTab(nom, type, taille); outATableauDecvar(node); } @Override public void caseAFonctionDecfonc(AFonctionDecfonc node) { inAFonctionDecfonc(node); + String nom = node.getId().getText(); + Type typeretour; + node.getTypeopt().apply(this); + typeretour = this.returnType; + SaLDecVar parametres = null; + SaLDecVar variables = null; + SaInst corps = null; + node.getParams().apply(this); + parametres = (SaLDecVar) this.returnValue; + node.getLocals().apply(this); + variables = (SaLDecVar) this.returnValue; + node.getBloc().apply(this); + corps = (SaInst) this.returnValue; + this.returnValue = new SaDecFonc(nom, typeretour, parametres, variables, corps); outAFonctionDecfonc(node); } @@ -431,6 +548,7 @@ public class Sc2sa extends DepthFirstAdapter @Override public void caseAEpsilonLdecvar(AEpsilonLdecvar node) { inAEpsilonLdecvar(node); + this.returnValue = null; outAEpsilonLdecvar(node); } @@ -443,6 +561,7 @@ public class Sc2sa extends DepthFirstAdapter @Override public void caseAEpsilonLdecvar2(AEpsilonLdecvar2 node) { inAEpsilonLdecvar2(node); + this.returnValue = null; outAEpsilonLdecvar2(node); } @@ -455,12 +574,14 @@ public class Sc2sa extends DepthFirstAdapter @Override public void caseAEpsilonLdecfonc(AEpsilonLdecfonc node) { inAEpsilonLdecfonc(node); + this.returnValue = null; outAEpsilonLdecfonc(node); } @Override public void caseAEpsilon(AEpsilon node) { inAEpsilon(node); + this.returnValue = null; outAEpsilon(node); } }