Commit 5877bcdc authored by LucasDANIELE's avatar LucasDANIELE
Browse files

V1 fonctionnelle; il reste a gerer les erreurs

parent 22ab88d6
...@@ -39,6 +39,6 @@ $(TESTS_DEST)/%.class: $(TEST)/%.java ...@@ -39,6 +39,6 @@ $(TESTS_DEST)/%.class: $(TEST)/%.java
clean: clean:
rm $(SRC)/$(PACKAGE_INTER)/*.java
rm -rf $(CLASSES_DEST)/* rm -rf $(CLASSES_DEST)/*
rm -rf $(TESTS_DEST)/* rm -rf $(TESTS_DEST)/*
rm $(SRC)/$(PACKAGE_INTER)/*.java
File mode changed from 100644 to 100755
...@@ -9,4 +9,4 @@ j=j+1 ...@@ -9,4 +9,4 @@ j=j+1
allera somme allera somme
finsomme: si s==i alors ecrire i finsomme: si s==i alors ecrire i
i=i+1 i=i+1
si i<=n alors allera boucle si i<=n alors allera boucle
\ No newline at end of file
...@@ -7,18 +7,18 @@ package fr.insarouen.asi.compilation.basic; ...@@ -7,18 +7,18 @@ package fr.insarouen.asi.compilation.basic;
import fr.insarouen.asi.compilation.basic.analyseurs.AnalyseurSyntaxique; import fr.insarouen.asi.compilation.basic.analyseurs.AnalyseurSyntaxique;
import fr.insarouen.asi.compilation.basic.analyseurs.ParseException; import fr.insarouen.asi.compilation.basic.analyseurs.ParseException;
import fr.insarouen.asi.compilation.basic.moteur.arbreSyntaxiqueAbstrait.Affectation; // import fr.insarouen.asi.compilation.basic.moteur.arbreSyntaxiqueAbstrait.Affectation;
import fr.insarouen.asi.compilation.basic.moteur.Identifiant; // import fr.insarouen.asi.compilation.basic.moteur.Identifiant;
import fr.insarouen.asi.compilation.basic.moteur.IdentifiantException; import fr.insarouen.asi.compilation.basic.moteur.IdentifiantException;
import fr.insarouen.asi.compilation.basic.moteur.Memoire; // import fr.insarouen.asi.compilation.basic.moteur.Memoire;
import fr.insarouen.asi.compilation.basic.moteur.Programme; import fr.insarouen.asi.compilation.basic.moteur.Programme;
import fr.insarouen.asi.compilation.basic.moteur.Valeur; // import fr.insarouen.asi.compilation.basic.moteur.Valeur;
import fr.insarouen.asi.compilation.basic.moteur.VariableInconnueException; import fr.insarouen.asi.compilation.basic.moteur.VariableInconnueException;
import fr.insarouen.asi.compilation.basic.moteur.expression.Addition; // import fr.insarouen.asi.compilation.basic.moteur.expression.Addition;
import fr.insarouen.asi.compilation.basic.moteur.expression.Constante; // import fr.insarouen.asi.compilation.basic.moteur.expression.Constante;
import fr.insarouen.asi.compilation.basic.moteur.expression.IdentifiantDeVariable; // import fr.insarouen.asi.compilation.basic.moteur.expression.IdentifiantDeVariable;
import fr.insarouen.asi.compilation.basic.moteur.expression.Multiplication; // import fr.insarouen.asi.compilation.basic.moteur.expression.Multiplication;
import fr.insarouen.asi.compilation.basic.moteur.expression.Soustraction; // import fr.insarouen.asi.compilation.basic.moteur.expression.Soustraction;
import fr.insarouen.asi.compilation.basic.moteur.TypeIncompatibleException; import fr.insarouen.asi.compilation.basic.moteur.TypeIncompatibleException;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
......
...@@ -8,20 +8,15 @@ PARSER_BEGIN(AnalyseurSyntaxique) ...@@ -8,20 +8,15 @@ PARSER_BEGIN(AnalyseurSyntaxique)
package fr.insarouen.asi.compilation.basic.analyseurs; package fr.insarouen.asi.compilation.basic.analyseurs;
import fr.insarouen.asi.compilation.basic.analyseurs.*;
import fr.insarouen.asi.compilation.basic.moteur.arbreSyntaxiqueAbstrait.*; import fr.insarouen.asi.compilation.basic.moteur.arbreSyntaxiqueAbstrait.*;
import fr.insarouen.asi.compilation.basic.moteur.*; import fr.insarouen.asi.compilation.basic.moteur.*;
import fr.insarouen.asi.compilation.basic.moteur.expression.*; import fr.insarouen.asi.compilation.basic.moteur.expression.*;
import fr.insarouen.asi.compilation.basic.moteur.TypeIncompatibleException; import fr.insarouen.asi.compilation.basic.moteur.TypeIncompatibleException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class AnalyseurSyntaxique { public class AnalyseurSyntaxique {
private Programme prog; private Programme prog;
private Memoire mem;
public Programme programme() throws ParseException, IdentifiantException, TypeIncompatibleException,VariableInconnueException,TypeIncompatibleException{ public Programme programme() throws ParseException, IdentifiantException,TypeIncompatibleException,VariableInconnueException,TypeIncompatibleException{
mem = new Memoire();
prog = new Programme(); prog = new Programme();
lire(); lire();
return prog; return prog;
...@@ -77,37 +72,61 @@ TOKEN : { ...@@ -77,37 +72,61 @@ TOKEN : {
| <FAUX:["f","F"]["a","A"]["u","U"]["x","X"]> | <FAUX:["f","F"]["a","A"]["u","U"]["x","X"]>
} }
// void lire() throws IdentifiantException : void lire() throws IdentifiantException :
// { {
// Identifiant id = null ; Identifiant id = null ;
// Instruction instruction; Instruction i;
// } }
// { {
// ( (
// ((id = identifiant()) < LABEL >) ? instruction = instruction() (LOOKAHEAD(2) (id = identifiant()) < LABEL >) ? (i = instruction())
// { {
// if (instruction == null) if (id == null)
// prog.addInstruction(instruction); prog.addInstruction(i);
// else else
// prog.addInstructionAvecLabel(instruction, id); prog.addInstructionAvecLabel(i, id);
// id = null; id = null;
// } }
// )* )*
// < EOF > < EOF >
// } }
void lire() throws IdentifiantException,TypeIncompatibleException,TypeIncompatibleException,VariableInconnueException : Instruction instruction() throws IdentifiantException:
{ {
Expression e; Identifiant id;
Memoire mem=new Memoire(); Instruction i;
Expression e;
Token t;
} }
{ {
( (
e=operateurLogique() (<LIRE>(id=identifiant()){
) return new Lire(id);
{ })
System.out.println(e.evaluer(mem)); |(<SI>(e=expression())<ALORS>(i = instruction()){
} return new SiAlors(e,i);
})
|(<ECRIRE>(e=expression()){
return new Ecrire(e);
})
|(<RIEN>{
return new Rien();
})
|(<ALLERA>(id=identifiant()){
return new AllerA(id);
})
|( (id=identifiant())<AFF>(e = expression()){
return new Affectation(id, e);
})
)
}
Expression expression() throws IdentifiantException:
{
Expression e;
}
{
e = operateurLogique(){return e;}
} }
Expression operateurLogique() throws IdentifiantException: Expression operateurLogique() throws IdentifiantException:
...@@ -116,24 +135,33 @@ Expression operateurLogique() throws IdentifiantException: ...@@ -116,24 +135,33 @@ Expression operateurLogique() throws IdentifiantException:
Token t; Token t;
} }
{ {
g = comparaison()
( (
(t=<ET> | t=<OU>) ((t=<NON>)(d=operateurLogique()))
d=operateurLogique(){ {
switch (t.kind) { return new Non(d);
case ET:
return new Et(g,d);
break;
case OU:
return new Ou(g,d);
break;
}
} }
)? |
{ (
return g; g = comparaison()
} (
(t=<ET> | t=<OU>)
d=operateurLogique(){
switch (t.kind) {
case ET:
return new Et(g,d);
break;
case OU:
return new Ou(g,d);
break;
}
}
)?
{
return g;
}
)
)
} }
Expression comparaison() throws IdentifiantException: Expression comparaison() throws IdentifiantException:
...@@ -234,7 +262,7 @@ Expression terme() throws IdentifiantException : ...@@ -234,7 +262,7 @@ Expression terme() throws IdentifiantException :
( (
( (v=valeur()){ e=new Constante(v); } ) ( (v=valeur()){ e=new Constante(v); } )
| ( (i=identifiant()){ e=new IdentifiantDeVariable(i); } ) | ( (i=identifiant()){ e=new IdentifiantDeVariable(i); } )
| ( <PARENG> (e=terme()) <PAREND> ) | ( <PARENG> (e=expression()) <PAREND> )
) )
{ {
if (t == null) if (t == null)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment