added some display

This commit is contained in:
WanderingPenwing 2024-12-12 14:25:16 +01:00
parent 4edede94cb
commit 9032e00b72
7 changed files with 77 additions and 16 deletions

View file

@ -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":[]}]} {"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":[]}]}

View file

@ -105,7 +105,7 @@ impl Pendragon {
} }
} else if let Ok(type_comparaison) = texte_comme_comparaison(autre) { } else if let Ok(type_comparaison) = texte_comme_comparaison(autre) {
if let Some(comparaison) = possible_comparaison { 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 mut comparaison = Comparaison::nouvelle();
let nombre_parenthese = compare_parentheses(&pile_inconnu); let nombre_parenthese = compare_parentheses(&pile_inconnu);
@ -134,7 +134,7 @@ impl Pendragon {
} }
if !pile_inconnu.is_empty() { if !pile_inconnu.is_empty() {
let Some(mut comparaison) = possible_comparaison else { 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(" "))?; self.ajoute_comparaison_membre(&mut comparaison, &pile_inconnu.join(" "))?;
expression.push(Element::Comparaison(comparaison.clone())); expression.push(Element::Comparaison(comparaison.clone()));
@ -156,7 +156,7 @@ impl Pendragon {
return Ok(()); return Ok(());
} }
let Some(ancienne_comparaison) = possible_comparaison else { 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(); let mut comparaison = ancienne_comparaison.clone();
self.ajoute_comparaison_membre(&mut comparaison, &pile_inconnu.join(" "))?; self.ajoute_comparaison_membre(&mut comparaison, &pile_inconnu.join(" "))?;
@ -188,7 +188,7 @@ impl Pendragon {
}; };
if element_de_comparaison.type_element() != element.type_element() { if element_de_comparaison.type_element() != element.type_element() {
return Err(ErreurPendragon::MauvaisType( return Err(ErreurPendragon::MauvaisType(
format!("{:?}", element), element.type_element().nom(), format!("{}", element), element.type_element().nom(),
element_de_comparaison.type_element().nom())) element_de_comparaison.type_element().nom()))
} }
comparaison.membre_b = membre; comparaison.membre_b = membre;
@ -232,7 +232,7 @@ pub fn calcule_booleen(expression: Vec<Element>, variables: &HashMap<String, Ele
continue continue
} }
let Element::Operateur(ref operateur) = element else { let Element::Operateur(ref operateur) = element else {
return Err(ErreurPendragon::MauvaisArgument(format!("{:?}, attendais un opérateur", element))) return Err(ErreurPendragon::MauvaisArgument(format!("{}, attendais un opérateur", element)))
}; };
let Some(booleen_a) = pile.pop() else { let Some(booleen_a) = pile.pop() else {
return Err(ErreurPendragon::CalculBooleen("la pile est vide".into())) return Err(ErreurPendragon::CalculBooleen("la pile est vide".into()))
@ -253,7 +253,7 @@ pub fn calcule_booleen(expression: Vec<Element>, variables: &HashMap<String, Ele
}; };
pile.push(booleen_a || booleen_b); pile.push(booleen_a || booleen_b);
} }
_ => 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 { if pile.len() > 1 {

View file

@ -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 { impl fmt::Display for Programme {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {//' fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {//'
let mut texte: String = format!("variables : {:?}", self.variables); let mut texte: String = format!("variables : {:?}", self.variables);

View file

@ -131,7 +131,7 @@ pub fn calcule_nombre(expression: Vec<Element>, variables: &HashMap<String, Elem
} }
} }
let Element::Operateur(ref operateur) = element else { let Element::Operateur(ref operateur) = element else {
return Err(ErreurPendragon::MauvaisArgument(format!("{:?}, attendais un opérateur", element))) return Err(ErreurPendragon::MauvaisArgument(format!("{}, attendais un opérateur", element)))
}; };
let Some(nombre_a) = pile.pop() else { let Some(nombre_a) = pile.pop() else {
return Err(ErreurPendragon::CalculEntier("la pile est vide".into())) return Err(ErreurPendragon::CalculEntier("la pile est vide".into()))
@ -145,7 +145,7 @@ pub fn calcule_nombre(expression: Vec<Element>, variables: &HashMap<String, Elem
} }
Operateur::Moins => { Operateur::Moins => {
if nombre_b < nombre_a { 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); pile.push(nombre_b - nombre_a);
} }
@ -155,7 +155,7 @@ pub fn calcule_nombre(expression: Vec<Element>, variables: &HashMap<String, Elem
Operateur::Divise => { Operateur::Divise => {
pile.push(nombre_b / nombre_a); 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 { if pile.len() > 1 {

View file

@ -174,10 +174,10 @@ impl Element {
return Ok(*self != element) return Ok(*self != element)
} }
let Self::Entier(nombre_a) = self else { 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 { 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 { match comparaison {
TypeComparaison::SuperieurEgal => Ok(*nombre_a >= nombre_b), TypeComparaison::SuperieurEgal => Ok(*nombre_a >= nombre_b),
@ -245,7 +245,7 @@ impl Comparaison {
self.type_comparaison = Some(type_comparaison); self.type_comparaison = Some(type_comparaison);
return Ok(()); 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<String, Element>) -> Result<bool, ErreurPendragon> { pub fn calcule(&self, variables: &HashMap<String, Element>) -> Result<bool, ErreurPendragon> {

View file

@ -16,7 +16,7 @@ impl Pendragon {
let element_texte = pile_texte[1..pile_texte.len()].join(" "); let element_texte = pile_texte[1..pile_texte.len()].join(" ");
if let Some(dernier_element) = expression.last() { if let Some(dernier_element) = expression.last() {
if *dernier_element != Element::Operateur(Operateur::Puis) { 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)); expression.push(Element::Texte(element_texte));
@ -110,7 +110,7 @@ pub fn calcule_texte(expression: Vec<Element>, variables: &HashMap<String, Eleme
texte += &contenu; texte += &contenu;
} }
autre => { autre => {
return Err(ErreurPendragon::MauvaisArgument(format!("{:?}", autre))) return Err(ErreurPendragon::MauvaisArgument(format!("{}", autre)))
} }
} }
pile = Vec::new(); pile = Vec::new();

View file

@ -11,4 +11,4 @@ Nota Bene : 3*A*(3*A+C).
Affiche "Résultat : " puis B. Affiche "Résultat : " puis B.
Si A supérieur ou égal à trois, Si A supérieur ou égal à trois,
Affiche vrai et et faux. Affiche vrai et faux.