[Cascavel-pm] Gramáticas, Parse::RecDescent (era: Casos de Sucesso)
Nelson Ferraz
nferraz em gmail.com
Terça Agosto 7 11:19:03 PDT 2007
> On 8/7/07, Nelson Ferraz <nferraz em gmail.com> wrote:
>> Vou fazer mais alguns testes com regexps, mas acho que vou partir
>> logo para
>> o Parse::RecDescent. Alguém aqui tem experiência com esse módulo?
>
> Eu usei ele há algum tempo atrás e achei bom. Tem excelentes
> mensagens de debug.
Realmente -- pelo pouco que usei já tive essa impressão.
No entanto ainda não consegui perceber como retornar valores da
gramática. Isto é; eu consigo verificar se o texto é válido, mas não
consigo extrair as informações dele. Por exemplo:
#!/usr/bin/perl
use strict;
use warnings;
use Parse::RecDescent;
my $grammar = q{
ini_file: section(s)
section: section_label parameter(s) | <error>
section_label: /\s*\[\w+\]\s*/
parameter: key '=' value
key: /\w+/
value: /.*\n/
};
my $parser = Parse::RecDescent->new($grammar) or die "Invalid grammar!
\n";
my $text = do { local $/; <DATA> };
if ( defined( my $result = $parser->ini_file($text) ) ) {
print "It's a valid input!\n";
use Data::Dumper;
print Dumper $result;
}
else {
print "No good.\n";
}
__DATA__
[foo]
a=1
b=2
c=3
[bar]
x=a
y=b
z=c
__END__
Como extrair essas informações (sections, parameters, values) de
forma que elas possam ser trabalhadas?
Mais detalhes sobre a lista de discussão Cascavel-pm