# # A helper class for parsing textual JS hashes into perl # hashes # # The parser is in jsarray.yp, to regenerate you'll need the Parse::YAPP # package. Use 'yapp -m videosite::jsarray -s jsarray.yp' to regenerate # package videosite::JSLexArrayParser; use videosite::JSArrayParser; @ISA = qw(videosite::JSArrayParser); use Parse::Lex; use videosite::jsarray; use strict; my @tokens = ( COLON => '[:]', RIGHTC => '[\}]', LEFTC => '[\{]', QUOTE => '[\"]', COMMA => '[,]', ID => '[\w_%\.\+-]+' ); sub new { my $class = shift; my $self = $class->SUPER::new(); $self->{'_PARSER'} = videosite::jsarray->new(); $self->{'_LEXER'} = Parse::Lex->new(@tokens); return bless($self, $class); } sub parse { my $self = shift; my $s = shift; my @result; my $l = $self->{'_LEXER'}; $l->from($s); @result = $self->{'_PARSER'}->YYParse( yylex => sub { my $tok = $l->next(); return ('', undef) unless $tok; return ('', undef) if $l->eoi(); return ($tok->name(), $tok->text()); }, yyerror => sub { $_[0]->YYAbort(); }, yydebug => 0x0); return $result[0]?{@{$result[0]}}:undef; } 1;