quixadhal

evil

Oct 26th, 2017
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.11 KB | None | 0 0
  1. my $i3_packet_grammar = qr{
  2.     # Start
  3.     <nocontext:>
  4.     <map> | <array>
  5.  
  6.     <rule: map>
  7.         \(\[ <[entry]>+ % ( , ) \]\)
  8.         (?{ my $tmp = {};
  9.             my $arr = $MATCH{entry};
  10.             foreach my $i (@$arr) {
  11.                 my @keys = keys(%$i);
  12.                 foreach my $k (@keys) {
  13.                     $tmp->{$k} = $i->{$k};
  14.                 };
  15.             };
  16.             $MATCH = $tmp;
  17.             })
  18.  
  19.     <rule: entry>
  20.         <key=string> \: <value>
  21.         (?{ $MATCH = { $MATCH{key} => $MATCH{value} } })
  22.  
  23.     <rule: array>
  24.         \(\{ <[value]>+ % ( , ) \}\)
  25.         (?{ $MATCH = $MATCH{value} })
  26.  
  27.     <rule: value>
  28.         <string>
  29.         (?{ $MATCH = $MATCH{string} })
  30.         | <number>
  31.         (?{ $MATCH = $MATCH{number} })
  32.         | <map>
  33.         (?{ $MATCH = $MATCH{map} })
  34.         | <array>
  35.         (?{ $MATCH = $MATCH{array} })
  36.  
  37.     <token: string>
  38.         ( \".*?(?<!\\)\" )
  39.        <MATCH= (?{ unescape_string( $CAPTURE ); })>
  40.  
  41.    <token: number>
  42.        ( [+-]?[0-9]*\.?[0-9]+(?:[eE][+-]?[0-9]+)? )
  43.        <MATCH= (?{ $CAPTURE + 0; })>
  44.  
  45. }xms;
Advertisement
Add Comment
Please, Sign In to add comment