Prg de vérification des accolades

Sdija Messages postés 96 Statut Membre -  
 gummy -
Bonjour tout le monde;en

Je voudrais bien savoir comment réaliser un programme qui nous permettera de vérifier l'existance des accolades et les parenthèses dans un programme source et de déterminer sa position.
Merci d'avance
A voir également:

2 réponses

Sdija Messages postés 96 Statut Membre 3
 
y a personne pour m'aider?????
1
gummy
 
On sait jamais, si quelqu'un tombe ici...

On peut simplement parcourir le fichier texte ligne par ligne grâce à une boucle. Quand on repère une accolade ou une parenthèse dans la ligne en cours, on augmente un compteur pour obtenir le nombre d'accolades, de parenthèses, ou que sais-je, et on mémorise le tour de boucle pour savoir à quelle ligne elle se trouve.

Ainsi, on a une boucle, qui lit tout le fichier ligne par ligne, qui vérifie sur la ligne si il existe un caractère spécial ({, }, (, ), [, ], ...) et qui compte leur nombres. On peut ainsi différencier les symboles et utiliser un compteur pour les symboles ouvrants ({, (, [,...) et un pour les symboles fermants (}, ), ],...) comme ça on peut vérifier si il y bien le même nombre d'ouvrants et de fermants, ce serait déjà super intéressant.
1
gummy
 
Voici la solution en perl (il suffit de modifier le chemin du fichier à analyser au début du script) :
__________________________________________________
#!/usr/bin/perl

$file = "/mydirectory/myscript.pl";
$file_content;

open (TXTFILE, $file) || die "Cannot open the file $file : $!";
while (<TXTFILE>)
{
	$file_content .= $_;	                  
}
close (TXTFILE);

$left_ps =()= $file_content =~ m{\(}g;
$right_ps =()= $file_content =~ m{\)}g;
$left_bs =()= $file_content =~ m{\{}g;
$right_bs =()= $file_content =~ m{\}}g;
$left_cs =()= $file_content =~ m{\[}g;
$right_cs =()= $file_content =~ m{\]}g;
$breakpoints =()= $file_content =~ m{;}g;

$display = << "EOP";

CODE CHECKING COMPLETE - RESULTS
=====================================
 (   :   $left_ps
 )   :   $right_ps
 {   :   $left_bs
 }   :   $right_bs
 [   :   $left_cs
 ]   :   $right_cs
 ;   :   $breakpoints
   
EOP

print $display;
print "\n\n-> DONE <-\n\n";

__________________________________________________

Ce code analyse donc un fichier de code et analyse le nombre de symboles spéciaux et affiche ces nombres. Si par exemple le nombre d'un symbole ouvrant et le nombre du même symbole fermant sont différents, c'est qu'il en manque quelque part dans le code. Exemple de résultat :

[root@home]# perl codeChecker.pl

CODE CHECKING COMPLETE - RESULTS
=====================================
 (   :   945
 )   :   943
 {   :   738
 }   :   738
 [   :   279
 ]   :   279
 ;   :   757



-> DONE <-

Dans l'exemple ci-dessus, on peut voir que les nombres pour les parenthèses ouvrantes et fermantes est différent : il manque deux parenthèses fermantes dans le code.

Voilà, j'espère vous avoir été utile :)
0