/etc/comenta.conf#!/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{linguag +em}; 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(<ARQ>){ $linhas++; $teste=$_; chomp($teste); unless($teste =~ /^\s*#/) { open(RC, "/etc/comentarios") or die "Arquivo de configuraç +ão '/etc/comentarios' não encontrado"; for(<RC>){ $_ =~ /<nivel=(\d)>/; $eni=$1; if($_ =~ /<$linguagem>/i and $eni >= $nivel) { $_ =~ /<expr>(.+)<\/expr>/; $expre=$1; chomp($expre); $_ =~ /<coment>(.+)<\/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(<RC>){ if($_ =~ /<$linguagem>/i and $_ =~ /<inicio>/i) { $_ =~ /<expr>(.*)<\/expr>/; $expre=$1; chomp($expre); $_ =~ /<coment>(.*)<\/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 '/e +tc/comenta.conf' não encontrado"; for(<LIN>) { $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; }
/etc/comentariosPerl=pl,pm C=c,h,o Bash=sh
<C><coment><nivel=1> # Caso a formula '[1]' seja verdadeira, execut +a os próximos comandos</coment> <expr>if\((.*)\)\ *\{</expr> <Perl><inicio><coment></coment> <expr>#\!\/usr\/bin\/perl</expr> <Perl><inicio><coment> ############################################ +########### </coment> <expr>#\!\/usr\/bin\/perl</expr> <Perl><inicio><coment> # Código comentado pelo script 'comen +ta' # </coment> <expr>#!/usr/bin/perl</expr> <Perl><inicio><coment> # Feito por Fernando Corrêa de Olivei +ra # </coment> <expr>#!/usr/bin/perl</expr> <Perl><inicio><coment> ############################################ +########### </coment> <expr>#!/usr/bin/perl</expr> <Perl><inicio><coment></coment> <expr>#!/usr/bin/perl</expr> <Perl><nivel=1><coment># Caso a formula '[1]' seja verdadeira, executa + os próximos comandos</coment> <expr>^\s*if\s?\((.*)\)\s*\{?</expr> <Perl><nivel=1><coment># Caso a formula '[2]' seja verdadeira, executa + o comando '[1]'</coment> <expr>^\s*(.*)\ if\ ?\(?(.*)\)?\s?;</expr> <Perl><nivel=1><coment># A não ser que a formula '[1]' seja verdadeira +, executa os próximos comandos</coment> <expr>^\s*unless\ ?\(?(.*)\)? +\ *\{</expr> <Perl><nivel=1><coment># A não ser que a formula '[2]' seja verdadeira +, executa o comando '[1]'</coment> <expr>^\s*(.*)\ unless\ ?\(?(.*)\) +?\ *;</expr> <Perl><nivel=1><coment># Enquanto a expressão '[1]' for verdadeira...< +/coment> <expr>while\s?\((.*)\)\s?\{?</expr> <Perl><nivel=1><coment># Para a expressão '[1]'</coment> <expr>for\s?\ +((.*)\)\s?\{</expr> <Perl><nivel=1><coment># '[1]' => o mesmo que: '[2] = [2] + [3]'</come +nt> <expr>((\$\w)+\+=(\d+))</expr> <Perl><nivel=2><coment># Abre o arquivo '[2]' com o titulo '[1]'</come +nt> <expr>open\((.*)\ ?\,\ ?(.*)\)</expr> <Perl><nivel=3><coment># Retira o '\n' do final da variavel [1]</comen +t> <expr>chomp\((\$.*)\)</expr> <Perl><nivel=2><coment># Fecha o arquivo com o titulo '[1]'</coment> < +expr>close\(?\ ?(.*)\)?\ ?;</expr> <Sistema><nivel=1><coment> # Usuario [1] com UID [3] e home [6]</co +ment> <expr>(.*):(x?):(.*):(.*):(.*):(.*):(.*)</expr> <Perl><nivel=1><coment># Para a cada um dos argumentos de '[1]' faça</ +coment> <expr>foreach\ *\((.*)\)\ *{</expr> <Perl><nivel=1><coment># Para [1] sendo igual a cada um dos argumentos + de '[2]' faça</coment> <expr>foreach\ *($.*)\ \((.*)\)\ ?{</expr> <Perl><nivel=1><coment># '[1]' => de [2] até [3]</coment> <expr>(([0-9 +]+)\ ?\.\.\ ?([0-9]+))</expr> <Perl><nivel=3><coment># '[1]' recebe o parametro passado na chamada d +a função</coment> <expr>\((\$.*)\)=\@_</expr> <Perl><nivel=3><coment># [1] => '[2]' recebe o 1º parametro passado na + chamada do programa excluindo-o</coment> <expr>((\$.*)=shift)</expr> <Perl><nivel=1><coment># Declaração da variavel '[1]' local</coment> < +expr>my\s*(\$\w*);</expr> <Perl><nivel=1><coment># Declaração da variavel '[1]' global</coment> +<expr>our\s*(\$\w*);</expr> <Perl><nivel=1><coment># [1] => Declaração da variavel '[2]' local con +tendo '[3]'</coment> <expr>(my\s*(\$\w+)=(.*));</expr> <Perl><nivel=1><coment># [1] => Declaração da variavel '[2]' global co +ntendo '[3]'</coment> <expr>(our\s*(\$\w+)=(.*));</expr> <Perl><nivel=1><coment># Declaração do hash '[1]' local</coment> <expr +>my\s*(\%\w+);</expr> <Perl><nivel=1><coment># Declaração do hash '[1]' global</coment> <exp +r>our\s*(\%\w+);</expr> <Perl><nivel=1><coment># [1] => Valor da posição '[3]' do hash %[2]</c +oment> <expr>(\$(\w+)\{(.+)\})</expr> <Perl><nivel=1><coment># return() => Sai da função</coment> <expr>retu +rn\ ?\(?\ ?\)?</expr> <Perl><nivel=1><coment># return([1]) => Sai da função com '[1]' como v +alor de retorno</coment> <expr>return\ ?\(?\ (.*)\ ?\)?</expr> <Perl><nivel=4><coment># Como a função já diz: Usa o módulo '[1]'</com +ent> <expr>^use\s+(.+);</expr> <Perl><nivel=5><coment> ############################### Função '[1] +' #######################</coment> <expr>^\s*sub (\w*\(?\)?)\ *\{?$</ +expr> <Perl><nivel=3><coment># [1] => Testa a expressão regular '[3]' na var +iavel '[2]'</coment> <expr>\s?((\$\w+)\s?=~\s?(\/.+\/))</expr> <Perl><nivel=3><coment># [1] => Reconhece qq tipo de espaço, como bran +co, tabulação ou quebra de linha</coment> <expr>\s?\$\w+\s?=~\s?\/.*( +\\s).*\/</expr> <Perl><nivel=3><coment># [1] => Reconhece qq letra</coment> <expr>\s?\ +$\w+\s?=~\s?\/.*(\\w).*\/</expr> <Perl><nivel=3><coment># [1] => Reconhece qq palavra</coment> <expr>\s +?\$\w+\s?=~\s?\/.*(\\W).*\/</expr> <Perl><nivel=3><coment># [1] => Reconhece qq numero</coment> <expr>\s? +\$\w+\s?=~\s?\/.*(\\d).*\/</expr> <Perl><nivel=3><coment># [1] => Reconhece qq coisa entre '[2]' e '[3]' +</coment> <expr>\s?\$\w+\s?=~\s?\/.*(\[(\w|\d)\-(\w|\d)\]).*\/</expr> <Perl><nivel=3><coment># [1] => A expressão '[2]' deve aparecer entre +[3] e [4] vezes</coment> <expr>\s?\$\w+\s?=~\s?\/.*(([\[|\(].+[\]|\)] +)\{(\d),(\d)\}).*\/</expr> <Perl><nivel=3><coment># [1] => A expressão '[2]' deve aparecer entre +[3] e [4] vezes</coment> <expr>\s?\$\w+\s?=~\s?\/.*((\\.)\{(\d),(\d)\ +}).*\/</expr>
In reply to Comment by smokemachine
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |