From 9032e00b724ca06bfaebe8b6ae194d590ef207bb Mon Sep 17 00:00:00 2001 From: WanderingPenwing Date: Thu, 12 Dec 2024 14:25:16 +0100 Subject: [PATCH] added some display --- pendragon.project | 2 +- src/pendragon/booleen.rs | 12 ++++---- src/pendragon/debug.rs | 61 ++++++++++++++++++++++++++++++++++++++ src/pendragon/nombre.rs | 6 ++-- src/pendragon/structure.rs | 6 ++-- src/pendragon/texte.rs | 4 +-- test.dr | 2 +- 7 files changed, 77 insertions(+), 16 deletions(-) diff --git a/pendragon.project b/pendragon.project index 6b33ca9..4ef4e8a 100644 --- a/pendragon.project +++ b/pendragon.project @@ -1 +1 @@ -{"categories":[{"name":"todo","content":[{"name":"erreur calcul bool/nombre","description":"affiche element precedent lorsque mauvais enchainement","id":1},{"name":"display element","description":"for better print","id":6},{"name":"if","description":"implémente if avec des guillemets de délimitation","id":1},{"name":"scope variable","description":"// Hello there","id":6},{"name":"while","description":"implémente un while","id":2},{"name":"else","description":"// Hello there","id":7},{"name":"break","description":"// Hello there","id":8},{"name":"continue","description":"// Hello there","id":9},{"name":"compilation","description":"// Hello there","id":3},{"name":"puis à la ligne, alinéa","description":"// Hello there","id":1}]},{"name":"in progress","content":[]},{"name":"done","content":[{"name":"comparaison","description":"// Hello there","id":2},{"name":"booleen type","description":"// Hello there","id":4},{"name":"soixante-dix","description":"// Hello there","id":1},{"name":"parenthese comparaison","description":"// Hello there","id":1},{"name":"test comparaison","description":"// Hello there","id":4},{"name":"error ligne compilation","description":"// Hello there","id":2},{"name":"commentaires","description":"// Hello there","id":3},{"name":"compile time verification","description":"odre des termes rpn","id":1},{"name":"test multiple space in texte","description":"// Hello there","id":3},{"name":"test puis in texte","description":"// Hello there","id":2},{"name":"enchainement puis","description":"// Hello there","id":5},{"name":"guillemet mal ferme","description":"// Hello there","id":4}]},{"name":"bug","content":[]},{"name":"to test","content":[{"name":"tests mod","description":"// Hello there","id":3}]},{"name":"bonus","content":[{"name":"stop cheating with \"-\"","description":"// Hello there","id":5},{"name":"affiche ligne et position erreur","description":"// Hello there","id":1}]},{"name":"+","content":[]}]} \ No newline at end of file +{"categories":[{"name":"todo","content":[{"name":"erreur calcul bool/nombre","description":"affiche element precedent lorsque mauvais enchainement","id":1},{"name":"display element","description":"for better print","id":6},{"name":"if","description":"implémente if avec des guillemets de délimitation","id":1},{"name":"scope variable","description":"// Hello there","id":6},{"name":"while","description":"implémente un while","id":2},{"name":"else","description":"// Hello there","id":7},{"name":"break","description":"// Hello there","id":8},{"name":"continue","description":"// Hello there","id":9},{"name":"compilation","description":"// Hello there","id":3},{"name":"puis à la ligne, alinéa","description":"// Hello there","id":1}]},{"name":"in progress","content":[]},{"name":"done","content":[{"name":"comparaison","description":"// Hello there","id":2},{"name":"booleen type","description":"// Hello there","id":4},{"name":"soixante-dix","description":"// Hello there","id":1},{"name":"parenthese comparaison","description":"// Hello there","id":1},{"name":"test comparaison","description":"// Hello there","id":4},{"name":"error ligne compilation","description":"// Hello there","id":2},{"name":"commentaires","description":"// Hello there","id":3},{"name":"compile time verification","description":"odre des termes rpn","id":1},{"name":"test multiple space in texte","description":"// Hello there","id":3},{"name":"test puis in texte","description":"// Hello there","id":2},{"name":"enchainement puis","description":"// Hello there","id":5},{"name":"guillemet mal ferme","description":"// Hello there","id":4}]},{"name":"bug","content":[]},{"name":"to test","content":[{"name":"tests mod","description":"// Hello there","id":3},{"name":"test variable","description":"// Hello there","id":2}]},{"name":"bonus","content":[{"name":"stop cheating with \"-\"","description":"// Hello there","id":5},{"name":"affiche ligne et position erreur","description":"// Hello there","id":1}]},{"name":"+","content":[]}]} \ No newline at end of file diff --git a/src/pendragon/booleen.rs b/src/pendragon/booleen.rs index d0e9192..ed1aea5 100644 --- a/src/pendragon/booleen.rs +++ b/src/pendragon/booleen.rs @@ -105,7 +105,7 @@ impl Pendragon { } } else if let Ok(type_comparaison) = texte_comme_comparaison(autre) { if let Some(comparaison) = possible_comparaison { - return Err(ErreurPendragon::BooleenInvalide(format!("besoin d'un operateur booleen entre {:?} et {:?}", comparaison, type_comparaison))) + return Err(ErreurPendragon::BooleenInvalide(format!("besoin d'un operateur booleen entre {} et {}", comparaison, type_comparaison))) } let mut comparaison = Comparaison::nouvelle(); let nombre_parenthese = compare_parentheses(&pile_inconnu); @@ -134,7 +134,7 @@ impl Pendragon { } if !pile_inconnu.is_empty() { let Some(mut comparaison) = possible_comparaison else { - return Err(ErreurPendragon::BooleenInvalide(format!("{:?}", pile_inconnu))) + return Err(ErreurPendragon::BooleenInvalide(format!("[{}]", pile_inconnu.join(",")))) }; self.ajoute_comparaison_membre(&mut comparaison, &pile_inconnu.join(" "))?; expression.push(Element::Comparaison(comparaison.clone())); @@ -156,7 +156,7 @@ impl Pendragon { return Ok(()); } let Some(ancienne_comparaison) = possible_comparaison else { - return Err(ErreurPendragon::BooleenInvalide(format!("{:?}", pile_inconnu))) + return Err(ErreurPendragon::BooleenInvalide(format!("[{}]", pile_inconnu.join(",")))) }; let mut comparaison = ancienne_comparaison.clone(); self.ajoute_comparaison_membre(&mut comparaison, &pile_inconnu.join(" "))?; @@ -188,7 +188,7 @@ impl Pendragon { }; if element_de_comparaison.type_element() != element.type_element() { return Err(ErreurPendragon::MauvaisType( - format!("{:?}", element), element.type_element().nom(), + format!("{}", element), element.type_element().nom(), element_de_comparaison.type_element().nom())) } comparaison.membre_b = membre; @@ -232,7 +232,7 @@ pub fn calcule_booleen(expression: Vec, variables: &HashMap, variables: &HashMap return Err(ErreurPendragon::MauvaisArgument(format!("{:?}, attendais un opérateur booléen", element))) + _ => return Err(ErreurPendragon::MauvaisArgument(format!("{}, attendais un opérateur booléen", element))) } } if pile.len() > 1 { diff --git a/src/pendragon/debug.rs b/src/pendragon/debug.rs index 5490189..eccd43a 100644 --- a/src/pendragon/debug.rs +++ b/src/pendragon/debug.rs @@ -69,6 +69,67 @@ impl fmt::Display for Commande { } } +impl fmt::Display for Element { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {//' + match self { + Self::Entier(nombre) => write!(f, "{}", nombre), + Self::Texte(texte) => write!(f, "\"{}\"", texte), + Self::Booleen(booleen) => write!(f, "{}", booleen), + Self::Variable(nom, type_variable) => write!(f, "{}:{}", nom, type_variable.nom()), + Self::Operateur(operateur) => write!(f, "{}", operateur), + Self::Comparaison(comparaison) => write!(f, "{}.", comparaison), + } + } +} + +impl fmt::Display for Comparaison { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {//' + let mut texte_membre_a: String = String::new(); + for element in &self.membre_a { + texte_membre_a += &format!("{} ", element); + } + let mut texte_membre_b: String = String::new(); + for element in &self.membre_b { + texte_membre_b += &format!(" {}", element); + } + write!(f, "({}{:?}{})", + texte_membre_a, + self.type_comparaison, + texte_membre_b, + ) + } +} + +impl fmt::Display for TypeComparaison { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {//' + match self { + Self::Egal => write!(f, "=="), + Self::Different => write!(f, "!="), + Self::SuperieurEgal => write!(f, ">="), + Self::InferieurEgal => write!(f, "<="), + Self::Superieur => write!(f, ">"), + Self::Inferieur => write!(f, "<"), + } + } +} + +impl fmt::Display for Operateur { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {//' + match self { + Self::Ou => write!(f, "ou"), + Self::Et => write!(f, "et"), + Self::Non => write!(f, "non"), + Self::ParentheseBooleen => write!(f, "["), + Self::Puis => write!(f, ";"), + Self::Plus => write!(f, "+"), + Self::Moins => write!(f, "-"), + Self::Fois => write!(f, "*"), + Self::Divise => write!(f, "/"), + Self::ParentheseEntier => write!(f, "("), + } + } +} + impl fmt::Display for Programme { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {//' let mut texte: String = format!("variables : {:?}", self.variables); diff --git a/src/pendragon/nombre.rs b/src/pendragon/nombre.rs index e1f33fc..0090c2f 100644 --- a/src/pendragon/nombre.rs +++ b/src/pendragon/nombre.rs @@ -131,7 +131,7 @@ pub fn calcule_nombre(expression: Vec, variables: &HashMap, variables: &HashMap { if nombre_b < nombre_a { - return Err(ErreurPendragon::CalculEntier(format!("a essayé de soustraire {} à {}", nombre_a, nombre_b))) + return Err(ErreurPendragon::CalculEntier(format!("a essayé de soustraire '{}' à '{}'", nombre::nombre_comme_texte(nombre_a), nombre::nombre_comme_texte(nombre_b)))) } pile.push(nombre_b - nombre_a); } @@ -155,7 +155,7 @@ pub fn calcule_nombre(expression: Vec, variables: &HashMap { pile.push(nombre_b / nombre_a); } - _ => return Err(ErreurPendragon::MauvaisArgument(format!("{:?}, attendais un opérateur d'entiers", element))) + _ => return Err(ErreurPendragon::MauvaisArgument(format!("'{}', attendais un opérateur d'entiers", element))) } } if pile.len() > 1 { diff --git a/src/pendragon/structure.rs b/src/pendragon/structure.rs index 5b57e6f..329e3ec 100644 --- a/src/pendragon/structure.rs +++ b/src/pendragon/structure.rs @@ -174,10 +174,10 @@ impl Element { return Ok(*self != element) } let Self::Entier(nombre_a) = self else { - return Err(ErreurPendragon::ComparaisonInvalide(format!("comparaison numérique avec {:?}", self))) + return Err(ErreurPendragon::ComparaisonInvalide(format!("comparaison numérique avec {}", self))) }; let Self::Entier(nombre_b) = element else { - return Err(ErreurPendragon::ComparaisonInvalide(format!("comparaison numérique avec {:?}", element))) + return Err(ErreurPendragon::ComparaisonInvalide(format!("comparaison numérique avec {}", element))) }; match comparaison { TypeComparaison::SuperieurEgal => Ok(*nombre_a >= nombre_b), @@ -245,7 +245,7 @@ impl Comparaison { self.type_comparaison = Some(type_comparaison); return Ok(()); } - return Err(ErreurPendragon::ComparaisonInvalide(format!("voulait comparer {} avec {:?}", element.type_element().nom(), type_comparaison))) + return Err(ErreurPendragon::ComparaisonInvalide(format!("voulait comparer {} avec {}", element.type_element().nom(), type_comparaison))) } pub fn calcule(&self, variables: &HashMap) -> Result { diff --git a/src/pendragon/texte.rs b/src/pendragon/texte.rs index 9ed4dc4..97a67a6 100644 --- a/src/pendragon/texte.rs +++ b/src/pendragon/texte.rs @@ -16,7 +16,7 @@ impl Pendragon { let element_texte = pile_texte[1..pile_texte.len()].join(" "); if let Some(dernier_element) = expression.last() { if *dernier_element != Element::Operateur(Operateur::Puis) { - return Err(ErreurPendragon::TexteInvalide(format!("attends un 'puis' entre '{:?}' et '{}'", dernier_element, element))) + return Err(ErreurPendragon::TexteInvalide(format!("attends un 'puis' entre '{}' et '{}'", dernier_element, element))) } } expression.push(Element::Texte(element_texte)); @@ -110,7 +110,7 @@ pub fn calcule_texte(expression: Vec, variables: &HashMap { - return Err(ErreurPendragon::MauvaisArgument(format!("{:?}", autre))) + return Err(ErreurPendragon::MauvaisArgument(format!("{}", autre))) } } pile = Vec::new(); diff --git a/test.dr b/test.dr index 891fa7b..39a7da8 100644 --- a/test.dr +++ b/test.dr @@ -11,4 +11,4 @@ Nota Bene : 3*A*(3*A+C). Affiche "Résultat : " puis B. Si A supérieur ou égal à trois, -Affiche vrai et et faux. \ No newline at end of file +Affiche vrai et faux. \ No newline at end of file