#!/usr/bin/perl our %parametros; while($para=shift) { $parametros{$1}=$2 if $para =~ /^--(.+)=(.+)$/; $parametros{arquivo}=$para unless $para =~ /^--(.+)=(.+)$/; } descobre_linguagem($arquivo) unless our $linguagem=$parametros{linguagem}; our $arquivo=$parametros{arquivo}; our $nivel=0 unless $nivel=$parametros{nivel}; comenta_codigo(); sub comenta_codigo() { open(ARQ, $arquivo) or die "Arquivo '$arquivo' não encontrado"; for(){ $linhas++; $teste=$_; chomp($teste); unless($teste =~ /^\s*#/) { open(RC, "/etc/comentarios") or die "Arquivo de configuração '/etc/comentarios' não encontrado"; for(){ $_ =~ //; $eni=$1; if($_ =~ /<$linguagem>/i and $eni >= $nivel) { $_ =~ /(.+)<\/expr>/; $expre=$1; chomp($expre); $_ =~ /(.+)<\/coment>/; $comen=$1; chomp($comen); if($teste =~ /$expre/) { @vetor=split(/\[|\]/, $comen); $i=0; while($vetor[$i]){ print $vetor[$i].${$vetor[$i+1]}; $i+=2; } print "\n"; $comentarios++; } } } } close RC; print $teste."\n"; open(RC, "/etc/comentarios") or die "Arquivo de configuração '/etc/comentarios' não encontrado"; for(){ if($_ =~ /<$linguagem>/i and $_ =~ //i) { $_ =~ /(.*)<\/expr>/; $expre=$1; chomp($expre); $_ =~ /(.*)<\/coment>/; $comen=$1; chomp($comen); if($teste =~ /$expre/) { @vetor=split(/\[|\]/, $comen); $i=0; while($vetor[$i]){ print $vetor[$i].${$vetor[$i+1]}; $i+=2; } print "\n"; $comentarios++; } } } close RC; } close ARQ; } sub descobre_linguagem() { ($arq)=@_; $arq=~/.*\.([a-z]{1,2})/; $ext=$1; open(LIN, "/etc/comenta.conf") or die "Arquivo de configuração '/etc/comenta.conf' não encontrado"; for() { $a=$_; chomp($a); our $linguagem=$1 if $a =~ /^(.*)=(\w{1,2},)*$ext,?(\w{1,2},?)*$/; return() if $a =~ /^(.*)=(\w{1,2},)*$ext,?(\w{1,2},?)*$/; $linguagem="" unless $a =~ /^(.*)=(\w{1,2},)*$ext,?(\w{1,2},?)*$/; } close LIN; } #### Perl=pl,pm C=c,h,o Bash=sh #### # Caso a formula '[1]' seja verdadeira, executa os próximos comandos if\((.*)\)\ *\{ #\!\/usr\/bin\/perl ####################################################### #\!\/usr\/bin\/perl # Código comentado pelo script 'comenta' # #!/usr/bin/perl # Feito por Fernando Corrêa de Oliveira # #!/usr/bin/perl ####################################################### #!/usr/bin/perl #!/usr/bin/perl # Caso a formula '[1]' seja verdadeira, executa os próximos comandos ^\s*if\s?\((.*)\)\s*\{? # Caso a formula '[2]' seja verdadeira, executa o comando '[1]' ^\s*(.*)\ if\ ?\(?(.*)\)?\s?; # A não ser que a formula '[1]' seja verdadeira, executa os próximos comandos ^\s*unless\ ?\(?(.*)\)?\ *\{ # A não ser que a formula '[2]' seja verdadeira, executa o comando '[1]' ^\s*(.*)\ unless\ ?\(?(.*)\)?\ *; # Enquanto a expressão '[1]' for verdadeira... while\s?\((.*)\)\s?\{? # Para a expressão '[1]' for\s?\((.*)\)\s?\{ # '[1]' => o mesmo que: '[2] = [2] + [3]' ((\$\w)+\+=(\d+)) # Abre o arquivo '[2]' com o titulo '[1]' open\((.*)\ ?\,\ ?(.*)\) # Retira o '\n' do final da variavel [1] chomp\((\$.*)\) # Fecha o arquivo com o titulo '[1]' close\(?\ ?(.*)\)?\ ?; # Usuario [1] com UID [3] e home [6] (.*):(x?):(.*):(.*):(.*):(.*):(.*) # Para a cada um dos argumentos de '[1]' faça foreach\ *\((.*)\)\ *{ # Para [1] sendo igual a cada um dos argumentos de '[2]' faça foreach\ *($.*)\ \((.*)\)\ ?{ # '[1]' => de [2] até [3] (([0-9]+)\ ?\.\.\ ?([0-9]+)) # '[1]' recebe o parametro passado na chamada da função \((\$.*)\)=\@_ # [1] => '[2]' recebe o 1º parametro passado na chamada do programa excluindo-o ((\$.*)=shift) # Declaração da variavel '[1]' local my\s*(\$\w*); # Declaração da variavel '[1]' global our\s*(\$\w*); # [1] => Declaração da variavel '[2]' local contendo '[3]' (my\s*(\$\w+)=(.*)); # [1] => Declaração da variavel '[2]' global contendo '[3]' (our\s*(\$\w+)=(.*)); # Declaração do hash '[1]' local my\s*(\%\w+); # Declaração do hash '[1]' global our\s*(\%\w+); # [1] => Valor da posição '[3]' do hash %[2] (\$(\w+)\{(.+)\}) # return() => Sai da função return\ ?\(?\ ?\)? # return([1]) => Sai da função com '[1]' como valor de retorno return\ ?\(?\ (.*)\ ?\)? # Como a função já diz: Usa o módulo '[1]' ^use\s+(.+); ############################### Função '[1]' ####################### ^\s*sub (\w*\(?\)?)\ *\{?$ # [1] => Testa a expressão regular '[3]' na variavel '[2]' \s?((\$\w+)\s?=~\s?(\/.+\/)) # [1] => Reconhece qq tipo de espaço, como branco, tabulação ou quebra de linha \s?\$\w+\s?=~\s?\/.*(\\s).*\/ # [1] => Reconhece qq letra \s?\$\w+\s?=~\s?\/.*(\\w).*\/ # [1] => Reconhece qq palavra \s?\$\w+\s?=~\s?\/.*(\\W).*\/ # [1] => Reconhece qq numero \s?\$\w+\s?=~\s?\/.*(\\d).*\/ # [1] => Reconhece qq coisa entre '[2]' e '[3]' \s?\$\w+\s?=~\s?\/.*(\[(\w|\d)\-(\w|\d)\]).*\/ # [1] => A expressão '[2]' deve aparecer entre [3] e [4] vezes \s?\$\w+\s?=~\s?\/.*(([\[|\(].+[\]|\)])\{(\d),(\d)\}).*\/ # [1] => A expressão '[2]' deve aparecer entre [3] e [4] vezes \s?\$\w+\s?=~\s?\/.*((\\.)\{(\d),(\d)\}).*\/