From: Fletcher T. Penney Date: Tue, 7 Feb 2017 19:31:41 +0000 (-0500) Subject: CHANGED: Refactor parser grammar for clarity and consistency X-Git-Tag: 0.1.2a^2~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3fc3a2b1248cec6936a7071e398d01c02757e7de;p=multimarkdown CHANGED: Refactor parser grammar for clarity and consistency --- diff --git a/src/parser.c b/src/parser.c index eef46be..ef5f6d0 100644 --- a/src/parser.c +++ b/src/parser.c @@ -92,7 +92,7 @@ #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned char -#define YYNOCODE 71 +#define YYNOCODE 69 #define YYACTIONTYPE unsigned short int #define ParseTOKENTYPE token * typedef union { @@ -107,16 +107,16 @@ typedef union { #define ParseARG_FETCH mmd_engine * engine = yypParser->engine #define ParseARG_STORE yypParser->engine = engine #define YYFALLBACK 1 -#define YYNSTATE 50 -#define YYNRULE 114 -#define YY_MAX_SHIFT 49 -#define YY_MIN_SHIFTREDUCE 117 -#define YY_MAX_SHIFTREDUCE 230 -#define YY_MIN_REDUCE 231 -#define YY_MAX_REDUCE 344 -#define YY_ERROR_ACTION 345 -#define YY_ACCEPT_ACTION 346 -#define YY_NO_ACTION 347 +#define YYNSTATE 40 +#define YYNRULE 104 +#define YY_MAX_SHIFT 39 +#define YY_MIN_SHIFTREDUCE 106 +#define YY_MAX_SHIFTREDUCE 209 +#define YY_MIN_REDUCE 210 +#define YY_MAX_REDUCE 313 +#define YY_ERROR_ACTION 314 +#define YY_ACCEPT_ACTION 315 +#define YY_NO_ACTION 316 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined @@ -188,83 +188,76 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (220) +#define YY_ACTTAB_COUNT (200) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 346, 1, 119, 31, 13, 48, 43, 41, 131, 132, - /* 10 */ 134, 135, 136, 137, 138, 139, 141, 196, 197, 47, - /* 20 */ 13, 192, 164, 43, 198, 41, 202, 4, 46, 44, - /* 30 */ 18, 18, 47, 9, 12, 12, 9, 195, 201, 38, - /* 40 */ 38, 231, 25, 209, 181, 196, 197, 212, 17, 122, - /* 50 */ 123, 124, 125, 126, 127, 133, 19, 6, 5, 3, - /* 60 */ 2, 20, 16, 15, 140, 198, 14, 44, 25, 209, - /* 70 */ 30, 196, 197, 212, 17, 122, 123, 124, 125, 126, - /* 80 */ 127, 133, 19, 6, 5, 3, 2, 20, 16, 15, - /* 90 */ 140, 198, 14, 44, 118, 31, 13, 48, 43, 41, - /* 100 */ 131, 132, 134, 135, 136, 137, 138, 139, 141, 209, - /* 110 */ 144, 144, 13, 212, 34, 43, 183, 41, 176, 4, - /* 120 */ 46, 218, 18, 18, 34, 219, 7, 7, 34, 32, - /* 130 */ 32, 38, 38, 21, 147, 21, 8, 8, 34, 34, - /* 140 */ 10, 10, 34, 23, 161, 23, 185, 26, 167, 26, - /* 150 */ 11, 11, 143, 222, 153, 143, 34, 28, 22, 28, - /* 160 */ 22, 24, 227, 24, 47, 166, 12, 12, 209, 143, - /* 170 */ 34, 179, 212, 143, 223, 27, 222, 27, 5, 196, - /* 180 */ 197, 192, 148, 143, 226, 35, 35, 222, 6, 29, - /* 190 */ 162, 29, 33, 33, 177, 36, 36, 223, 34, 145, - /* 200 */ 37, 37, 198, 39, 39, 40, 40, 229, 223, 42, - /* 210 */ 42, 45, 45, 167, 49, 145, 188, 233, 233, 158, + /* 0 */ 315, 1, 108, 27, 118, 119, 120, 121, 39, 123, + /* 10 */ 26, 24, 34, 32, 25, 17, 130, 36, 166, 11, + /* 20 */ 11, 24, 175, 176, 172, 208, 29, 37, 22, 204, + /* 30 */ 36, 34, 32, 169, 6, 187, 35, 186, 12, 12, + /* 40 */ 210, 13, 208, 145, 175, 176, 204, 193, 109, 110, + /* 50 */ 111, 112, 113, 114, 115, 180, 5, 4, 3, 2, + /* 60 */ 14, 189, 190, 116, 186, 187, 199, 13, 208, 147, + /* 70 */ 175, 176, 204, 193, 109, 110, 111, 112, 113, 114, + /* 80 */ 115, 180, 5, 4, 3, 2, 14, 189, 190, 116, + /* 90 */ 186, 187, 199, 107, 27, 118, 119, 120, 121, 39, + /* 100 */ 123, 26, 24, 34, 32, 25, 17, 130, 31, 37, + /* 110 */ 175, 176, 24, 28, 28, 172, 23, 29, 37, 22, + /* 120 */ 30, 30, 34, 32, 23, 6, 182, 35, 132, 12, + /* 130 */ 12, 150, 23, 8, 8, 15, 15, 187, 181, 139, + /* 140 */ 139, 8, 8, 15, 15, 33, 33, 138, 138, 23, + /* 150 */ 7, 36, 7, 11, 11, 23, 20, 149, 9, 9, + /* 160 */ 18, 18, 23, 157, 10, 10, 19, 19, 191, 152, + /* 170 */ 23, 201, 131, 16, 16, 208, 161, 137, 148, 204, + /* 180 */ 131, 21, 21, 194, 164, 131, 146, 195, 165, 4, + /* 190 */ 192, 38, 156, 5, 200, 165, 151, 144, 167, 145, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - /* 10 */ 38, 39, 40, 41, 42, 43, 44, 4, 5, 56, - /* 20 */ 48, 3, 59, 51, 24, 53, 3, 55, 56, 26, - /* 30 */ 58, 59, 56, 57, 58, 59, 60, 24, 15, 67, - /* 40 */ 68, 0, 1, 2, 64, 4, 5, 6, 7, 8, - /* 50 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - /* 60 */ 19, 20, 21, 22, 23, 24, 25, 26, 1, 2, - /* 70 */ 48, 4, 5, 6, 7, 8, 9, 10, 11, 12, - /* 80 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - /* 90 */ 23, 24, 25, 26, 30, 31, 32, 33, 34, 35, - /* 100 */ 36, 37, 38, 39, 40, 41, 42, 43, 44, 2, - /* 110 */ 47, 48, 48, 6, 33, 51, 66, 53, 62, 55, - /* 120 */ 56, 3, 58, 59, 33, 7, 45, 46, 33, 63, - /* 130 */ 64, 67, 68, 52, 50, 54, 45, 46, 33, 33, - /* 140 */ 45, 46, 33, 52, 2, 54, 68, 52, 6, 54, - /* 150 */ 45, 46, 46, 3, 53, 46, 33, 52, 52, 54, - /* 160 */ 54, 52, 3, 54, 56, 57, 58, 59, 2, 46, - /* 170 */ 33, 21, 6, 46, 24, 52, 3, 54, 17, 4, - /* 180 */ 5, 3, 51, 46, 25, 65, 66, 3, 16, 52, - /* 190 */ 24, 54, 63, 64, 21, 61, 62, 24, 33, 24, - /* 200 */ 49, 50, 24, 45, 46, 45, 46, 3, 24, 45, - /* 210 */ 46, 67, 68, 6, 69, 24, 3, 70, 70, 54, + /* 10 */ 38, 39, 40, 41, 42, 43, 44, 64, 65, 66, + /* 20 */ 67, 49, 4, 5, 3, 2, 54, 55, 56, 6, + /* 30 */ 64, 59, 60, 67, 62, 25, 64, 24, 66, 67, + /* 40 */ 0, 1, 2, 25, 4, 5, 6, 7, 8, 9, + /* 50 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + /* 60 */ 20, 21, 22, 23, 24, 25, 26, 1, 2, 57, + /* 70 */ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 80 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + /* 90 */ 24, 25, 26, 30, 31, 32, 33, 34, 35, 36, + /* 100 */ 37, 38, 39, 40, 41, 42, 43, 44, 54, 55, + /* 110 */ 4, 5, 49, 45, 46, 3, 36, 54, 55, 56, + /* 120 */ 45, 46, 59, 60, 36, 62, 3, 64, 48, 66, + /* 130 */ 67, 25, 36, 45, 46, 47, 48, 25, 15, 51, + /* 140 */ 52, 45, 46, 47, 48, 45, 46, 51, 52, 36, + /* 150 */ 63, 64, 65, 66, 67, 36, 49, 49, 45, 46, + /* 160 */ 47, 48, 36, 50, 45, 46, 47, 48, 3, 50, + /* 170 */ 36, 3, 46, 47, 48, 2, 61, 53, 58, 6, + /* 180 */ 46, 47, 48, 3, 2, 46, 21, 7, 6, 17, + /* 190 */ 25, 55, 60, 16, 26, 6, 59, 3, 25, 25, }; -#define YY_SHIFT_USE_DFLT (220) -#define YY_SHIFT_COUNT (49) +#define YY_SHIFT_USE_DFLT (200) +#define YY_SHIFT_COUNT (39) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (213) +#define YY_SHIFT_MAX (194) static const unsigned char yy_shift_ofst[] = { - /* 0 */ 67, 41, 178, 178, 107, 178, 178, 178, 178, 107, - /* 10 */ 178, 178, 166, 13, 159, 184, 184, 118, 107, 23, - /* 20 */ 18, 0, 0, 0, 0, 18, 0, 0, 0, 0, - /* 30 */ 18, 3, 150, 173, 175, 159, 118, 23, 3, 18, - /* 40 */ 18, 161, 18, 172, 204, 3, 142, 207, 191, 213, + /* 0 */ 66, 40, 112, 112, 112, 112, 23, 23, 112, 112, + /* 10 */ 112, 173, 23, 21, 21, 10, 10, 13, 10, 10, + /* 20 */ 21, 10, 165, 18, 106, 168, 180, 123, 21, 13, + /* 30 */ 21, 13, 172, 21, 177, 182, 189, 194, 194, 174, }; -#define YY_REDUCE_USE_DFLT (-38) -#define YY_REDUCE_COUNT (45) -#define YY_REDUCE_MIN (-37) -#define YY_REDUCE_MAX (165) +#define YY_REDUCE_USE_DFLT (-48) +#define YY_REDUCE_COUNT (34) +#define YY_REDUCE_MIN (-47) +#define YY_REDUCE_MAX (139) static const short yy_reduce_ofst[] = { - /* 0 */ -28, 64, 81, 91, -24, 95, 105, 106, 109, 108, - /* 10 */ 123, 137, -37, 63, 120, 66, 129, 134, -37, 151, - /* 20 */ 158, 165, 165, 165, 165, 160, 165, 165, 165, 165, - /* 30 */ 164, 144, -20, -20, 22, 50, 56, 84, 78, 127, - /* 40 */ 127, 101, 127, 131, 145, 78, + /* 0 */ -28, 63, 88, 96, 113, 119, 87, -47, 126, 134, + /* 10 */ 134, -34, -34, 68, 75, 80, 80, 54, 80, 80, + /* 20 */ 100, 80, 12, 107, 108, 115, 120, 124, 139, 136, + /* 30 */ 139, 136, 132, 139, 137, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 345, 345, 328, 327, 324, 271, 266, 286, 283, 279, - /* 10 */ 269, 264, 277, 235, 338, 335, 335, 330, 303, 313, - /* 20 */ 329, 287, 285, 284, 282, 304, 270, 268, 265, 263, - /* 30 */ 274, 234, 294, 292, 320, 296, 289, 260, 344, 288, - /* 40 */ 256, 244, 273, 243, 301, 298, 322, 322, 242, 300, + /* 0 */ 314, 314, 288, 287, 264, 259, 307, 267, 281, 262, + /* 10 */ 257, 272, 274, 306, 289, 283, 240, 233, 263, 258, + /* 20 */ 238, 239, 292, 278, 229, 232, 228, 221, 266, 313, + /* 30 */ 244, 245, 231, 237, 230, 311, 311, 247, 246, 226, }; /********** End of lemon-generated parsing tables *****************************/ @@ -398,18 +391,17 @@ static const char *const yyTokenName[] = { "LINE_ATX_5", "LINE_ATX_6", "LINE_HR", "LINE_BLOCKQUOTE", "LINE_LIST_BULLETED", "LINE_LIST_ENUMERATED", "LINE_DEF_CITATION", "LINE_DEF_FOOTNOTE", "LINE_DEF_LINK", "LINE_FENCE_BACKTICK", "LINE_FENCE_BACKTICK_START", "LINE_TOC", - "LINE_EMPTY", "LINE_META", "LINE_DEFINITION", "error", - "doc", "blocks", "block", "para", - "indented_code", "empty", "list_bulleted", "list_enumerated", - "blockquote", "table", "def_citation", "def_footnote", - "def_link", "html_block", "fenced_block", "meta_block", - "definition_block", "para_lines", "para_line", "code_line", - "indented_line", "quote_lines", "quote_line", "item_bulleted", - "cont_blocks", "item_enumerated", "cont_block", "table_header", + "LINE_DEFINITION", "LINE_EMPTY", "LINE_META", "error", + "doc", "blocks", "block", "blockquote", + "def_citation", "def_footnote", "def_link", "definition_block", + "empty", "fenced_block", "html_block", "indented_code", + "list_bullet", "list_enum", "meta_block", "para", + "table", "chunk", "chunk_line", "nested_chunks", + "nested_chunk", "indented_line", "ext_chunk", "opt_ext_chunk", + "tail", "quote_line", "defs", "def", + "fenced", "fenced_line", "html_line", "item_bullet", + "item_enum", "meta_line", "table_header", "table_body", "header_rows", "table_section", "all_rows", "row", - "table_body", "html_block_lines", "html_block_line", "fenced_lines", - "fenced_line", "meta_lines", "meta_line", "defs", - "def", "def_lines", }; #endif /* NDEBUG */ @@ -420,117 +412,107 @@ static const char *const yyRuleName[] = { /* 0 */ "doc ::= blocks", /* 1 */ "blocks ::= blocks block", /* 2 */ "blocks ::= block", - /* 3 */ "block ::= para", - /* 4 */ "block ::= indented_code", - /* 5 */ "block ::= LINE_ATX_1", - /* 6 */ "block ::= LINE_ATX_2", - /* 7 */ "block ::= LINE_ATX_3", - /* 8 */ "block ::= LINE_ATX_4", - /* 9 */ "block ::= LINE_ATX_5", - /* 10 */ "block ::= LINE_ATX_6", - /* 11 */ "block ::= empty", - /* 12 */ "block ::= list_bulleted", - /* 13 */ "block ::= list_enumerated", - /* 14 */ "block ::= blockquote", - /* 15 */ "block ::= table", - /* 16 */ "block ::= LINE_HR", - /* 17 */ "block ::= def_citation", - /* 18 */ "block ::= def_footnote", - /* 19 */ "block ::= def_link", - /* 20 */ "block ::= html_block", - /* 21 */ "block ::= fenced_block", + /* 3 */ "block ::= LINE_ATX_1", + /* 4 */ "block ::= LINE_ATX_2", + /* 5 */ "block ::= LINE_ATX_3", + /* 6 */ "block ::= LINE_ATX_4", + /* 7 */ "block ::= LINE_ATX_5", + /* 8 */ "block ::= LINE_ATX_6", + /* 9 */ "block ::= LINE_HR", + /* 10 */ "block ::= LINE_TOC", + /* 11 */ "block ::= blockquote", + /* 12 */ "block ::= def_citation", + /* 13 */ "block ::= def_footnote", + /* 14 */ "block ::= def_link", + /* 15 */ "block ::= definition_block", + /* 16 */ "block ::= empty", + /* 17 */ "block ::= fenced_block", + /* 18 */ "block ::= html_block", + /* 19 */ "block ::= indented_code", + /* 20 */ "block ::= list_bullet", + /* 21 */ "block ::= list_enum", /* 22 */ "block ::= meta_block", - /* 23 */ "block ::= LINE_TOC", - /* 24 */ "block ::= definition_block", - /* 25 */ "para ::= LINE_PLAIN para_lines", - /* 26 */ "para_lines ::= para_lines para_line", - /* 27 */ "indented_code ::= indented_code code_line", - /* 28 */ "empty ::= empty LINE_EMPTY", - /* 29 */ "blockquote ::= LINE_BLOCKQUOTE quote_lines", - /* 30 */ "quote_lines ::= quote_lines quote_line", - /* 31 */ "list_bulleted ::= list_bulleted item_bulleted", - /* 32 */ "item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks", - /* 33 */ "item_bulleted ::= LINE_LIST_BULLETED para_lines", - /* 34 */ "item_bulleted ::= LINE_LIST_BULLETED cont_blocks", - /* 35 */ "item_bulleted ::= LINE_LIST_BULLETED", - /* 36 */ "list_enumerated ::= list_enumerated item_enumerated", - /* 37 */ "item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks", - /* 38 */ "item_enumerated ::= LINE_LIST_ENUMERATED para_lines", - /* 39 */ "item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks", - /* 40 */ "item_enumerated ::= LINE_LIST_ENUMERATED", - /* 41 */ "cont_blocks ::= cont_blocks cont_block", - /* 42 */ "cont_block ::= empty indented_line para_lines", - /* 43 */ "cont_block ::= empty indented_line", - /* 44 */ "table_header ::= header_rows LINE_TABLE_SEPARATOR", - /* 45 */ "table_section ::= all_rows LINE_EMPTY", - /* 46 */ "table_section ::= all_rows", - /* 47 */ "all_rows ::= all_rows row", - /* 48 */ "table ::= table_header table_body", - /* 49 */ "table_body ::= table_body table_section", - /* 50 */ "header_rows ::= header_rows LINE_TABLE", - /* 51 */ "def_citation ::= LINE_DEF_CITATION para_lines cont_blocks", - /* 52 */ "def_citation ::= LINE_DEF_CITATION para_lines", - /* 53 */ "def_citation ::= LINE_DEF_CITATION cont_blocks", - /* 54 */ "def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks", - /* 55 */ "def_footnote ::= LINE_DEF_FOOTNOTE para_lines", - /* 56 */ "def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks", - /* 57 */ "def_link ::= LINE_DEF_LINK para_lines", - /* 58 */ "html_block ::= LINE_HTML html_block_lines", - /* 59 */ "html_block_lines ::= html_block_lines html_block_line", - /* 60 */ "fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK", - /* 61 */ "fenced_block ::= LINE_FENCE_BACKTICK fenced_lines", - /* 62 */ "fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK", - /* 63 */ "fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines", - /* 64 */ "fenced_lines ::= fenced_lines fenced_line", - /* 65 */ "meta_block ::= LINE_META meta_lines", - /* 66 */ "meta_lines ::= meta_lines meta_line", - /* 67 */ "definition_block ::= para defs", - /* 68 */ "defs ::= defs def", - /* 69 */ "def ::= LINE_DEFINITION def_lines", - /* 70 */ "def ::= LINE_DEFINITION", - /* 71 */ "def_lines ::= def_lines LINE_CONTINUATION", - /* 72 */ "para ::= all_rows", - /* 73 */ "para ::= LINE_PLAIN", - /* 74 */ "para_lines ::= para_line", - /* 75 */ "para_line ::= LINE_CONTINUATION", - /* 76 */ "indented_code ::= indented_line", - /* 77 */ "code_line ::= indented_line", - /* 78 */ "code_line ::= LINE_EMPTY", - /* 79 */ "indented_line ::= LINE_INDENTED_TAB", - /* 80 */ "indented_line ::= LINE_INDENTED_SPACE", + /* 23 */ "block ::= para", + /* 24 */ "block ::= table", + /* 25 */ "chunk ::= chunk chunk_line", + /* 26 */ "nested_chunks ::= nested_chunks nested_chunk", + /* 27 */ "nested_chunk ::= empty indented_line chunk", + /* 28 */ "nested_chunk ::= empty indented_line", + /* 29 */ "ext_chunk ::= chunk nested_chunks", + /* 30 */ "opt_ext_chunk ::= chunk nested_chunks", + /* 31 */ "blockquote ::= blockquote quote_line", + /* 32 */ "def_citation ::= LINE_DEF_CITATION tail", + /* 33 */ "def_footnote ::= LINE_DEF_FOOTNOTE tail", + /* 34 */ "def_link ::= LINE_DEF_LINK chunk", + /* 35 */ "definition_block ::= para defs", + /* 36 */ "defs ::= defs def", + /* 37 */ "defs ::= def", + /* 38 */ "def ::= def LINE_CONTINUATION", + /* 39 */ "empty ::= empty LINE_EMPTY", + /* 40 */ "fenced_block ::= fenced LINE_FENCE_BACKTICK", + /* 41 */ "fenced ::= fenced fenced_line", + /* 42 */ "html_block ::= html_block html_line", + /* 43 */ "indented_code ::= indented_code indented_line", + /* 44 */ "indented_code ::= indented_code LINE_EMPTY", + /* 45 */ "list_bullet ::= list_bullet item_bullet", + /* 46 */ "item_bullet ::= LINE_LIST_BULLETED ext_chunk", + /* 47 */ "item_bullet ::= LINE_LIST_BULLETED chunk", + /* 48 */ "item_bullet ::= LINE_LIST_BULLETED nested_chunks", + /* 49 */ "item_bullet ::= LINE_LIST_BULLETED", + /* 50 */ "list_enum ::= list_enum item_enum", + /* 51 */ "item_enum ::= LINE_LIST_ENUMERATED ext_chunk", + /* 52 */ "item_enum ::= LINE_LIST_ENUMERATED chunk", + /* 53 */ "item_enum ::= LINE_LIST_ENUMERATED nested_chunks", + /* 54 */ "item_enum ::= LINE_LIST_ENUMERATED", + /* 55 */ "meta_block ::= meta_block meta_line", + /* 56 */ "para ::= LINE_PLAIN chunk", + /* 57 */ "table ::= table_header table_body", + /* 58 */ "table_header ::= header_rows LINE_TABLE_SEPARATOR", + /* 59 */ "header_rows ::= header_rows LINE_TABLE", + /* 60 */ "table_body ::= table_body table_section", + /* 61 */ "table_section ::= all_rows LINE_EMPTY", + /* 62 */ "table_section ::= all_rows", + /* 63 */ "all_rows ::= all_rows row", + /* 64 */ "para ::= all_rows", + /* 65 */ "chunk ::= chunk_line", + /* 66 */ "chunk_line ::= LINE_CONTINUATION", + /* 67 */ "nested_chunks ::= nested_chunk", + /* 68 */ "nested_chunk ::= empty", + /* 69 */ "indented_line ::= LINE_INDENTED_TAB", + /* 70 */ "indented_line ::= LINE_INDENTED_SPACE", + /* 71 */ "opt_ext_chunk ::= chunk", + /* 72 */ "tail ::= opt_ext_chunk", + /* 73 */ "tail ::= nested_chunks", + /* 74 */ "blockquote ::= LINE_BLOCKQUOTE", + /* 75 */ "quote_line ::= LINE_BLOCKQUOTE", + /* 76 */ "quote_line ::= LINE_CONTINUATION", + /* 77 */ "def_citation ::= LINE_DEF_CITATION", + /* 78 */ "def_footnote ::= LINE_DEF_FOOTNOTE", + /* 79 */ "def_link ::= LINE_DEF_LINK", + /* 80 */ "def ::= LINE_DEFINITION", /* 81 */ "empty ::= LINE_EMPTY", - /* 82 */ "blockquote ::= LINE_BLOCKQUOTE", - /* 83 */ "quote_lines ::= quote_line", - /* 84 */ "quote_line ::= LINE_BLOCKQUOTE", - /* 85 */ "quote_line ::= LINE_CONTINUATION", - /* 86 */ "list_bulleted ::= item_bulleted", - /* 87 */ "list_enumerated ::= item_enumerated", - /* 88 */ "cont_blocks ::= cont_block", - /* 89 */ "cont_block ::= empty", - /* 90 */ "all_rows ::= row", - /* 91 */ "row ::= header_rows", - /* 92 */ "row ::= LINE_TABLE_SEPARATOR", - /* 93 */ "table ::= table_header", - /* 94 */ "table_body ::= table_section", - /* 95 */ "header_rows ::= LINE_TABLE", - /* 96 */ "def_citation ::= LINE_DEF_CITATION", - /* 97 */ "def_footnote ::= LINE_DEF_FOOTNOTE", - /* 98 */ "def_link ::= LINE_DEF_LINK", - /* 99 */ "html_block ::= LINE_HTML", - /* 100 */ "html_block_lines ::= html_block_line", - /* 101 */ "html_block_line ::= LINE_CONTINUATION", - /* 102 */ "html_block_line ::= LINE_HTML", - /* 103 */ "fenced_lines ::= fenced_line", - /* 104 */ "fenced_lines ::=", - /* 105 */ "fenced_line ::= LINE_CONTINUATION", - /* 106 */ "fenced_line ::= LINE_EMPTY", - /* 107 */ "meta_block ::= LINE_META", - /* 108 */ "meta_lines ::= meta_line", - /* 109 */ "meta_line ::= LINE_META", - /* 110 */ "meta_line ::= LINE_CONTINUATION", - /* 111 */ "defs ::= def", - /* 112 */ "def_lines ::= LINE_CONTINUATION", - /* 113 */ "para ::= defs", + /* 82 */ "fenced_block ::= fenced", + /* 83 */ "fenced ::= LINE_FENCE_BACKTICK", + /* 84 */ "fenced ::= LINE_FENCE_BACKTICK_START", + /* 85 */ "fenced_line ::= LINE_CONTINUATION", + /* 86 */ "fenced_line ::= LINE_EMPTY", + /* 87 */ "html_block ::= LINE_HTML", + /* 88 */ "html_line ::= LINE_CONTINUATION", + /* 89 */ "html_line ::= LINE_HTML", + /* 90 */ "indented_code ::= indented_line", + /* 91 */ "list_bullet ::= item_bullet", + /* 92 */ "list_enum ::= item_enum", + /* 93 */ "meta_block ::= LINE_META", + /* 94 */ "meta_line ::= LINE_META", + /* 95 */ "meta_line ::= LINE_CONTINUATION", + /* 96 */ "para ::= LINE_PLAIN", + /* 97 */ "table ::= table_header", + /* 98 */ "header_rows ::= LINE_TABLE", + /* 99 */ "table_body ::= table_section", + /* 100 */ "all_rows ::= row", + /* 101 */ "row ::= header_rows", + /* 102 */ "row ::= LINE_TABLE_SEPARATOR", + /* 103 */ "para ::= defs", }; #endif /* NDEBUG */ @@ -904,95 +886,85 @@ static const struct { { 30, 1 }, { 30, 1 }, { 30, 1 }, - { 31, 2 }, { 45, 2 }, + { 47, 2 }, + { 48, 3 }, + { 48, 2 }, + { 50, 2 }, + { 51, 2 }, + { 31, 2 }, { 32, 2 }, { 33, 2 }, - { 36, 2 }, - { 49, 2 }, { 34, 2 }, - { 51, 3 }, - { 51, 2 }, - { 51, 2 }, - { 51, 1 }, { 35, 2 }, - { 53, 3 }, - { 53, 2 }, - { 53, 2 }, - { 53, 1 }, - { 52, 2 }, - { 54, 3 }, { 54, 2 }, + { 54, 1 }, { 55, 2 }, - { 57, 2 }, - { 57, 1 }, - { 58, 2 }, + { 36, 2 }, { 37, 2 }, - { 60, 2 }, { 56, 2 }, - { 38, 3 }, { 38, 2 }, - { 38, 2 }, - { 39, 3 }, { 39, 2 }, { 39, 2 }, { 40, 2 }, + { 59, 2 }, + { 59, 2 }, + { 59, 2 }, + { 59, 1 }, { 41, 2 }, - { 61, 2 }, - { 42, 3 }, - { 42, 2 }, - { 42, 3 }, + { 60, 2 }, + { 60, 2 }, + { 60, 2 }, + { 60, 1 }, { 42, 2 }, - { 63, 2 }, { 43, 2 }, - { 65, 2 }, { 44, 2 }, - { 67, 2 }, - { 68, 2 }, - { 68, 1 }, - { 69, 2 }, - { 31, 1 }, - { 31, 1 }, + { 62, 2 }, + { 64, 2 }, + { 63, 2 }, + { 65, 2 }, + { 65, 1 }, + { 66, 2 }, + { 43, 1 }, { 45, 1 }, { 46, 1 }, - { 32, 1 }, { 47, 1 }, - { 47, 1 }, - { 48, 1 }, { 48, 1 }, - { 33, 1 }, - { 36, 1 }, { 49, 1 }, - { 50, 1 }, - { 50, 1 }, - { 34, 1 }, - { 35, 1 }, + { 49, 1 }, + { 51, 1 }, { 52, 1 }, - { 54, 1 }, - { 58, 1 }, - { 59, 1 }, - { 59, 1 }, + { 52, 1 }, + { 31, 1 }, + { 53, 1 }, + { 53, 1 }, + { 32, 1 }, + { 33, 1 }, + { 34, 1 }, + { 55, 1 }, + { 36, 1 }, { 37, 1 }, - { 60, 1 }, { 56, 1 }, + { 56, 1 }, + { 57, 1 }, + { 57, 1 }, { 38, 1 }, + { 58, 1 }, + { 58, 1 }, { 39, 1 }, { 40, 1 }, { 41, 1 }, + { 42, 1 }, + { 61, 1 }, { 61, 1 }, - { 62, 1 }, - { 62, 1 }, - { 63, 1 }, - { 63, 0 }, - { 64, 1 }, - { 64, 1 }, { 43, 1 }, - { 65, 1 }, - { 66, 1 }, + { 44, 1 }, + { 64, 1 }, + { 63, 1 }, { 66, 1 }, { 67, 1 }, - { 69, 1 }, - { 31, 1 }, + { 67, 1 }, + { 43, 1 }, }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -1081,235 +1053,216 @@ static void yy_reduce( } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 3: /* block ::= para */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_PARA); is_para_html(engine, yylhsminor.yy0); } - yymsp[0].minor.yy0 = yylhsminor.yy0; - break; - case 4: /* block ::= indented_code */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_INDENTED); } - yymsp[0].minor.yy0 = yylhsminor.yy0; - break; - case 5: /* block ::= LINE_ATX_1 */ + case 3: /* block ::= LINE_ATX_1 */ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H1); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 6: /* block ::= LINE_ATX_2 */ + case 4: /* block ::= LINE_ATX_2 */ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H2); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 7: /* block ::= LINE_ATX_3 */ + case 5: /* block ::= LINE_ATX_3 */ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H3); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 8: /* block ::= LINE_ATX_4 */ + case 6: /* block ::= LINE_ATX_4 */ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H4); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 9: /* block ::= LINE_ATX_5 */ + case 7: /* block ::= LINE_ATX_5 */ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H5); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 10: /* block ::= LINE_ATX_6 */ + case 8: /* block ::= LINE_ATX_6 */ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H6); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 11: /* block ::= empty */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_EMPTY); } + case 9: /* block ::= LINE_HR */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_HR); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 12: /* block ::= list_bulleted */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_BULLETED); is_list_loose(yylhsminor.yy0); } + case 10: /* block ::= LINE_TOC */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TOC); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 13: /* block ::= list_enumerated */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ENUMERATED); is_list_loose(yylhsminor.yy0); } + case 11: /* block ::= blockquote */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_BLOCKQUOTE); recursive_parse_blockquote(engine, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 14: /* block ::= blockquote */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_BLOCKQUOTE); recursive_parse_blockquote(engine, yylhsminor.yy0); } + case 12: /* block ::= def_citation */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_CITATION); stack_push(engine->definition_stack, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 15: /* block ::= table */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE); } + case 13: /* block ::= def_footnote */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_FOOTNOTE); stack_push(engine->definition_stack, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 16: /* block ::= LINE_HR */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_HR); } + case 14: /* block ::= def_link */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_LINK); stack_push(engine->definition_stack, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 17: /* block ::= def_citation */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_CITATION); stack_push(engine->definition_stack, yylhsminor.yy0); } + case 15: /* block ::= definition_block */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFLIST); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 18: /* block ::= def_footnote */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_FOOTNOTE); stack_push(engine->definition_stack, yylhsminor.yy0); } + case 16: /* block ::= empty */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_EMPTY); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 19: /* block ::= def_link */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_LINK); stack_push(engine->definition_stack, yylhsminor.yy0); } + case 17: /* block ::= fenced_block */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_FENCED); yymsp[0].minor.yy0->child->type = CODE_FENCE; } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 20: /* block ::= html_block */ + case 18: /* block ::= html_block */ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_HTML); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 21: /* block ::= fenced_block */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_FENCED); yymsp[0].minor.yy0->child->type = CODE_FENCE; } + case 19: /* block ::= indented_code */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_INDENTED); } + yymsp[0].minor.yy0 = yylhsminor.yy0; + break; + case 20: /* block ::= list_bullet */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_BULLETED); is_list_loose(yylhsminor.yy0); } + yymsp[0].minor.yy0 = yylhsminor.yy0; + break; + case 21: /* block ::= list_enum */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ENUMERATED); is_list_loose(yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; case 22: /* block ::= meta_block */ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_META); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 23: /* block ::= LINE_TOC */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TOC); } + case 23: /* block ::= para */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_PARA); is_para_html(engine, yylhsminor.yy0); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 24: /* block ::= definition_block */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFLIST); } + case 24: /* block ::= table */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 25: /* para ::= LINE_PLAIN para_lines */ - case 26: /* para_lines ::= para_lines para_line */ yytestcase(yyruleno==26); - case 27: /* indented_code ::= indented_code code_line */ yytestcase(yyruleno==27); - case 28: /* empty ::= empty LINE_EMPTY */ yytestcase(yyruleno==28); - case 29: /* blockquote ::= LINE_BLOCKQUOTE quote_lines */ yytestcase(yyruleno==29); - case 30: /* quote_lines ::= quote_lines quote_line */ yytestcase(yyruleno==30); - case 31: /* list_bulleted ::= list_bulleted item_bulleted */ yytestcase(yyruleno==31); - case 36: /* list_enumerated ::= list_enumerated item_enumerated */ yytestcase(yyruleno==36); - case 41: /* cont_blocks ::= cont_blocks cont_block */ yytestcase(yyruleno==41); - case 47: /* all_rows ::= all_rows row */ yytestcase(yyruleno==47); - case 48: /* table ::= table_header table_body */ yytestcase(yyruleno==48); - case 49: /* table_body ::= table_body table_section */ yytestcase(yyruleno==49); - case 50: /* header_rows ::= header_rows LINE_TABLE */ yytestcase(yyruleno==50); - case 52: /* def_citation ::= LINE_DEF_CITATION para_lines */ yytestcase(yyruleno==52); - case 53: /* def_citation ::= LINE_DEF_CITATION cont_blocks */ yytestcase(yyruleno==53); - case 55: /* def_footnote ::= LINE_DEF_FOOTNOTE para_lines */ yytestcase(yyruleno==55); - case 56: /* def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks */ yytestcase(yyruleno==56); - case 57: /* def_link ::= LINE_DEF_LINK para_lines */ yytestcase(yyruleno==57); - case 58: /* html_block ::= LINE_HTML html_block_lines */ yytestcase(yyruleno==58); - case 59: /* html_block_lines ::= html_block_lines html_block_line */ yytestcase(yyruleno==59); - case 61: /* fenced_block ::= LINE_FENCE_BACKTICK fenced_lines */ yytestcase(yyruleno==61); - case 63: /* fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines */ yytestcase(yyruleno==63); - case 64: /* fenced_lines ::= fenced_lines fenced_line */ yytestcase(yyruleno==64); - case 65: /* meta_block ::= LINE_META meta_lines */ yytestcase(yyruleno==65); - case 66: /* meta_lines ::= meta_lines meta_line */ yytestcase(yyruleno==66); - case 68: /* defs ::= defs def */ yytestcase(yyruleno==68); - case 71: /* def_lines ::= def_lines LINE_CONTINUATION */ yytestcase(yyruleno==71); + case 25: /* chunk ::= chunk chunk_line */ + case 26: /* nested_chunks ::= nested_chunks nested_chunk */ yytestcase(yyruleno==26); + case 29: /* ext_chunk ::= chunk nested_chunks */ yytestcase(yyruleno==29); + case 30: /* opt_ext_chunk ::= chunk nested_chunks */ yytestcase(yyruleno==30); + case 31: /* blockquote ::= blockquote quote_line */ yytestcase(yyruleno==31); + case 32: /* def_citation ::= LINE_DEF_CITATION tail */ yytestcase(yyruleno==32); + case 33: /* def_footnote ::= LINE_DEF_FOOTNOTE tail */ yytestcase(yyruleno==33); + case 34: /* def_link ::= LINE_DEF_LINK chunk */ yytestcase(yyruleno==34); + case 38: /* def ::= def LINE_CONTINUATION */ yytestcase(yyruleno==38); + case 39: /* empty ::= empty LINE_EMPTY */ yytestcase(yyruleno==39); + case 41: /* fenced ::= fenced fenced_line */ yytestcase(yyruleno==41); + case 42: /* html_block ::= html_block html_line */ yytestcase(yyruleno==42); + case 43: /* indented_code ::= indented_code indented_line */ yytestcase(yyruleno==43); + case 44: /* indented_code ::= indented_code LINE_EMPTY */ yytestcase(yyruleno==44); + case 45: /* list_bullet ::= list_bullet item_bullet */ yytestcase(yyruleno==45); + case 50: /* list_enum ::= list_enum item_enum */ yytestcase(yyruleno==50); + case 55: /* meta_block ::= meta_block meta_line */ yytestcase(yyruleno==55); + case 56: /* para ::= LINE_PLAIN chunk */ yytestcase(yyruleno==56); + case 57: /* table ::= table_header table_body */ yytestcase(yyruleno==57); + case 59: /* header_rows ::= header_rows LINE_TABLE */ yytestcase(yyruleno==59); + case 60: /* table_body ::= table_body table_section */ yytestcase(yyruleno==60); + case 63: /* all_rows ::= all_rows row */ yytestcase(yyruleno==63); { yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 32: /* item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks */ - case 37: /* item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks */ yytestcase(yyruleno==37); -{ token_chain_append(yymsp[-2].minor.yy0, yymsp[-1].minor.yy0); token_chain_append(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); yylhsminor.yy0 = token_new_parent(yymsp[-2].minor.yy0, BLOCK_LIST_ITEM); recursive_parse_list_item(engine, yylhsminor.yy0); } + case 27: /* nested_chunk ::= empty indented_line chunk */ +{ yylhsminor.yy0 = yymsp[-2].minor.yy0; token_chain_append(yymsp[-2].minor.yy0, yymsp[-1].minor.yy0); token_chain_append(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); yymsp[-1].minor.yy0->type = LINE_CONTINUATION; } yymsp[-2].minor.yy0 = yylhsminor.yy0; break; - case 33: /* item_bulleted ::= LINE_LIST_BULLETED para_lines */ - case 38: /* item_enumerated ::= LINE_LIST_ENUMERATED para_lines */ yytestcase(yyruleno==38); -{ token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM_TIGHT); recursive_parse_list_item(engine, yylhsminor.yy0); } + case 28: /* nested_chunk ::= empty indented_line */ +{ yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[0].minor.yy0->type = LINE_CONTINUATION; } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 34: /* item_bulleted ::= LINE_LIST_BULLETED cont_blocks */ -{ token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM); if (yymsp[0].minor.yy0) {recursive_parse_list_item(engine, yylhsminor.yy0);} } + case 35: /* definition_block ::= para defs */ +{ yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[-1].minor.yy0->type = BLOCK_TERM; } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 35: /* item_bulleted ::= LINE_LIST_BULLETED */ - case 40: /* item_enumerated ::= LINE_LIST_ENUMERATED */ yytestcase(yyruleno==40); -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ITEM_TIGHT); } - yymsp[0].minor.yy0 = yylhsminor.yy0; - break; - case 39: /* item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks */ -{ token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM); recursive_parse_list_item(engine, yylhsminor.yy0); } + case 36: /* defs ::= defs def */ +{ yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFINITION)); } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 42: /* cont_block ::= empty indented_line para_lines */ -{ yylhsminor.yy0 = yymsp[-2].minor.yy0; token_chain_append(yymsp[-2].minor.yy0, yymsp[-1].minor.yy0); token_chain_append(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); yymsp[-1].minor.yy0->type = LINE_CONTINUATION; } - yymsp[-2].minor.yy0 = yylhsminor.yy0; + case 37: /* defs ::= def */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFINITION); } + yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 43: /* cont_block ::= empty indented_line */ -{ yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[0].minor.yy0->type = LINE_CONTINUATION; } + case 40: /* fenced_block ::= fenced LINE_FENCE_BACKTICK */ +{ yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[0].minor.yy0->child->type = CODE_FENCE; } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 44: /* table_header ::= header_rows LINE_TABLE_SEPARATOR */ -{ yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_TABLE_HEADER); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); } + case 46: /* item_bullet ::= LINE_LIST_BULLETED ext_chunk */ + case 48: /* item_bullet ::= LINE_LIST_BULLETED nested_chunks */ yytestcase(yyruleno==48); + case 51: /* item_enum ::= LINE_LIST_ENUMERATED ext_chunk */ yytestcase(yyruleno==51); + case 53: /* item_enum ::= LINE_LIST_ENUMERATED nested_chunks */ yytestcase(yyruleno==53); +{ yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); recursive_parse_list_item(engine, yylhsminor.yy0); } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 45: /* table_section ::= all_rows LINE_EMPTY */ -{ yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_TABLE_SECTION); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); } + case 47: /* item_bullet ::= LINE_LIST_BULLETED chunk */ + case 52: /* item_enum ::= LINE_LIST_ENUMERATED chunk */ yytestcase(yyruleno==52); +{ yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM_TIGHT); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); recursive_parse_list_item(engine, yylhsminor.yy0); } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 46: /* table_section ::= all_rows */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE_SECTION); } + case 49: /* item_bullet ::= LINE_LIST_BULLETED */ + case 54: /* item_enum ::= LINE_LIST_ENUMERATED */ yytestcase(yyruleno==54); +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ITEM_TIGHT); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 51: /* def_citation ::= LINE_DEF_CITATION para_lines cont_blocks */ - case 54: /* def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks */ yytestcase(yyruleno==54); -{ yylhsminor.yy0 = yymsp[-2].minor.yy0; token_chain_append(yymsp[-2].minor.yy0, yymsp[-1].minor.yy0); token_chain_append(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); } - yymsp[-2].minor.yy0 = yylhsminor.yy0; - break; - case 60: /* fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK */ - case 62: /* fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK */ yytestcase(yyruleno==62); -{ yylhsminor.yy0 = yymsp[-2].minor.yy0; token_chain_append(yymsp[-2].minor.yy0, yymsp[-1].minor.yy0); token_chain_append(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); yymsp[0].minor.yy0->child->type = CODE_FENCE; } - yymsp[-2].minor.yy0 = yylhsminor.yy0; - break; - case 67: /* definition_block ::= para defs */ -{ yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[-1].minor.yy0->type = BLOCK_TERM; } + case 58: /* table_header ::= header_rows LINE_TABLE_SEPARATOR */ +{ yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_TABLE_HEADER); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 69: /* def ::= LINE_DEFINITION def_lines */ -{ yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_DEFINITION); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); } + case 61: /* table_section ::= all_rows LINE_EMPTY */ +{ yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_TABLE_SECTION); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); } yymsp[-1].minor.yy0 = yylhsminor.yy0; break; - case 70: /* def ::= LINE_DEFINITION */ -{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFINITION); } + case 62: /* table_section ::= all_rows */ +{ yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE_SECTION); } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 72: /* para ::= all_rows */ + case 64: /* para ::= all_rows */ { yylhsminor.yy0 = yymsp[0].minor.yy0; } yymsp[0].minor.yy0 = yylhsminor.yy0; break; default: - /* (73) para ::= LINE_PLAIN */ yytestcase(yyruleno==73); - /* (74) para_lines ::= para_line (OPTIMIZED OUT) */ assert(yyruleno!=74); - /* (75) para_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==75); - /* (76) indented_code ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=76); - /* (77) code_line ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=77); - /* (78) code_line ::= LINE_EMPTY */ yytestcase(yyruleno==78); - /* (79) indented_line ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==79); - /* (80) indented_line ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==80); + /* (65) chunk ::= chunk_line (OPTIMIZED OUT) */ assert(yyruleno!=65); + /* (66) chunk_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==66); + /* (67) nested_chunks ::= nested_chunk (OPTIMIZED OUT) */ assert(yyruleno!=67); + /* (68) nested_chunk ::= empty */ yytestcase(yyruleno==68); + /* (69) indented_line ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==69); + /* (70) indented_line ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==70); + /* (71) opt_ext_chunk ::= chunk */ yytestcase(yyruleno==71); + /* (72) tail ::= opt_ext_chunk (OPTIMIZED OUT) */ assert(yyruleno!=72); + /* (73) tail ::= nested_chunks */ yytestcase(yyruleno==73); + /* (74) blockquote ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==74); + /* (75) quote_line ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==75); + /* (76) quote_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==76); + /* (77) def_citation ::= LINE_DEF_CITATION */ yytestcase(yyruleno==77); + /* (78) def_footnote ::= LINE_DEF_FOOTNOTE */ yytestcase(yyruleno==78); + /* (79) def_link ::= LINE_DEF_LINK */ yytestcase(yyruleno==79); + /* (80) def ::= LINE_DEFINITION */ yytestcase(yyruleno==80); /* (81) empty ::= LINE_EMPTY */ yytestcase(yyruleno==81); - /* (82) blockquote ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==82); - /* (83) quote_lines ::= quote_line (OPTIMIZED OUT) */ assert(yyruleno!=83); - /* (84) quote_line ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==84); - /* (85) quote_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==85); - /* (86) list_bulleted ::= item_bulleted (OPTIMIZED OUT) */ assert(yyruleno!=86); - /* (87) list_enumerated ::= item_enumerated (OPTIMIZED OUT) */ assert(yyruleno!=87); - /* (88) cont_blocks ::= cont_block (OPTIMIZED OUT) */ assert(yyruleno!=88); - /* (89) cont_block ::= empty */ yytestcase(yyruleno==89); - /* (90) all_rows ::= row (OPTIMIZED OUT) */ assert(yyruleno!=90); - /* (91) row ::= header_rows */ yytestcase(yyruleno==91); - /* (92) row ::= LINE_TABLE_SEPARATOR */ yytestcase(yyruleno==92); - /* (93) table ::= table_header */ yytestcase(yyruleno==93); - /* (94) table_body ::= table_section (OPTIMIZED OUT) */ assert(yyruleno!=94); - /* (95) header_rows ::= LINE_TABLE */ yytestcase(yyruleno==95); - /* (96) def_citation ::= LINE_DEF_CITATION */ yytestcase(yyruleno==96); - /* (97) def_footnote ::= LINE_DEF_FOOTNOTE */ yytestcase(yyruleno==97); - /* (98) def_link ::= LINE_DEF_LINK */ yytestcase(yyruleno==98); - /* (99) html_block ::= LINE_HTML */ yytestcase(yyruleno==99); - /* (100) html_block_lines ::= html_block_line (OPTIMIZED OUT) */ assert(yyruleno!=100); - /* (101) html_block_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==101); - /* (102) html_block_line ::= LINE_HTML */ yytestcase(yyruleno==102); - /* (103) fenced_lines ::= fenced_line (OPTIMIZED OUT) */ assert(yyruleno!=103); - /* (104) fenced_lines ::= */ yytestcase(yyruleno==104); - /* (105) fenced_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==105); - /* (106) fenced_line ::= LINE_EMPTY */ yytestcase(yyruleno==106); - /* (107) meta_block ::= LINE_META */ yytestcase(yyruleno==107); - /* (108) meta_lines ::= meta_line (OPTIMIZED OUT) */ assert(yyruleno!=108); - /* (109) meta_line ::= LINE_META */ yytestcase(yyruleno==109); - /* (110) meta_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==110); - /* (111) defs ::= def (OPTIMIZED OUT) */ assert(yyruleno!=111); - /* (112) def_lines ::= LINE_CONTINUATION */ yytestcase(yyruleno==112); - /* (113) para ::= defs */ yytestcase(yyruleno==113); + /* (82) fenced_block ::= fenced */ yytestcase(yyruleno==82); + /* (83) fenced ::= LINE_FENCE_BACKTICK */ yytestcase(yyruleno==83); + /* (84) fenced ::= LINE_FENCE_BACKTICK_START */ yytestcase(yyruleno==84); + /* (85) fenced_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==85); + /* (86) fenced_line ::= LINE_EMPTY */ yytestcase(yyruleno==86); + /* (87) html_block ::= LINE_HTML */ yytestcase(yyruleno==87); + /* (88) html_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==88); + /* (89) html_line ::= LINE_HTML */ yytestcase(yyruleno==89); + /* (90) indented_code ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=90); + /* (91) list_bullet ::= item_bullet (OPTIMIZED OUT) */ assert(yyruleno!=91); + /* (92) list_enum ::= item_enum (OPTIMIZED OUT) */ assert(yyruleno!=92); + /* (93) meta_block ::= LINE_META */ yytestcase(yyruleno==93); + /* (94) meta_line ::= LINE_META */ yytestcase(yyruleno==94); + /* (95) meta_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==95); + /* (96) para ::= LINE_PLAIN */ yytestcase(yyruleno==96); + /* (97) table ::= table_header */ yytestcase(yyruleno==97); + /* (98) header_rows ::= LINE_TABLE */ yytestcase(yyruleno==98); + /* (99) table_body ::= table_section (OPTIMIZED OUT) */ assert(yyruleno!=99); + /* (100) all_rows ::= row (OPTIMIZED OUT) */ assert(yyruleno!=100); + /* (101) row ::= header_rows */ yytestcase(yyruleno==101); + /* (102) row ::= LINE_TABLE_SEPARATOR */ yytestcase(yyruleno==102); + /* (103) para ::= defs */ yytestcase(yyruleno==103); break; /********** End reduce actions ************************************************/ }; diff --git a/src/parser.h b/src/parser.h index 0eedfe9..0be9004 100644 --- a/src/parser.h +++ b/src/parser.h @@ -21,6 +21,6 @@ #define LINE_FENCE_BACKTICK 21 #define LINE_FENCE_BACKTICK_START 22 #define LINE_TOC 23 -#define LINE_EMPTY 24 -#define LINE_META 25 -#define LINE_DEFINITION 26 +#define LINE_DEFINITION 24 +#define LINE_EMPTY 25 +#define LINE_META 26 diff --git a/src/parser.out b/src/parser.out index 970616d..e929ee9 100644 --- a/src/parser.out +++ b/src/parser.out @@ -2,1012 +2,856 @@ State 0: doc ::= * blocks blocks ::= * blocks block blocks ::= * block - block ::= * para - block ::= * indented_code block ::= * LINE_ATX_1 block ::= * LINE_ATX_2 block ::= * LINE_ATX_3 block ::= * LINE_ATX_4 block ::= * LINE_ATX_5 block ::= * LINE_ATX_6 - block ::= * empty - block ::= * list_bulleted - block ::= * list_enumerated - block ::= * blockquote - block ::= * table block ::= * LINE_HR + block ::= * LINE_TOC + block ::= * blockquote block ::= * def_citation block ::= * def_footnote block ::= * def_link - block ::= * html_block + block ::= * definition_block + block ::= * empty block ::= * fenced_block + block ::= * html_block + block ::= * indented_code + block ::= * list_bullet + block ::= * list_enum block ::= * meta_block - block ::= * LINE_TOC - block ::= * definition_block - para ::= * LINE_PLAIN para_lines - para ::= * LINE_PLAIN - indented_code ::= * indented_code code_line - indented_code ::= * indented_line + block ::= * para + block ::= * table indented_line ::= * LINE_INDENTED_TAB indented_line ::= * LINE_INDENTED_SPACE - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - blockquote ::= * LINE_BLOCKQUOTE quote_lines + blockquote ::= * blockquote quote_line blockquote ::= * LINE_BLOCKQUOTE - list_bulleted ::= * list_bulleted item_bulleted - list_bulleted ::= * item_bulleted - item_bulleted ::= * LINE_LIST_BULLETED para_lines cont_blocks - item_bulleted ::= * LINE_LIST_BULLETED para_lines - item_bulleted ::= * LINE_LIST_BULLETED cont_blocks - item_bulleted ::= * LINE_LIST_BULLETED - list_enumerated ::= * list_enumerated item_enumerated - list_enumerated ::= * item_enumerated - item_enumerated ::= * LINE_LIST_ENUMERATED para_lines cont_blocks - item_enumerated ::= * LINE_LIST_ENUMERATED para_lines - item_enumerated ::= * LINE_LIST_ENUMERATED cont_blocks - item_enumerated ::= * LINE_LIST_ENUMERATED - table_header ::= * header_rows LINE_TABLE_SEPARATOR - all_rows ::= * all_rows row - all_rows ::= * row - row ::= * header_rows - row ::= * LINE_TABLE_SEPARATOR - table ::= * table_header table_body - table ::= * table_header - header_rows ::= * header_rows LINE_TABLE - header_rows ::= * LINE_TABLE - def_citation ::= * LINE_DEF_CITATION para_lines cont_blocks - def_citation ::= * LINE_DEF_CITATION para_lines - def_citation ::= * LINE_DEF_CITATION cont_blocks + def_citation ::= * LINE_DEF_CITATION tail def_citation ::= * LINE_DEF_CITATION - def_footnote ::= * LINE_DEF_FOOTNOTE para_lines cont_blocks - def_footnote ::= * LINE_DEF_FOOTNOTE para_lines - def_footnote ::= * LINE_DEF_FOOTNOTE cont_blocks + def_footnote ::= * LINE_DEF_FOOTNOTE tail def_footnote ::= * LINE_DEF_FOOTNOTE - def_link ::= * LINE_DEF_LINK para_lines + def_link ::= * LINE_DEF_LINK chunk def_link ::= * LINE_DEF_LINK - html_block ::= * LINE_HTML html_block_lines - html_block ::= * LINE_HTML - fenced_block ::= * LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK - fenced_block ::= * LINE_FENCE_BACKTICK fenced_lines - fenced_block ::= * LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK - fenced_block ::= * LINE_FENCE_BACKTICK_START fenced_lines - meta_block ::= * LINE_META meta_lines - meta_block ::= * LINE_META definition_block ::= * para defs defs ::= * defs def defs ::= * def - def ::= * LINE_DEFINITION def_lines + def ::= * def LINE_CONTINUATION def ::= * LINE_DEFINITION + empty ::= * empty LINE_EMPTY + empty ::= * LINE_EMPTY + fenced_block ::= * fenced LINE_FENCE_BACKTICK + fenced_block ::= * fenced + fenced ::= * fenced fenced_line + fenced ::= * LINE_FENCE_BACKTICK + fenced ::= * LINE_FENCE_BACKTICK_START + html_block ::= * html_block html_line + html_block ::= * LINE_HTML + indented_code ::= * indented_code indented_line + indented_code ::= * indented_code LINE_EMPTY + indented_code ::= * indented_line + list_bullet ::= * list_bullet item_bullet + list_bullet ::= * item_bullet + item_bullet ::= * LINE_LIST_BULLETED ext_chunk + item_bullet ::= * LINE_LIST_BULLETED chunk + item_bullet ::= * LINE_LIST_BULLETED nested_chunks + item_bullet ::= * LINE_LIST_BULLETED + list_enum ::= * list_enum item_enum + list_enum ::= * item_enum + item_enum ::= * LINE_LIST_ENUMERATED ext_chunk + item_enum ::= * LINE_LIST_ENUMERATED chunk + item_enum ::= * LINE_LIST_ENUMERATED nested_chunks + item_enum ::= * LINE_LIST_ENUMERATED + meta_block ::= * meta_block meta_line + meta_block ::= * LINE_META + para ::= * LINE_PLAIN chunk + para ::= * LINE_PLAIN + table ::= * table_header table_body + table ::= * table_header + table_header ::= * header_rows LINE_TABLE_SEPARATOR + header_rows ::= * header_rows LINE_TABLE + header_rows ::= * LINE_TABLE + all_rows ::= * all_rows row + all_rows ::= * row + row ::= * header_rows + row ::= * LINE_TABLE_SEPARATOR para ::= * all_rows para ::= * defs - LINE_PLAIN shift 25 - LINE_TABLE_SEPARATOR shift-reduce 92 row ::= LINE_TABLE_SEPARATOR - LINE_INDENTED_TAB shift-reduce 79 indented_line ::= LINE_INDENTED_TAB - LINE_INDENTED_SPACE shift-reduce 80 indented_line ::= LINE_INDENTED_SPACE - LINE_TABLE shift-reduce 95 header_rows ::= LINE_TABLE - LINE_HTML shift 17 - LINE_ATX_1 shift-reduce 5 block ::= LINE_ATX_1 - LINE_ATX_2 shift-reduce 6 block ::= LINE_ATX_2 - LINE_ATX_3 shift-reduce 7 block ::= LINE_ATX_3 - LINE_ATX_4 shift-reduce 8 block ::= LINE_ATX_4 - LINE_ATX_5 shift-reduce 9 block ::= LINE_ATX_5 - LINE_ATX_6 shift-reduce 10 block ::= LINE_ATX_6 - LINE_HR shift-reduce 16 block ::= LINE_HR - LINE_BLOCKQUOTE shift 19 - LINE_LIST_BULLETED shift 6 - LINE_LIST_ENUMERATED shift 5 + LINE_PLAIN shift 13 + LINE_TABLE_SEPARATOR shift-reduce 102 row ::= LINE_TABLE_SEPARATOR + LINE_INDENTED_TAB shift-reduce 69 indented_line ::= LINE_INDENTED_TAB + LINE_INDENTED_SPACE shift-reduce 70 indented_line ::= LINE_INDENTED_SPACE + LINE_TABLE shift-reduce 98 header_rows ::= LINE_TABLE + LINE_HTML shift-reduce 87 html_block ::= LINE_HTML + LINE_ATX_1 shift-reduce 3 block ::= LINE_ATX_1 + LINE_ATX_2 shift-reduce 4 block ::= LINE_ATX_2 + LINE_ATX_3 shift-reduce 5 block ::= LINE_ATX_3 + LINE_ATX_4 shift-reduce 6 block ::= LINE_ATX_4 + LINE_ATX_5 shift-reduce 7 block ::= LINE_ATX_5 + LINE_ATX_6 shift-reduce 8 block ::= LINE_ATX_6 + LINE_HR shift-reduce 9 block ::= LINE_HR + LINE_BLOCKQUOTE shift-reduce 74 blockquote ::= LINE_BLOCKQUOTE + LINE_LIST_BULLETED shift 5 + LINE_LIST_ENUMERATED shift 4 LINE_DEF_CITATION shift 3 LINE_DEF_FOOTNOTE shift 2 - LINE_DEF_LINK shift 20 - LINE_FENCE_BACKTICK shift 16 - LINE_FENCE_BACKTICK_START shift 15 - LINE_TOC shift-reduce 23 block ::= LINE_TOC + LINE_DEF_LINK shift 14 + LINE_FENCE_BACKTICK shift-reduce 83 fenced ::= LINE_FENCE_BACKTICK + LINE_FENCE_BACKTICK_START shift-reduce 84 fenced ::= LINE_FENCE_BACKTICK_START + LINE_TOC shift-reduce 10 block ::= LINE_TOC + LINE_DEFINITION shift-reduce 80 def ::= LINE_DEFINITION LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_META shift 14 - LINE_DEFINITION shift 44 + LINE_META shift-reduce 93 meta_block ::= LINE_META doc accept blocks shift 1 block shift-reduce 2 blocks ::= block - para shift 31 - indented_code shift 13 - empty shift 48 - list_bulleted shift 43 - list_enumerated shift 41 - blockquote shift-reduce 14 block ::= blockquote - table shift-reduce 15 block ::= table - def_citation shift-reduce 17 block ::= def_citation - def_footnote shift-reduce 18 block ::= def_footnote - def_link shift-reduce 19 block ::= def_link - html_block shift-reduce 20 block ::= html_block - fenced_block shift-reduce 21 block ::= fenced_block - meta_block shift-reduce 22 block ::= meta_block - definition_block shift-reduce 24 block ::= definition_block - indented_line shift 13 /* because indented_line==indented_code */ - item_bulleted shift 43 /* because item_bulleted==list_bulleted */ - item_enumerated shift 41 /* because item_enumerated==list_enumerated */ - table_header shift 4 - header_rows shift 46 - all_rows shift 18 - row shift 18 /* because row==all_rows */ - defs shift 38 - def shift 38 /* because def==defs */ + blockquote shift 27 + def_citation shift-reduce 12 block ::= def_citation + def_footnote shift-reduce 13 block ::= def_footnote + def_link shift-reduce 14 block ::= def_link + definition_block shift-reduce 15 block ::= definition_block + empty shift 39 + fenced_block shift-reduce 17 block ::= fenced_block + html_block shift 26 + indented_code shift 24 + list_bullet shift 34 + list_enum shift 32 + meta_block shift 25 + para shift 17 + table shift-reduce 24 block ::= table + indented_line shift 24 /* because indented_line==indented_code */ + defs shift 29 + def shift 37 + fenced shift 22 + item_bullet shift 34 /* because item_bullet==list_bullet */ + item_enum shift 32 /* because item_enum==list_enum */ + table_header shift 6 + header_rows shift 35 + all_rows shift 12 + row shift 12 /* because row==all_rows */ State 1: (0) doc ::= blocks * blocks ::= blocks * block - block ::= * para - block ::= * indented_code block ::= * LINE_ATX_1 block ::= * LINE_ATX_2 block ::= * LINE_ATX_3 block ::= * LINE_ATX_4 block ::= * LINE_ATX_5 block ::= * LINE_ATX_6 - block ::= * empty - block ::= * list_bulleted - block ::= * list_enumerated - block ::= * blockquote - block ::= * table block ::= * LINE_HR + block ::= * LINE_TOC + block ::= * blockquote block ::= * def_citation block ::= * def_footnote block ::= * def_link - block ::= * html_block + block ::= * definition_block + block ::= * empty block ::= * fenced_block + block ::= * html_block + block ::= * indented_code + block ::= * list_bullet + block ::= * list_enum block ::= * meta_block - block ::= * LINE_TOC - block ::= * definition_block - para ::= * LINE_PLAIN para_lines - para ::= * LINE_PLAIN - indented_code ::= * indented_code code_line - indented_code ::= * indented_line + block ::= * para + block ::= * table indented_line ::= * LINE_INDENTED_TAB indented_line ::= * LINE_INDENTED_SPACE - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - blockquote ::= * LINE_BLOCKQUOTE quote_lines + blockquote ::= * blockquote quote_line blockquote ::= * LINE_BLOCKQUOTE - list_bulleted ::= * list_bulleted item_bulleted - list_bulleted ::= * item_bulleted - item_bulleted ::= * LINE_LIST_BULLETED para_lines cont_blocks - item_bulleted ::= * LINE_LIST_BULLETED para_lines - item_bulleted ::= * LINE_LIST_BULLETED cont_blocks - item_bulleted ::= * LINE_LIST_BULLETED - list_enumerated ::= * list_enumerated item_enumerated - list_enumerated ::= * item_enumerated - item_enumerated ::= * LINE_LIST_ENUMERATED para_lines cont_blocks - item_enumerated ::= * LINE_LIST_ENUMERATED para_lines - item_enumerated ::= * LINE_LIST_ENUMERATED cont_blocks - item_enumerated ::= * LINE_LIST_ENUMERATED - table_header ::= * header_rows LINE_TABLE_SEPARATOR - all_rows ::= * all_rows row - all_rows ::= * row - row ::= * header_rows - row ::= * LINE_TABLE_SEPARATOR - table ::= * table_header table_body - table ::= * table_header - header_rows ::= * header_rows LINE_TABLE - header_rows ::= * LINE_TABLE - def_citation ::= * LINE_DEF_CITATION para_lines cont_blocks - def_citation ::= * LINE_DEF_CITATION para_lines - def_citation ::= * LINE_DEF_CITATION cont_blocks + def_citation ::= * LINE_DEF_CITATION tail def_citation ::= * LINE_DEF_CITATION - def_footnote ::= * LINE_DEF_FOOTNOTE para_lines cont_blocks - def_footnote ::= * LINE_DEF_FOOTNOTE para_lines - def_footnote ::= * LINE_DEF_FOOTNOTE cont_blocks + def_footnote ::= * LINE_DEF_FOOTNOTE tail def_footnote ::= * LINE_DEF_FOOTNOTE - def_link ::= * LINE_DEF_LINK para_lines + def_link ::= * LINE_DEF_LINK chunk def_link ::= * LINE_DEF_LINK - html_block ::= * LINE_HTML html_block_lines - html_block ::= * LINE_HTML - fenced_block ::= * LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK - fenced_block ::= * LINE_FENCE_BACKTICK fenced_lines - fenced_block ::= * LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK - fenced_block ::= * LINE_FENCE_BACKTICK_START fenced_lines - meta_block ::= * LINE_META meta_lines - meta_block ::= * LINE_META definition_block ::= * para defs defs ::= * defs def defs ::= * def - def ::= * LINE_DEFINITION def_lines + def ::= * def LINE_CONTINUATION def ::= * LINE_DEFINITION + empty ::= * empty LINE_EMPTY + empty ::= * LINE_EMPTY + fenced_block ::= * fenced LINE_FENCE_BACKTICK + fenced_block ::= * fenced + fenced ::= * fenced fenced_line + fenced ::= * LINE_FENCE_BACKTICK + fenced ::= * LINE_FENCE_BACKTICK_START + html_block ::= * html_block html_line + html_block ::= * LINE_HTML + indented_code ::= * indented_code indented_line + indented_code ::= * indented_code LINE_EMPTY + indented_code ::= * indented_line + list_bullet ::= * list_bullet item_bullet + list_bullet ::= * item_bullet + item_bullet ::= * LINE_LIST_BULLETED ext_chunk + item_bullet ::= * LINE_LIST_BULLETED chunk + item_bullet ::= * LINE_LIST_BULLETED nested_chunks + item_bullet ::= * LINE_LIST_BULLETED + list_enum ::= * list_enum item_enum + list_enum ::= * item_enum + item_enum ::= * LINE_LIST_ENUMERATED ext_chunk + item_enum ::= * LINE_LIST_ENUMERATED chunk + item_enum ::= * LINE_LIST_ENUMERATED nested_chunks + item_enum ::= * LINE_LIST_ENUMERATED + meta_block ::= * meta_block meta_line + meta_block ::= * LINE_META + para ::= * LINE_PLAIN chunk + para ::= * LINE_PLAIN + table ::= * table_header table_body + table ::= * table_header + table_header ::= * header_rows LINE_TABLE_SEPARATOR + header_rows ::= * header_rows LINE_TABLE + header_rows ::= * LINE_TABLE + all_rows ::= * all_rows row + all_rows ::= * row + row ::= * header_rows + row ::= * LINE_TABLE_SEPARATOR para ::= * all_rows para ::= * defs $ reduce 0 doc ::= blocks - LINE_PLAIN shift 25 - LINE_TABLE_SEPARATOR shift-reduce 92 row ::= LINE_TABLE_SEPARATOR - LINE_INDENTED_TAB shift-reduce 79 indented_line ::= LINE_INDENTED_TAB - LINE_INDENTED_SPACE shift-reduce 80 indented_line ::= LINE_INDENTED_SPACE - LINE_TABLE shift-reduce 95 header_rows ::= LINE_TABLE - LINE_HTML shift 17 - LINE_ATX_1 shift-reduce 5 block ::= LINE_ATX_1 - LINE_ATX_2 shift-reduce 6 block ::= LINE_ATX_2 - LINE_ATX_3 shift-reduce 7 block ::= LINE_ATX_3 - LINE_ATX_4 shift-reduce 8 block ::= LINE_ATX_4 - LINE_ATX_5 shift-reduce 9 block ::= LINE_ATX_5 - LINE_ATX_6 shift-reduce 10 block ::= LINE_ATX_6 - LINE_HR shift-reduce 16 block ::= LINE_HR - LINE_BLOCKQUOTE shift 19 - LINE_LIST_BULLETED shift 6 - LINE_LIST_ENUMERATED shift 5 + LINE_PLAIN shift 13 + LINE_TABLE_SEPARATOR shift-reduce 102 row ::= LINE_TABLE_SEPARATOR + LINE_INDENTED_TAB shift-reduce 69 indented_line ::= LINE_INDENTED_TAB + LINE_INDENTED_SPACE shift-reduce 70 indented_line ::= LINE_INDENTED_SPACE + LINE_TABLE shift-reduce 98 header_rows ::= LINE_TABLE + LINE_HTML shift-reduce 87 html_block ::= LINE_HTML + LINE_ATX_1 shift-reduce 3 block ::= LINE_ATX_1 + LINE_ATX_2 shift-reduce 4 block ::= LINE_ATX_2 + LINE_ATX_3 shift-reduce 5 block ::= LINE_ATX_3 + LINE_ATX_4 shift-reduce 6 block ::= LINE_ATX_4 + LINE_ATX_5 shift-reduce 7 block ::= LINE_ATX_5 + LINE_ATX_6 shift-reduce 8 block ::= LINE_ATX_6 + LINE_HR shift-reduce 9 block ::= LINE_HR + LINE_BLOCKQUOTE shift-reduce 74 blockquote ::= LINE_BLOCKQUOTE + LINE_LIST_BULLETED shift 5 + LINE_LIST_ENUMERATED shift 4 LINE_DEF_CITATION shift 3 LINE_DEF_FOOTNOTE shift 2 - LINE_DEF_LINK shift 20 - LINE_FENCE_BACKTICK shift 16 - LINE_FENCE_BACKTICK_START shift 15 - LINE_TOC shift-reduce 23 block ::= LINE_TOC + LINE_DEF_LINK shift 14 + LINE_FENCE_BACKTICK shift-reduce 83 fenced ::= LINE_FENCE_BACKTICK + LINE_FENCE_BACKTICK_START shift-reduce 84 fenced ::= LINE_FENCE_BACKTICK_START + LINE_TOC shift-reduce 10 block ::= LINE_TOC + LINE_DEFINITION shift-reduce 80 def ::= LINE_DEFINITION LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_META shift 14 - LINE_DEFINITION shift 44 + LINE_META shift-reduce 93 meta_block ::= LINE_META block shift-reduce 1 blocks ::= blocks block - para shift 31 - indented_code shift 13 - empty shift 48 - list_bulleted shift 43 - list_enumerated shift 41 - blockquote shift-reduce 14 block ::= blockquote - table shift-reduce 15 block ::= table - def_citation shift-reduce 17 block ::= def_citation - def_footnote shift-reduce 18 block ::= def_footnote - def_link shift-reduce 19 block ::= def_link - html_block shift-reduce 20 block ::= html_block - fenced_block shift-reduce 21 block ::= fenced_block - meta_block shift-reduce 22 block ::= meta_block - definition_block shift-reduce 24 block ::= definition_block - indented_line shift 13 /* because indented_line==indented_code */ - item_bulleted shift 43 /* because item_bulleted==list_bulleted */ - item_enumerated shift 41 /* because item_enumerated==list_enumerated */ - table_header shift 4 - header_rows shift 46 - all_rows shift 18 - row shift 18 /* because row==all_rows */ - defs shift 38 - def shift 38 /* because def==defs */ + blockquote shift 27 + def_citation shift-reduce 12 block ::= def_citation + def_footnote shift-reduce 13 block ::= def_footnote + def_link shift-reduce 14 block ::= def_link + definition_block shift-reduce 15 block ::= definition_block + empty shift 39 + fenced_block shift-reduce 17 block ::= fenced_block + html_block shift 26 + indented_code shift 24 + list_bullet shift 34 + list_enum shift 32 + meta_block shift 25 + para shift 17 + table shift-reduce 24 block ::= table + indented_line shift 24 /* because indented_line==indented_code */ + defs shift 29 + def shift 37 + fenced shift 22 + item_bullet shift 34 /* because item_bullet==list_bullet */ + item_enum shift 32 /* because item_enum==list_enum */ + table_header shift 6 + header_rows shift 35 + all_rows shift 12 + row shift 12 /* because row==all_rows */ State 2: - para_lines ::= * para_lines para_line - para_lines ::= * para_line - para_line ::= * LINE_CONTINUATION + chunk ::= * chunk chunk_line + chunk ::= * chunk_line + chunk_line ::= * LINE_CONTINUATION + nested_chunks ::= * nested_chunks nested_chunk + nested_chunks ::= * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + opt_ext_chunk ::= * chunk nested_chunks + opt_ext_chunk ::= * chunk + tail ::= * opt_ext_chunk + tail ::= * nested_chunks + def_footnote ::= LINE_DEF_FOOTNOTE * tail + (78) def_footnote ::= LINE_DEF_FOOTNOTE * empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - cont_blocks ::= * cont_blocks cont_block - cont_blocks ::= * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - def_footnote ::= LINE_DEF_FOOTNOTE * para_lines cont_blocks - def_footnote ::= LINE_DEF_FOOTNOTE * para_lines - def_footnote ::= LINE_DEF_FOOTNOTE * cont_blocks - (97) def_footnote ::= LINE_DEF_FOOTNOTE * - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION + + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 97 ** Parsing conflict ** - empty shift 34 - para_lines shift 7 - para_line shift 7 /* because para_line==para_lines */ - cont_blocks shift 21 - cont_block shift 21 /* because cont_block==cont_blocks */ - {default} reduce 97 def_footnote ::= LINE_DEF_FOOTNOTE + LINE_EMPTY reduce 78 ** Parsing conflict ** + empty shift 23 + chunk shift 8 + chunk_line shift 8 /* because chunk_line==chunk */ + nested_chunks shift 15 + nested_chunk shift 15 /* because nested_chunk==nested_chunks */ + opt_ext_chunk shift-reduce 33 def_footnote ::= LINE_DEF_FOOTNOTE tail /* because opt_ext_chunk==tail */ + tail shift-reduce 33 def_footnote ::= LINE_DEF_FOOTNOTE tail + {default} reduce 78 def_footnote ::= LINE_DEF_FOOTNOTE State 3: - para_lines ::= * para_lines para_line - para_lines ::= * para_line - para_line ::= * LINE_CONTINUATION + chunk ::= * chunk chunk_line + chunk ::= * chunk_line + chunk_line ::= * LINE_CONTINUATION + nested_chunks ::= * nested_chunks nested_chunk + nested_chunks ::= * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + opt_ext_chunk ::= * chunk nested_chunks + opt_ext_chunk ::= * chunk + tail ::= * opt_ext_chunk + tail ::= * nested_chunks + def_citation ::= LINE_DEF_CITATION * tail + (77) def_citation ::= LINE_DEF_CITATION * empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - cont_blocks ::= * cont_blocks cont_block - cont_blocks ::= * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - def_citation ::= LINE_DEF_CITATION * para_lines cont_blocks - def_citation ::= LINE_DEF_CITATION * para_lines - def_citation ::= LINE_DEF_CITATION * cont_blocks - (96) def_citation ::= LINE_DEF_CITATION * - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION + + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 96 ** Parsing conflict ** - empty shift 34 - para_lines shift 8 - para_line shift 8 /* because para_line==para_lines */ - cont_blocks shift 23 - cont_block shift 23 /* because cont_block==cont_blocks */ - {default} reduce 96 def_citation ::= LINE_DEF_CITATION + LINE_EMPTY reduce 77 ** Parsing conflict ** + empty shift 23 + chunk shift 8 + chunk_line shift 8 /* because chunk_line==chunk */ + nested_chunks shift 15 + nested_chunk shift 15 /* because nested_chunk==nested_chunks */ + opt_ext_chunk shift-reduce 32 def_citation ::= LINE_DEF_CITATION tail /* because opt_ext_chunk==tail */ + tail shift-reduce 32 def_citation ::= LINE_DEF_CITATION tail + {default} reduce 77 def_citation ::= LINE_DEF_CITATION State 4: - table_section ::= * all_rows LINE_EMPTY - table_section ::= * all_rows - all_rows ::= * all_rows row - all_rows ::= * row - row ::= * header_rows - row ::= * LINE_TABLE_SEPARATOR - table ::= table_header * table_body - (93) table ::= table_header * - table_body ::= * table_body table_section - table_body ::= * table_section - header_rows ::= * header_rows LINE_TABLE - header_rows ::= * LINE_TABLE - - LINE_TABLE_SEPARATOR shift-reduce 92 row ::= LINE_TABLE_SEPARATOR - LINE_TABLE_SEPARATOR reduce 93 ** Parsing conflict ** - LINE_TABLE shift-reduce 95 header_rows ::= LINE_TABLE - LINE_TABLE reduce 93 ** Parsing conflict ** - header_rows shift 47 - table_section shift 9 /* because table_section==table_body */ - all_rows shift 12 - row shift 12 /* because row==all_rows */ - table_body shift 9 - {default} reduce 93 table ::= table_header - -State 5: - para_lines ::= * para_lines para_line - para_lines ::= * para_line - para_line ::= * LINE_CONTINUATION + chunk ::= * chunk chunk_line + chunk ::= * chunk_line + chunk_line ::= * LINE_CONTINUATION + nested_chunks ::= * nested_chunks nested_chunk + nested_chunks ::= * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + ext_chunk ::= * chunk nested_chunks empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - item_enumerated ::= LINE_LIST_ENUMERATED * para_lines cont_blocks - item_enumerated ::= LINE_LIST_ENUMERATED * para_lines - item_enumerated ::= LINE_LIST_ENUMERATED * cont_blocks - (40) item_enumerated ::= LINE_LIST_ENUMERATED * - cont_blocks ::= * cont_blocks cont_block - cont_blocks ::= * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 40 ** Parsing conflict ** - empty shift 34 - para_lines shift 10 - para_line shift 10 /* because para_line==para_lines */ - cont_blocks shift 26 - cont_block shift 26 /* because cont_block==cont_blocks */ - {default} reduce 40 item_enumerated ::= LINE_LIST_ENUMERATED + item_enum ::= LINE_LIST_ENUMERATED * ext_chunk + item_enum ::= LINE_LIST_ENUMERATED * chunk + item_enum ::= LINE_LIST_ENUMERATED * nested_chunks + (54) item_enum ::= LINE_LIST_ENUMERATED * -State 6: - para_lines ::= * para_lines para_line - para_lines ::= * para_line - para_line ::= * LINE_CONTINUATION - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - item_bulleted ::= LINE_LIST_BULLETED * para_lines cont_blocks - item_bulleted ::= LINE_LIST_BULLETED * para_lines - item_bulleted ::= LINE_LIST_BULLETED * cont_blocks - (35) item_bulleted ::= LINE_LIST_BULLETED * - cont_blocks ::= * cont_blocks cont_block - cont_blocks ::= * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 35 ** Parsing conflict ** - empty shift 34 - para_lines shift 11 - para_line shift 11 /* because para_line==para_lines */ - cont_blocks shift 28 - cont_block shift 28 /* because cont_block==cont_blocks */ - {default} reduce 35 item_bulleted ::= LINE_LIST_BULLETED + LINE_EMPTY reduce 54 ** Parsing conflict ** + empty shift 23 + chunk shift 9 + chunk_line shift 9 /* because chunk_line==chunk */ + nested_chunks shift 18 + nested_chunk shift 18 /* because nested_chunk==nested_chunks */ + ext_chunk shift-reduce 51 item_enum ::= LINE_LIST_ENUMERATED ext_chunk + {default} reduce 54 item_enum ::= LINE_LIST_ENUMERATED -State 7: - para_lines ::= para_lines * para_line - para_line ::= * LINE_CONTINUATION +State 5: + chunk ::= * chunk chunk_line + chunk ::= * chunk_line + chunk_line ::= * LINE_CONTINUATION + nested_chunks ::= * nested_chunks nested_chunk + nested_chunks ::= * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + ext_chunk ::= * chunk nested_chunks empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - cont_blocks ::= * cont_blocks cont_block - cont_blocks ::= * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - def_footnote ::= LINE_DEF_FOOTNOTE para_lines * cont_blocks - (55) def_footnote ::= LINE_DEF_FOOTNOTE para_lines * - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION - LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 55 ** Parsing conflict ** - empty shift 34 - para_line shift-reduce 26 para_lines ::= para_lines para_line - cont_blocks shift 22 - cont_block shift 22 /* because cont_block==cont_blocks */ - {default} reduce 55 def_footnote ::= LINE_DEF_FOOTNOTE para_lines + item_bullet ::= LINE_LIST_BULLETED * ext_chunk + item_bullet ::= LINE_LIST_BULLETED * chunk + item_bullet ::= LINE_LIST_BULLETED * nested_chunks + (49) item_bullet ::= LINE_LIST_BULLETED * -State 8: - para_lines ::= para_lines * para_line - para_line ::= * LINE_CONTINUATION - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - cont_blocks ::= * cont_blocks cont_block - cont_blocks ::= * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - def_citation ::= LINE_DEF_CITATION para_lines * cont_blocks - (52) def_citation ::= LINE_DEF_CITATION para_lines * - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 52 ** Parsing conflict ** - empty shift 34 - para_line shift-reduce 26 para_lines ::= para_lines para_line - cont_blocks shift 24 - cont_block shift 24 /* because cont_block==cont_blocks */ - {default} reduce 52 def_citation ::= LINE_DEF_CITATION para_lines + LINE_EMPTY reduce 49 ** Parsing conflict ** + empty shift 23 + chunk shift 10 + chunk_line shift 10 /* because chunk_line==chunk */ + nested_chunks shift 19 + nested_chunk shift 19 /* because nested_chunk==nested_chunks */ + ext_chunk shift-reduce 46 item_bullet ::= LINE_LIST_BULLETED ext_chunk + {default} reduce 49 item_bullet ::= LINE_LIST_BULLETED -State 9: +State 6: + table ::= table_header * table_body + (97) table ::= table_header * + header_rows ::= * header_rows LINE_TABLE + header_rows ::= * LINE_TABLE + table_body ::= * table_body table_section + table_body ::= * table_section table_section ::= * all_rows LINE_EMPTY table_section ::= * all_rows all_rows ::= * all_rows row all_rows ::= * row row ::= * header_rows row ::= * LINE_TABLE_SEPARATOR - (48) table ::= table_header table_body * - table_body ::= table_body * table_section + + LINE_TABLE_SEPARATOR shift-reduce 102 row ::= LINE_TABLE_SEPARATOR + LINE_TABLE_SEPARATOR reduce 97 ** Parsing conflict ** + LINE_TABLE shift-reduce 98 header_rows ::= LINE_TABLE + LINE_TABLE reduce 97 ** Parsing conflict ** + table_body shift 7 + header_rows shift 36 + table_section shift 7 /* because table_section==table_body */ + all_rows shift 11 + row shift 11 /* because row==all_rows */ + {default} reduce 97 table ::= table_header + +State 7: + (57) table ::= table_header table_body * header_rows ::= * header_rows LINE_TABLE header_rows ::= * LINE_TABLE + table_body ::= table_body * table_section + table_section ::= * all_rows LINE_EMPTY + table_section ::= * all_rows + all_rows ::= * all_rows row + all_rows ::= * row + row ::= * header_rows + row ::= * LINE_TABLE_SEPARATOR - LINE_TABLE_SEPARATOR shift-reduce 92 row ::= LINE_TABLE_SEPARATOR - LINE_TABLE_SEPARATOR reduce 48 ** Parsing conflict ** - LINE_TABLE shift-reduce 95 header_rows ::= LINE_TABLE - LINE_TABLE reduce 48 ** Parsing conflict ** - header_rows shift 47 - table_section shift-reduce 49 table_body ::= table_body table_section - all_rows shift 12 - row shift 12 /* because row==all_rows */ - {default} reduce 48 table ::= table_header table_body + LINE_TABLE_SEPARATOR shift-reduce 102 row ::= LINE_TABLE_SEPARATOR + LINE_TABLE_SEPARATOR reduce 57 ** Parsing conflict ** + LINE_TABLE shift-reduce 98 header_rows ::= LINE_TABLE + LINE_TABLE reduce 57 ** Parsing conflict ** + header_rows shift 36 + table_section shift-reduce 60 table_body ::= table_body table_section + all_rows shift 11 + row shift 11 /* because row==all_rows */ + {default} reduce 57 table ::= table_header table_body -State 10: - para_lines ::= para_lines * para_line - para_line ::= * LINE_CONTINUATION +State 8: + chunk ::= chunk * chunk_line + chunk_line ::= * LINE_CONTINUATION + nested_chunks ::= * nested_chunks nested_chunk + nested_chunks ::= * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + opt_ext_chunk ::= chunk * nested_chunks + (71) opt_ext_chunk ::= chunk * empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - item_enumerated ::= LINE_LIST_ENUMERATED para_lines * cont_blocks - (38) item_enumerated ::= LINE_LIST_ENUMERATED para_lines * - cont_blocks ::= * cont_blocks cont_block - cont_blocks ::= * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION + + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 38 ** Parsing conflict ** - empty shift 34 - para_line shift-reduce 26 para_lines ::= para_lines para_line - cont_blocks shift 27 - cont_block shift 27 /* because cont_block==cont_blocks */ - {default} reduce 38 item_enumerated ::= LINE_LIST_ENUMERATED para_lines + LINE_EMPTY reduce 71 ** Parsing conflict ** + empty shift 23 + chunk_line shift-reduce 25 chunk ::= chunk chunk_line + nested_chunks shift 16 + nested_chunk shift 16 /* because nested_chunk==nested_chunks */ + {default} reduce 71 opt_ext_chunk ::= chunk -State 11: - para_lines ::= para_lines * para_line - para_line ::= * LINE_CONTINUATION +State 9: + chunk ::= chunk * chunk_line + chunk_line ::= * LINE_CONTINUATION + nested_chunks ::= * nested_chunks nested_chunk + nested_chunks ::= * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + ext_chunk ::= chunk * nested_chunks empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - item_bulleted ::= LINE_LIST_BULLETED para_lines * cont_blocks - (33) item_bulleted ::= LINE_LIST_BULLETED para_lines * - cont_blocks ::= * cont_blocks cont_block - cont_blocks ::= * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION + (52) item_enum ::= LINE_LIST_ENUMERATED chunk * + + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 33 ** Parsing conflict ** - empty shift 34 - para_line shift-reduce 26 para_lines ::= para_lines para_line - cont_blocks shift 29 - cont_block shift 29 /* because cont_block==cont_blocks */ - {default} reduce 33 item_bulleted ::= LINE_LIST_BULLETED para_lines + LINE_EMPTY reduce 52 ** Parsing conflict ** + empty shift 23 + chunk_line shift-reduce 25 chunk ::= chunk chunk_line + nested_chunks shift 21 + nested_chunk shift 21 /* because nested_chunk==nested_chunks */ + {default} reduce 52 item_enum ::= LINE_LIST_ENUMERATED chunk -State 12: +State 10: + chunk ::= chunk * chunk_line + chunk_line ::= * LINE_CONTINUATION + nested_chunks ::= * nested_chunks nested_chunk + nested_chunks ::= * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + ext_chunk ::= chunk * nested_chunks + empty ::= * empty LINE_EMPTY + empty ::= * LINE_EMPTY + (47) item_bullet ::= LINE_LIST_BULLETED chunk * + + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION + LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY + LINE_EMPTY reduce 47 ** Parsing conflict ** + empty shift 23 + chunk_line shift-reduce 25 chunk ::= chunk chunk_line + nested_chunks shift 21 + nested_chunk shift 21 /* because nested_chunk==nested_chunks */ + {default} reduce 47 item_bullet ::= LINE_LIST_BULLETED chunk + +State 11: + header_rows ::= * header_rows LINE_TABLE + header_rows ::= * LINE_TABLE table_section ::= all_rows * LINE_EMPTY - (46) table_section ::= all_rows * + (62) table_section ::= all_rows * all_rows ::= all_rows * row row ::= * header_rows row ::= * LINE_TABLE_SEPARATOR + + LINE_TABLE_SEPARATOR shift-reduce 102 row ::= LINE_TABLE_SEPARATOR + LINE_TABLE_SEPARATOR reduce 62 ** Parsing conflict ** + LINE_TABLE shift-reduce 98 header_rows ::= LINE_TABLE + LINE_TABLE reduce 62 ** Parsing conflict ** + LINE_EMPTY shift-reduce 61 table_section ::= all_rows LINE_EMPTY + LINE_EMPTY reduce 62 ** Parsing conflict ** + header_rows shift 36 + row shift-reduce 63 all_rows ::= all_rows row + {default} reduce 62 table_section ::= all_rows + +State 12: header_rows ::= * header_rows LINE_TABLE header_rows ::= * LINE_TABLE + all_rows ::= all_rows * row + row ::= * header_rows + row ::= * LINE_TABLE_SEPARATOR + (64) para ::= all_rows * - LINE_TABLE_SEPARATOR shift-reduce 92 row ::= LINE_TABLE_SEPARATOR - LINE_TABLE_SEPARATOR reduce 46 ** Parsing conflict ** - LINE_TABLE shift-reduce 95 header_rows ::= LINE_TABLE - LINE_TABLE reduce 46 ** Parsing conflict ** - LINE_EMPTY shift-reduce 45 table_section ::= all_rows LINE_EMPTY - LINE_EMPTY reduce 46 ** Parsing conflict ** - header_rows shift 47 - row shift-reduce 47 all_rows ::= all_rows row - {default} reduce 46 table_section ::= all_rows + LINE_TABLE_SEPARATOR shift-reduce 102 row ::= LINE_TABLE_SEPARATOR + LINE_TABLE_SEPARATOR reduce 64 ** Parsing conflict ** + LINE_TABLE shift-reduce 98 header_rows ::= LINE_TABLE + LINE_TABLE reduce 64 ** Parsing conflict ** + header_rows shift 36 + row shift-reduce 63 all_rows ::= all_rows row + {default} reduce 64 para ::= all_rows State 13: - (4) block ::= indented_code * - indented_code ::= indented_code * code_line - code_line ::= * indented_line - code_line ::= * LINE_EMPTY - indented_line ::= * LINE_INDENTED_TAB - indented_line ::= * LINE_INDENTED_SPACE + chunk ::= * chunk chunk_line + chunk ::= * chunk_line + chunk_line ::= * LINE_CONTINUATION + para ::= LINE_PLAIN * chunk + (96) para ::= LINE_PLAIN * - LINE_INDENTED_TAB shift-reduce 79 indented_line ::= LINE_INDENTED_TAB - LINE_INDENTED_TAB reduce 4 ** Parsing conflict ** - LINE_INDENTED_SPACE shift-reduce 80 indented_line ::= LINE_INDENTED_SPACE - LINE_INDENTED_SPACE reduce 4 ** Parsing conflict ** - LINE_EMPTY shift-reduce 78 code_line ::= LINE_EMPTY - LINE_EMPTY reduce 4 ** Parsing conflict ** - code_line shift-reduce 27 indented_code ::= indented_code code_line - indented_line shift-reduce 27 indented_code ::= indented_code code_line /* because indented_line==code_line */ - {default} reduce 4 block ::= indented_code + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION + chunk shift 28 + chunk_line shift 28 /* because chunk_line==chunk */ + {default} reduce 96 para ::= LINE_PLAIN State 14: - meta_block ::= LINE_META * meta_lines - (107) meta_block ::= LINE_META * - meta_lines ::= * meta_lines meta_line - meta_lines ::= * meta_line - meta_line ::= * LINE_META - meta_line ::= * LINE_CONTINUATION + chunk ::= * chunk chunk_line + chunk ::= * chunk_line + chunk_line ::= * LINE_CONTINUATION + def_link ::= LINE_DEF_LINK * chunk + (79) def_link ::= LINE_DEF_LINK * - LINE_CONTINUATION shift-reduce 110 meta_line ::= LINE_CONTINUATION - LINE_META shift-reduce 109 meta_line ::= LINE_META - LINE_META reduce 107 ** Parsing conflict ** - meta_lines shift 35 - meta_line shift 35 /* because meta_line==meta_lines */ - {default} reduce 107 meta_block ::= LINE_META + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION + chunk shift 30 + chunk_line shift 30 /* because chunk_line==chunk */ + {default} reduce 79 def_link ::= LINE_DEF_LINK State 15: - fenced_block ::= LINE_FENCE_BACKTICK_START * fenced_lines LINE_FENCE_BACKTICK - fenced_block ::= LINE_FENCE_BACKTICK_START * fenced_lines - fenced_lines ::= * fenced_lines fenced_line - fenced_lines ::= * fenced_line - (104) fenced_lines ::= * - fenced_line ::= * LINE_CONTINUATION - fenced_line ::= * LINE_EMPTY + nested_chunks ::= nested_chunks * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + (73) tail ::= nested_chunks * + empty ::= * empty LINE_EMPTY + empty ::= * LINE_EMPTY - LINE_CONTINUATION shift-reduce 105 fenced_line ::= LINE_CONTINUATION - LINE_CONTINUATION reduce 104 ** Parsing conflict ** - LINE_EMPTY shift-reduce 106 fenced_line ::= LINE_EMPTY - LINE_EMPTY reduce 104 ** Parsing conflict ** - fenced_lines shift 32 - fenced_line shift 32 /* because fenced_line==fenced_lines */ - {default} reduce 104 fenced_lines ::= + LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY + LINE_EMPTY reduce 73 ** Parsing conflict ** + empty shift 23 + nested_chunk shift-reduce 26 nested_chunks ::= nested_chunks nested_chunk + {default} reduce 73 tail ::= nested_chunks State 16: - fenced_block ::= LINE_FENCE_BACKTICK * fenced_lines LINE_FENCE_BACKTICK - fenced_block ::= LINE_FENCE_BACKTICK * fenced_lines - fenced_lines ::= * fenced_lines fenced_line - fenced_lines ::= * fenced_line - (104) fenced_lines ::= * - fenced_line ::= * LINE_CONTINUATION - fenced_line ::= * LINE_EMPTY + nested_chunks ::= nested_chunks * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + (30) opt_ext_chunk ::= chunk nested_chunks * + empty ::= * empty LINE_EMPTY + empty ::= * LINE_EMPTY - LINE_CONTINUATION shift-reduce 105 fenced_line ::= LINE_CONTINUATION - LINE_CONTINUATION reduce 104 ** Parsing conflict ** - LINE_EMPTY shift-reduce 106 fenced_line ::= LINE_EMPTY - LINE_EMPTY reduce 104 ** Parsing conflict ** - fenced_lines shift 33 - fenced_line shift 33 /* because fenced_line==fenced_lines */ - {default} reduce 104 fenced_lines ::= + LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY + LINE_EMPTY reduce 30 ** Parsing conflict ** + empty shift 23 + nested_chunk shift-reduce 26 nested_chunks ::= nested_chunks nested_chunk + {default} reduce 30 opt_ext_chunk ::= chunk nested_chunks State 17: - html_block ::= LINE_HTML * html_block_lines - (99) html_block ::= LINE_HTML * - html_block_lines ::= * html_block_lines html_block_line - html_block_lines ::= * html_block_line - html_block_line ::= * LINE_CONTINUATION - html_block_line ::= * LINE_HTML - - LINE_CONTINUATION shift-reduce 101 html_block_line ::= LINE_CONTINUATION - LINE_HTML shift-reduce 102 html_block_line ::= LINE_HTML - LINE_HTML reduce 99 ** Parsing conflict ** - html_block_lines shift 36 - html_block_line shift 36 /* because html_block_line==html_block_lines */ - {default} reduce 99 html_block ::= LINE_HTML + (23) block ::= para * + definition_block ::= para * defs + defs ::= * defs def + defs ::= * def + def ::= * def LINE_CONTINUATION + def ::= * LINE_DEFINITION + + LINE_DEFINITION shift-reduce 80 def ::= LINE_DEFINITION + LINE_DEFINITION reduce 23 ** Parsing conflict ** + defs shift 31 + def shift 37 + {default} reduce 23 block ::= para State 18: - all_rows ::= all_rows * row - row ::= * header_rows - row ::= * LINE_TABLE_SEPARATOR - header_rows ::= * header_rows LINE_TABLE - header_rows ::= * LINE_TABLE - (72) para ::= all_rows * + nested_chunks ::= nested_chunks * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + empty ::= * empty LINE_EMPTY + empty ::= * LINE_EMPTY + (53) item_enum ::= LINE_LIST_ENUMERATED nested_chunks * - LINE_TABLE_SEPARATOR shift-reduce 92 row ::= LINE_TABLE_SEPARATOR - LINE_TABLE_SEPARATOR reduce 72 ** Parsing conflict ** - LINE_TABLE shift-reduce 95 header_rows ::= LINE_TABLE - LINE_TABLE reduce 72 ** Parsing conflict ** - header_rows shift 47 - row shift-reduce 47 all_rows ::= all_rows row - {default} reduce 72 para ::= all_rows + LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY + LINE_EMPTY reduce 53 ** Parsing conflict ** + empty shift 23 + nested_chunk shift-reduce 26 nested_chunks ::= nested_chunks nested_chunk + {default} reduce 53 item_enum ::= LINE_LIST_ENUMERATED nested_chunks State 19: - blockquote ::= LINE_BLOCKQUOTE * quote_lines - (82) blockquote ::= LINE_BLOCKQUOTE * - quote_lines ::= * quote_lines quote_line - quote_lines ::= * quote_line - quote_line ::= * LINE_BLOCKQUOTE - quote_line ::= * LINE_CONTINUATION + nested_chunks ::= nested_chunks * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + empty ::= * empty LINE_EMPTY + empty ::= * LINE_EMPTY + (48) item_bullet ::= LINE_LIST_BULLETED nested_chunks * - LINE_CONTINUATION shift-reduce 85 quote_line ::= LINE_CONTINUATION - LINE_BLOCKQUOTE shift-reduce 84 quote_line ::= LINE_BLOCKQUOTE - LINE_BLOCKQUOTE reduce 82 ** Parsing conflict ** - quote_lines shift 37 - quote_line shift 37 /* because quote_line==quote_lines */ - {default} reduce 82 blockquote ::= LINE_BLOCKQUOTE + LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY + LINE_EMPTY reduce 48 ** Parsing conflict ** + empty shift 23 + nested_chunk shift-reduce 26 nested_chunks ::= nested_chunks nested_chunk + {default} reduce 48 item_bullet ::= LINE_LIST_BULLETED nested_chunks State 20: - para_lines ::= * para_lines para_line - para_lines ::= * para_line - para_line ::= * LINE_CONTINUATION - def_link ::= LINE_DEF_LINK * para_lines - (98) def_link ::= LINE_DEF_LINK * + chunk ::= * chunk chunk_line + chunk ::= * chunk_line + chunk_line ::= * LINE_CONTINUATION + nested_chunk ::= empty indented_line * chunk + (28) nested_chunk ::= empty indented_line * - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION - para_lines shift 39 - para_line shift 39 /* because para_line==para_lines */ - {default} reduce 98 def_link ::= LINE_DEF_LINK + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION + chunk shift 33 + chunk_line shift 33 /* because chunk_line==chunk */ + {default} reduce 28 nested_chunk ::= empty indented_line State 21: + nested_chunks ::= nested_chunks * nested_chunk + nested_chunk ::= * empty indented_line chunk + nested_chunk ::= * empty indented_line + nested_chunk ::= * empty + (29) ext_chunk ::= chunk nested_chunks * empty ::= * empty LINE_EMPTY empty ::= * LINE_EMPTY - cont_blocks ::= cont_blocks * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - (56) def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks * LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 56 ** Parsing conflict ** - empty shift 34 - cont_block shift-reduce 41 cont_blocks ::= cont_blocks cont_block - {default} reduce 56 def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks + LINE_EMPTY reduce 29 ** Parsing conflict ** + empty shift 23 + nested_chunk shift-reduce 26 nested_chunks ::= nested_chunks nested_chunk + {default} reduce 29 ext_chunk ::= chunk nested_chunks State 22: - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - cont_blocks ::= cont_blocks * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - (54) def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks * + fenced_block ::= fenced * LINE_FENCE_BACKTICK + (82) fenced_block ::= fenced * + fenced ::= fenced * fenced_line + fenced_line ::= * LINE_CONTINUATION + fenced_line ::= * LINE_EMPTY - LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 54 ** Parsing conflict ** - empty shift 34 - cont_block shift-reduce 41 cont_blocks ::= cont_blocks cont_block - {default} reduce 54 def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks + LINE_CONTINUATION shift-reduce 85 fenced_line ::= LINE_CONTINUATION + LINE_FENCE_BACKTICK shift-reduce 40 fenced_block ::= fenced LINE_FENCE_BACKTICK + LINE_FENCE_BACKTICK reduce 82 ** Parsing conflict ** + LINE_EMPTY shift-reduce 86 fenced_line ::= LINE_EMPTY + LINE_EMPTY reduce 82 ** Parsing conflict ** + fenced_line shift-reduce 41 fenced ::= fenced fenced_line + {default} reduce 82 fenced_block ::= fenced State 23: - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - cont_blocks ::= cont_blocks * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - (53) def_citation ::= LINE_DEF_CITATION cont_blocks * + nested_chunk ::= empty * indented_line chunk + nested_chunk ::= empty * indented_line + (68) nested_chunk ::= empty * + indented_line ::= * LINE_INDENTED_TAB + indented_line ::= * LINE_INDENTED_SPACE + empty ::= empty * LINE_EMPTY - LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 53 ** Parsing conflict ** - empty shift 34 - cont_block shift-reduce 41 cont_blocks ::= cont_blocks cont_block - {default} reduce 53 def_citation ::= LINE_DEF_CITATION cont_blocks + LINE_INDENTED_TAB shift-reduce 69 indented_line ::= LINE_INDENTED_TAB + LINE_INDENTED_TAB reduce 68 ** Parsing conflict ** + LINE_INDENTED_SPACE shift-reduce 70 indented_line ::= LINE_INDENTED_SPACE + LINE_INDENTED_SPACE reduce 68 ** Parsing conflict ** + LINE_EMPTY shift-reduce 39 empty ::= empty LINE_EMPTY + LINE_EMPTY reduce 68 ** Parsing conflict ** + indented_line shift 20 + {default} reduce 68 nested_chunk ::= empty State 24: - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - cont_blocks ::= cont_blocks * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty - (51) def_citation ::= LINE_DEF_CITATION para_lines cont_blocks * - - LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 51 ** Parsing conflict ** - empty shift 34 - cont_block shift-reduce 41 cont_blocks ::= cont_blocks cont_block - {default} reduce 51 def_citation ::= LINE_DEF_CITATION para_lines cont_blocks + (19) block ::= indented_code * + indented_line ::= * LINE_INDENTED_TAB + indented_line ::= * LINE_INDENTED_SPACE + indented_code ::= indented_code * indented_line + indented_code ::= indented_code * LINE_EMPTY + + LINE_INDENTED_TAB shift-reduce 69 indented_line ::= LINE_INDENTED_TAB + LINE_INDENTED_TAB reduce 19 ** Parsing conflict ** + LINE_INDENTED_SPACE shift-reduce 70 indented_line ::= LINE_INDENTED_SPACE + LINE_INDENTED_SPACE reduce 19 ** Parsing conflict ** + LINE_EMPTY shift-reduce 44 indented_code ::= indented_code LINE_EMPTY + LINE_EMPTY reduce 19 ** Parsing conflict ** + indented_line shift-reduce 43 indented_code ::= indented_code indented_line + {default} reduce 19 block ::= indented_code State 25: - para ::= LINE_PLAIN * para_lines - (73) para ::= LINE_PLAIN * - para_lines ::= * para_lines para_line - para_lines ::= * para_line - para_line ::= * LINE_CONTINUATION + (22) block ::= meta_block * + meta_block ::= meta_block * meta_line + meta_line ::= * LINE_META + meta_line ::= * LINE_CONTINUATION - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION - para_lines shift 40 - para_line shift 40 /* because para_line==para_lines */ - {default} reduce 73 para ::= LINE_PLAIN + LINE_CONTINUATION shift-reduce 95 meta_line ::= LINE_CONTINUATION + LINE_META shift-reduce 94 meta_line ::= LINE_META + LINE_META reduce 22 ** Parsing conflict ** + meta_line shift-reduce 55 meta_block ::= meta_block meta_line + {default} reduce 22 block ::= meta_block State 26: - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - (39) item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks * - cont_blocks ::= cont_blocks * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty + (18) block ::= html_block * + html_block ::= html_block * html_line + html_line ::= * LINE_CONTINUATION + html_line ::= * LINE_HTML - LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 39 ** Parsing conflict ** - empty shift 34 - cont_block shift-reduce 41 cont_blocks ::= cont_blocks cont_block - {default} reduce 39 item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks + LINE_CONTINUATION shift-reduce 88 html_line ::= LINE_CONTINUATION + LINE_HTML shift-reduce 89 html_line ::= LINE_HTML + LINE_HTML reduce 18 ** Parsing conflict ** + html_line shift-reduce 42 html_block ::= html_block html_line + {default} reduce 18 block ::= html_block State 27: - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - (37) item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks * - cont_blocks ::= cont_blocks * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty + (11) block ::= blockquote * + blockquote ::= blockquote * quote_line + quote_line ::= * LINE_BLOCKQUOTE + quote_line ::= * LINE_CONTINUATION - LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 37 ** Parsing conflict ** - empty shift 34 - cont_block shift-reduce 41 cont_blocks ::= cont_blocks cont_block - {default} reduce 37 item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks + LINE_CONTINUATION shift-reduce 76 quote_line ::= LINE_CONTINUATION + LINE_BLOCKQUOTE shift-reduce 75 quote_line ::= LINE_BLOCKQUOTE + LINE_BLOCKQUOTE reduce 11 ** Parsing conflict ** + quote_line shift-reduce 31 blockquote ::= blockquote quote_line + {default} reduce 11 block ::= blockquote State 28: - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - (34) item_bulleted ::= LINE_LIST_BULLETED cont_blocks * - cont_blocks ::= cont_blocks * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty + chunk ::= chunk * chunk_line + chunk_line ::= * LINE_CONTINUATION + (56) para ::= LINE_PLAIN chunk * - LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 34 ** Parsing conflict ** - empty shift 34 - cont_block shift-reduce 41 cont_blocks ::= cont_blocks cont_block - {default} reduce 34 item_bulleted ::= LINE_LIST_BULLETED cont_blocks + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION + chunk_line shift-reduce 25 chunk ::= chunk chunk_line + {default} reduce 56 para ::= LINE_PLAIN chunk State 29: - empty ::= * empty LINE_EMPTY - empty ::= * LINE_EMPTY - (32) item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks * - cont_blocks ::= cont_blocks * cont_block - cont_block ::= * empty indented_line para_lines - cont_block ::= * empty indented_line - cont_block ::= * empty + defs ::= defs * def + def ::= * def LINE_CONTINUATION + def ::= * LINE_DEFINITION + (103) para ::= defs * - LINE_EMPTY shift-reduce 81 empty ::= LINE_EMPTY - LINE_EMPTY reduce 32 ** Parsing conflict ** - empty shift 34 - cont_block shift-reduce 41 cont_blocks ::= cont_blocks cont_block - {default} reduce 32 item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks + LINE_DEFINITION shift-reduce 80 def ::= LINE_DEFINITION + LINE_DEFINITION reduce 103 ** Parsing conflict ** + def shift 38 + {default} reduce 103 para ::= defs State 30: - para_lines ::= * para_lines para_line - para_lines ::= * para_line - para_line ::= * LINE_CONTINUATION - cont_block ::= empty indented_line * para_lines - (43) cont_block ::= empty indented_line * + chunk ::= chunk * chunk_line + chunk_line ::= * LINE_CONTINUATION + (34) def_link ::= LINE_DEF_LINK chunk * - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION - para_lines shift 42 - para_line shift 42 /* because para_line==para_lines */ - {default} reduce 43 cont_block ::= empty indented_line + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION + chunk_line shift-reduce 25 chunk ::= chunk chunk_line + {default} reduce 34 def_link ::= LINE_DEF_LINK chunk State 31: - (3) block ::= para * - definition_block ::= para * defs - defs ::= * defs def - defs ::= * def - def ::= * LINE_DEFINITION def_lines + (35) definition_block ::= para defs * + defs ::= defs * def + def ::= * def LINE_CONTINUATION def ::= * LINE_DEFINITION - LINE_DEFINITION shift 44 - LINE_DEFINITION reduce 3 ** Parsing conflict ** - defs shift 45 - def shift 45 /* because def==defs */ - {default} reduce 3 block ::= para + LINE_DEFINITION shift-reduce 80 def ::= LINE_DEFINITION + LINE_DEFINITION reduce 35 ** Parsing conflict ** + def shift 38 + {default} reduce 35 definition_block ::= para defs State 32: - fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines * LINE_FENCE_BACKTICK - (63) fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines * - fenced_lines ::= fenced_lines * fenced_line - fenced_line ::= * LINE_CONTINUATION - fenced_line ::= * LINE_EMPTY - - LINE_CONTINUATION shift-reduce 105 fenced_line ::= LINE_CONTINUATION - LINE_FENCE_BACKTICK shift-reduce 62 fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK - LINE_FENCE_BACKTICK reduce 63 ** Parsing conflict ** - LINE_EMPTY shift-reduce 106 fenced_line ::= LINE_EMPTY - LINE_EMPTY reduce 63 ** Parsing conflict ** - fenced_line shift-reduce 64 fenced_lines ::= fenced_lines fenced_line - {default} reduce 63 fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines + (21) block ::= list_enum * + list_enum ::= list_enum * item_enum + item_enum ::= * LINE_LIST_ENUMERATED ext_chunk + item_enum ::= * LINE_LIST_ENUMERATED chunk + item_enum ::= * LINE_LIST_ENUMERATED nested_chunks + item_enum ::= * LINE_LIST_ENUMERATED + + LINE_LIST_ENUMERATED shift 4 + LINE_LIST_ENUMERATED reduce 21 ** Parsing conflict ** + item_enum shift-reduce 50 list_enum ::= list_enum item_enum + {default} reduce 21 block ::= list_enum State 33: - fenced_block ::= LINE_FENCE_BACKTICK fenced_lines * LINE_FENCE_BACKTICK - (61) fenced_block ::= LINE_FENCE_BACKTICK fenced_lines * - fenced_lines ::= fenced_lines * fenced_line - fenced_line ::= * LINE_CONTINUATION - fenced_line ::= * LINE_EMPTY + chunk ::= chunk * chunk_line + chunk_line ::= * LINE_CONTINUATION + (27) nested_chunk ::= empty indented_line chunk * - LINE_CONTINUATION shift-reduce 105 fenced_line ::= LINE_CONTINUATION - LINE_FENCE_BACKTICK shift-reduce 60 fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK - LINE_FENCE_BACKTICK reduce 61 ** Parsing conflict ** - LINE_EMPTY shift-reduce 106 fenced_line ::= LINE_EMPTY - LINE_EMPTY reduce 61 ** Parsing conflict ** - fenced_line shift-reduce 64 fenced_lines ::= fenced_lines fenced_line - {default} reduce 61 fenced_block ::= LINE_FENCE_BACKTICK fenced_lines + LINE_CONTINUATION shift-reduce 66 chunk_line ::= LINE_CONTINUATION + chunk_line shift-reduce 25 chunk ::= chunk chunk_line + {default} reduce 27 nested_chunk ::= empty indented_line chunk State 34: - indented_line ::= * LINE_INDENTED_TAB - indented_line ::= * LINE_INDENTED_SPACE - empty ::= empty * LINE_EMPTY - cont_block ::= empty * indented_line para_lines - cont_block ::= empty * indented_line - (89) cont_block ::= empty * - - LINE_INDENTED_TAB shift-reduce 79 indented_line ::= LINE_INDENTED_TAB - LINE_INDENTED_TAB reduce 89 ** Parsing conflict ** - LINE_INDENTED_SPACE shift-reduce 80 indented_line ::= LINE_INDENTED_SPACE - LINE_INDENTED_SPACE reduce 89 ** Parsing conflict ** - LINE_EMPTY shift-reduce 28 empty ::= empty LINE_EMPTY - LINE_EMPTY reduce 89 ** Parsing conflict ** - indented_line shift 30 - {default} reduce 89 cont_block ::= empty + (20) block ::= list_bullet * + list_bullet ::= list_bullet * item_bullet + item_bullet ::= * LINE_LIST_BULLETED ext_chunk + item_bullet ::= * LINE_LIST_BULLETED chunk + item_bullet ::= * LINE_LIST_BULLETED nested_chunks + item_bullet ::= * LINE_LIST_BULLETED + + LINE_LIST_BULLETED shift 5 + LINE_LIST_BULLETED reduce 20 ** Parsing conflict ** + item_bullet shift-reduce 45 list_bullet ::= list_bullet item_bullet + {default} reduce 20 block ::= list_bullet State 35: - (65) meta_block ::= LINE_META meta_lines * - meta_lines ::= meta_lines * meta_line - meta_line ::= * LINE_META - meta_line ::= * LINE_CONTINUATION + table_header ::= header_rows * LINE_TABLE_SEPARATOR + header_rows ::= header_rows * LINE_TABLE + (101) row ::= header_rows * - LINE_CONTINUATION shift-reduce 110 meta_line ::= LINE_CONTINUATION - LINE_META shift-reduce 109 meta_line ::= LINE_META - LINE_META reduce 65 ** Parsing conflict ** - meta_line shift-reduce 66 meta_lines ::= meta_lines meta_line - {default} reduce 65 meta_block ::= LINE_META meta_lines + LINE_TABLE_SEPARATOR shift-reduce 58 table_header ::= header_rows LINE_TABLE_SEPARATOR + LINE_TABLE_SEPARATOR reduce 101 ** Parsing conflict ** + LINE_TABLE shift-reduce 59 header_rows ::= header_rows LINE_TABLE + LINE_TABLE reduce 101 ** Parsing conflict ** + {default} reduce 101 row ::= header_rows State 36: - (58) html_block ::= LINE_HTML html_block_lines * - html_block_lines ::= html_block_lines * html_block_line - html_block_line ::= * LINE_CONTINUATION - html_block_line ::= * LINE_HTML + header_rows ::= header_rows * LINE_TABLE + (101) row ::= header_rows * - LINE_CONTINUATION shift-reduce 101 html_block_line ::= LINE_CONTINUATION - LINE_HTML shift-reduce 102 html_block_line ::= LINE_HTML - LINE_HTML reduce 58 ** Parsing conflict ** - html_block_line shift-reduce 59 html_block_lines ::= html_block_lines html_block_line - {default} reduce 58 html_block ::= LINE_HTML html_block_lines + LINE_TABLE shift-reduce 59 header_rows ::= header_rows LINE_TABLE + LINE_TABLE reduce 101 ** Parsing conflict ** + {default} reduce 101 row ::= header_rows State 37: - (29) blockquote ::= LINE_BLOCKQUOTE quote_lines * - quote_lines ::= quote_lines * quote_line - quote_line ::= * LINE_BLOCKQUOTE - quote_line ::= * LINE_CONTINUATION + (37) defs ::= def * + def ::= def * LINE_CONTINUATION - LINE_CONTINUATION shift-reduce 85 quote_line ::= LINE_CONTINUATION - LINE_BLOCKQUOTE shift-reduce 84 quote_line ::= LINE_BLOCKQUOTE - LINE_BLOCKQUOTE reduce 29 ** Parsing conflict ** - quote_line shift-reduce 30 quote_lines ::= quote_lines quote_line - {default} reduce 29 blockquote ::= LINE_BLOCKQUOTE quote_lines + LINE_CONTINUATION shift-reduce 38 def ::= def LINE_CONTINUATION + {default} reduce 37 defs ::= def State 38: - defs ::= defs * def - def ::= * LINE_DEFINITION def_lines - def ::= * LINE_DEFINITION - (113) para ::= defs * + (36) defs ::= defs def * + def ::= def * LINE_CONTINUATION - LINE_DEFINITION shift 44 - LINE_DEFINITION reduce 113 ** Parsing conflict ** - def shift-reduce 68 defs ::= defs def - {default} reduce 113 para ::= defs + LINE_CONTINUATION shift-reduce 38 def ::= def LINE_CONTINUATION + {default} reduce 36 defs ::= defs def State 39: - para_lines ::= para_lines * para_line - para_line ::= * LINE_CONTINUATION - (57) def_link ::= LINE_DEF_LINK para_lines * - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION - para_line shift-reduce 26 para_lines ::= para_lines para_line - {default} reduce 57 def_link ::= LINE_DEF_LINK para_lines - -State 40: - (25) para ::= LINE_PLAIN para_lines * - para_lines ::= para_lines * para_line - para_line ::= * LINE_CONTINUATION - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION - para_line shift-reduce 26 para_lines ::= para_lines para_line - {default} reduce 25 para ::= LINE_PLAIN para_lines - -State 41: - (13) block ::= list_enumerated * - list_enumerated ::= list_enumerated * item_enumerated - item_enumerated ::= * LINE_LIST_ENUMERATED para_lines cont_blocks - item_enumerated ::= * LINE_LIST_ENUMERATED para_lines - item_enumerated ::= * LINE_LIST_ENUMERATED cont_blocks - item_enumerated ::= * LINE_LIST_ENUMERATED - - LINE_LIST_ENUMERATED shift 5 - LINE_LIST_ENUMERATED reduce 13 ** Parsing conflict ** - item_enumerated shift-reduce 36 list_enumerated ::= list_enumerated item_enumerated - {default} reduce 13 block ::= list_enumerated - -State 42: - para_lines ::= para_lines * para_line - para_line ::= * LINE_CONTINUATION - (42) cont_block ::= empty indented_line para_lines * - - LINE_CONTINUATION shift-reduce 75 para_line ::= LINE_CONTINUATION - para_line shift-reduce 26 para_lines ::= para_lines para_line - {default} reduce 42 cont_block ::= empty indented_line para_lines - -State 43: - (12) block ::= list_bulleted * - list_bulleted ::= list_bulleted * item_bulleted - item_bulleted ::= * LINE_LIST_BULLETED para_lines cont_blocks - item_bulleted ::= * LINE_LIST_BULLETED para_lines - item_bulleted ::= * LINE_LIST_BULLETED cont_blocks - item_bulleted ::= * LINE_LIST_BULLETED - - LINE_LIST_BULLETED shift 6 - LINE_LIST_BULLETED reduce 12 ** Parsing conflict ** - item_bulleted shift-reduce 31 list_bulleted ::= list_bulleted item_bulleted - {default} reduce 12 block ::= list_bulleted - -State 44: - def ::= LINE_DEFINITION * def_lines - (70) def ::= LINE_DEFINITION * - def_lines ::= * def_lines LINE_CONTINUATION - def_lines ::= * LINE_CONTINUATION - - LINE_CONTINUATION shift-reduce 112 def_lines ::= LINE_CONTINUATION - def_lines shift 49 - {default} reduce 70 def ::= LINE_DEFINITION - -State 45: - (67) definition_block ::= para defs * - defs ::= defs * def - def ::= * LINE_DEFINITION def_lines - def ::= * LINE_DEFINITION - - LINE_DEFINITION shift 44 - LINE_DEFINITION reduce 67 ** Parsing conflict ** - def shift-reduce 68 defs ::= defs def - {default} reduce 67 definition_block ::= para defs - -State 46: - table_header ::= header_rows * LINE_TABLE_SEPARATOR - (91) row ::= header_rows * - header_rows ::= header_rows * LINE_TABLE - - LINE_TABLE_SEPARATOR shift-reduce 44 table_header ::= header_rows LINE_TABLE_SEPARATOR - LINE_TABLE_SEPARATOR reduce 91 ** Parsing conflict ** - LINE_TABLE shift-reduce 50 header_rows ::= header_rows LINE_TABLE - LINE_TABLE reduce 91 ** Parsing conflict ** - {default} reduce 91 row ::= header_rows - -State 47: - (91) row ::= header_rows * - header_rows ::= header_rows * LINE_TABLE - - LINE_TABLE shift-reduce 50 header_rows ::= header_rows LINE_TABLE - LINE_TABLE reduce 91 ** Parsing conflict ** - {default} reduce 91 row ::= header_rows - -State 48: - (11) block ::= empty * + (16) block ::= empty * empty ::= empty * LINE_EMPTY - LINE_EMPTY shift-reduce 28 empty ::= empty LINE_EMPTY - LINE_EMPTY reduce 11 ** Parsing conflict ** - {default} reduce 11 block ::= empty - -State 49: - (69) def ::= LINE_DEFINITION def_lines * - def_lines ::= def_lines * LINE_CONTINUATION - - LINE_CONTINUATION shift-reduce 71 def_lines ::= def_lines LINE_CONTINUATION - {default} reduce 69 def ::= LINE_DEFINITION def_lines + LINE_EMPTY shift-reduce 39 empty ::= empty LINE_EMPTY + LINE_EMPTY reduce 16 ** Parsing conflict ** + {default} reduce 16 block ::= empty ---------------------------------------------------- Symbols: @@ -1035,49 +879,47 @@ Symbols: 21: LINE_FENCE_BACKTICK 22: LINE_FENCE_BACKTICK_START 23: LINE_TOC - 24: LINE_EMPTY - 25: LINE_META - 26: LINE_DEFINITION + 24: LINE_DEFINITION + 25: LINE_EMPTY + 26: LINE_META 27: error: - 28: doc: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_HR LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_TOC LINE_EMPTY LINE_META LINE_DEFINITION - 29: blocks: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_HR LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_TOC LINE_EMPTY LINE_META LINE_DEFINITION - 30: block: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_HR LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_TOC LINE_EMPTY LINE_META LINE_DEFINITION - 31: para: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION - 32: indented_code: LINE_INDENTED_TAB LINE_INDENTED_SPACE - 33: empty: LINE_EMPTY - 34: list_bulleted: LINE_LIST_BULLETED - 35: list_enumerated: LINE_LIST_ENUMERATED - 36: blockquote: LINE_BLOCKQUOTE - 37: table: LINE_TABLE - 38: def_citation: LINE_DEF_CITATION - 39: def_footnote: LINE_DEF_FOOTNOTE - 40: def_link: LINE_DEF_LINK - 41: html_block: LINE_HTML - 42: fenced_block: LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START - 43: meta_block: LINE_META - 44: definition_block: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION - 45: para_lines: LINE_CONTINUATION - 46: para_line: LINE_CONTINUATION - 47: code_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_EMPTY - 48: indented_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE - 49: quote_lines: LINE_CONTINUATION LINE_BLOCKQUOTE - 50: quote_line: LINE_CONTINUATION LINE_BLOCKQUOTE - 51: item_bulleted: LINE_LIST_BULLETED - 52: cont_blocks: LINE_EMPTY - 53: item_enumerated: LINE_LIST_ENUMERATED - 54: cont_block: LINE_EMPTY - 55: table_header: LINE_TABLE - 56: header_rows: LINE_TABLE - 57: table_section: LINE_TABLE_SEPARATOR LINE_TABLE - 58: all_rows: LINE_TABLE_SEPARATOR LINE_TABLE - 59: row: LINE_TABLE_SEPARATOR LINE_TABLE - 60: table_body: LINE_TABLE_SEPARATOR LINE_TABLE - 61: html_block_lines: LINE_CONTINUATION LINE_HTML - 62: html_block_line: LINE_CONTINUATION LINE_HTML - 63: fenced_lines: LINE_CONTINUATION LINE_EMPTY - 64: fenced_line: LINE_CONTINUATION LINE_EMPTY - 65: meta_lines: LINE_CONTINUATION LINE_META - 66: meta_line: LINE_CONTINUATION LINE_META - 67: defs: LINE_DEFINITION - 68: def: LINE_DEFINITION - 69: def_lines: LINE_CONTINUATION + 28: doc: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_HR LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_TOC LINE_DEFINITION LINE_EMPTY LINE_META + 29: blocks: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_HR LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_TOC LINE_DEFINITION LINE_EMPTY LINE_META + 30: block: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE LINE_HTML LINE_ATX_1 LINE_ATX_2 LINE_ATX_3 LINE_ATX_4 LINE_ATX_5 LINE_ATX_6 LINE_HR LINE_BLOCKQUOTE LINE_LIST_BULLETED LINE_LIST_ENUMERATED LINE_DEF_CITATION LINE_DEF_FOOTNOTE LINE_DEF_LINK LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START LINE_TOC LINE_DEFINITION LINE_EMPTY LINE_META + 31: blockquote: LINE_BLOCKQUOTE + 32: def_citation: LINE_DEF_CITATION + 33: def_footnote: LINE_DEF_FOOTNOTE + 34: def_link: LINE_DEF_LINK + 35: definition_block: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION + 36: empty: LINE_EMPTY + 37: fenced_block: LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START + 38: html_block: LINE_HTML + 39: indented_code: LINE_INDENTED_TAB LINE_INDENTED_SPACE + 40: list_bullet: LINE_LIST_BULLETED + 41: list_enum: LINE_LIST_ENUMERATED + 42: meta_block: LINE_META + 43: para: LINE_PLAIN LINE_TABLE_SEPARATOR LINE_TABLE LINE_DEFINITION + 44: table: LINE_TABLE + 45: chunk: LINE_CONTINUATION + 46: chunk_line: LINE_CONTINUATION + 47: nested_chunks: LINE_EMPTY + 48: nested_chunk: LINE_EMPTY + 49: indented_line: LINE_INDENTED_TAB LINE_INDENTED_SPACE + 50: ext_chunk: LINE_CONTINUATION + 51: opt_ext_chunk: LINE_CONTINUATION + 52: tail: LINE_CONTINUATION LINE_EMPTY + 53: quote_line: LINE_CONTINUATION LINE_BLOCKQUOTE + 54: defs: LINE_DEFINITION + 55: def: LINE_DEFINITION + 56: fenced: LINE_FENCE_BACKTICK LINE_FENCE_BACKTICK_START + 57: fenced_line: LINE_CONTINUATION LINE_EMPTY + 58: html_line: LINE_CONTINUATION LINE_HTML + 59: item_bullet: LINE_LIST_BULLETED + 60: item_enum: LINE_LIST_ENUMERATED + 61: meta_line: LINE_CONTINUATION LINE_META + 62: table_header: LINE_TABLE + 63: table_body: LINE_TABLE_SEPARATOR LINE_TABLE + 64: header_rows: LINE_TABLE + 65: table_section: LINE_TABLE_SEPARATOR LINE_TABLE + 66: all_rows: LINE_TABLE_SEPARATOR LINE_TABLE + 67: row: LINE_TABLE_SEPARATOR LINE_TABLE diff --git a/src/parser.y b/src/parser.y index 1196bc6..416e7fe 100644 --- a/src/parser.y +++ b/src/parser.y @@ -89,168 +89,208 @@ blocks(A) ::= block(B). A = B; } - -block(A) ::= para(B). { A = token_new_parent(B, BLOCK_PARA); is_para_html(engine, A); } -block(A) ::= indented_code(B). { A = token_new_parent(B, BLOCK_CODE_INDENTED); } -block(A) ::= LINE_ATX_1(B). { A = token_new_parent(B, BLOCK_H1); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } -block(A) ::= LINE_ATX_2(B). { A = token_new_parent(B, BLOCK_H2); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } -block(A) ::= LINE_ATX_3(B). { A = token_new_parent(B, BLOCK_H3); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } -block(A) ::= LINE_ATX_4(B). { A = token_new_parent(B, BLOCK_H4); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } -block(A) ::= LINE_ATX_5(B). { A = token_new_parent(B, BLOCK_H5); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } -block(A) ::= LINE_ATX_6(B). { A = token_new_parent(B, BLOCK_H6); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } -block(A) ::= empty(B). { A = token_new_parent(B, BLOCK_EMPTY); } -block(A) ::= list_bulleted(B). { A = token_new_parent(B, BLOCK_LIST_BULLETED); is_list_loose(A); } -block(A) ::= list_enumerated(B). { A = token_new_parent(B, BLOCK_LIST_ENUMERATED); is_list_loose(A); } -block(A) ::= blockquote(B). { A = token_new_parent(B, BLOCK_BLOCKQUOTE); recursive_parse_blockquote(engine, A); } -block(A) ::= table(B). { A = token_new_parent(B, BLOCK_TABLE); } -block(A) ::= LINE_HR(B). { A = token_new_parent(B, BLOCK_HR); } -block(A) ::= def_citation(B). { A = token_new_parent(B, BLOCK_DEF_CITATION); stack_push(engine->definition_stack, A); } -block(A) ::= def_footnote(B). { A = token_new_parent(B, BLOCK_DEF_FOOTNOTE); stack_push(engine->definition_stack, A); } -block(A) ::= def_link(B). { A = token_new_parent(B, BLOCK_DEF_LINK); stack_push(engine->definition_stack, A); } -block(A) ::= html_block(B). { A = token_new_parent(B, BLOCK_HTML); } -block(A) ::= fenced_block(B). { A = token_new_parent(B, BLOCK_CODE_FENCED); B->child->type = CODE_FENCE; } -block(A) ::= meta_block(B). { A = token_new_parent(B, BLOCK_META); } -block(A) ::= LINE_TOC(B). { A = token_new_parent(B, BLOCK_TOC); } -block(A) ::= definition_block(B). { A = token_new_parent(B, BLOCK_DEFLIST); } - -para(A) ::= LINE_PLAIN(B) para_lines(C). { A = B; token_chain_append(B, C); } -para ::= LINE_PLAIN. -para_lines(A) ::= para_lines(B) para_line(C). { A = B; token_chain_append(B, C); } -para_lines ::= para_line. +// Blocks -para_line ::= LINE_CONTINUATION. +// Single line blocks -indented_code(A) ::= indented_code(B) code_line(C). { A = B; token_chain_append(B, C); } -indented_code ::= indented_line. +block(A) ::= LINE_ATX_1(B). { A = token_new_parent(B, BLOCK_H1); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } +block(A) ::= LINE_ATX_2(B). { A = token_new_parent(B, BLOCK_H2); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } +block(A) ::= LINE_ATX_3(B). { A = token_new_parent(B, BLOCK_H3); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } +block(A) ::= LINE_ATX_4(B). { A = token_new_parent(B, BLOCK_H4); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } +block(A) ::= LINE_ATX_5(B). { A = token_new_parent(B, BLOCK_H5); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } +block(A) ::= LINE_ATX_6(B). { A = token_new_parent(B, BLOCK_H6); if (!(engine->extensions & EXT_NO_LABELS)) stack_push(engine->header_stack, A); } -code_line ::= indented_line. -code_line ::= LINE_EMPTY. +block(A) ::= LINE_HR(B). { A = token_new_parent(B, BLOCK_HR); } -indented_line ::= LINE_INDENTED_TAB. -indented_line ::= LINE_INDENTED_SPACE. +block(A) ::= LINE_TOC(B). { A = token_new_parent(B, BLOCK_TOC); } -empty(A) ::= empty(B) LINE_EMPTY(C). { A = B; token_chain_append(B, C); } -empty ::= LINE_EMPTY. -blockquote(A) ::= LINE_BLOCKQUOTE(B) quote_lines(C). { A = B; token_chain_append(B, C); } -blockquote ::= LINE_BLOCKQUOTE. +// Multi-line blocks -quote_lines(A) ::= quote_lines(B) quote_line(C). { A = B; token_chain_append(B, C); } -quote_lines ::= quote_line. +block(A) ::= blockquote(B). { A = token_new_parent(B, BLOCK_BLOCKQUOTE); recursive_parse_blockquote(engine, A); } +block(A) ::= def_citation(B). { A = token_new_parent(B, BLOCK_DEF_CITATION); stack_push(engine->definition_stack, A); } +block(A) ::= def_footnote(B). { A = token_new_parent(B, BLOCK_DEF_FOOTNOTE); stack_push(engine->definition_stack, A); } +block(A) ::= def_link(B). { A = token_new_parent(B, BLOCK_DEF_LINK); stack_push(engine->definition_stack, A); } +block(A) ::= definition_block(B). { A = token_new_parent(B, BLOCK_DEFLIST); } +block(A) ::= empty(B). { A = token_new_parent(B, BLOCK_EMPTY); } +block(A) ::= fenced_block(B). { A = token_new_parent(B, BLOCK_CODE_FENCED); B->child->type = CODE_FENCE; } +block(A) ::= html_block(B). { A = token_new_parent(B, BLOCK_HTML); } +block(A) ::= indented_code(B). { A = token_new_parent(B, BLOCK_CODE_INDENTED); } +block(A) ::= list_bullet(B). { A = token_new_parent(B, BLOCK_LIST_BULLETED); is_list_loose(A); } +block(A) ::= list_enum(B). { A = token_new_parent(B, BLOCK_LIST_ENUMERATED); is_list_loose(A); } +block(A) ::= meta_block(B). { A = token_new_parent(B, BLOCK_META); } +block(A) ::= para(B). { A = token_new_parent(B, BLOCK_PARA); is_para_html(engine, A); } +block(A) ::= table(B). { A = token_new_parent(B, BLOCK_TABLE); } -quote_line ::= LINE_BLOCKQUOTE. -quote_line ::= LINE_CONTINUATION. -list_bulleted(A) ::= list_bulleted(B) item_bulleted(C). { A = B; token_chain_append(B, C); } -list_bulleted ::= item_bulleted. +// Reusable components -item_bulleted(A) ::= LINE_LIST_BULLETED(B) para_lines(C) cont_blocks(D). { token_chain_append(B, C); token_chain_append(B, D); A = token_new_parent(B, BLOCK_LIST_ITEM); recursive_parse_list_item(engine, A); } -item_bulleted(A) ::= LINE_LIST_BULLETED(B) para_lines(C). { token_chain_append(B, C); A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); recursive_parse_list_item(engine, A); } -item_bulleted(A) ::= LINE_LIST_BULLETED(B) cont_blocks(C). { token_chain_append(B, C); A = token_new_parent(B, BLOCK_LIST_ITEM); if (C) {recursive_parse_list_item(engine, A);} } -item_bulleted(A) ::= LINE_LIST_BULLETED(B). { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); } +// A "chunk" allows you to grab all regular lines before the next empty line. +// For example, to grab all lines after the first line in a paragraph. +// You will want to specify a certain line type to start a chunk, but +// this can grab the remaining lines, if any. -list_enumerated(A) ::= list_enumerated(B) item_enumerated(C). { A = B; token_chain_append(B, C); } -list_enumerated ::= item_enumerated. +chunk(A) ::= chunk(B) chunk_line(C). { A = B; token_chain_append(B, C); } +chunk ::= chunk_line. -item_enumerated(A) ::= LINE_LIST_ENUMERATED(B) para_lines(C) cont_blocks(D). { token_chain_append(B, C); token_chain_append(B, D); A = token_new_parent(B, BLOCK_LIST_ITEM); recursive_parse_list_item(engine, A); } -item_enumerated(A) ::= LINE_LIST_ENUMERATED(B) para_lines(C). { token_chain_append(B, C); A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); recursive_parse_list_item(engine, A); } -item_enumerated(A) ::= LINE_LIST_ENUMERATED(B) cont_blocks(C). { token_chain_append(B, C); A = token_new_parent(B, BLOCK_LIST_ITEM); recursive_parse_list_item(engine, A); } -item_enumerated(A) ::= LINE_LIST_ENUMERATED(B). { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); } +chunk_line ::= LINE_CONTINUATION. -cont_blocks(A) ::= cont_blocks(B) cont_block(C). { A = B; token_chain_append(B, C); } -cont_blocks ::= cont_block. -cont_block(A) ::= empty(B) indented_line(C) para_lines(D).{ A = B; token_chain_append(B, C); token_chain_append(B, D); C->type = LINE_CONTINUATION; } -cont_block(A) ::= empty(B) indented_line(C). { A = B; token_chain_append(B, C); C->type = LINE_CONTINUATION; } -cont_block ::= empty. +// A "nested chunk" is useful when a chunk can also include following blocks +// that have an extra level of indention to indicate that they belong together. +// For example, a list item can include multiple paragraphs, even other lists. +// This structure is also used in footnotes and definitions. +nested_chunks(A) ::= nested_chunks(B) nested_chunk(C). { A = B; token_chain_append(B, C); } +nested_chunks ::= nested_chunk. -table_header(A) ::= header_rows(B) LINE_TABLE_SEPARATOR(C). { A = token_new_parent(B, BLOCK_TABLE_HEADER); token_chain_append(B, C); } +nested_chunk(A) ::= empty(B) indented_line(C) chunk(D). { A = B; token_chain_append(B, C); token_chain_append(B, D); C->type = LINE_CONTINUATION; } +nested_chunk(A) ::= empty(B) indented_line(C). { A = B; token_chain_append(B, C); C->type = LINE_CONTINUATION; } +nested_chunk ::= empty. -table_section(A) ::= all_rows(B) LINE_EMPTY(C). { A = token_new_parent(B, BLOCK_TABLE_SECTION); token_chain_append(B, C); } -table_section(A) ::= all_rows(B). { A = token_new_parent(B, BLOCK_TABLE_SECTION); } +indented_line ::= LINE_INDENTED_TAB. +indented_line ::= LINE_INDENTED_SPACE. -all_rows(A) ::= all_rows(B) row(C). { A = B; token_chain_append(B, C); } -all_rows ::= row. -row ::= header_rows. -row ::= LINE_TABLE_SEPARATOR. +// Shortcut for optional chunk +//opt_chunk ::= chunk. +//opt_chunk ::= . -table(A) ::= table_header(B) table_body(C). { A = B; token_chain_append(B, C); } -table ::= table_header. -table_body(A) ::= table_body(B) table_section(C). { A = B; token_chain_append(B, C); } -table_body ::= table_section. +// Shortcut for "extended chunk" (chunk with following blocks) +ext_chunk(A) ::= chunk(B) nested_chunks(C). { A = B; token_chain_append(B, C); } -header_rows(A) ::= header_rows(B) LINE_TABLE(C). { A = B; token_chain_append(B, C); } -header_rows ::= LINE_TABLE. + +// Shortcut for optionally extended chunk +opt_ext_chunk(A) ::= chunk(B) nested_chunks(C). { A = B; token_chain_append(B, C); } +opt_ext_chunk ::= chunk. -def_citation(A) ::= LINE_DEF_CITATION(B) para_lines(C) cont_blocks(D). { A = B; token_chain_append(B, C); token_chain_append(B, D); } -def_citation(A) ::= LINE_DEF_CITATION(B) para_lines(C). { A = B; token_chain_append(B, C); } -def_citation(A) ::= LINE_DEF_CITATION(B) cont_blocks(C). { A = B; token_chain_append(B, C); } +// Shortcut for anything that falls into the extended chunk pattern +tail ::= opt_ext_chunk. +tail ::= nested_chunks. + + +// Blockquotes +blockquote(A) ::= blockquote(B) quote_line(C). { A = B; token_chain_append(B, C); } +blockquote ::= LINE_BLOCKQUOTE. + +quote_line ::= LINE_BLOCKQUOTE. +quote_line ::= LINE_CONTINUATION. + + +// Reference definitions +def_citation(A) ::= LINE_DEF_CITATION(B) tail(C). { A = B; token_chain_append(B, C); } def_citation ::= LINE_DEF_CITATION. -def_footnote(A) ::= LINE_DEF_FOOTNOTE(B) para_lines(C) cont_blocks(D). { A = B; token_chain_append(B, C); token_chain_append(B, D); } -def_footnote(A) ::= LINE_DEF_FOOTNOTE(B) para_lines(C). { A = B; token_chain_append(B, C); } -def_footnote(A) ::= LINE_DEF_FOOTNOTE(B) cont_blocks(C). { A = B; token_chain_append(B, C); } +def_footnote(A) ::= LINE_DEF_FOOTNOTE(B) tail(C). { A = B; token_chain_append(B, C); } def_footnote ::= LINE_DEF_FOOTNOTE. -def_link(A) ::= LINE_DEF_LINK(B) para_lines(C). { A = B; token_chain_append(B, C); } +def_link(A) ::= LINE_DEF_LINK(B) chunk(C). { A = B; token_chain_append(B, C); } def_link ::= LINE_DEF_LINK. -html_block(A) ::= LINE_HTML(B) html_block_lines(C). { A = B; token_chain_append(B, C); } -html_block ::= LINE_HTML. +// Definition lists +// Lemon's LALR(1) parser can't properly allow for detecting consecutive definition blocks and concatenating them, +// because 'para defs para' could be the beginning of the next definition, OR the next regular para. +// We have to bundle them when exporting, if desired. +definition_block(A) ::= para(B) defs(C). { A = B; token_chain_append(B, C); B->type = BLOCK_TERM; } -html_block_lines(A) ::= html_block_lines(B) html_block_line(C). { A = B; token_chain_append(B, C); } -html_block_lines ::= html_block_line. +defs(A) ::= defs(B) def(C). { A = B; token_chain_append(B, token_new_parent(C, BLOCK_DEFINITION)); } +defs(A) ::= def(B). { A = token_new_parent(B, BLOCK_DEFINITION); } -html_block_line ::= LINE_CONTINUATION. -html_block_line ::= LINE_HTML. +def(A) ::= def(B) LINE_CONTINUATION(C). { A = B; token_chain_append(B, C); } +def ::= LINE_DEFINITION. -fenced_block(A) ::= LINE_FENCE_BACKTICK(B) fenced_lines(C) LINE_FENCE_BACKTICK(D). { A = B; token_chain_append(B, C); token_chain_append(B, D); D->child->type = CODE_FENCE; } -fenced_block(A) ::= LINE_FENCE_BACKTICK(B) fenced_lines(C). { A = B; token_chain_append(B, C); } -fenced_block(A) ::= LINE_FENCE_BACKTICK_START(B) fenced_lines(C) LINE_FENCE_BACKTICK(D). { A = B; token_chain_append(B, C); token_chain_append(B, D); D->child->type = CODE_FENCE; } -fenced_block(A) ::= LINE_FENCE_BACKTICK_START(B) fenced_lines(C). { A = B; token_chain_append(B, C); } +// Empty lines +empty(A) ::= empty(B) LINE_EMPTY(C). { A = B; token_chain_append(B, C); } +empty ::= LINE_EMPTY. -fenced_lines(A) ::= fenced_lines(B) fenced_line(C). { A = B; token_chain_append(B, C); } -fenced_lines ::= fenced_line. -fenced_lines ::= . + +// Fenced code blocks +fenced_block(A) ::= fenced(B) LINE_FENCE_BACKTICK(C). { A = B; token_chain_append(B, C); C->child->type = CODE_FENCE; } +fenced_block ::= fenced. + +fenced(A) ::= fenced(B) fenced_line(C). { A = B; token_chain_append(B, C); } +fenced ::= LINE_FENCE_BACKTICK. +fenced ::= LINE_FENCE_BACKTICK_START. fenced_line ::= LINE_CONTINUATION. fenced_line ::= LINE_EMPTY. -meta_block(A) ::= LINE_META(B) meta_lines(C). { A = B; token_chain_append(B, C); } -meta_block ::= LINE_META. +// HTML +html_block(A) ::= html_block(B) html_line(C). { A = B; token_chain_append(B, C); } +html_block ::= LINE_HTML. + +html_line ::= LINE_CONTINUATION. +html_line ::= LINE_HTML. + + +// Indented code blocks +indented_code(A) ::= indented_code(B) indented_line(C). { A = B; token_chain_append(B, C); } +indented_code(A) ::= indented_code(B) LINE_EMPTY(C). { A = B; token_chain_append(B, C); } +indented_code ::= indented_line. + + +// Bulleted lists +list_bullet(A) ::= list_bullet(B) item_bullet(C). { A = B; token_chain_append(B, C); } +list_bullet ::= item_bullet. + +item_bullet(A) ::= LINE_LIST_BULLETED(B) ext_chunk(C). { A = token_new_parent(B, BLOCK_LIST_ITEM); token_chain_append(B, C); recursive_parse_list_item(engine, A); } +item_bullet(A) ::= LINE_LIST_BULLETED(B) chunk(C). { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); token_chain_append(B, C); recursive_parse_list_item(engine, A); } +item_bullet(A) ::= LINE_LIST_BULLETED(B) nested_chunks(C). { A = token_new_parent(B, BLOCK_LIST_ITEM); token_chain_append(B, C); recursive_parse_list_item(engine, A); } +item_bullet(A) ::= LINE_LIST_BULLETED(B). { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); } -meta_lines(A) ::= meta_lines(B) meta_line(C). { A = B; token_chain_append(B, C); } -meta_lines ::= meta_line. + +// Enumerated lists +list_enum(A) ::= list_enum(B) item_enum(C). { A = B; token_chain_append(B, C); } +list_enum ::= item_enum. + +item_enum(A) ::= LINE_LIST_ENUMERATED(B) ext_chunk(C). { A = token_new_parent(B, BLOCK_LIST_ITEM); token_chain_append(B, C); recursive_parse_list_item(engine, A); } +item_enum(A) ::= LINE_LIST_ENUMERATED(B) chunk(C). { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); token_chain_append(B, C); recursive_parse_list_item(engine, A); } +item_enum(A) ::= LINE_LIST_ENUMERATED(B) nested_chunks(C). { A = token_new_parent(B, BLOCK_LIST_ITEM); token_chain_append(B, C); recursive_parse_list_item(engine, A); } +item_enum(A) ::= LINE_LIST_ENUMERATED(B). { A = token_new_parent(B, BLOCK_LIST_ITEM_TIGHT); } + + +// Metadata +meta_block(A) ::= meta_block(B) meta_line(C). { A = B; token_chain_append(B, C); } +meta_block ::= LINE_META. meta_line ::= LINE_META. meta_line ::= LINE_CONTINUATION. -// Lemon's LALR(1) parser can't properly allow for detecting consecutive definition blocks and concatenating them, -// because 'para defs para' could be the beginning of the next definition, OR the next regular para. -// We have to bundle them when exporting, if desired. -definition_block(A) ::= para(B) defs(C). { A = B; token_chain_append(B, C); B->type = BLOCK_TERM; } -defs(A) ::= defs(B) def(C). { A = B; token_chain_append(B, C); } -defs ::= def. +// Paragraphs +para(A) ::= LINE_PLAIN(B) chunk(C). { A = B; token_chain_append(B, C); } +para ::= LINE_PLAIN. + + +// Tables +table(A) ::= table_header(B) table_body(C). { A = B; token_chain_append(B, C); } +table ::= table_header. + +table_header(A) ::= header_rows(B) LINE_TABLE_SEPARATOR(C). { A = token_new_parent(B, BLOCK_TABLE_HEADER); token_chain_append(B, C); } -def(A) ::= LINE_DEFINITION(B) def_lines(C). { A = token_new_parent(B, BLOCK_DEFINITION); token_chain_append(B, C); } -def(A) ::= LINE_DEFINITION(B). { A = token_new_parent(B, BLOCK_DEFINITION); } +header_rows(A) ::= header_rows(B) LINE_TABLE(C). { A = B; token_chain_append(B, C); } +header_rows ::= LINE_TABLE. -def_lines(A) ::= def_lines(B) LINE_CONTINUATION(C). { A = B; token_chain_append(B, C); } -def_lines ::= LINE_CONTINUATION. +table_body(A) ::= table_body(B) table_section(C). { A = B; token_chain_append(B, C); } +table_body ::= table_section. + +table_section(A) ::= all_rows(B) LINE_EMPTY(C). { A = token_new_parent(B, BLOCK_TABLE_SECTION); token_chain_append(B, C); } +table_section(A) ::= all_rows(B). { A = token_new_parent(B, BLOCK_TABLE_SECTION); } + +all_rows(A) ::= all_rows(B) row(C). { A = B; token_chain_append(B, C); } +all_rows ::= row. + +row ::= header_rows. +row ::= LINE_TABLE_SEPARATOR. // Fallbacks for improper structures -// para(A) ::= table_section(B) LINE_EMPTY(C). { A = B; token_chain_append(B, C); } -// para(A) ::= table_section(B) para_lines(C). { A = B; token_chain_append(B, C); } para(A) ::= all_rows(B). { A = B; } para ::= defs. diff --git a/test/parser_test.y b/test/parser_test.y index 8684fe7..e5512cd 100644 --- a/test/parser_test.y +++ b/test/parser_test.y @@ -80,116 +80,106 @@ doc ::= blocks. blocks ::= blocks block. blocks ::= block. -block ::= para. -block ::= indented_code. block ::= LINE_ATX_1. block ::= LINE_ATX_2. block ::= LINE_ATX_3. block ::= LINE_ATX_4. block ::= LINE_ATX_5. block ::= LINE_ATX_6. -block ::= empty. -block ::= list_bulleted. -block ::= list_enumerated. -block ::= blockquote. -block ::= table. block ::= LINE_HR. +block ::= LINE_TOC. +block ::= blockquote. block ::= def_citation. block ::= def_footnote. block ::= def_link. -block ::= html_block. +block ::= definition_block. +block ::= empty. block ::= fenced_block. +block ::= html_block. +block ::= indented_code. +block ::= list_bullet. +block ::= list_enum. block ::= meta_block. -block ::= LINE_TOC. -block ::= definition_block. -para ::= LINE_PLAIN para_lines. -para_lines ::= para_lines para_line. -indented_code ::= indented_code code_line. +block ::= para. +block ::= table. +chunk ::= chunk chunk_line. +nested_chunks ::= nested_chunks nested_chunk. +nested_chunk ::= empty indented_line chunk. +nested_chunk ::= empty indented_line. +ext_chunk ::= chunk nested_chunks. +opt_ext_chunk ::= chunk nested_chunks. +blockquote ::= blockquote quote_line. +def_citation ::= LINE_DEF_CITATION tail. +def_footnote ::= LINE_DEF_FOOTNOTE tail. +def_link ::= LINE_DEF_LINK chunk. +definition_block ::= para defs. +defs ::= defs def. +defs ::= def. +def ::= def LINE_CONTINUATION. empty ::= empty LINE_EMPTY. -blockquote ::= LINE_BLOCKQUOTE quote_lines. -quote_lines ::= quote_lines quote_line. -list_bulleted ::= list_bulleted item_bulleted. -item_bulleted ::= LINE_LIST_BULLETED para_lines cont_blocks. -item_bulleted ::= LINE_LIST_BULLETED para_lines. -item_bulleted ::= LINE_LIST_BULLETED cont_blocks. -item_bulleted ::= LINE_LIST_BULLETED. -list_enumerated ::= list_enumerated item_enumerated. -item_enumerated ::= LINE_LIST_ENUMERATED para_lines cont_blocks. -item_enumerated ::= LINE_LIST_ENUMERATED para_lines. -item_enumerated ::= LINE_LIST_ENUMERATED cont_blocks. -item_enumerated ::= LINE_LIST_ENUMERATED. -cont_blocks ::= cont_blocks cont_block. -cont_block ::= empty indented_line para_lines. -cont_block ::= empty indented_line. +fenced_block ::= fenced LINE_FENCE_BACKTICK. +fenced ::= fenced fenced_line. +html_block ::= html_block html_line. +indented_code ::= indented_code indented_line. +indented_code ::= indented_code LINE_EMPTY. +list_bullet ::= list_bullet item_bullet. +item_bullet ::= LINE_LIST_BULLETED ext_chunk. +item_bullet ::= LINE_LIST_BULLETED chunk. +item_bullet ::= LINE_LIST_BULLETED nested_chunks. +item_bullet ::= LINE_LIST_BULLETED. +list_enum ::= list_enum item_enum. +item_enum ::= LINE_LIST_ENUMERATED ext_chunk. +item_enum ::= LINE_LIST_ENUMERATED chunk. +item_enum ::= LINE_LIST_ENUMERATED nested_chunks. +item_enum ::= LINE_LIST_ENUMERATED. +meta_block ::= meta_block meta_line. +para ::= LINE_PLAIN chunk. +table ::= table_header table_body. table_header ::= header_rows LINE_TABLE_SEPARATOR. +header_rows ::= header_rows LINE_TABLE. +table_body ::= table_body table_section. table_section ::= all_rows LINE_EMPTY. table_section ::= all_rows. all_rows ::= all_rows row. -table ::= table_header table_body. -table_body ::= table_body table_section. -header_rows ::= header_rows LINE_TABLE. -def_citation ::= LINE_DEF_CITATION para_lines cont_blocks. -def_citation ::= LINE_DEF_CITATION para_lines. -def_citation ::= LINE_DEF_CITATION cont_blocks. -def_footnote ::= LINE_DEF_FOOTNOTE para_lines cont_blocks. -def_footnote ::= LINE_DEF_FOOTNOTE para_lines. -def_footnote ::= LINE_DEF_FOOTNOTE cont_blocks. -def_link ::= LINE_DEF_LINK para_lines. -html_block ::= LINE_HTML html_block_lines. -html_block_lines ::= html_block_lines html_block_line. -fenced_block ::= LINE_FENCE_BACKTICK fenced_lines LINE_FENCE_BACKTICK. -fenced_block ::= LINE_FENCE_BACKTICK fenced_lines. -fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines LINE_FENCE_BACKTICK. -fenced_block ::= LINE_FENCE_BACKTICK_START fenced_lines. -fenced_lines ::= fenced_lines fenced_line. -meta_block ::= LINE_META meta_lines. -meta_lines ::= meta_lines meta_line. -definition_block ::= para defs. -defs ::= defs def. -def ::= LINE_DEFINITION def_lines. -def ::= LINE_DEFINITION. -def_lines ::= def_lines LINE_CONTINUATION. para ::= all_rows. -para ::= LINE_PLAIN. -para_lines ::= para_line. -para_line ::= LINE_CONTINUATION. -indented_code ::= indented_line. -code_line ::= indented_line. -code_line ::= LINE_EMPTY. +chunk ::= chunk_line. +chunk_line ::= LINE_CONTINUATION. +nested_chunks ::= nested_chunk. +nested_chunk ::= empty. indented_line ::= LINE_INDENTED_TAB. indented_line ::= LINE_INDENTED_SPACE. -empty ::= LINE_EMPTY. +opt_ext_chunk ::= chunk. +tail ::= opt_ext_chunk. +tail ::= nested_chunks. blockquote ::= LINE_BLOCKQUOTE. -quote_lines ::= quote_line. quote_line ::= LINE_BLOCKQUOTE. quote_line ::= LINE_CONTINUATION. -list_bulleted ::= item_bulleted. -list_enumerated ::= item_enumerated. -cont_blocks ::= cont_block. -cont_block ::= empty. -all_rows ::= row. -row ::= header_rows. -row ::= LINE_TABLE_SEPARATOR. -table ::= table_header. -table_body ::= table_section. -header_rows ::= LINE_TABLE. def_citation ::= LINE_DEF_CITATION. def_footnote ::= LINE_DEF_FOOTNOTE. def_link ::= LINE_DEF_LINK. -html_block ::= LINE_HTML. -html_block_lines ::= html_block_line. -html_block_line ::= LINE_CONTINUATION. -html_block_line ::= LINE_HTML. -fenced_lines ::= fenced_line. -fenced_lines ::=. +def ::= LINE_DEFINITION. +empty ::= LINE_EMPTY. +fenced_block ::= fenced. +fenced ::= LINE_FENCE_BACKTICK. +fenced ::= LINE_FENCE_BACKTICK_START. fenced_line ::= LINE_CONTINUATION. fenced_line ::= LINE_EMPTY. +html_block ::= LINE_HTML. +html_line ::= LINE_CONTINUATION. +html_line ::= LINE_HTML. +indented_code ::= indented_line. +list_bullet ::= item_bullet. +list_enum ::= item_enum. meta_block ::= LINE_META. -meta_lines ::= meta_line. meta_line ::= LINE_META. meta_line ::= LINE_CONTINUATION. -defs ::= def. -def_lines ::= LINE_CONTINUATION. +para ::= LINE_PLAIN. +table ::= table_header. +header_rows ::= LINE_TABLE. +table_body ::= table_section. +all_rows ::= row. +row ::= header_rows. +row ::= LINE_TABLE_SEPARATOR. para ::= defs.