]> granicus.if.org Git - multimarkdown/commitdiff
UPDATED: Don't require opening <?xml> in OPML
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Mon, 3 Sep 2018 17:51:54 +0000 (13:51 -0400)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Mon, 3 Sep 2018 17:51:54 +0000 (13:51 -0400)
Sources/libMultiMarkdown/opml-parser.c
Sources/libMultiMarkdown/opml-parser.out
Sources/libMultiMarkdown/opml-parser.y

index d88f3b996f282c99bd6250b5d5b1a48bd3415027..427204a103438384708816b9752adc2e216d2caf 100644 (file)
@@ -106,16 +106,16 @@ typedef union {
 #define OPMLARG_PDECL , mmd_engine * engine
 #define OPMLARG_FETCH  mmd_engine * engine  = yypParser->engine
 #define OPMLARG_STORE yypParser->engine  = engine
-#define YYNSTATE             18
-#define YYNRULE              17
-#define YY_MAX_SHIFT         17
-#define YY_MIN_SHIFTREDUCE   33
-#define YY_MAX_SHIFTREDUCE   49
-#define YY_MIN_REDUCE        50
-#define YY_MAX_REDUCE        66
-#define YY_ERROR_ACTION      67
-#define YY_ACCEPT_ACTION     68
-#define YY_NO_ACTION         69
+#define YYNSTATE             19
+#define YYNRULE              19
+#define YY_MAX_SHIFT         18
+#define YY_MIN_SHIFTREDUCE   35
+#define YY_MAX_SHIFTREDUCE   53
+#define YY_MIN_REDUCE        54
+#define YY_MAX_REDUCE        72
+#define YY_ERROR_ACTION      73
+#define YY_ACCEPT_ACTION     74
+#define YY_NO_ACTION         75
 /************* End control #defines *******************************************/
 
 /* Define the yytestcase() macro to be a no-op if is not already defined
@@ -187,42 +187,42 @@ typedef union {
 **  yy_default[]       Default action for each state.
 **
 *********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (57)
+#define YY_ACTTAB_COUNT (60)
 static const YYACTIONTYPE yy_action[] = {
-       /*     0 */     1,   45,   14,    3,   49,   42,    1,   10,   14,    3,
-       /*    10 */    49,    1,   48,   14,    3,   49,    1,   47,   14,    3,
-       /*    20 */    49,   41,    1,   43,   14,    3,   49,    1,    2,   14,
-       /*    30 */     3,   49,   68,   17,   15,    6,    6,    7,    7,    8,
-       /*    40 */     5,    5,   12,    2,   40,    9,   13,   39,   11,    4,
-       /*    50 */    16,   38,   37,   36,   46,   35,   50,
+       /*     0 */     1,   49,   15,    3,   53,   46,    1,   47,   15,    3,
+       /*    10 */    53,    1,   52,   15,    3,   53,    1,   51,   15,    3,
+       /*    20 */    53,   45,    1,   13,   15,    3,   53,    1,   16,   15,
+       /*    30 */     3,   53,   74,   18,   11,   10,    2,    4,    9,   14,
+       /*    40 */     6,    6,    7,    7,    5,    5,    8,    4,   43,   12,
+       /*    50 */     2,   17,   39,   44,   42,   41,   40,   38,   50,   54,
 };
 static const YYCODETYPE yy_lookahead[] = {
-       /*     0 */    11,   12,   13,   14,   15,   10,   11,    1,   13,   14,
+       /*     0 */    11,   12,   13,   14,   15,   10,   11,   24,   13,   14,
        /*    10 */    15,   11,   12,   13,   14,   15,   11,   12,   13,   14,
-       /*    20 */    15,   10,   11,   24,   13,   14,   15,   11,    9,   13,
-       /*    30 */    14,   15,   17,   18,   21,   23,   24,   23,   24,    5,
-       /*    40 */    23,   24,   22,    9,    8,   20,   21,    6,    7,    3,
-       /*    50 */    19,    6,    4,    4,   12,    2,    0,
+       /*    20 */    15,   10,   11,   22,   13,   14,   15,   11,   21,   13,
+       /*    30 */    14,   15,   17,   18,   19,    1,    9,    3,   20,   21,
+       /*    40 */    23,   24,   23,   24,   23,   24,    5,    3,    6,    7,
+       /*    50 */     9,   19,    2,    8,    6,    4,    4,    2,   12,    0,
 };
-#define YY_SHIFT_USE_DFLT (57)
-#define YY_SHIFT_COUNT    (17)
+#define YY_SHIFT_USE_DFLT (60)
+#define YY_SHIFT_COUNT    (18)
 #define YY_SHIFT_MIN      (-11)
-#define YY_SHIFT_MAX      (56)
+#define YY_SHIFT_MAX      (59)
 static const signed char yy_shift_ofst[] = {
-       /*     0 */     6,  -11,   -5,   16,   34,    0,    5,   11,   41,   19,
-       /*    10 */    46,   36,   45,   48,   42,   49,   53,   56,
+       /*     0 */    34,  -11,   -5,   16,   41,    0,    5,   11,   42,   27,
+       /*    10 */    44,   50,   45,   48,   51,   46,   52,   55,   59,
 };
-#define YY_REDUCE_USE_DFLT (-2)
+#define YY_REDUCE_USE_DFLT (-18)
 #define YY_REDUCE_COUNT (10)
-#define YY_REDUCE_MIN   (-1)
-#define YY_REDUCE_MAX   (31)
+#define YY_REDUCE_MIN   (-17)
+#define YY_REDUCE_MAX   (32)
 static const signed char yy_reduce_ofst[] = {
-       /*     0 */    15,   12,   14,   17,   25,   -1,   -1,   -1,   20,   13,
-       /*    10 */    31,
+       /*     0 */    15,   17,   19,   21,   18,  -17,  -17,  -17,    1,    7,
+       /*    10 */    32,
 };
 static const YYACTIONTYPE yy_default[] = {
-       /*     0 */    67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
-       /*    10 */    67,   67,   67,   67,   67,   67,   51,   67,
+       /*     0 */    73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
+       /*    10 */    73,   56,   73,   73,   73,   73,   73,   55,   73,
 };
 /********** End of lemon-generated parsing tables *****************************/
 
@@ -347,21 +347,23 @@ static const char *const yyTokenName[] = {
 static const char *const yyRuleName[] = {
        /*   0 */ "doc ::= doc_xml",
        /*   1 */ "doc_xml ::= OPML_XML doc_opml",
-       /*   2 */ "doc_xml ::= OPML_XML doc_opml OPML_WSNL",
-       /*   3 */ "doc_opml ::= OPML_OPML_OPEN opml_header opml_body OPML_OPML_CLOSE",
-       /*   4 */ "doc_opml ::= OPML_OPML_OPEN opml_body OPML_OPML_CLOSE",
-       /*   5 */ "opml_header ::= OPML_HEAD_OPEN opml_title OPML_HEAD_CLOSE",
-       /*   6 */ "opml_header ::= OPML_HEAD_OPEN OPML_HEAD_CLOSE",
-       /*   7 */ "opml_title ::= OPML_TITLE_OPEN OPML_TITLE_CLOSE",
-       /*   8 */ "opml_body ::= OPML_BODY_OPEN opml_outlines OPML_BODY_CLOSE",
-       /*   9 */ "opml_body ::= OPML_BODY_OPEN OPML_BODY_CLOSE",
-       /*  10 */ "opml_outlines ::= opml_outlines opml_outline",
-       /*  11 */ "opml_outlines ::= opml_outline",
-       /*  12 */ "opml_outline ::= OPML_OUTLINE_OPEN OPML_OUTLINE_CLOSE",
-       /*  13 */ "opml_outline ::= OPML_OUTLINE_PREAMBLE OPML_OUTLINE_CLOSE",
-       /*  14 */ "opml_outline ::= OPML_OUTLINE_OPEN opml_outlines OPML_OUTLINE_CLOSE",
-       /*  15 */ "opml_outline ::= OPML_OUTLINE_METADATA opml_outlines OPML_OUTLINE_CLOSE",
-       /*  16 */ "opml_outline ::= OPML_OUTLINE_SELF_CLOSE",
+       /*   2 */ "doc_xml ::= doc_opml",
+       /*   3 */ "doc_xml ::= OPML_XML doc_opml OPML_WSNL",
+       /*   4 */ "doc_xml ::= doc_opml OPML_WSNL",
+       /*   5 */ "doc_opml ::= OPML_OPML_OPEN opml_header opml_body OPML_OPML_CLOSE",
+       /*   6 */ "doc_opml ::= OPML_OPML_OPEN opml_body OPML_OPML_CLOSE",
+       /*   7 */ "opml_header ::= OPML_HEAD_OPEN opml_title OPML_HEAD_CLOSE",
+       /*   8 */ "opml_header ::= OPML_HEAD_OPEN OPML_HEAD_CLOSE",
+       /*   9 */ "opml_title ::= OPML_TITLE_OPEN OPML_TITLE_CLOSE",
+       /*  10 */ "opml_body ::= OPML_BODY_OPEN opml_outlines OPML_BODY_CLOSE",
+       /*  11 */ "opml_body ::= OPML_BODY_OPEN OPML_BODY_CLOSE",
+       /*  12 */ "opml_outlines ::= opml_outlines opml_outline",
+       /*  13 */ "opml_outlines ::= opml_outline",
+       /*  14 */ "opml_outline ::= OPML_OUTLINE_OPEN OPML_OUTLINE_CLOSE",
+       /*  15 */ "opml_outline ::= OPML_OUTLINE_PREAMBLE OPML_OUTLINE_CLOSE",
+       /*  16 */ "opml_outline ::= OPML_OUTLINE_OPEN opml_outlines OPML_OUTLINE_CLOSE",
+       /*  17 */ "opml_outline ::= OPML_OUTLINE_METADATA opml_outlines OPML_OUTLINE_CLOSE",
+       /*  18 */ "opml_outline ::= OPML_OUTLINE_SELF_CLOSE",
 };
 #endif /* NDEBUG */
 
@@ -770,7 +772,9 @@ static const struct {
 } yyRuleInfo[] = {
        { 17, 1 },
        { 18, 2 },
+       { 18, 1 },
        { 18, 3 },
+       { 18, 2 },
        { 19, 4 },
        { 19, 3 },
        { 20, 3 },
@@ -864,21 +868,23 @@ static void yy_reduce(
                default:
                        /* (1) doc_xml ::= OPML_XML doc_opml */
                        yytestcase(yyruleno == 1);
-                       /* (2) doc_xml ::= OPML_XML doc_opml OPML_WSNL */ yytestcase(yyruleno == 2);
-                       /* (3) doc_opml ::= OPML_OPML_OPEN opml_header opml_body OPML_OPML_CLOSE */ yytestcase(yyruleno == 3);
-                       /* (4) doc_opml ::= OPML_OPML_OPEN opml_body OPML_OPML_CLOSE */ yytestcase(yyruleno == 4);
-                       /* (5) opml_header ::= OPML_HEAD_OPEN opml_title OPML_HEAD_CLOSE */ yytestcase(yyruleno == 5);
-                       /* (6) opml_header ::= OPML_HEAD_OPEN OPML_HEAD_CLOSE */ yytestcase(yyruleno == 6);
-                       /* (7) opml_title ::= OPML_TITLE_OPEN OPML_TITLE_CLOSE */ yytestcase(yyruleno == 7);
-                       /* (8) opml_body ::= OPML_BODY_OPEN opml_outlines OPML_BODY_CLOSE */ yytestcase(yyruleno == 8);
-                       /* (9) opml_body ::= OPML_BODY_OPEN OPML_BODY_CLOSE */ yytestcase(yyruleno == 9);
-                       /* (10) opml_outlines ::= opml_outlines opml_outline */ yytestcase(yyruleno == 10);
-                       /* (11) opml_outlines ::= opml_outline (OPTIMIZED OUT) */ assert(yyruleno != 11);
-                       /* (12) opml_outline ::= OPML_OUTLINE_OPEN OPML_OUTLINE_CLOSE */ yytestcase(yyruleno == 12);
-                       /* (13) opml_outline ::= OPML_OUTLINE_PREAMBLE OPML_OUTLINE_CLOSE */ yytestcase(yyruleno == 13);
-                       /* (14) opml_outline ::= OPML_OUTLINE_OPEN opml_outlines OPML_OUTLINE_CLOSE */ yytestcase(yyruleno == 14);
-                       /* (15) opml_outline ::= OPML_OUTLINE_METADATA opml_outlines OPML_OUTLINE_CLOSE */ yytestcase(yyruleno == 15);
-                       /* (16) opml_outline ::= OPML_OUTLINE_SELF_CLOSE */ yytestcase(yyruleno == 16);
+                       /* (2) doc_xml ::= doc_opml */ yytestcase(yyruleno == 2);
+                       /* (3) doc_xml ::= OPML_XML doc_opml OPML_WSNL */ yytestcase(yyruleno == 3);
+                       /* (4) doc_xml ::= doc_opml OPML_WSNL */ yytestcase(yyruleno == 4);
+                       /* (5) doc_opml ::= OPML_OPML_OPEN opml_header opml_body OPML_OPML_CLOSE */ yytestcase(yyruleno == 5);
+                       /* (6) doc_opml ::= OPML_OPML_OPEN opml_body OPML_OPML_CLOSE */ yytestcase(yyruleno == 6);
+                       /* (7) opml_header ::= OPML_HEAD_OPEN opml_title OPML_HEAD_CLOSE */ yytestcase(yyruleno == 7);
+                       /* (8) opml_header ::= OPML_HEAD_OPEN OPML_HEAD_CLOSE */ yytestcase(yyruleno == 8);
+                       /* (9) opml_title ::= OPML_TITLE_OPEN OPML_TITLE_CLOSE */ yytestcase(yyruleno == 9);
+                       /* (10) opml_body ::= OPML_BODY_OPEN opml_outlines OPML_BODY_CLOSE */ yytestcase(yyruleno == 10);
+                       /* (11) opml_body ::= OPML_BODY_OPEN OPML_BODY_CLOSE */ yytestcase(yyruleno == 11);
+                       /* (12) opml_outlines ::= opml_outlines opml_outline */ yytestcase(yyruleno == 12);
+                       /* (13) opml_outlines ::= opml_outline (OPTIMIZED OUT) */ assert(yyruleno != 13);
+                       /* (14) opml_outline ::= OPML_OUTLINE_OPEN OPML_OUTLINE_CLOSE */ yytestcase(yyruleno == 14);
+                       /* (15) opml_outline ::= OPML_OUTLINE_PREAMBLE OPML_OUTLINE_CLOSE */ yytestcase(yyruleno == 15);
+                       /* (16) opml_outline ::= OPML_OUTLINE_OPEN opml_outlines OPML_OUTLINE_CLOSE */ yytestcase(yyruleno == 16);
+                       /* (17) opml_outline ::= OPML_OUTLINE_METADATA opml_outlines OPML_OUTLINE_CLOSE */ yytestcase(yyruleno == 17);
+                       /* (18) opml_outline ::= OPML_OUTLINE_SELF_CLOSE */ yytestcase(yyruleno == 18);
                        break;
                        /********** End reduce actions ************************************************/
        };
index 7ce107547534841ce512cf44c2233f89fb2c2651..fdffc8e7963a44cc5ba74cff680732b75d00179e 100644 (file)
@@ -1,11 +1,17 @@
 State 0:
           doc ::= * doc_xml
           doc_xml ::= * OPML_XML doc_opml
+          doc_xml ::= * doc_opml
           doc_xml ::= * OPML_XML doc_opml OPML_WSNL
+          doc_xml ::= * doc_opml OPML_WSNL
+          doc_opml ::= * OPML_OPML_OPEN opml_header opml_body OPML_OPML_CLOSE
+          doc_opml ::= * OPML_OPML_OPEN opml_body OPML_OPML_CLOSE
 
                       OPML_XML shift        10     
+                OPML_OPML_OPEN shift        4      
                            doc accept
-                       doc_xml shift        17     
+                       doc_xml shift        18     
+                      doc_opml shift        11     
 
 State 1:
           opml_outlines ::= * opml_outlines opml_outline
@@ -19,10 +25,10 @@ State 1:
           opml_outline ::= * OPML_OUTLINE_SELF_CLOSE
 
              OPML_OUTLINE_OPEN shift        1      
-            OPML_OUTLINE_CLOSE shift-reduce 12     opml_outline ::= OPML_OUTLINE_OPEN OPML_OUTLINE_CLOSE
-         OPML_OUTLINE_PREAMBLE shift        14     
+            OPML_OUTLINE_CLOSE shift-reduce 14     opml_outline ::= OPML_OUTLINE_OPEN OPML_OUTLINE_CLOSE
+         OPML_OUTLINE_PREAMBLE shift        15     
          OPML_OUTLINE_METADATA shift        3      
-       OPML_OUTLINE_SELF_CLOSE shift-reduce 16     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
+       OPML_OUTLINE_SELF_CLOSE shift-reduce 18     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
                  opml_outlines shift        6      
                   opml_outline shift        6        /* because opml_outline==opml_outlines */
 
@@ -37,11 +43,11 @@ State 2:
           opml_outline ::= * OPML_OUTLINE_METADATA opml_outlines OPML_OUTLINE_CLOSE
           opml_outline ::= * OPML_OUTLINE_SELF_CLOSE
 
-               OPML_BODY_CLOSE shift-reduce      opml_body ::= OPML_BODY_OPEN OPML_BODY_CLOSE
+               OPML_BODY_CLOSE shift-reduce 11     opml_body ::= OPML_BODY_OPEN OPML_BODY_CLOSE
              OPML_OUTLINE_OPEN shift        1      
-         OPML_OUTLINE_PREAMBLE shift        14     
+         OPML_OUTLINE_PREAMBLE shift        15     
          OPML_OUTLINE_METADATA shift        3      
-       OPML_OUTLINE_SELF_CLOSE shift-reduce 16     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
+       OPML_OUTLINE_SELF_CLOSE shift-reduce 18     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
                  opml_outlines shift        7      
                   opml_outline shift        7        /* because opml_outline==opml_outlines */
 
@@ -56,9 +62,9 @@ State 3:
           opml_outline ::= * OPML_OUTLINE_SELF_CLOSE
 
              OPML_OUTLINE_OPEN shift        1      
-         OPML_OUTLINE_PREAMBLE shift        14     
+         OPML_OUTLINE_PREAMBLE shift        15     
          OPML_OUTLINE_METADATA shift        3      
-       OPML_OUTLINE_SELF_CLOSE shift-reduce 16     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
+       OPML_OUTLINE_SELF_CLOSE shift-reduce 18     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
                  opml_outlines shift        5      
                   opml_outline shift        5        /* because opml_outline==opml_outlines */
 
@@ -73,7 +79,7 @@ State 4:
                 OPML_HEAD_OPEN shift        8      
                 OPML_BODY_OPEN shift        2      
                    opml_header shift        9      
-                     opml_body shift        13     
+                     opml_body shift        14     
 
 State 5:
           opml_outlines ::= opml_outlines * opml_outline
@@ -85,11 +91,11 @@ State 5:
           opml_outline ::= * OPML_OUTLINE_SELF_CLOSE
 
              OPML_OUTLINE_OPEN shift        1      
-            OPML_OUTLINE_CLOSE shift-reduce 15     opml_outline ::= OPML_OUTLINE_METADATA opml_outlines OPML_OUTLINE_CLOSE
-         OPML_OUTLINE_PREAMBLE shift        14     
+            OPML_OUTLINE_CLOSE shift-reduce 17     opml_outline ::= OPML_OUTLINE_METADATA opml_outlines OPML_OUTLINE_CLOSE
+         OPML_OUTLINE_PREAMBLE shift        15     
          OPML_OUTLINE_METADATA shift        3      
-       OPML_OUTLINE_SELF_CLOSE shift-reduce 16     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
-                  opml_outline shift-reduce 10     opml_outlines ::= opml_outlines opml_outline
+       OPML_OUTLINE_SELF_CLOSE shift-reduce 18     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
+                  opml_outline shift-reduce 12     opml_outlines ::= opml_outlines opml_outline
 
 State 6:
           opml_outlines ::= opml_outlines * opml_outline
@@ -101,11 +107,11 @@ State 6:
           opml_outline ::= * OPML_OUTLINE_SELF_CLOSE
 
              OPML_OUTLINE_OPEN shift        1      
-            OPML_OUTLINE_CLOSE shift-reduce 14     opml_outline ::= OPML_OUTLINE_OPEN opml_outlines OPML_OUTLINE_CLOSE
-         OPML_OUTLINE_PREAMBLE shift        14     
+            OPML_OUTLINE_CLOSE shift-reduce 16     opml_outline ::= OPML_OUTLINE_OPEN opml_outlines OPML_OUTLINE_CLOSE
+         OPML_OUTLINE_PREAMBLE shift        15     
          OPML_OUTLINE_METADATA shift        3      
-       OPML_OUTLINE_SELF_CLOSE shift-reduce 16     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
-                  opml_outline shift-reduce 10     opml_outlines ::= opml_outlines opml_outline
+       OPML_OUTLINE_SELF_CLOSE shift-reduce 18     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
+                  opml_outline shift-reduce 12     opml_outlines ::= opml_outlines opml_outline
 
 State 7:
           opml_body ::= OPML_BODY_OPEN opml_outlines * OPML_BODY_CLOSE
@@ -116,21 +122,21 @@ State 7:
           opml_outline ::= * OPML_OUTLINE_METADATA opml_outlines OPML_OUTLINE_CLOSE
           opml_outline ::= * OPML_OUTLINE_SELF_CLOSE
 
-               OPML_BODY_CLOSE shift-reduce      opml_body ::= OPML_BODY_OPEN opml_outlines OPML_BODY_CLOSE
+               OPML_BODY_CLOSE shift-reduce 10     opml_body ::= OPML_BODY_OPEN opml_outlines OPML_BODY_CLOSE
              OPML_OUTLINE_OPEN shift        1      
-         OPML_OUTLINE_PREAMBLE shift        14     
+         OPML_OUTLINE_PREAMBLE shift        15     
          OPML_OUTLINE_METADATA shift        3      
-       OPML_OUTLINE_SELF_CLOSE shift-reduce 16     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
-                  opml_outline shift-reduce 10     opml_outlines ::= opml_outlines opml_outline
+       OPML_OUTLINE_SELF_CLOSE shift-reduce 18     opml_outline ::= OPML_OUTLINE_SELF_CLOSE
+                  opml_outline shift-reduce 12     opml_outlines ::= opml_outlines opml_outline
 
 State 8:
           opml_header ::= OPML_HEAD_OPEN * opml_title OPML_HEAD_CLOSE
           opml_header ::= OPML_HEAD_OPEN * OPML_HEAD_CLOSE
           opml_title ::= * OPML_TITLE_OPEN OPML_TITLE_CLOSE
 
-               OPML_HEAD_CLOSE shift-reduce 6      opml_header ::= OPML_HEAD_OPEN OPML_HEAD_CLOSE
-               OPML_TITLE_OPEN shift        11     
-                    opml_title shift        12     
+               OPML_HEAD_CLOSE shift-reduce 8      opml_header ::= OPML_HEAD_OPEN OPML_HEAD_CLOSE
+               OPML_TITLE_OPEN shift        12     
+                    opml_title shift        13     
 
 State 9:
           doc_opml ::= OPML_OPML_OPEN opml_header * opml_body OPML_OPML_CLOSE
@@ -138,7 +144,7 @@ State 9:
           opml_body ::= * OPML_BODY_OPEN OPML_BODY_CLOSE
 
                 OPML_BODY_OPEN shift        2      
-                     opml_body shift        15     
+                     opml_body shift        16     
 
 State 10:
           doc_xml ::= OPML_XML * doc_opml
@@ -147,41 +153,48 @@ State 10:
           doc_opml ::= * OPML_OPML_OPEN opml_body OPML_OPML_CLOSE
 
                 OPML_OPML_OPEN shift        4      
-                      doc_opml shift        16     
+                      doc_opml shift        17     
 
 State 11:
-          opml_title ::= OPML_TITLE_OPEN * OPML_TITLE_CLOSE
+      (2) doc_xml ::= doc_opml *
+          doc_xml ::= doc_opml * OPML_WSNL
 
-              OPML_TITLE_CLOSE shift-reduce 7      opml_title ::= OPML_TITLE_OPEN OPML_TITLE_CLOSE
+                     OPML_WSNL shift-reduce 4      doc_xml ::= doc_opml OPML_WSNL
+                     {default} reduce       2      doc_xml ::= doc_opml
 
 State 12:
-          opml_header ::= OPML_HEAD_OPEN opml_title * OPML_HEAD_CLOSE
+          opml_title ::= OPML_TITLE_OPEN * OPML_TITLE_CLOSE
 
-               OPML_HEAD_CLOSE shift-reduce 5      opml_header ::= OPML_HEAD_OPEN opml_title OPML_HEAD_CLOSE
+              OPML_TITLE_CLOSE shift-reduce 9      opml_title ::= OPML_TITLE_OPEN OPML_TITLE_CLOSE
 
 State 13:
-          doc_opml ::= OPML_OPML_OPEN opml_body * OPML_OPML_CLOSE
+          opml_header ::= OPML_HEAD_OPEN opml_title * OPML_HEAD_CLOSE
 
-               OPML_OPML_CLOSE shift-reduce 4      doc_opml ::= OPML_OPML_OPEN opml_body OPML_OPML_CLOSE
+               OPML_HEAD_CLOSE shift-reduce 7      opml_header ::= OPML_HEAD_OPEN opml_title OPML_HEAD_CLOSE
 
 State 14:
-          opml_outline ::= OPML_OUTLINE_PREAMBLE * OPML_OUTLINE_CLOSE
+          doc_opml ::= OPML_OPML_OPEN opml_body * OPML_OPML_CLOSE
 
-            OPML_OUTLINE_CLOSE shift-reduce 13     opml_outline ::= OPML_OUTLINE_PREAMBLE OPML_OUTLINE_CLOSE
+               OPML_OPML_CLOSE shift-reduce 6      doc_opml ::= OPML_OPML_OPEN opml_body OPML_OPML_CLOSE
 
 State 15:
-          doc_opml ::= OPML_OPML_OPEN opml_header opml_body * OPML_OPML_CLOSE
+          opml_outline ::= OPML_OUTLINE_PREAMBLE * OPML_OUTLINE_CLOSE
 
-               OPML_OPML_CLOSE shift-reduce 3      doc_opml ::= OPML_OPML_OPEN opml_header opml_body OPML_OPML_CLOSE
+            OPML_OUTLINE_CLOSE shift-reduce 15     opml_outline ::= OPML_OUTLINE_PREAMBLE OPML_OUTLINE_CLOSE
 
 State 16:
+          doc_opml ::= OPML_OPML_OPEN opml_header opml_body * OPML_OPML_CLOSE
+
+               OPML_OPML_CLOSE shift-reduce 5      doc_opml ::= OPML_OPML_OPEN opml_header opml_body OPML_OPML_CLOSE
+
+State 17:
       (1) doc_xml ::= OPML_XML doc_opml *
           doc_xml ::= OPML_XML doc_opml * OPML_WSNL
 
-                     OPML_WSNL shift-reduce 2      doc_xml ::= OPML_XML doc_opml OPML_WSNL
+                     OPML_WSNL shift-reduce 3      doc_xml ::= OPML_XML doc_opml OPML_WSNL
                      {default} reduce       1      doc_xml ::= OPML_XML doc_opml
 
-State 17:
+State 18:
       (0) doc ::= doc_xml *
 
                              $ reduce       0      doc ::= doc_xml
@@ -205,8 +218,8 @@ Symbols:
    14: OPML_OUTLINE_METADATA
    15: OPML_OUTLINE_SELF_CLOSE
    16: error:
-   17: doc: OPML_XML
-   18: doc_xml: OPML_XML
+   17: doc: OPML_XML OPML_OPML_OPEN
+   18: doc_xml: OPML_XML OPML_OPML_OPEN
    19: doc_opml: OPML_OPML_OPEN
    20: opml_header: OPML_HEAD_OPEN
    21: opml_body: OPML_BODY_OPEN
index ddd11650b3f0d23c6f9c722482f1220774343079..8c10f0739d08281ed1967723a66f751d212d9419 100644 (file)
 doc                            ::=  doc_xml(B).                                                                                                { engine->root = B; }
 
 doc_xml                        ::= OPML_XML doc_opml.
+doc_xml                        ::= doc_opml.
 doc_xml                        ::= OPML_XML doc_opml OPML_WSNL.
+doc_xml                        ::= doc_opml OPML_WSNL.
 
 doc_opml               ::= OPML_OPML_OPEN opml_header opml_body OPML_OPML_CLOSE.
 doc_opml               ::= OPML_OPML_OPEN opml_body OPML_OPML_CLOSE.