这个配置文件是哪种格式?

时间:2014-06-24 20:53:59

标签: python perl config

我必须解析看起来像这样的配置文件:

begin
   key1 "value1"
   key2 "value2"
   begin
         key3 "value3"
         key4 "value4"
   end
end

这种格式是什么,我可以使用现成的解析器(最好是在Perl / Python中)?

1 个答案:

答案 0 :(得分:2)

我不知道格式的名称,但Parser::MGC可以使这个格式更轻松。

通过定义一个简单的自递归parse方法,将begin块识别为内部范围,我们可以从输入构建一个HASH引用的递归树。

package MyParser;
use base 'Parser::MGC';

use strict;
use warnings;

# Need to exclude linefeeds from the whitespace pattern
sub pattern_ws { qr/[\t ]+/ }

sub parse
{
   my $self = shift;
   my %items;

   $self->sequence_of( sub {
      $self->any_of(
         sub {
            # begin ... end block
            $self->expect( 'begin' );
            $self->commit;
            $self->expect( qr/\n/ );
            $self->scope_of( undef, sub {
               push @{$items{begin}}, $self->parse;
            }, 'end' );
            $self->expect( qr/\n/ );
         },
         sub {
            # key "value"
            my $key = $self->token_ident;
            $self->commit;
            $items{$key} = $self->token_string;
            $self->expect( qr/\n/ );
         },
      )
   });

   return \%items;
}

这可以在最后打印,可能使用Data::Dump

use Data::Dump 'pp';
print STDERR pp(MyParser->new->from_file(\*STDIN));

这给出了

{
  begin => [
    {
      begin => [{ key3 => "value3", key4 => "value4" }],
      key1  => "value1",
      key2  => "value2",
    },
  ],
}
相关问题