From 14d39af284282821b2416976dbbed6a5f950a5be Mon Sep 17 00:00:00 2001 From: SylvanCourtiol Date: Sat, 8 May 2021 19:42:09 +0200 Subject: [PATCH] =?UTF-8?q?Mise=20en=20commun=20pour=20m=C3=AAme=20base?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/donnees/Identificateur.java | 128 ------------------ src/donnees/IdentificateurChaine.java | 46 ------- src/donnees/IdentificateurEntier.java | 51 ------- src/donnees/litteraux/Chaine.java | 72 ---------- src/donnees/litteraux/Litteral.java | 63 --------- src/{ => interpreteurlir}/Contexte.java | 2 +- .../InterpreteurException.java | 0 .../donnees/Identificateur.java | 128 ++++++++++++++++++ .../donnees/IdentificateurChaine.java | 46 +++++++ .../donnees/IdentificateurEntier.java | 51 +++++++ .../donnees/Variable.java | 0 .../donnees/litteraux/Chaine.java | 83 ++++++++++++ .../donnees/litteraux/Entier.java | 34 +++++ .../donnees/litteraux/Litteral.java | 63 +++++++++ .../donnees/litteraux/tests}/TestChaine.java | 31 +++-- .../litteraux/tests}/TestLitteraux.java | 2 +- .../donnees/tests/TestIdentificateur.java | 34 ++--- .../tests/TestIdentificateurChaine.java | 9 +- .../tests/TestIdentificateurEntier.java | 8 +- .../expressions/Expression.java | 0 .../expressions/ExpressionChaine.java | 0 .../expressions/ExpressionEntier.java | 0 .../expressions/tests/TestExpression.java | 0 .../tests/TestExpressionChaine.java | 0 .../tests/TestExpressionEntier.java} | 4 +- .../motscles/Commande.java | 0 .../motscles/CommandeDebut.java | 0 .../motscles/CommandeDefs.java | 0 .../motscles/CommandeFin.java | 0 .../motscles/tests/EssaiCommande.java | 0 .../motscles/tests/TestCommande.java | 0 .../motscles/tests/TestCommandeDebut.java | 0 .../motscles/tests/TestCommandeDefs.java | 0 .../motscles/tests/TestCommandeFin.java | 0 .../tests/EssaiInterpreteurException.java | 0 .../tests/TestContexte.java | 36 ++--- 36 files changed, 471 insertions(+), 420 deletions(-) delete mode 100644 src/donnees/Identificateur.java delete mode 100644 src/donnees/IdentificateurChaine.java delete mode 100644 src/donnees/IdentificateurEntier.java delete mode 100644 src/donnees/litteraux/Chaine.java delete mode 100644 src/donnees/litteraux/Litteral.java rename src/{ => interpreteurlir}/Contexte.java (99%) rename src/{ => interpreteurlir}/InterpreteurException.java (100%) create mode 100644 src/interpreteurlir/donnees/Identificateur.java create mode 100644 src/interpreteurlir/donnees/IdentificateurChaine.java create mode 100644 src/interpreteurlir/donnees/IdentificateurEntier.java rename src/{ => interpreteurlir}/donnees/Variable.java (100%) create mode 100644 src/interpreteurlir/donnees/litteraux/Chaine.java create mode 100644 src/interpreteurlir/donnees/litteraux/Entier.java create mode 100644 src/interpreteurlir/donnees/litteraux/Litteral.java rename src/{donnees/litteraux/test => interpreteurlir/donnees/litteraux/tests}/TestChaine.java (76%) rename src/{donnees/litteraux/test => interpreteurlir/donnees/litteraux/tests}/TestLitteraux.java (98%) rename src/{ => interpreteurlir}/donnees/tests/TestIdentificateur.java (78%) rename src/{ => interpreteurlir}/donnees/tests/TestIdentificateurChaine.java (90%) rename src/{ => interpreteurlir}/donnees/tests/TestIdentificateurEntier.java (90%) rename src/{ => interpreteurlir}/expressions/Expression.java (100%) rename src/{ => interpreteurlir}/expressions/ExpressionChaine.java (100%) rename src/{ => interpreteurlir}/expressions/ExpressionEntier.java (100%) rename src/{ => interpreteurlir}/expressions/tests/TestExpression.java (100%) rename src/{ => interpreteurlir}/expressions/tests/TestExpressionChaine.java (100%) rename src/{expressions/tests/ExpressionEntier.java => interpreteurlir/expressions/tests/TestExpressionEntier.java} (76%) rename src/{ => interpreteurlir}/motscles/Commande.java (100%) rename src/{ => interpreteurlir}/motscles/CommandeDebut.java (100%) rename src/{ => interpreteurlir}/motscles/CommandeDefs.java (100%) rename src/{ => interpreteurlir}/motscles/CommandeFin.java (100%) rename src/{ => interpreteurlir}/motscles/tests/EssaiCommande.java (100%) rename src/{ => interpreteurlir}/motscles/tests/TestCommande.java (100%) rename src/{ => interpreteurlir}/motscles/tests/TestCommandeDebut.java (100%) rename src/{ => interpreteurlir}/motscles/tests/TestCommandeDefs.java (100%) rename src/{ => interpreteurlir}/motscles/tests/TestCommandeFin.java (100%) rename src/{ => interpreteurlir}/tests/EssaiInterpreteurException.java (100%) rename src/{ => interpreteurlir}/tests/TestContexte.java (86%) diff --git a/src/donnees/Identificateur.java b/src/donnees/Identificateur.java deleted file mode 100644 index 34f7cc9..0000000 --- a/src/donnees/Identificateur.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Identificateur.java , 08/05/2021 - * IUT Rodez 2020-2021, info1 - * pas de copyright, aucun droits - */ - -package donnees; - -/** - * @author Nicolas Caminade - * @author Sylvan Courtiol - * @author Pierre Debas - * @author Heia Dexter - * @author Lucas Vabre - */ -public class Identificateur /* extends Variable */ -implements Comparable { - - /** Longueur maximale d'un identificateur (ne prend pas en compte le $) */ - public static final int LONGUEUR_MAX = 24; - - /** Nom identificateur */ - private String nom; - - /** - * Instantiation de l'identificateur - * @param identificateur - */ - public Identificateur(String identificateur) { - super(); - if(!isIdentificateur(identificateur)) { - throw new IllegalArgumentException(identificateur - + " n'est pas un identificateur"); - } - - nom = identificateur; - } - - /** - * Prédicat qui vérifie si une chaîne correspond à un identificateur - * - * @param aComparer - * @return true si le prédicat est vérifié - * false sinon - */ - public static boolean isIdentificateur(String aComparer) { - return aComparer != null - && aComparer.length() > 0 - && !removeDollar(aComparer).isBlank() - && removeDollar(aComparer).length() <= LONGUEUR_MAX - && isAlphanumerique(removeDollar(aComparer)); - } - - /** - * Supprime le caractère $ si il est présent en premier dans la chaîne - * @param chaine a modifier - * @return la chaîne modifiée - */ - public static String removeDollar(String chaine) { - if(chaine.charAt(0) == '$') return chaine.substring(1); - return chaine; - } - - /** - * Prédicat testant si une chaîne est composée de chiffre ou de lettres - * @param aTester chaîne a tester - * @return true si le prédicat est vérifié - * false sinon - */ - public static boolean isAlphanumerique(String aTester) { - int index; - - for (index = 0 ; - index < aTester.length() - && (isLettre(aTester.charAt(index)) - || isChiffre(aTester.charAt(index))); - index++) - ; // Corps vide - - return index >= aTester.length(); - } - - /** - * Prédicat attestant si un caractère est une lettre - * @param aTester caractère a tester - * @return true si le prédicat est vérifié - * false sinon - */ - public static boolean isLettre(char aTester) { - return 'a' <= aTester && aTester <= 'z' - || 'A' <= aTester && aTester <= 'Z'; - } - - /** - * Prédicat attestant si un caractère est un chiffre - * @param aTester caractère a tester - * @return true si le prédicat est vérifié - * false sinon - */ - public static boolean isChiffre(char aTester) { - return '0' <= aTester && aTester <= '9'; - } - - /** - * @return la valeur de nom - */ - public String getNom() { - return nom; - } - - /* non javadoc - @see java.lang.Object#toString() */ - @Override - public String toString() { - return "Identificateur [nom=" + nom + "]"; - } - - /* non javadoc - @see java.lang.String#Comparable() */ - @Override - public int compareTo(Identificateur aComparer) { - return nom.compareTo(aComparer.getNom()); - } - - -} diff --git a/src/donnees/IdentificateurChaine.java b/src/donnees/IdentificateurChaine.java deleted file mode 100644 index bcf0663..0000000 --- a/src/donnees/IdentificateurChaine.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * IdentificateurChaine.java, 08/05/2021 - * IUT Rodez 2020-2021, info1 - * pas de copyright, aucun droits - */ - -package donnees; - -/** - * Identificateur de chaîne - * @author Nicolas Caminade - * @author Sylvan Courtiol - * @author Pierre Debas - * @author Heia Dexter - * @author Lucas Vabre - */ -public class IdentificateurChaine extends Identificateur { - - /** - * Instantiation d'identificateur de chaîne - * @param identificateur a instancier - * @throws IllegalAccessException si l'identificateur est invalide - */ - public IdentificateurChaine(String identificateur) { - super(identificateur); - - if(!isIdentificateurChaine(identificateur)) { - throw new IllegalArgumentException(identificateur - + " n'est pas un identificateur" - + " de chaine"); - } - } - - /** - * Prédicat attestant la validité de l'identificateur - * @param identificateur à tester - * @return true si l'identificateur est bien un identificateur d'entier - * false sinon - */ - private static boolean isIdentificateurChaine(String identificateur) { - - return identificateur.length() >= 2 - && identificateur.charAt(0) == '$' - && isLettre(identificateur.charAt(1)); - } -} diff --git a/src/donnees/IdentificateurEntier.java b/src/donnees/IdentificateurEntier.java deleted file mode 100644 index 319a939..0000000 --- a/src/donnees/IdentificateurEntier.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * IdentificateurEntier.java , 08/05/2021 - * IUT Rodez 2020-2021, info1 - * pas de copyright, aucun droits - */ - -package donnees; - -/** - * Identificateur d'entier - * @author Nicolas Caminade - * @author Sylvan Courtiol - * @author Pierre Debas - * @author Heia Dexter - * @author Lucas Vabre - */ -public class IdentificateurEntier extends Identificateur { - - /** - * Instantiation d'identificateur d'entier - * @param identificateur a instancier - * @throws IllegalAccessException si l'identificateur est invalide - */ - public IdentificateurEntier(String identificateur) { - super(identificateur); - - if(!isIdentificateurEntier(identificateur)) { - throw new IllegalArgumentException(identificateur - + " n'est pas un identificateur" - + " d'entier"); - } - } - - /** - * Prédicat attestant la validité de l'identificateur - * - * Un identificateur d'entier est valide si - * - Il contient au maximum 24 caractères - * - Commence obligatoirement par une lettre (majuscule ou minuscule) - * - suivie uniquement de lettres (majuscule ou minuscule) ou de chiffres - * - * @param identificateur à tester - * @return true si l'identificateur est bien un identificateur d'entier - * false sinon - */ - private static boolean isIdentificateurEntier(String identificateur) { - - return isLettre(identificateur.charAt(0)) - && isAlphanumerique(identificateur.substring(1)); - } -} diff --git a/src/donnees/litteraux/Chaine.java b/src/donnees/litteraux/Chaine.java deleted file mode 100644 index b290844..0000000 --- a/src/donnees/litteraux/Chaine.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Chaine.java 7 mai 2021 - * IUT info1 2020-2021, pas de copyright, aucun droit - */ -package interpreteurlir.donnees.litteraux; - -import interpreteurlir.InterpreteurException; - -/** - * Constante littérale de type chaîne de caractères. - * @author Nicolas Caminade - * @author Sylvan Courtiol - * @author Pierre Debas - * @author Heïa Dexter - * @author Lucas Vabre - */ -public class Chaine extends Litteral { - - /** Longueur maximale d'une chaîne */ - public static final int LG_MAX_CHAINE = 70; - - /** Erreur chaîne trop longue */ - private static final String ERREUR_LG_MAX = "Longueur maximale dépassée"; - - /** - * initialise cette chaîne avec une valeur par défaut. - */ - public Chaine() { - valeur = ""; - } - - /** - * Initialise une chaîne avec la séquence de caractères passée en argument. - * @param uneValeur - */ - public Chaine(String uneValeur) { - - if (uneValeur.length() > LG_MAX_CHAINE) - throw new InterpreteurException(ERREUR_LG_MAX); - - valeur = uneValeur; - } - - /** - * Concatène deux chaînes ensemble. Opération non commutative: - * a + b != b + a - * @param a une Chaîne - * @param b une autre Chaîne - * @return une nouvelle Chaîne. - */ - public static Chaine concatener(Chaine a, Chaine b) { - - return null; - } - - /* non javadoc - * @see interpreteurlir.donnees.litteraux.Litteral#compareTo(interpreteurlir.donnees.litteraux.Litteral) - */ - @Override - public int compareTo(Litteral autre) { - // TODO Auto-generated method stub - return this.valeur.toString().compareTo(autre.valeur.toString()); - } - - /* non javadoc - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return '\"' + valeur.toString() + '\"'; - } -} \ No newline at end of file diff --git a/src/donnees/litteraux/Litteral.java b/src/donnees/litteraux/Litteral.java deleted file mode 100644 index 373bae9..0000000 --- a/src/donnees/litteraux/Litteral.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Litteral.java 7 mai 2021 - * IUT info1 2020-2021, pas de copyright, aucun droit - */ -package interpreteurlir.donnees.litteraux; - -/** - * Valeur littérale utilisée dans une expression. - * Chaque littérale est reconnue par sont type. - * @author Nicolas Caminade - * @author Sylvan Courtiol - * @author Pierre Debas - * @author Heïa Dexter - * @author Lucas Vabre - */ -public class Litteral implements Comparable { - - /** valeur de ce littéral */ - protected Object valeur; - - /** - * Initialise ce littéral par défaut. - */ - protected Litteral() { - super(); - } - - /** - * Initialise cette valeur avec un objet argument. - * @param valeur - */ - public Litteral(Object valeur) { // TODO public >>> protected - super(); - this.valeur = valeur; - } - - /** - * @return la valeur de valeur - */ - public Object getValeur() { - return valeur; - } - - /* non javadoc - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return valeur.toString(); - } - - /* non javadoc - * @see java.lang.Comparable#compareTo(java.lang.Object) - */ - @Override - public int compareTo(Litteral autre) { - - if (autre.valeur.getClass() == this.valeur.getClass()) - return 0; - - return this.valeur.hashCode() - autre.valeur.hashCode(); - } -} \ No newline at end of file diff --git a/src/Contexte.java b/src/interpreteurlir/Contexte.java similarity index 99% rename from src/Contexte.java rename to src/interpreteurlir/Contexte.java index 0640675..3dfffc3 100644 --- a/src/Contexte.java +++ b/src/interpreteurlir/Contexte.java @@ -82,7 +82,7 @@ public class Contexte { public Litteral lireValeurVariable(Identificateur id) { Litteral valeur; int indexVar = indexVariable(id); - if (variables.size() < indexVar + if (variables.size() > indexVar && variables.get(indexVar).getIdentificateur().compareTo(id) == 0) { /* La variables est présente */ diff --git a/src/InterpreteurException.java b/src/interpreteurlir/InterpreteurException.java similarity index 100% rename from src/InterpreteurException.java rename to src/interpreteurlir/InterpreteurException.java diff --git a/src/interpreteurlir/donnees/Identificateur.java b/src/interpreteurlir/donnees/Identificateur.java new file mode 100644 index 0000000..0853c22 --- /dev/null +++ b/src/interpreteurlir/donnees/Identificateur.java @@ -0,0 +1,128 @@ +/* + * Identificateur.java , 08/05/2021 + * IUT Rodez 2020-2021, info1 + * pas de copyright, aucun droits + */ + +package interpreteurlir.donnees; + +/** + * @author Nicolas Caminade + * @author Sylvan Courtiol + * @author Pierre Debas + * @author Heia Dexter + * @author Lucas Vabre + */ +public class Identificateur /* extends Variable */ +implements Comparable { + + /** Longueur maximale d'un identificateur (ne prend pas en compte le $) */ + public static final int LONGUEUR_MAX = 24; + + /** Nom identificateur */ + private String nom; + + /** + * Instantiation de l'identificateur + * @param identificateur + */ + public Identificateur(String identificateur) { + super(); + if(!isIdentificateur(identificateur)) { + throw new IllegalArgumentException(identificateur + + " n'est pas un identificateur"); + } + + nom = identificateur; + } + + /** + * Prédicat qui vérifie si une chaîne correspond à un identificateur + *
    + *
  • Longueur comprise entre 1 et 24 caractères
  • + *
  • N'est pas une chaîne vide
  • + *
  • N'est pas null
  • + *
+ * @param aComparer + * @return true si le prédicat est vérifié + * false sinon + */ + public static boolean isIdentificateur(String aComparer) { + return aComparer != null + && aComparer.length() > 0 + && !removeDollar(aComparer).isBlank() + && removeDollar(aComparer).length() <= LONGUEUR_MAX + && isAlphanumerique(removeDollar(aComparer)); + } + + /** + * Supprime le caractère $ si il est présent en premier dans la chaîne + * @param chaine a modifier + * @return la chaîne modifiée + */ + public static String removeDollar(String chaine) { + if(chaine.charAt(0) == '$') return chaine.substring(1); + return chaine; + } + + /** + * Prédicat testant si une chaîne est composée de chiffre ou de lettres + * @param aTester chaîne a tester + * @return true si le prédicat est vérifié + * false sinon + */ + public static boolean isAlphanumerique(String aTester) { + int index; + + for (index = 0 ; + index < aTester.length() + && (isLettre(aTester.charAt(index)) + || isChiffre(aTester.charAt(index))); + index++) + ; // Corps vide + + return index >= aTester.length(); + } + + /** + * Prédicat attestant si un caractère est une lettre + * @param aTester caractère a tester + * @return true si le prédicat est vérifié + * false sinon + */ + public static boolean isLettre(char aTester) { + return 'a' <= aTester && aTester <= 'z' + || 'A' <= aTester && aTester <= 'Z'; + } + + /** + * Prédicat attestant si un caractère est un chiffre + * @param aTester caractère a tester + * @return true si le prédicat est vérifié + * false sinon + */ + public static boolean isChiffre(char aTester) { + return '0' <= aTester && aTester <= '9'; + } + + /** + * @return la valeur de nom + */ + public String getNom() { + return nom; + } + + /* non javadoc - @see java.lang.Object#toString() */ + @Override + public String toString() { + return nom; + } + + /* non javadoc - @see java.lang.String#Comparable() */ + @Override + public int compareTo(Identificateur aComparer) { + return nom.compareTo(aComparer.nom); + } + + +} diff --git a/src/interpreteurlir/donnees/IdentificateurChaine.java b/src/interpreteurlir/donnees/IdentificateurChaine.java new file mode 100644 index 0000000..bd5b057 --- /dev/null +++ b/src/interpreteurlir/donnees/IdentificateurChaine.java @@ -0,0 +1,46 @@ +/* + * IdentificateurChaine.java, 08/05/2021 + * IUT Rodez 2020-2021, info1 + * pas de copyright, aucun droits + */ + +package interpreteurlir.donnees; + +/** + * Identificateur de chaîne + * @author Nicolas Caminade + * @author Sylvan Courtiol + * @author Pierre Debas + * @author Heia Dexter + * @author Lucas Vabre + */ +public class IdentificateurChaine extends Identificateur { + + /** + * Instantiation d'identificateur de chaîne + * @param identificateur a instancier + * @throws IllegalAccessException si l'identificateur est invalide + */ + public IdentificateurChaine(String identificateur) { + super(identificateur); + + if(!isIdentificateurChaine(identificateur)) { + throw new IllegalArgumentException(identificateur + + " n'est pas un identificateur" + + " de chaine"); + } + } + + /** + * Prédicat attestant la validité de l'identificateur + * @param identificateur à tester + * @return true si l'identificateur est bien un identificateur d'entier + * false sinon + */ + private static boolean isIdentificateurChaine(String identificateur) { + + return identificateur.length() >= 2 + && identificateur.charAt(0) == '$' + && isLettre(identificateur.charAt(1)); + } +} diff --git a/src/interpreteurlir/donnees/IdentificateurEntier.java b/src/interpreteurlir/donnees/IdentificateurEntier.java new file mode 100644 index 0000000..9d6c6d2 --- /dev/null +++ b/src/interpreteurlir/donnees/IdentificateurEntier.java @@ -0,0 +1,51 @@ +/* + * IdentificateurEntier.java , 08/05/2021 + * IUT Rodez 2020-2021, info1 + * pas de copyright, aucun droits + */ + +package interpreteurlir.donnees; + +/** + * Identificateur d'entier + * @author Nicolas Caminade + * @author Sylvan Courtiol + * @author Pierre Debas + * @author Heia Dexter + * @author Lucas Vabre + */ +public class IdentificateurEntier extends Identificateur { + + /** + * Instantiation d'identificateur d'entier + * @param identificateur a instancier + * @throws IllegalAccessException si l'identificateur est invalide + */ + public IdentificateurEntier(String identificateur) { + super(identificateur); + + if(!isIdentificateurEntier(identificateur)) { + throw new IllegalArgumentException(identificateur + + " n'est pas un identificateur" + + " d'entier"); + } + } + + /** + * Prédicat attestant la validité de l'identificateur + * + * Un identificateur d'entier est valide si + * - Il contient au maximum 24 caractères + * - Commence obligatoirement par une lettre (majuscule ou minuscule) + * - suivie uniquement de lettres (majuscule ou minuscule) ou de chiffres + * + * @param identificateur à tester + * @return true si l'identificateur est bien un identificateur d'entier + * false sinon + */ + private static boolean isIdentificateurEntier(String identificateur) { + + return isLettre(identificateur.charAt(0)) + && isAlphanumerique(identificateur.substring(1)); + } +} diff --git a/src/donnees/Variable.java b/src/interpreteurlir/donnees/Variable.java similarity index 100% rename from src/donnees/Variable.java rename to src/interpreteurlir/donnees/Variable.java diff --git a/src/interpreteurlir/donnees/litteraux/Chaine.java b/src/interpreteurlir/donnees/litteraux/Chaine.java new file mode 100644 index 0000000..dc0860d --- /dev/null +++ b/src/interpreteurlir/donnees/litteraux/Chaine.java @@ -0,0 +1,83 @@ +/** + * Chaine.java 7 mai 2021 + * IUT info1 2020-2021, pas de copyright, aucun droit + */ +package interpreteurlir.donnees.litteraux; + +import interpreteurlir.InterpreteurException; + +/** + * Constante littérale de type chaîne de caractères. + * @author Nicolas Caminade + * @author Sylvan Courtiol + * @author Pierre Debas + * @author Heïa Dexter + * @author Lucas Vabre + */ +public class Chaine extends Litteral { + + /** Longueur maximale d'une chaîne */ + public static final int LG_MAX_CHAINE = 70; + + /** Erreur chaîne trop longue */ + private static final String ERREUR_LG_MAX = "Longueur maximale dépassée"; + + /** Erreur constante littéral chaîne invalide */ + private static final String ERREUR_INVALIDE = + "syntaxe incorrecte pour une constante de type chaîne : "; + + /** + * initialise cette chaîne avec une valeur par défaut. + */ + public Chaine() { + valeur = ""; + } + + /** + * Initialise une chaîne avec la séquence de caractères passée en argument. + * @param uneValeur + */ + public Chaine(String uneValeur) { + + if (!uneValeur.startsWith("\"") || !uneValeur.endsWith("\"")) { + throw new InterpreteurException(ERREUR_INVALIDE + + uneValeur); + } + + uneValeur = uneValeur.substring(1, uneValeur.length() - 1); + + if (uneValeur.length() > LG_MAX_CHAINE) + throw new InterpreteurException(ERREUR_LG_MAX); + + valeur = uneValeur; + } + + /** + * Concatène deux chaînes ensemble. Opération non commutative: + * a + b != b + a + * @param a une Chaîne + * @param b une autre Chaîne + * @return une nouvelle Chaîne. + */ + public static Chaine concatener(Chaine a, Chaine b) { + + return null; + } + + /* non javadoc + * @see interpreteurlir.donnees.litteraux.Litteral#compareTo(interpreteurlir.donnees.litteraux.Litteral) + */ + @Override + public int compareTo(Litteral autre) { + // TODO Auto-generated method stub + return this.valeur.toString().compareTo(autre.valeur.toString()); + } + + /* non javadoc + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return '\"' + valeur.toString() + '\"'; + } +} \ No newline at end of file diff --git a/src/interpreteurlir/donnees/litteraux/Entier.java b/src/interpreteurlir/donnees/litteraux/Entier.java new file mode 100644 index 0000000..02863cf --- /dev/null +++ b/src/interpreteurlir/donnees/litteraux/Entier.java @@ -0,0 +1,34 @@ +/** + * Entier.java 8 mai 2021 + * IUT Rodez info1 2020-2021, pas de copyright, aucun droit + */ +package interpreteurlir.donnees.litteraux; + +/** + * BOUCHON + * @author + * + */ +public class Entier extends Litteral { + + + /** TODO commenter l'état initial + * @param i + */ + public Entier(int i) { + super(Integer.valueOf(i)); + // TODO Auto-generated constructor stub + valeur = i; + } + + /* non javadoc + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return valeur.toString(); + } + + + +} diff --git a/src/interpreteurlir/donnees/litteraux/Litteral.java b/src/interpreteurlir/donnees/litteraux/Litteral.java new file mode 100644 index 0000000..953915e --- /dev/null +++ b/src/interpreteurlir/donnees/litteraux/Litteral.java @@ -0,0 +1,63 @@ +/** + * Litteral.java 7 mai 2021 + * IUT info1 2020-2021, pas de copyright, aucun droit + */ +package interpreteurlir.donnees.litteraux; + +/** + * Valeur littérale utilisée dans une expression. + * Chaque littérale est reconnue par sont type. + * @author Nicolas Caminade + * @author Sylvan Courtiol + * @author Pierre Debas + * @author Heïa Dexter + * @author Lucas Vabre + */ +public class Litteral implements Comparable { + + /** valeur de ce littéral */ + protected Object valeur; + + /** + * Initialise ce littéral par défaut. + */ + protected Litteral() { + super(); + } + + /** + * Initialise cette valeur avec un objet argument. + * @param valeur + */ + public Litteral(Object valeur) { // TODO public >>> protected + super(); + this.valeur = valeur; + } + + /** + * @return la valeur de valeur + */ + public Object getValeur() { + return valeur; + } + + /* non javadoc + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return valeur.toString(); + } + + /* non javadoc + * @see java.lang.Comparable#compareTo(java.lang.Object) + */ + @Override + public int compareTo(Litteral autre) { + + if (autre.valeur.getClass() == this.valeur.getClass()) + return 0; + + return this.valeur.hashCode() - autre.valeur.hashCode(); + } +} \ No newline at end of file diff --git a/src/donnees/litteraux/test/TestChaine.java b/src/interpreteurlir/donnees/litteraux/tests/TestChaine.java similarity index 76% rename from src/donnees/litteraux/test/TestChaine.java rename to src/interpreteurlir/donnees/litteraux/tests/TestChaine.java index 42fb8b2..28b0758 100644 --- a/src/donnees/litteraux/test/TestChaine.java +++ b/src/interpreteurlir/donnees/litteraux/tests/TestChaine.java @@ -2,7 +2,7 @@ * TestChaine.java 8 mai 2021 * IUT info1 2020-2021, pas de copyright, aucun droit */ -package interpreteurlir.donnees.litteraux.test; +package interpreteurlir.donnees.litteraux.tests; import interpreteurlir.InterpreteurException; import interpreteurlir.donnees.litteraux.Chaine; @@ -22,9 +22,10 @@ public class TestChaine { public static void testChaine() { final String[] VALIDE = { - "arztyehjklmpoijhghnbghjklmpoiuytrf" + - "ghjnklmpoiuytrezaqsdfghnjklmpjbfrtyu", "","coucou ", - Integer.toString(42) + "\"arztyehjklmpoijhghnbghjklmpoiuytrf" + + "ghjnklmpoiuytrezaqsdfghnjklmpjbfrtyu\"", + "\"\"","\"coucou \"", + "\"" + 42 + "\"" }; final String INVALIDE = @@ -47,17 +48,17 @@ public class TestChaine { /** test de compareTo */ public static void testCompareTo() { final Chaine[][] EGALITES = { - {new Chaine("coucou"), new Chaine("coucou")}, - {new Chaine(" "), new Chaine(" ")}, - {new Chaine(""), new Chaine()} + {new Chaine("\"coucou\""), new Chaine("\"coucou\"")}, + {new Chaine("\" \""), new Chaine("\" \"")}, + {new Chaine("\"\""), new Chaine()} }; final Chaine[][] DIFFERENCES = { - {new Chaine("coucou"), new Chaine("camomille")}, - {new Chaine("tarentule"), new Chaine("coucou")}, - {new Chaine("coucou"), new Chaine(" ")}, - {new Chaine("coucou"), new Chaine()}, - {new Chaine(" "), new Chaine()} + {new Chaine("\"coucou\""), new Chaine("\"camomille\"")}, + {new Chaine("\"tarentule\""), new Chaine("\"coucou\"")}, + {new Chaine("\"coucou\""), new Chaine("\" \"")}, + {new Chaine("\"coucou\""), new Chaine()}, + {new Chaine("\" \""), new Chaine()} }; System.out.println("test de compareTo(Chaine)\nAvec égalités"); @@ -87,8 +88,10 @@ public class TestChaine { /** test de toString */ public static void testToString() { final Chaine[] A_AFFICHER = { - new Chaine(), new Chaine(" "), new Chaine("coucou"), - new Chaine(" coucou "), new Chaine("coucou monsieur") + new Chaine(), new Chaine("\" \""), + new Chaine("\"coucou\""), + new Chaine("\" coucou \""), + new Chaine("\"coucou monsieur\"") }; final String[] AFFICHAGE_GUILLEMETS = { diff --git a/src/donnees/litteraux/test/TestLitteraux.java b/src/interpreteurlir/donnees/litteraux/tests/TestLitteraux.java similarity index 98% rename from src/donnees/litteraux/test/TestLitteraux.java rename to src/interpreteurlir/donnees/litteraux/tests/TestLitteraux.java index fa1591b..d045778 100644 --- a/src/donnees/litteraux/test/TestLitteraux.java +++ b/src/interpreteurlir/donnees/litteraux/tests/TestLitteraux.java @@ -2,7 +2,7 @@ * TestLitteraux.java 7 mai 2021 * IUT info1 2020-2021, pas de copyright, aucun droit */ -package interpreteurlir.donnees.litteraux.test; +package interpreteurlir.donnees.litteraux.tests; import interpreteurlir.donnees.litteraux.Litteral; diff --git a/src/donnees/tests/TestIdentificateur.java b/src/interpreteurlir/donnees/tests/TestIdentificateur.java similarity index 78% rename from src/donnees/tests/TestIdentificateur.java rename to src/interpreteurlir/donnees/tests/TestIdentificateur.java index a1dc82c..dfea654 100644 --- a/src/donnees/tests/TestIdentificateur.java +++ b/src/interpreteurlir/donnees/tests/TestIdentificateur.java @@ -2,11 +2,11 @@ * TestIdentificateur.java 8 mai 2021 * IUT-Rodez info1 2020-2021, pas de droits, pas de copyrights */ -package donnees.tests; +package interpreteurlir.donnees.tests; -import static outils.glg.Assertions.*; +import static info1.outils.glg.Assertions.*; -import donnees.Identificateur; +import interpreteurlir.donnees.Identificateur; /** * Test de la classe donnees.Identificateur @@ -79,7 +79,7 @@ public class TestIdentificateur { public static void testCompareTo() { final Identificateur REF_MIN = new Identificateur("$AAAAAAAAAAAAAAAAAAAAAAAA"); final Identificateur REF_MAX = new Identificateur("zzzzzzzzzzzzzzzzzzzzzzzz"); - + for(int noJeu = 0; noJeu < FIXTURE.length; noJeu++) { assertTrue(FIXTURE[noJeu].compareTo(REF_MIN) >= 0); assertTrue(FIXTURE[noJeu].compareTo(REF_MAX) <= 0); @@ -92,22 +92,22 @@ public class TestIdentificateur { */ public static void testToString() { final String[] CHAINES_VALIDES = { - "Identificateur [nom=b]", - "Identificateur [nom=A]", - "Identificateur [nom=zalpha]", - "Identificateur [nom=Alpha]", - "Identificateur [nom=Alpha5]", - "Identificateur [nom=jeSuisUnTresLongIdentifi]", - "Identificateur [nom=$b]", - "Identificateur [nom=z]", - "Identificateur [nom=$zalpha]", - "Identificateur [nom=$Alpha]", - "Identificateur [nom=$Alpha5]", - "Identificateur [nom=$jeSuisUnTresLongIdentifi]" + "b", + "A", + "zalpha", + "Alpha", + "Alpha5", + "jeSuisUnTresLongIdentifi", + "$b", + "z", + "$zalpha", + "$Alpha", + "$Alpha5", + "$jeSuisUnTresLongIdentifi" }; for (int noJeu = 0 ; noJeu < CHAINES_VALIDES.length ; noJeu++) { - assertEquivalent(CHAINES_VALIDES[noJeu], + assertEquivalence(CHAINES_VALIDES[noJeu], FIXTURE[noJeu].toString()); } } diff --git a/src/donnees/tests/TestIdentificateurChaine.java b/src/interpreteurlir/donnees/tests/TestIdentificateurChaine.java similarity index 90% rename from src/donnees/tests/TestIdentificateurChaine.java rename to src/interpreteurlir/donnees/tests/TestIdentificateurChaine.java index 94ea36f..29d04ef 100644 --- a/src/donnees/tests/TestIdentificateurChaine.java +++ b/src/interpreteurlir/donnees/tests/TestIdentificateurChaine.java @@ -4,12 +4,11 @@ * pas de copyright, aucun droits */ -package donnees.tests; +package interpreteurlir.donnees.tests; -import static outils.glg.Assertions.assertEquivalent; -import static outils.glg.Assertions.echec; +import static info1.outils.glg.Assertions.*; -import donnees.IdentificateurChaine; +import interpreteurlir.donnees.IdentificateurChaine; /** * Tests unitaires de la classe donnees.IdentificateurEntier @@ -87,7 +86,7 @@ public class TestIdentificateurChaine { }; for (int noJeu = 0 ; noJeu < NOM_VALIDES.length ; noJeu++) { - assertEquivalent(NOM_VALIDES[noJeu], FIXTURE[noJeu].getNom()); + assertEquivalence(NOM_VALIDES[noJeu], FIXTURE[noJeu].getNom()); } } } diff --git a/src/donnees/tests/TestIdentificateurEntier.java b/src/interpreteurlir/donnees/tests/TestIdentificateurEntier.java similarity index 90% rename from src/donnees/tests/TestIdentificateurEntier.java rename to src/interpreteurlir/donnees/tests/TestIdentificateurEntier.java index 9d1c110..0d5c604 100644 --- a/src/donnees/tests/TestIdentificateurEntier.java +++ b/src/interpreteurlir/donnees/tests/TestIdentificateurEntier.java @@ -4,11 +4,11 @@ * pas de copyright, aucun droits */ -package donnees.tests; +package interpreteurlir.donnees.tests; -import static outils.glg.Assertions.*; +import static info1.outils.glg.Assertions.*; -import donnees.IdentificateurEntier; +import interpreteurlir.donnees.IdentificateurEntier; /** * Tests unitaires de la classe donnees.IdentificateurEntier @@ -77,7 +77,7 @@ public class TestIdentificateurEntier { }; for (int noJeu = 0 ; noJeu < NOM_VALIDES.length ; noJeu++) { - assertEquivalent(NOM_VALIDES[noJeu], FIXTURE[noJeu].getNom()); + assertEquivalence(NOM_VALIDES[noJeu], FIXTURE[noJeu].getNom()); } } } diff --git a/src/expressions/Expression.java b/src/interpreteurlir/expressions/Expression.java similarity index 100% rename from src/expressions/Expression.java rename to src/interpreteurlir/expressions/Expression.java diff --git a/src/expressions/ExpressionChaine.java b/src/interpreteurlir/expressions/ExpressionChaine.java similarity index 100% rename from src/expressions/ExpressionChaine.java rename to src/interpreteurlir/expressions/ExpressionChaine.java diff --git a/src/expressions/ExpressionEntier.java b/src/interpreteurlir/expressions/ExpressionEntier.java similarity index 100% rename from src/expressions/ExpressionEntier.java rename to src/interpreteurlir/expressions/ExpressionEntier.java diff --git a/src/expressions/tests/TestExpression.java b/src/interpreteurlir/expressions/tests/TestExpression.java similarity index 100% rename from src/expressions/tests/TestExpression.java rename to src/interpreteurlir/expressions/tests/TestExpression.java diff --git a/src/expressions/tests/TestExpressionChaine.java b/src/interpreteurlir/expressions/tests/TestExpressionChaine.java similarity index 100% rename from src/expressions/tests/TestExpressionChaine.java rename to src/interpreteurlir/expressions/tests/TestExpressionChaine.java diff --git a/src/expressions/tests/ExpressionEntier.java b/src/interpreteurlir/expressions/tests/TestExpressionEntier.java similarity index 76% rename from src/expressions/tests/ExpressionEntier.java rename to src/interpreteurlir/expressions/tests/TestExpressionEntier.java index 7c693ca..5b8f5d1 100644 --- a/src/expressions/tests/ExpressionEntier.java +++ b/src/interpreteurlir/expressions/tests/TestExpressionEntier.java @@ -1,5 +1,5 @@ /** - * ExpressionEntier.java 7 mai 2021 + * TestExpressionEntier.java 7 mai 2021 * IUT Rodez info1 2020-2021, pas de copyright, aucun droit */ package interpreteurlir.expressions.tests; @@ -14,6 +14,6 @@ import interpreteurlir.expressions.Expression; * @author Heïa Dexter * @author Lucas Vabre */ -public class ExpressionEntier { +public class TestExpressionEntier { } diff --git a/src/motscles/Commande.java b/src/interpreteurlir/motscles/Commande.java similarity index 100% rename from src/motscles/Commande.java rename to src/interpreteurlir/motscles/Commande.java diff --git a/src/motscles/CommandeDebut.java b/src/interpreteurlir/motscles/CommandeDebut.java similarity index 100% rename from src/motscles/CommandeDebut.java rename to src/interpreteurlir/motscles/CommandeDebut.java diff --git a/src/motscles/CommandeDefs.java b/src/interpreteurlir/motscles/CommandeDefs.java similarity index 100% rename from src/motscles/CommandeDefs.java rename to src/interpreteurlir/motscles/CommandeDefs.java diff --git a/src/motscles/CommandeFin.java b/src/interpreteurlir/motscles/CommandeFin.java similarity index 100% rename from src/motscles/CommandeFin.java rename to src/interpreteurlir/motscles/CommandeFin.java diff --git a/src/motscles/tests/EssaiCommande.java b/src/interpreteurlir/motscles/tests/EssaiCommande.java similarity index 100% rename from src/motscles/tests/EssaiCommande.java rename to src/interpreteurlir/motscles/tests/EssaiCommande.java diff --git a/src/motscles/tests/TestCommande.java b/src/interpreteurlir/motscles/tests/TestCommande.java similarity index 100% rename from src/motscles/tests/TestCommande.java rename to src/interpreteurlir/motscles/tests/TestCommande.java diff --git a/src/motscles/tests/TestCommandeDebut.java b/src/interpreteurlir/motscles/tests/TestCommandeDebut.java similarity index 100% rename from src/motscles/tests/TestCommandeDebut.java rename to src/interpreteurlir/motscles/tests/TestCommandeDebut.java diff --git a/src/motscles/tests/TestCommandeDefs.java b/src/interpreteurlir/motscles/tests/TestCommandeDefs.java similarity index 100% rename from src/motscles/tests/TestCommandeDefs.java rename to src/interpreteurlir/motscles/tests/TestCommandeDefs.java diff --git a/src/motscles/tests/TestCommandeFin.java b/src/interpreteurlir/motscles/tests/TestCommandeFin.java similarity index 100% rename from src/motscles/tests/TestCommandeFin.java rename to src/interpreteurlir/motscles/tests/TestCommandeFin.java diff --git a/src/tests/EssaiInterpreteurException.java b/src/interpreteurlir/tests/EssaiInterpreteurException.java similarity index 100% rename from src/tests/EssaiInterpreteurException.java rename to src/interpreteurlir/tests/EssaiInterpreteurException.java diff --git a/src/tests/TestContexte.java b/src/interpreteurlir/tests/TestContexte.java similarity index 86% rename from src/tests/TestContexte.java rename to src/interpreteurlir/tests/TestContexte.java index 1395fb2..c2869bd 100644 --- a/src/tests/TestContexte.java +++ b/src/interpreteurlir/tests/TestContexte.java @@ -7,12 +7,8 @@ package interpreteurlir.tests; import static info1.outils.glg.Assertions.*; import interpreteurlir.Contexte; -import interpreteurlir.donnees.Identificateur; -import interpreteurlir.donnees.IdentificateurChaine; -import interpreteurlir.donnees.IdentificateurEntier; -import interpreteurlir.donnees.litteraux.Chaine; -import interpreteurlir.donnees.litteraux.Entier; -import interpreteurlir.donnees.litteraux.Litteral; +import interpreteurlir.donnees.*; +import interpreteurlir.donnees.litteraux.*; /** * Tests unitaires de {@link Contexte} @@ -54,6 +50,8 @@ public class TestContexte { new IdentificateurChaine("$chaine"), // ajout dans liste vide new IdentificateurEntier("entier"), // ajout fin new IdentificateurChaine("$zoro"), // ajout milieu + + new IdentificateurChaine("$abcd"), // ajout debut }; Litteral[] valeur = { @@ -64,6 +62,8 @@ public class TestContexte { new Chaine("\"viveLa Vie\""), new Entier(-1), new Chaine("\" ah ah ! \""), + + new Chaine("\"lol\""), }; System.out.println("\tExécution du test de " @@ -134,7 +134,7 @@ public class TestContexte { // lire valeur défaut contexte vid assertEquivalence(fixture[0].lireValeurVariable( - new IdentificateurChaine("$chaine")).getValeur(), "\"\""); + new IdentificateurChaine("$chaine")).getValeur(), ""); assertEquivalence(fixture[0].lireValeurVariable( new IdentificateurEntier("entier")).getValeur(), Integer.valueOf(0)); @@ -143,7 +143,7 @@ public class TestContexte { new Chaine("\"Zoro le héro\"")); assertEquivalence(fixture[1].lireValeurVariable( - new IdentificateurChaine("$chaine")).getValeur(), "\"\""); + new IdentificateurChaine("$chaine")).getValeur(), ""); assertEquivalence(fixture[1].lireValeurVariable( new IdentificateurEntier("entier")).getValeur(), 0); @@ -152,14 +152,18 @@ public class TestContexte { new Chaine("\"blabla\"")); fixture[1].ajouterVariable(new IdentificateurEntier("entier"), new Entier(25)); -// -// assertEquivalence(fixture[1].lireValeurVariable( -// new IdentificateurChaine("$chaine")).getValeur(), "\"blabla\""); -// assertEquivalence(fixture[1].lireValeurVariable( -// new IdentificateurEntier("entier")).getValeur(), 25); -// assertEquivalence(fixture[1].lireValeurVariable( -// new IdentificateurChaine("$zoro")).getValeur(), -// "\"Zoro le héro\""); + + System.out.println(fixture[1].lireValeurVariable( + new IdentificateurChaine("$zoro")).getValeur()); + + + assertEquivalence(fixture[1].lireValeurVariable( + new IdentificateurChaine("$chaine")).getValeur(), "blabla"); + assertEquivalence(fixture[1].lireValeurVariable( + new IdentificateurEntier("entier")).getValeur(), 25); + assertEquivalence(fixture[1].lireValeurVariable( + new IdentificateurChaine("$zoro")).getValeur(), + "Zoro le héro"); }