General: Expand JSLexArrayParser to recognize [, ] and # in strings, and add debugging
authorRalf Ertzinger <ralf@skytale.net>
Thu, 9 Sep 2010 16:34:17 +0000 (18:34 +0200)
committerRalf Ertzinger <ralf@skytale.net>
Thu, 9 Sep 2010 16:34:17 +0000 (18:34 +0200)
videosite/JSArrayParser.pm
videosite/JSLexArrayParser.pm
videosite/JSONNospace.pm
videosite/JSONNospace.yp

index cadf8e8..8f9b729 100644 (file)
@@ -13,6 +13,7 @@ use strict;
 
 sub new {
     my $class = shift;
+    my %params = @_;
     my $self = {};
 
     if ($class ne __PACKAGE__) {
@@ -29,7 +30,7 @@ sub new {
 
     unless($@) {
         # Available. Return a JSLexArrayParser object
-        return videosite::JSLexArrayParser->new();
+        return videosite::JSLexArrayParser->new(%params);
     }
 
     # See if JSSimleArrayParser is available
@@ -39,7 +40,7 @@ sub new {
 
     unless ($@) {
         # Available. Return a JSSimpleArrayParser object
-        return videosite::JSSimpleArrayParser->new();
+        return videosite::JSSimpleArrayParser->new(%params);
     }
 
     # Nothing available. Return ourselves.
index 73a8d7e..9320d03 100644 (file)
@@ -26,7 +26,7 @@ my @tokens = (
     QUADHEX => 'u[0-9a-fA-F]{4}',
     INTEGER => '[0-9]+',
     QUOTEDNORMAL => '[nr]',
-    SIMPLECHAR => '[-\w\._\?\+=\&\!%<>;]+',
+    SIMPLECHAR => '[-\w\._\?\+=\&\!%<>;\#]+',
     BACKSLASH => '\\\\',
     SLASH => '/',
     COMMA => ',',
@@ -38,10 +38,12 @@ my @tokens = (
 
 sub new {
     my $class = shift;
+    my %params = @_;
     my $self = $class->SUPER::new();
 
     $self->{'_PARSER'} = videosite::JSONNospace->new();
     $self->{'_LEXER'} = Parse::Lex->new(@tokens);
+    $self->{'_PARAMS'} = \%params;
 
     return bless($self, $class);
 }
@@ -58,12 +60,13 @@ sub parse {
             my $tok = $l->next();
             return ('', undef) unless $tok;
             return ('', undef) if $l->eoi();
+            print STDERR $tok->text(), "\n" if (exists($self->{'_PARAMS'}->{'debug'}) and ($self->{'_PARAMS'}->{'debug'} > 0));
             return ($tok->name(), $tok->text());
         },
         yyerror => sub {
             $_[0]->YYAbort();
         },
-        yydebug => 0x0);
+        yydebug => (exists($self->{'_PARAMS'}->{'debug'})?$self->{'_PARAMS'}->{'debug'}:0x0));
     return ref($result)?$result->[0]:$result;
 }
 
index 2c18cb9..07e992e 100644 (file)
@@ -535,24 +535,26 @@ sub new {
        },
        {#State 3
                ACTIONS => {
-                       'SIMPLECHAR' => 17,
-                       'INTEGER' => 16,
-                       'TRUE' => 19,
-                       'NULL' => 20,
-                       'COLON' => 21,
-                       'BACKSLASH' => 23,
-                       'COMMA' => 22,
-                       'QUOTE' => 25,
-                       'SINGLEQUOTE' => 26,
-                       'FALSE' => 27,
+                       'INTEGER' => 24,
+                       'SIMPLECHAR' => 23,
+                       'TRUE' => 16,
+                       'NULL' => 17,
+                       'COLON' => 18,
+                       'COMMA' => 26,
+                       'BACKSLASH' => 25,
+                       'QUOTE' => 27,
+                       'SINGLEQUOTE' => 28,
+                       'FALSE' => 20,
+                       'SQUARECLOSE' => 30,
+                       'SQUAREOPEN' => 33,
+                       'U' => 32,
                        'QUOTEDNORMAL' => 31,
-                       'U' => 30,
-                       'QUADHEX' => 29
+                       'QUADHEX' => 21
                },
                GOTOS => {
-                       'charstream' => 18,
-                       'char' => 28,
-                       'escapedchar' => 24
+                       'charstream' => 22,
+                       'char' => 29,
+                       'escapedchar' => 19
                }
        },
        {#State 4
@@ -560,8 +562,8 @@ sub new {
        },
        {#State 5
                ACTIONS => {
-                       '' => 32,
-                       'COMMA' => 33
+                       '' => 34,
+                       'COMMA' => 35
                }
        },
        {#State 6
@@ -583,13 +585,13 @@ sub new {
                ACTIONS => {
                        'TRUE' => 1,
                        'FALSE' => 10,
-                       'SQUARECLOSE' => 35,
+                       'SQUARECLOSE' => 37,
                        'CURLYOPEN' => 2,
                        'SQUAREOPEN' => 11,
                        'QUOTE' => 3
                },
                GOTOS => {
-                       'basicstream' => 34,
+                       'basicstream' => 36,
                        'hash' => 6,
                        'array' => 7,
                        'boolean' => 8,
@@ -599,8 +601,8 @@ sub new {
        },
        {#State 12
                ACTIONS => {
-                       'CURLYCLOSE' => 37,
-                       'COMMA' => 36
+                       'CURLYCLOSE' => 38,
+                       'COMMA' => 39
                }
        },
        {#State 13
@@ -611,90 +613,98 @@ sub new {
        },
        {#State 15
                ACTIONS => {
-                       'COLON' => 38
+                       'COLON' => 40
                }
        },
        {#State 16
-               DEFAULT => -39
+               DEFAULT => -43
        },
        {#State 17
-               DEFAULT => -38
+               DEFAULT => -45
        },
        {#State 18
-               ACTIONS => {
-                       'SIMPLECHAR' => 17,
-                       'INTEGER' => 16,
-                       'TRUE' => 19,
-                       'NULL' => 20,
-                       'COLON' => 21,
-                       'BACKSLASH' => 23,
-                       'COMMA' => 22,
-                       'QUOTE' => 39,
-                       'SINGLEQUOTE' => 26,
-                       'FALSE' => 27,
-                       'QUOTEDNORMAL' => 31,
-                       'U' => 30,
-                       'QUADHEX' => 29
-               },
-               GOTOS => {
-                       'char' => 40,
-                       'escapedchar' => 24
-               }
+               DEFAULT => -40
        },
        {#State 19
-               DEFAULT => -43
+               DEFAULT => -48
        },
        {#State 20
-               DEFAULT => -45
+               DEFAULT => -44
        },
        {#State 21
-               DEFAULT => -40
+               DEFAULT => -37
        },
        {#State 22
-               DEFAULT => -41
-       },
-       {#State 23
                ACTIONS => {
-                       'BACKSLASH' => 41,
-                       'CURLYOPEN' => 43,
-                       'SLASH' => 42,
-                       'QUOTE' => 44,
-                       'SINGLEQUOTE' => 45,
-                       'CURLYCLOSE' => 46,
-                       'SQUARECLOSE' => 47,
-                       'SQUAREOPEN' => 50,
-                       'QUADHEX' => 49,
-                       'QUOTEDNORMAL' => 48
+                       'SIMPLECHAR' => 23,
+                       'INTEGER' => 24,
+                       'TRUE' => 16,
+                       'NULL' => 17,
+                       'COLON' => 18,
+                       'BACKSLASH' => 25,
+                       'COMMA' => 26,
+                       'QUOTE' => 41,
+                       'SINGLEQUOTE' => 28,
+                       'FALSE' => 20,
+                       'SQUARECLOSE' => 30,
+                       'QUOTEDNORMAL' => 31,
+                       'U' => 32,
+                       'SQUAREOPEN' => 33,
+                       'QUADHEX' => 21
+               },
+               GOTOS => {
+                       'char' => 42,
+                       'escapedchar' => 19
                }
        },
+       {#State 23
+               DEFAULT => -38
+       },
        {#State 24
-               DEFAULT => -46
+               DEFAULT => -39
        },
        {#State 25
-               DEFAULT => -21
+               ACTIONS => {
+                       'BACKSLASH' => 47,
+                       'CURLYOPEN' => 44,
+                       'SLASH' => 43,
+                       'QUOTE' => 48,
+                       'CURLYCLOSE' => 45,
+                       'SINGLEQUOTE' => 49,
+                       'SQUARECLOSE' => 50,
+                       'SQUAREOPEN' => 52,
+                       'QUADHEX' => 46,
+                       'QUOTEDNORMAL' => 51
+               }
        },
        {#State 26
-               DEFAULT => -42
+               DEFAULT => -41
        },
        {#State 27
-               DEFAULT => -44
+               DEFAULT => -21
        },
        {#State 28
-               DEFAULT => -23
+               DEFAULT => -42
        },
        {#State 29
-               DEFAULT => -37
+               DEFAULT => -23
        },
        {#State 30
-               DEFAULT => -36
+               DEFAULT => -47
        },
        {#State 31
                DEFAULT => -35
        },
        {#State 32
-               DEFAULT => 0
+               DEFAULT => -36
        },
        {#State 33
+               DEFAULT => -46
+       },
+       {#State 34
+               DEFAULT => 0
+       },
+       {#State 35
                ACTIONS => {
                        'TRUE' => 1,
                        'FALSE' => 10,
@@ -707,108 +717,108 @@ sub new {
                        'array' => 7,
                        'boolean' => 8,
                        'quotestring' => 9,
-                       'basictype' => 51
+                       'basictype' => 53
                }
        },
-       {#State 34
+       {#State 36
                ACTIONS => {
-                       'SQUARECLOSE' => 52,
-                       'COMMA' => 33
+                       'SQUARECLOSE' => 54,
+                       'COMMA' => 35
                }
        },
-       {#State 35
+       {#State 37
                DEFAULT => -9
        },
-       {#State 36
+       {#State 38
+               DEFAULT => -12
+       },
+       {#State 39
                ACTIONS => {
                        'QUOTE' => 3
                },
                GOTOS => {
                        'quotestring' => 15,
-                       'kvpair' => 53
+                       'kvpair' => 55
                }
        },
-       {#State 37
-               DEFAULT => -12
-       },
-       {#State 38
+       {#State 40
                ACTIONS => {
-                       'INTEGER' => 54,
+                       'INTEGER' => 59,
                        'TRUE' => 1,
-                       'NULL' => 55,
+                       'NULL' => 56,
                        'FALSE' => 10,
                        'CURLYOPEN' => 2,
                        'SQUAREOPEN' => 11,
                        'QUOTE' => 3
                },
                GOTOS => {
-                       'hash' => 58,
-                       'array' => 57,
-                       'boolean' => 56,
-                       'quotestring' => 59
+                       'hash' => 60,
+                       'array' => 58,
+                       'boolean' => 57,
+                       'quotestring' => 61
                }
        },
-       {#State 39
-               DEFAULT => -22
-       },
-       {#State 40
-               DEFAULT => -24
-       },
        {#State 41
-               DEFAULT => -32
+               DEFAULT => -22
        },
        {#State 42
-               DEFAULT => -31
+               DEFAULT => -24
        },
        {#State 43
-               DEFAULT => -25
+               DEFAULT => -31
        },
        {#State 44
-               DEFAULT => -29
+               DEFAULT => -25
        },
        {#State 45
-               DEFAULT => -30
+               DEFAULT => -26
        },
        {#State 46
-               DEFAULT => -26
+               DEFAULT => -33
        },
        {#State 47
-               DEFAULT => -28
+               DEFAULT => -32
        },
        {#State 48
-               DEFAULT => -34
+               DEFAULT => -29
        },
        {#State 49
-               DEFAULT => -33
+               DEFAULT => -30
        },
        {#State 50
-               DEFAULT => -27
+               DEFAULT => -28
        },
        {#State 51
-               DEFAULT => -2
+               DEFAULT => -34
        },
        {#State 52
-               DEFAULT => -10
+               DEFAULT => -27
        },
        {#State 53
-               DEFAULT => -14
+               DEFAULT => -2
        },
        {#State 54
-               DEFAULT => -20
+               DEFAULT => -10
        },
        {#State 55
-               DEFAULT => -19
+               DEFAULT => -14
        },
        {#State 56
-               DEFAULT => -18
+               DEFAULT => -19
        },
        {#State 57
-               DEFAULT => -17
+               DEFAULT => -18
        },
        {#State 58
-               DEFAULT => -16
+               DEFAULT => -17
        },
        {#State 59
+               DEFAULT => -20
+       },
+       {#State 60
+               DEFAULT => -16
+       },
+       {#State 61
                DEFAULT => -15
        }
 ],
@@ -1045,13 +1055,19 @@ sub
        ],
        [#Rule 46
                 'char', 1, undef
+       ],
+       [#Rule 47
+                'char', 1, undef
+       ],
+       [#Rule 48
+                'char', 1, undef
        ]
 ],
                                   @_);
     bless($self,$class);
 }
 
-#line 111 "JSONNospace.yp"
+#line 113 "JSONNospace.yp"
 
 
 1;
index 384eda3..22de6a1 100644 (file)
@@ -106,6 +106,8 @@ char:
     TRUE |
     FALSE |
     NULL |
+    SQUAREOPEN |
+    SQUARECLOSE |
     escapedchar;
 
 %%