add quote gestion

This commit is contained in:
primardj 2024-01-18 14:46:44 +00:00
parent fc7129d16d
commit 787063f4b7

View file

@ -117,23 +117,59 @@ fn parse_cas_fin_de_chaine(mut entree: Entree, stack_last_quote: Vec<char>, last
} }
fn parse_recursif(mut entree: Entree, mut restant_a_parser: Vec<char>, stack_last_quote: Vec<char>, last_word: String, mut struct_in_construct: Structure) -> Entree { fn parse_recursif(mut entree: Entree, mut restant_a_parser: Vec<char>, mut stack_last_quote: Vec<char>, mut last_word: String, mut struct_in_construct: Structure) -> Entree {
// Est le parseur initial, commence sa recursivitée avec une entree vide, une ligne de commande // Est le parseur initial, commence sa recursivitée avec une entree vide, une ligne de commande
// en char, une pile vide, un mot vide, et une structure vide. // en char, une pile vide, un mot vide, et une structure vide.
// //
// Lis les caractères un par un, et détermine l'action à prendre avec chaques caractères. // Lis les caractères un par un, et détermine l'action à prendre avec chaques caractères.
// Etape 0; Lis le premier caractère de ce qu'il reste à parser. // Etape 0; Lis le premier caractère de ce qu'il reste à parser.
let current_char = restant_a_parser.pop(); let current_char_option = restant_a_parser.pop();
// Etape 1, test cas ou la chaine est vide 'Cas final' // Etape 1, test cas ou la chaine est vide 'Cas final'
if current_char.is_none() { if current_char_option.is_none() {
parse_cas_fin_de_chaine(entree, stack_last_quote, last_word, struct_in_construct) parse_cas_fin_de_chaine(entree, stack_last_quote, last_word, struct_in_construct)
} else { } else {
// Etape 2, regarde si la stack des quotes est vide, sinon regarder si la quote c la let current_char = current_char_option.expect("current_char_is_None");
// last_quote dans stack_last_quote cas oui, parser last_word, cas non, ajoutter caractère // Etape 2, regarde si il y as des quotes dans la stack des quotes si oui regarder quel est
// à last_word. et relancer le parser_recursif // cette quote, et executer en fonction de cela la bonne fonction.
if stack_last_quote[stack_last_quote.len()-1] == '\'' {
// cas ou le quote est ' peu importe le caractère lus autre que ' le mettre dans
// last_word et rappeler parse_recursif.
if current_char == '\'' {
let _ = stack_last_quote.pop();
parse_recursif(entree, restant_a_parser, stack_last_quote, last_word, struct_in_construct)
} else {
last_word.push(current_char);
parse_recursif(entree, restant_a_parser, stack_last_quote, last_word, struct_in_construct)
}
} else if stack_last_quote[stack_last_quote.len()-1] == '"' {
// cas ou quote est " parser caractère sauf si "
// ce cas existe pour au moment ou on rajoutteras la compatibilitée des variables.
if current_char == '"' {
let _ = stack_last_quote.pop();
parse_recursif(entree, restant_a_parser, stack_last_quote, last_word, struct_in_construct)
} else {
last_word.push(current_char);
parse_recursif(entree, restant_a_parser, stack_last_quote, last_word, struct_in_construct)
}
} else {
// maintenant que la stack des quote est vide, regardons si le dernier caractère entré
// est une quote.
if current_char == '"' || current_char == '\'' {
// dans ce cas la, l'ajoutter à la stack
stack_last_quote.push(current_char);
parse_recursif(entree, restant_a_parser, stack_last_quote, last_word, struct_in_construct)
} else if current_char == ';' {
// regardons si c'est le ; caractère de fin de ligne.
// TODO
entree
} else {
// TODO
entree
}
}
// //
// Si oui, vérif ';' // Si oui, vérif ';'
// Cas last_word et Structure vide, ignorer le caractère et rappeler le parser_recursif // Cas last_word et Structure vide, ignorer le caractère et rappeler le parser_recursif
@ -146,7 +182,7 @@ fn parse_recursif(mut entree: Entree, mut restant_a_parser: Vec<char>, stack_las
// pour tout les autres cas, ajouter char à last_word. // pour tout les autres cas, ajouter char à last_word.
// TODO // TODO
entree // Ici faudra rappeler le parse_recursif pour passer au caractère suivant. //entree // Ici faudra rappeler le parse_recursif pour passer au caractère suivant.
} }
} }