add quote gestion
This commit is contained in:
parent
fc7129d16d
commit
787063f4b7
1 changed files with 43 additions and 7 deletions
|
@ -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
|
||||
// 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.
|
||||
|
||||
// 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'
|
||||
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)
|
||||
|
||||
} else {
|
||||
// Etape 2, regarde si la stack des quotes est vide, sinon regarder si la quote c la
|
||||
// last_quote dans stack_last_quote cas oui, parser last_word, cas non, ajoutter caractère
|
||||
// à last_word. et relancer le parser_recursif
|
||||
let current_char = current_char_option.expect("current_char_is_None");
|
||||
// Etape 2, regarde si il y as des quotes dans la stack des quotes si oui regarder quel est
|
||||
// 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 ';'
|
||||
// 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.
|
||||
|
||||
// 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.
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Reference in a new issue