From: Fletcher T. Penney Date: Tue, 7 Feb 2017 03:31:25 +0000 (-0500) Subject: ADDED: Tweak parser to pazz fuzz test and test suite X-Git-Tag: 0.1.2a^2~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=15e6c40884740d4f46e422e6acb791e98dae1fc0;p=multimarkdown ADDED: Tweak parser to pazz fuzz test and test suite --- diff --git a/src/parser.c b/src/parser.c index b7740ea..3c72a7b 100644 --- a/src/parser.c +++ b/src/parser.c @@ -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 47 -#define YYNRULE 109 -#define YY_MAX_SHIFT 46 -#define YY_MIN_SHIFTREDUCE 111 -#define YY_MAX_SHIFTREDUCE 219 -#define YY_MIN_REDUCE 220 -#define YY_MAX_REDUCE 328 -#define YY_ERROR_ACTION 329 -#define YY_ACCEPT_ACTION 330 -#define YY_NO_ACTION 331 +#define YYNSTATE 48 +#define YYNRULE 110 +#define YY_MAX_SHIFT 47 +#define YY_MIN_SHIFTREDUCE 112 +#define YY_MAX_SHIFTREDUCE 221 +#define YY_MIN_REDUCE 222 +#define YY_MAX_REDUCE 331 +#define YY_ERROR_ACTION 332 +#define YY_ACCEPT_ACTION 333 +#define YY_NO_ACTION 334 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined @@ -188,79 +188,81 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (197) +#define YY_ACTTAB_COUNT (203) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 220, 23, 138, 138, 189, 190, 202, 15, 116, 117, - /* 10 */ 118, 119, 120, 121, 127, 16, 5, 4, 3, 2, - /* 20 */ 17, 14, 13, 134, 191, 12, 23, 33, 33, 189, - /* 30 */ 190, 202, 15, 116, 117, 118, 119, 120, 121, 127, - /* 40 */ 16, 5, 4, 3, 2, 17, 14, 13, 134, 191, - /* 50 */ 12, 330, 1, 113, 29, 11, 45, 40, 38, 125, - /* 60 */ 126, 128, 129, 130, 131, 132, 133, 135, 43, 22, - /* 70 */ 22, 11, 30, 30, 40, 217, 38, 202, 10, 44, - /* 80 */ 112, 29, 11, 45, 40, 38, 125, 126, 128, 129, - /* 90 */ 130, 131, 132, 133, 135, 32, 32, 216, 11, 32, - /* 100 */ 208, 40, 191, 38, 209, 10, 44, 6, 6, 137, - /* 110 */ 32, 7, 7, 32, 18, 19, 18, 19, 20, 185, - /* 120 */ 20, 212, 8, 8, 32, 9, 9, 32, 32, 24, - /* 130 */ 174, 24, 26, 41, 26, 212, 185, 137, 212, 172, - /* 140 */ 137, 137, 213, 21, 160, 21, 25, 27, 25, 27, - /* 150 */ 189, 190, 32, 170, 189, 190, 213, 191, 28, 213, - /* 160 */ 31, 31, 156, 34, 34, 195, 35, 35, 36, 36, - /* 170 */ 188, 43, 159, 152, 139, 37, 37, 194, 42, 42, - /* 180 */ 155, 39, 39, 4, 160, 176, 169, 141, 137, 5, - /* 190 */ 219, 142, 147, 139, 46, 178, 181, + /* 0 */ 222, 23, 139, 139, 190, 191, 203, 15, 117, 118, + /* 10 */ 119, 120, 121, 122, 128, 16, 5, 4, 3, 2, + /* 20 */ 17, 14, 13, 135, 192, 12, 42, 23, 33, 33, + /* 30 */ 190, 191, 203, 15, 117, 118, 119, 120, 121, 122, + /* 40 */ 128, 16, 5, 4, 3, 2, 17, 14, 13, 135, + /* 50 */ 192, 12, 42, 333, 1, 114, 29, 11, 46, 41, + /* 60 */ 39, 126, 127, 129, 130, 131, 132, 133, 134, 136, + /* 70 */ 44, 22, 22, 11, 30, 30, 41, 196, 39, 203, + /* 80 */ 10, 45, 31, 31, 209, 218, 34, 34, 210, 195, + /* 90 */ 36, 36, 113, 29, 11, 46, 41, 39, 126, 127, + /* 100 */ 129, 130, 131, 132, 133, 134, 136, 217, 35, 35, + /* 110 */ 11, 213, 32, 41, 192, 39, 186, 10, 45, 175, + /* 120 */ 37, 37, 44, 160, 6, 6, 32, 36, 36, 32, + /* 130 */ 32, 18, 214, 18, 190, 191, 190, 191, 7, 7, + /* 140 */ 32, 8, 8, 138, 32, 20, 213, 20, 24, 19, + /* 150 */ 24, 19, 9, 9, 189, 213, 140, 138, 32, 26, + /* 160 */ 161, 26, 32, 21, 173, 21, 186, 214, 32, 38, + /* 170 */ 38, 138, 42, 171, 177, 138, 214, 25, 157, 25, + /* 180 */ 170, 27, 156, 27, 40, 40, 161, 192, 28, 153, + /* 190 */ 4, 43, 43, 179, 142, 138, 220, 5, 148, 143, + /* 200 */ 47, 140, 182, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 0, 1, 47, 48, 4, 5, 6, 7, 8, 9, /* 10 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - /* 20 */ 20, 21, 22, 23, 24, 25, 1, 63, 64, 4, - /* 30 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - /* 40 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - /* 50 */ 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, - /* 60 */ 37, 38, 39, 40, 41, 42, 43, 44, 56, 57, - /* 70 */ 58, 48, 61, 62, 51, 3, 53, 6, 55, 56, - /* 80 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - /* 90 */ 40, 41, 42, 43, 44, 33, 33, 25, 48, 33, - /* 100 */ 3, 51, 24, 53, 7, 55, 56, 45, 46, 46, - /* 110 */ 33, 45, 46, 33, 52, 52, 54, 54, 52, 3, - /* 120 */ 54, 3, 45, 46, 33, 45, 46, 33, 33, 52, - /* 130 */ 62, 54, 52, 26, 54, 3, 3, 46, 3, 21, - /* 140 */ 46, 46, 24, 52, 6, 54, 52, 52, 54, 54, - /* 150 */ 4, 5, 33, 21, 4, 5, 24, 24, 48, 24, - /* 160 */ 61, 62, 24, 59, 60, 3, 49, 50, 45, 46, - /* 170 */ 24, 56, 57, 54, 24, 45, 46, 15, 65, 66, - /* 180 */ 2, 45, 46, 17, 6, 64, 60, 50, 46, 16, - /* 190 */ 3, 51, 53, 24, 67, 66, 3, + /* 20 */ 20, 21, 22, 23, 24, 25, 26, 1, 63, 64, + /* 30 */ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 40 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + /* 50 */ 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, + /* 60 */ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + /* 70 */ 56, 57, 58, 48, 61, 62, 51, 3, 53, 6, + /* 80 */ 55, 56, 61, 62, 3, 3, 59, 60, 7, 15, + /* 90 */ 65, 66, 30, 31, 32, 33, 34, 35, 36, 37, + /* 100 */ 38, 39, 40, 41, 42, 43, 44, 25, 49, 50, + /* 110 */ 48, 3, 33, 51, 24, 53, 3, 55, 56, 62, + /* 120 */ 45, 46, 56, 57, 45, 46, 33, 65, 66, 33, + /* 130 */ 33, 52, 24, 54, 4, 5, 4, 5, 45, 46, + /* 140 */ 33, 45, 46, 46, 33, 52, 3, 54, 52, 52, + /* 150 */ 54, 54, 45, 46, 24, 3, 24, 46, 33, 52, + /* 160 */ 6, 54, 33, 52, 21, 54, 3, 24, 33, 45, + /* 170 */ 46, 46, 26, 21, 64, 46, 24, 52, 24, 54, + /* 180 */ 60, 52, 2, 54, 45, 46, 6, 24, 48, 54, + /* 190 */ 17, 65, 66, 66, 50, 46, 3, 16, 53, 51, + /* 200 */ 67, 24, 3, }; -#define YY_SHIFT_USE_DFLT (197) -#define YY_SHIFT_COUNT (46) +#define YY_SHIFT_USE_DFLT (203) +#define YY_SHIFT_COUNT (47) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (193) +#define YY_SHIFT_MAX (199) static const unsigned char yy_shift_ofst[] = { - /* 0 */ 25, 0, 133, 133, 133, 133, 133, 133, 133, 133, - /* 10 */ 71, 146, 72, 135, 135, 97, 162, 116, 78, 78, - /* 20 */ 78, 78, 71, 116, 78, 78, 78, 78, 116, 107, - /* 30 */ 118, 132, 150, 72, 97, 162, 116, 116, 166, 116, - /* 40 */ 173, 187, 107, 138, 178, 169, 193, + /* 0 */ 26, 0, 163, 163, 163, 163, 163, 163, 163, 163, + /* 10 */ 73, 130, 82, 108, 108, 81, 74, 113, 90, 90, + /* 20 */ 90, 90, 73, 113, 90, 90, 90, 90, 113, 146, + /* 30 */ 143, 152, 132, 82, 81, 74, 146, 113, 113, 173, + /* 40 */ 113, 181, 193, 146, 154, 180, 177, 199, }; #define YY_REDUCE_USE_DFLT (-46) -#define YY_REDUCE_COUNT (42) +#define YY_REDUCE_COUNT (43) #define YY_REDUCE_MIN (-45) -#define YY_REDUCE_MAX (142) +#define YY_REDUCE_MAX (149) static const short yy_reduce_ofst[] = { - /* 0 */ 23, 50, 62, 66, 77, 80, 63, 91, 94, 95, - /* 10 */ 12, -45, -36, 11, 99, 104, 117, 123, 119, 119, - /* 20 */ 119, 119, 115, 130, 119, 119, 119, 119, 136, 113, - /* 30 */ 68, 68, 110, 121, 126, 137, 142, 142, 139, 142, - /* 40 */ 140, 127, 129, + /* 0 */ 25, 62, 79, 93, 96, 107, 97, 111, 125, 129, + /* 10 */ 14, -45, -35, 13, 21, 27, 59, 75, 135, 135, + /* 20 */ 135, 135, 66, 124, 135, 135, 135, 135, 139, 126, + /* 30 */ 57, 57, 140, 110, 120, 144, 127, 149, 149, 145, + /* 40 */ 149, 148, 133, 127, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 329, 329, 313, 312, 260, 255, 274, 271, 258, 253, - /* 10 */ 309, 224, 323, 320, 320, 315, 301, 314, 275, 273, - /* 20 */ 272, 270, 267, 292, 259, 257, 254, 252, 263, 223, - /* 30 */ 282, 280, 308, 284, 277, 249, 276, 245, 233, 262, - /* 40 */ 232, 289, 286, 266, 291, 231, 288, + /* 0 */ 332, 332, 315, 314, 262, 257, 276, 273, 260, 255, + /* 10 */ 311, 226, 325, 322, 322, 317, 303, 316, 277, 275, + /* 20 */ 274, 272, 269, 294, 261, 259, 256, 254, 265, 225, + /* 30 */ 284, 282, 310, 286, 279, 251, 331, 278, 247, 235, + /* 40 */ 264, 234, 291, 288, 268, 293, 233, 290, }; /********** End of lemon-generated parsing tables *****************************/ @@ -521,6 +523,7 @@ static const char *const yyRuleName[] = { /* 106 */ "meta_line ::= LINE_CONTINUATION", /* 107 */ "defs ::= def", /* 108 */ "def_lines ::= LINE_CONTINUATION", + /* 109 */ "para ::= defs", }; #endif /* NDEBUG */ @@ -978,6 +981,7 @@ static const struct { { 64, 1 }, { 65, 1 }, { 67, 1 }, + { 31, 1 }, }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -1290,6 +1294,7 @@ static void yy_reduce( /* (106) meta_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==106); /* (107) defs ::= def (OPTIMIZED OUT) */ assert(yyruleno!=107); /* (108) def_lines ::= LINE_CONTINUATION */ yytestcase(yyruleno==108); + /* (109) para ::= defs */ yytestcase(yyruleno==109); break; /********** End reduce actions ************************************************/ }; diff --git a/src/parser.out b/src/parser.out index 9d21599..d352b90 100644 --- a/src/parser.out +++ b/src/parser.out @@ -70,7 +70,12 @@ State 0: 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 ::= * LINE_DEFINITION para ::= * table_rows + para ::= * defs LINE_PLAIN shift 23 LINE_INDENTED_TAB shift-reduce 78 indented_line ::= LINE_INDENTED_TAB @@ -95,14 +100,15 @@ State 0: LINE_TOC shift-reduce 23 block ::= LINE_TOC LINE_EMPTY shift-reduce 80 empty ::= LINE_EMPTY LINE_META shift 12 + LINE_DEFINITION shift 42 doc accept blocks shift 1 block shift-reduce 2 blocks ::= block para shift 29 indented_code shift 11 - empty shift 45 - list_bulleted shift 40 - list_enumerated shift 38 + empty shift 46 + list_bulleted shift 41 + list_enumerated shift 39 blockquote shift-reduce 14 block ::= blockquote table shift-reduce 15 block ::= table def_citation shift-reduce 17 block ::= def_citation @@ -113,10 +119,12 @@ State 0: meta_block shift-reduce 22 block ::= meta_block definition_block shift-reduce 24 block ::= definition_block indented_line shift 11 /* because indented_line==indented_code */ - item_bulleted shift 40 /* because item_bulleted==list_bulleted */ - item_enumerated shift 38 /* because item_enumerated==list_enumerated */ + item_bulleted shift 41 /* because item_bulleted==list_bulleted */ + item_enumerated shift 39 /* because item_enumerated==list_enumerated */ table_header shift 10 - table_rows shift 44 + table_rows shift 45 + defs shift 36 + def shift 36 /* because def==defs */ State 1: (0) doc ::= blocks * @@ -189,7 +197,12 @@ State 1: 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 ::= * LINE_DEFINITION para ::= * table_rows + para ::= * defs $ reduce 0 doc ::= blocks LINE_PLAIN shift 23 @@ -215,12 +228,13 @@ State 1: LINE_TOC shift-reduce 23 block ::= LINE_TOC LINE_EMPTY shift-reduce 80 empty ::= LINE_EMPTY LINE_META shift 12 + LINE_DEFINITION shift 42 block shift-reduce 1 blocks ::= blocks block para shift 29 indented_code shift 11 - empty shift 45 - list_bulleted shift 40 - list_enumerated shift 38 + empty shift 46 + list_bulleted shift 41 + list_enumerated shift 39 blockquote shift-reduce 14 block ::= blockquote table shift-reduce 15 block ::= table def_citation shift-reduce 17 block ::= def_citation @@ -231,10 +245,12 @@ State 1: meta_block shift-reduce 22 block ::= meta_block definition_block shift-reduce 24 block ::= definition_block indented_line shift 11 /* because indented_line==indented_code */ - item_bulleted shift 40 /* because item_bulleted==list_bulleted */ - item_enumerated shift 38 /* because item_enumerated==list_enumerated */ + item_bulleted shift 41 /* because item_bulleted==list_bulleted */ + item_enumerated shift 39 /* because item_enumerated==list_enumerated */ table_header shift 10 - table_rows shift 44 + table_rows shift 45 + defs shift 36 + def shift 36 /* because def==defs */ State 2: para_lines ::= * para_lines para_line @@ -440,7 +456,7 @@ State 10: LINE_TABLE shift-reduce 91 table_rows ::= LINE_TABLE LINE_TABLE reduce 89 ** Parsing conflict ** - table_rows shift 43 + table_rows shift 44 table_section shift 22 /* because table_section==table_body */ table_body shift 22 {default} reduce 89 table ::= table_header @@ -550,8 +566,8 @@ State 17: (94) def_link ::= LINE_DEF_LINK * LINE_CONTINUATION shift-reduce 74 para_line ::= LINE_CONTINUATION - para_lines shift 36 - para_line shift 36 /* because para_line==para_lines */ + para_lines shift 37 + para_line shift 37 /* because para_line==para_lines */ {default} reduce 94 def_link ::= LINE_DEF_LINK State 18: @@ -624,7 +640,7 @@ State 22: LINE_TABLE shift-reduce 91 table_rows ::= LINE_TABLE LINE_TABLE reduce 47 ** Parsing conflict ** - table_rows shift 43 + table_rows shift 44 table_section shift-reduce 48 table_body ::= table_body table_section {default} reduce 47 table ::= table_header table_body @@ -636,8 +652,8 @@ State 23: para_line ::= * LINE_CONTINUATION LINE_CONTINUATION shift-reduce 74 para_line ::= LINE_CONTINUATION - para_lines shift 37 - para_line shift 37 /* because para_line==para_lines */ + para_lines shift 38 + para_line shift 38 /* because para_line==para_lines */ {default} reduce 72 para ::= LINE_PLAIN State 24: @@ -708,8 +724,8 @@ State 28: (43) cont_block ::= empty indented_line * LINE_CONTINUATION shift-reduce 74 para_line ::= LINE_CONTINUATION - para_lines shift 39 - para_line shift 39 /* because para_line==para_lines */ + para_lines shift 40 + para_line shift 40 /* because para_line==para_lines */ {default} reduce 43 cont_block ::= empty indented_line State 29: @@ -720,9 +736,10 @@ State 29: def ::= * LINE_DEFINITION def_lines def ::= * LINE_DEFINITION - LINE_DEFINITION shift 41 - defs shift 42 - def shift 42 /* because def==defs */ + LINE_DEFINITION shift 42 + LINE_DEFINITION reduce 3 ** Parsing conflict ** + defs shift 43 + def shift 43 /* because def==defs */ {default} reduce 3 block ::= para State 30: @@ -809,6 +826,17 @@ State 35: {default} reduce 29 blockquote ::= LINE_BLOCKQUOTE quote_lines State 36: + defs ::= defs * def + def ::= * LINE_DEFINITION def_lines + def ::= * LINE_DEFINITION + (109) para ::= defs * + + LINE_DEFINITION shift 42 + LINE_DEFINITION reduce 109 ** Parsing conflict ** + def shift-reduce 67 defs ::= defs def + {default} reduce 109 para ::= defs + +State 37: para_lines ::= para_lines * para_line para_line ::= * LINE_CONTINUATION (56) def_link ::= LINE_DEF_LINK para_lines * @@ -817,7 +845,7 @@ State 36: para_line shift-reduce 26 para_lines ::= para_lines para_line {default} reduce 56 def_link ::= LINE_DEF_LINK para_lines -State 37: +State 38: (25) para ::= LINE_PLAIN para_lines * para_lines ::= para_lines * para_line para_line ::= * LINE_CONTINUATION @@ -826,7 +854,7 @@ State 37: para_line shift-reduce 26 para_lines ::= para_lines para_line {default} reduce 25 para ::= LINE_PLAIN para_lines -State 38: +State 39: (13) block ::= list_enumerated * list_enumerated ::= list_enumerated * item_enumerated item_enumerated ::= * LINE_LIST_ENUMERATED para_lines cont_blocks @@ -839,7 +867,7 @@ State 38: item_enumerated shift-reduce 36 list_enumerated ::= list_enumerated item_enumerated {default} reduce 13 block ::= list_enumerated -State 39: +State 40: para_lines ::= para_lines * para_line para_line ::= * LINE_CONTINUATION (42) cont_block ::= empty indented_line para_lines * @@ -848,7 +876,7 @@ State 39: para_line shift-reduce 26 para_lines ::= para_lines para_line {default} reduce 42 cont_block ::= empty indented_line para_lines -State 40: +State 41: (12) block ::= list_bulleted * list_bulleted ::= list_bulleted * item_bulleted item_bulleted ::= * LINE_LIST_BULLETED para_lines cont_blocks @@ -861,27 +889,28 @@ State 40: item_bulleted shift-reduce 31 list_bulleted ::= list_bulleted item_bulleted {default} reduce 12 block ::= list_bulleted -State 41: +State 42: def ::= LINE_DEFINITION * def_lines (69) def ::= LINE_DEFINITION * def_lines ::= * def_lines LINE_CONTINUATION def_lines ::= * LINE_CONTINUATION LINE_CONTINUATION shift-reduce 108 def_lines ::= LINE_CONTINUATION - def_lines shift 46 + def_lines shift 47 {default} reduce 69 def ::= LINE_DEFINITION -State 42: +State 43: (66) definition_block ::= para defs * defs ::= defs * def def ::= * LINE_DEFINITION def_lines def ::= * LINE_DEFINITION - LINE_DEFINITION shift 41 + LINE_DEFINITION shift 42 + LINE_DEFINITION reduce 66 ** Parsing conflict ** def shift-reduce 67 defs ::= defs def {default} reduce 66 definition_block ::= para defs -State 43: +State 44: table_section ::= table_rows * LINE_EMPTY (46) table_section ::= table_rows * table_rows ::= table_rows * LINE_TABLE @@ -892,7 +921,7 @@ State 43: LINE_EMPTY reduce 46 ** Parsing conflict ** {default} reduce 46 table_section ::= table_rows -State 44: +State 45: table_header ::= table_rows * LINE_TABLE_SEPARATOR table_rows ::= table_rows * LINE_TABLE (71) para ::= table_rows * @@ -902,7 +931,7 @@ State 44: LINE_TABLE reduce 71 ** Parsing conflict ** {default} reduce 71 para ::= table_rows -State 45: +State 46: (11) block ::= empty * empty ::= empty * LINE_EMPTY @@ -910,7 +939,7 @@ State 45: LINE_EMPTY reduce 11 ** Parsing conflict ** {default} reduce 11 block ::= empty -State 46: +State 47: (68) def ::= LINE_DEFINITION def_lines * def_lines ::= def_lines * LINE_CONTINUATION @@ -947,10 +976,10 @@ Symbols: 25: LINE_META 26: LINE_DEFINITION 27: error: - 28: doc: LINE_PLAIN 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 - 29: blocks: LINE_PLAIN 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 - 30: block: LINE_PLAIN 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 - 31: para: LINE_PLAIN LINE_TABLE + 28: doc: LINE_PLAIN 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_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_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 LINE_DEFINITION 32: indented_code: LINE_INDENTED_TAB LINE_INDENTED_SPACE 33: empty: LINE_EMPTY 34: list_bulleted: LINE_LIST_BULLETED @@ -963,7 +992,7 @@ Symbols: 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 + 44: definition_block: LINE_PLAIN 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 diff --git a/src/parser.y b/src/parser.y index 53728df..9dc8598 100644 --- a/src/parser.y +++ b/src/parser.y @@ -62,7 +62,7 @@ %extra_argument { mmd_engine * engine } -%fallback LINE_PLAIN LINE_TABLE_SEPARATOR. +%fallback LINE_PLAIN LINE_TABLE_SEPARATOR . %fallback LINE_CONTINUATION LINE_PLAIN LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE. @@ -246,8 +246,8 @@ def_lines ::= LINE_CONTINUATION. // 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) ::= table_rows(B). { A = B; } - +para(A) ::= table_rows(B). { A = B; } +para ::= defs. // diff --git a/test/parser_test.y b/test/parser_test.y index 519d7b8..32a7c85 100644 --- a/test/parser_test.y +++ b/test/parser_test.y @@ -67,7 +67,8 @@ // Manually copy fallbacks from `parser.y` here -%fallback LINE_PLAIN LINE_TABLE_SEPARATOR LINE_DEFINITION. +//%fallback LINE_PLAIN LINE_TABLE_SEPARATOR LINE_DEFINITION. +%fallback LINE_PLAIN LINE_TABLE_SEPARATOR. %fallback LINE_CONTINUATION LINE_PLAIN LINE_INDENTED_TAB LINE_INDENTED_SPACE LINE_TABLE. @@ -122,8 +123,8 @@ cont_block ::= empty indented_line para_lines. cont_block ::= empty indented_line. table_header ::= table_rows LINE_TABLE_SEPARATOR. table_section ::= table_rows LINE_EMPTY. +table_section ::= table_rows. table ::= table_header table_body. -table ::= table_header. table_body ::= table_body table_section. table_rows ::= table_rows LINE_TABLE. def_citation ::= LINE_DEF_CITATION para_lines cont_blocks. @@ -140,7 +141,6 @@ 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. -fenced_lines ::= . meta_block ::= LINE_META meta_lines. meta_lines ::= meta_lines meta_line. definition_block ::= para defs. @@ -166,6 +166,7 @@ list_bulleted ::= item_bulleted. list_enumerated ::= item_enumerated. cont_blocks ::= cont_block. cont_block ::= empty. +table ::= table_header. table_body ::= table_section. table_rows ::= LINE_TABLE. def_citation ::= LINE_DEF_CITATION. @@ -176,6 +177,7 @@ html_block_lines ::= html_block_line. html_block_line ::= LINE_CONTINUATION. html_block_line ::= LINE_HTML. fenced_lines ::= fenced_line. +fenced_lines ::=. fenced_line ::= LINE_CONTINUATION. fenced_line ::= LINE_EMPTY. meta_block ::= LINE_META. @@ -184,8 +186,7 @@ meta_line ::= LINE_META. meta_line ::= LINE_CONTINUATION. defs ::= def. def_lines ::= LINE_CONTINUATION. - - +para ::= defs. // // Additional Configuration @@ -204,7 +205,7 @@ def_lines ::= LINE_CONTINUATION. #define kMaxToken 26 - int i,j,k,l,m; + int i,j,k,l,m, n; int main(int argc, char** argv) { @@ -222,6 +223,7 @@ int main(int argc, char** argv) { k = 0; l = 0; m = 0; + n = 0; for (i = 1; i <= kMaxToken; ++i) { @@ -305,7 +307,7 @@ int main(int argc, char** argv) { } } - return(0); +// return(0); fprintf(stderr, "\nFive line tests\n"); @@ -338,6 +340,47 @@ int main(int argc, char** argv) { } } } + + return(0); + + // Six cycles takes quite a while + + fprintf(stderr, "\nSix line tests\n"); + + i = 0; + j = 0; + k = 0; + l = 0; + m = 0; + n = 0; + + for (i = 1; i <= kMaxToken; ++i) + { + fprintf(stderr, "%d\n", i); + + for (j = 1; j <= kMaxToken; ++j) { + + for (k = 1; k <= kMaxToken; ++k) { + + for (l = 1; l <= kMaxToken; ++l) { + + for (m = 1; m <= kMaxToken; ++m) { + + for (n = 1; n <= kMaxToken; ++n) { + Parse(pParser, i, NULL); + Parse(pParser, j, NULL); + Parse(pParser, k, NULL); + Parse(pParser, l, NULL); + Parse(pParser, m, NULL); + Parse(pParser, n, NULL); + + Parse(pParser, 0, NULL); + } + } + } + } + } + } } } @@ -360,6 +403,6 @@ int main(int argc, char** argv) { } %parse_failure { - fprintf(stderr, "%d:%d:%d:%d:%d Parser failed to successfully parse.\n", i, j, k, l, m); + fprintf(stderr, "%d:%d:%d:%d:%d:%d Parser failed to successfully parse.\n", i, j, k, l, m, n); }