[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