1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
#!/usr/bin/perl
use warnings;
use strict;
use Regexp::Common qw /comment/;
use Perl6::Slurp;
# Englobe le fichier .h
my $CodeFichierC = slurp "pub_serv.h";
#ouverture du fichier *.txt en mode Ecriture
open WRITER, '>', "decode2.txt" or die "Le fichier ne peut être édité !\n";
# Suppression des commentaires C
my $RegexComment = $RE{comment}{'C++'}; #C++ pour supprimer /* */ ET //
$CodeFichierC =~ s{$RegexComment}{}g;
# Recupère les define
my @define = $CodeFichierC =~ m{
^\s* # La ligne commence par un espace ou non
\#define # suivi de #define
\s* # espace ou non
([^\n]+)\s* # contenu define
\n # se termine par un retour chariot
}mgix;
my %VariableDefine;
foreach my $Define (@define)
{
my ( $var, $value ) = split( /\s+/, $Define );
$VariableDefine{$var} = $value || '';
}
print WRITER "Defines: \n\n";
foreach my $var ( keys %VariableDefine )
{
print WRITER "$var = $VariableDefine{$var}\n";
}
print WRITER "\n============\n\n";
# Bloc typedef
my @typedef = $CodeFichierC =~ m/
(?:
enum[^{]+{ # Ligne typedef avec accolade
([^;]+) # contenu tout sauf accolade fermante
} # accolade fermante
)
/mgix;
my $CodeTypedef = join( '', @typedef );
$CodeTypedef =~ s{\n}{}g;
my %Constante = $CodeTypedef =~ m{
(\w+)\s* # variable
=* # Egual ou non
\s*(\S+)\s* # valeur (tout sauf un espace)
}mxig;
my $valeur_enum;
my $nom_enum;
foreach my $test($CodeFichierC)
{
if($test=~ m/(\s*enum\n{)(.*)(})([\w]+);/)#essais pour choper le nom de l'énum mais ne fonctionne pas
{
$nom_enum = ($test =~ m/(\s*enum\n{)(.*)(})([\w]+);/);
print WRITER "\n===\n";
print WRITER "$4\n";
print WRITER "\n===\n";
}
}
print WRITER "Constantes definies dans les typedef: \n\n";
foreach my $var ( keys %Constante )
{
$Constante{$var} =~ s{,}{}g;
if ( exists $VariableDefine{ $Constante{$var} } )
{
print WRITER "$var = $VariableDefine{$Constante{$var}} <===($Constante{$var})\n";
}
else
{
print WRITER "$var =";
print WRITER $valeur_enum++;
print WRITER "\n";
}
}
close(WRITER); |
Partager