2 * This file contains a simple and quite possible wrong parser for
3 * JSON encoded structures.
5 * It does not support white space in quoted strings, those are silently
8 * It has primarily been written to parse video parameters from the
14 * SINGLEQUOTE => '\\\'',
18 * QUADHEX => 'u[0-9a-fA-F]{4}',
19 * INTEGER => '[0-9]+',
20 * QUOTEDNORMAL => '[nr]',
21 * SIMPLECHAR => '[-a-zA-Z\._\?\+=\&\!%<>]+',
22 * BACKSLASH => '\\\\',
28 * SQUARECLOSE => '\]',
37 basictype { return [ $_[1] ] } |
38 basicstream COMMA basictype { return [ @{$_[1]}, $_[3] ] };
51 SQUAREOPEN SQUARECLOSE { return [] } |
52 SQUAREOPEN basicstream SQUARECLOSE { return [ @{$_[2]} ] };
55 CURLYOPEN CURLYCLOSE { return { } } |
56 CURLYOPEN kvstream CURLYCLOSE { return { @{$_[2]} } };
60 kvstream COMMA kvpair { return [ @{$_[1]}, @{$_[3]} ] };
63 quotestring COLON quotestring { return [ $_[1], $_[3] ] } |
64 quotestring COLON hash { return [ $_[1], $_[3] ] } |
65 quotestring COLON array { return [ $_[1], $_[3] ] } |
66 quotestring COLON boolean { return [ $_[1], $_[3] ] } |
67 quotestring COLON NULL { return [ $_[1], undef ] } |
68 quotestring COLON INTEGER { return [ $_[1], $_[3] ] };
71 QUOTE QUOTE { return "" } |
72 QUOTE charstream QUOTE { return $_[2] };
76 charstream char { return $_[1] . $_[2] };
79 BACKSLASH CURLYOPEN { return $_[2] } |
80 BACKSLASH CURLYCLOSE { return $_[2] } |
81 BACKSLASH SQUAREOPEN { return $_[2] } |
82 BACKSLASH SQUARECLOSE { return $_[2] } |
83 BACKSLASH QUOTE { return $_[2] } |
84 BACKSLASH SINGLEQUOTE { return $_[2] } |
85 BACKSLASH SLASH { return $_[2] } |
86 BACKSLASH BACKSLASH { return $_[2] } |
87 BACKSLASH QUADHEX { return encode("utf8", pack("U", hex(substr($_[2],1)))) } |
88 BACKSLASH QUOTEDNORMAL {
91 } elsif ($_[2] eq 'r') {