diff --git a/lib/lrama/parser.rb b/lib/lrama/parser.rb index 6a35dba2..ca720631 100644 --- a/lib/lrama/parser.rb +++ b/lib/lrama/parser.rb @@ -654,7 +654,7 @@ def token_to_str(t) module Lrama class Parser < Racc::Parser -module_eval(<<'...end parser.y/module_eval...', 'parser.y', 417) +module_eval(<<'...end parser.y/module_eval...', 'parser.y', 414) include Lrama::Report::Duration @@ -731,26 +731,26 @@ def raise_parse_error(error_message, location) 94, 48, 95, 166, 48, 77, 172, 48, 77, 166, 48, 77, 172, 48, 77, 47, 6, 85, 69, 48, 48, 47, 47, 77, 74, 81, 48, 48, 47, 47, - 40, 81, 81, 48, 41, 47, 92, 48, 81, 47, - 44, 77, 103, 168, 169, 45, 175, 169, 96, 168, - 169, 52, 175, 169, 86, 20, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 92, 48, 4, 47, 5, 77, 103, 48, 48, - 47, 47, 77, 103, 116, 48, 4, 47, 5, 77, - 20, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 52, 20, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 43, 20, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 48, 48, - 47, 47, 77, 103, 48, 48, 47, 47, 77, 77, - 48, 48, 47, 47, 77, 77, 48, 48, 196, 196, - 77, 77, 48, 48, 47, 196, 77, 77, 148, 170, - 52, 149, 149, 180, 181, 182, 131, 180, 181, 182, - 131, 203, 208, 215, 204, 204, 204, 48, 48, 47, - 47, 48, 48, 47, 47, 48, 48, 47, 47, 180, - 181, 182, 119, 120, 55, 52, 52, 52, 52, 52, + 40, 81, 81, 48, 48, 47, 47, 92, 81, 116, + 148, 119, 120, 149, 168, 169, 41, 175, 169, 96, + 168, 169, 44, 175, 169, 86, 20, 24, 25, 26, + 27, 28, 29, 30, 31, 92, 32, 33, 34, 35, + 36, 37, 38, 48, 4, 47, 5, 77, 101, 48, + 4, 47, 5, 77, 20, 24, 25, 26, 27, 28, + 29, 30, 31, 45, 32, 33, 34, 35, 36, 37, + 38, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 52, 20, 24, 25, 26, 27, 28, 29, 30, 31, + 52, 32, 33, 34, 35, 36, 37, 38, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 43, 20, 24, + 25, 26, 27, 28, 29, 30, 31, 52, 32, 33, + 34, 35, 36, 37, 38, 48, 48, 47, 47, 77, + 101, 48, 48, 47, 47, 77, 101, 48, 48, 47, + 47, 77, 101, 48, 48, 47, 47, 77, 77, 48, + 48, 47, 47, 77, 77, 48, 48, 196, 196, 77, + 77, 48, 48, 47, 196, 77, 77, 170, 55, 52, + 149, 180, 181, 182, 131, 180, 181, 182, 131, 203, + 208, 215, 204, 204, 204, 48, 48, 47, 47, 48, + 48, 47, 47, 180, 181, 182, 52, 52, 52, 52, 61, 62, 63, 64, 65, 87, 52, 52, 106, 109, 111, 118, 125, 126, 128, 131, 132, 77, 140, 141, 142, 143, 145, 146, 153, 140, 155, 153, 159, 160, @@ -762,26 +762,26 @@ def raise_parse_error(error_message, location) 46, 151, 46, 151, 157, 151, 157, 177, 157, 177, 188, 177, 188, 32, 188, 32, 1, 38, 32, 33, 34, 33, 34, 33, 33, 34, 35, 36, 35, 36, - 5, 35, 36, 37, 6, 37, 44, 58, 37, 58, - 9, 58, 58, 151, 151, 11, 157, 157, 46, 177, - 177, 13, 188, 188, 38, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 88, 59, 0, 59, 0, 59, 59, 60, 79, - 60, 79, 60, 60, 79, 72, 2, 72, 2, 72, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 14, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, + 5, 35, 36, 37, 79, 37, 79, 44, 37, 79, + 139, 86, 86, 139, 151, 151, 6, 157, 157, 46, + 177, 177, 9, 188, 188, 38, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 88, 44, 44, 44, 44, + 44, 44, 44, 58, 0, 58, 0, 58, 58, 72, + 2, 72, 2, 72, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 11, 88, 88, 88, 88, 88, 88, + 88, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 13, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 14, 3, 3, 3, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 100, 12, - 100, 12, 100, 100, 74, 111, 74, 111, 74, 111, - 168, 175, 168, 175, 168, 175, 183, 189, 183, 189, - 183, 189, 204, 205, 204, 205, 204, 205, 139, 154, - 15, 139, 154, 165, 165, 165, 165, 173, 173, 173, - 173, 195, 200, 212, 195, 200, 212, 67, 69, 67, - 69, 81, 106, 81, 106, 114, 116, 114, 116, 197, - 197, 197, 86, 86, 16, 17, 20, 24, 25, 26, + 8, 8, 8, 8, 8, 8, 8, 15, 8, 8, + 8, 8, 8, 8, 8, 59, 12, 59, 12, 59, + 59, 60, 67, 60, 67, 60, 60, 102, 69, 102, + 69, 102, 102, 74, 111, 74, 111, 74, 111, 168, + 175, 168, 175, 168, 175, 183, 189, 183, 189, 183, + 189, 204, 205, 204, 205, 204, 205, 154, 16, 17, + 154, 165, 165, 165, 165, 173, 173, 173, 173, 195, + 200, 212, 195, 200, 212, 81, 106, 81, 106, 114, + 116, 114, 116, 197, 197, 197, 20, 24, 25, 26, 27, 28, 29, 30, 31, 39, 50, 55, 66, 70, 71, 85, 89, 90, 91, 92, 98, 110, 118, 119, 120, 121, 130, 131, 141, 142, 144, 145, 146, 147, @@ -790,64 +790,64 @@ def raise_parse_error(error_message, location) 201, 203, 207, 208, 214 ] racc_action_pointer = [ - 63, 16, 76, 93, nil, 23, 34, nil, 119, 31, - nil, 39, 156, 5, 69, 144, 219, 179, nil, nil, - 180, nil, nil, nil, 181, 182, 183, 225, 226, 227, + 64, 16, 70, 88, nil, 23, 46, nil, 115, 43, + nil, 87, 153, 63, 73, 100, 193, 152, nil, nil, + 179, nil, nil, nil, 180, 181, 182, 225, 226, 227, 228, 229, 10, 16, 17, 23, 24, 30, 12, 233, - nil, nil, nil, nil, 32, nil, -5, nil, nil, nil, - 190, nil, nil, nil, nil, 191, nil, nil, 34, 69, - 75, nil, nil, nil, nil, nil, 230, 204, nil, 205, - 233, 232, 82, nil, 161, nil, nil, nil, nil, 76, - nil, 208, nil, nil, nil, 202, 218, nil, 67, 233, - 221, 222, 194, nil, nil, nil, nil, nil, 244, nil, - 155, nil, nil, nil, nil, nil, 209, nil, nil, nil, - 240, 162, nil, nil, 212, nil, 213, nil, 243, 208, - 211, 240, nil, nil, nil, nil, nil, nil, nil, nil, - 211, 248, nil, nil, nil, nil, nil, nil, nil, 148, - nil, 200, 250, nil, 254, 203, 206, 212, 252, 256, - 218, -2, nil, nil, 149, nil, 219, 1, nil, nil, - nil, nil, 223, nil, 211, 145, 227, 216, 167, nil, - 227, 215, 231, 149, 220, 168, 218, 4, nil, nil, - nil, nil, nil, 173, nil, nil, 271, 220, 7, 174, - nil, 224, 268, nil, 233, 161, 239, 171, nil, 235, - 162, 272, nil, 273, 179, 180, nil, 235, 232, nil, - nil, nil, 163, nil, 276, nil, nil ] + nil, nil, nil, nil, 33, nil, -5, nil, nil, nil, + 189, nil, nil, nil, nil, 190, nil, nil, 70, 152, + 158, nil, nil, nil, nil, nil, 230, 159, nil, 165, + 233, 232, 76, nil, 170, nil, nil, nil, nil, 31, + nil, 212, nil, nil, nil, 201, 37, nil, 61, 233, + 221, 222, 193, nil, nil, nil, nil, nil, 244, nil, + nil, nil, 164, nil, nil, nil, 213, nil, nil, nil, + 240, 171, nil, nil, 216, nil, 217, nil, 243, 207, + 210, 240, nil, nil, nil, nil, nil, nil, nil, nil, + 210, 248, nil, nil, nil, nil, nil, nil, nil, -1, + nil, 199, 250, nil, 254, 202, 205, 211, 252, 256, + 217, -2, nil, nil, 156, nil, 218, 1, nil, nil, + nil, nil, 222, nil, 210, 152, 226, 215, 176, nil, + 226, 214, 230, 156, 219, 177, 217, 4, nil, nil, + nil, nil, nil, 182, nil, nil, 271, 219, 7, 183, + nil, 223, 268, nil, 232, 168, 238, 174, nil, 234, + 169, 272, nil, 273, 188, 189, nil, 234, 231, nil, + nil, nil, 170, nil, 276, nil, nil ] racc_action_default = [ -1, -127, -1, -3, -10, -127, -127, -2, -3, -127, -16, -127, -127, -127, -127, -127, -127, -127, -24, -25, - -127, -30, -31, -32, -127, -127, -127, -127, -127, -127, + -127, -32, -33, -34, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, - -13, 217, -4, -26, -127, -17, -118, -89, -90, -117, - -14, -19, -81, -20, -21, -127, -23, -29, -127, -127, - -127, -36, -37, -38, -39, -40, -41, -47, -49, -127, - -52, -42, -74, -76, -127, -79, -80, -126, -43, -84, - -86, -127, -44, -45, -46, -127, -127, -11, -5, -7, - -91, -127, -64, -18, -119, -120, -121, -15, -127, -22, - -27, -33, -122, -123, -34, -35, -127, -48, -50, -53, - -72, -127, -75, -77, -84, -85, -127, -87, -127, -127, - -127, -127, -6, -8, -9, -115, -92, -93, -94, -65, - -127, -127, -82, -28, -51, -54, -73, -78, -88, -127, - -60, -124, -127, -12, -127, -124, -127, -127, -55, -127, - -58, -62, -66, -125, -127, -116, -95, -96, -98, -114, - -83, -56, -127, -61, -124, -64, -89, -64, -127, -111, - -127, -124, -89, -64, -64, -127, -124, -63, -67, -68, - -104, -105, -106, -127, -70, -71, -127, -124, -97, -127, - -99, -64, -55, -103, -57, -127, -89, -107, -112, -59, - -127, -55, -102, -55, -127, -127, -109, -127, -64, -100, - -69, -108, -127, -113, -55, -110, -101 ] + -13, 217, -4, -26, -127, -17, -120, -91, -92, -119, + -14, -19, -83, -20, -21, -127, -23, -31, -127, -127, + -127, -38, -39, -40, -41, -42, -43, -49, -51, -127, + -54, -44, -76, -78, -127, -81, -82, -126, -45, -86, + -88, -127, -46, -47, -48, -127, -127, -11, -5, -7, + -93, -127, -66, -18, -121, -122, -123, -15, -127, -22, + -27, -28, -29, -35, -36, -37, -127, -50, -52, -55, + -74, -127, -77, -79, -86, -87, -127, -89, -127, -127, + -127, -127, -6, -8, -9, -117, -94, -95, -96, -67, + -127, -127, -84, -30, -53, -56, -75, -80, -90, -127, + -62, -124, -127, -12, -127, -124, -127, -127, -57, -127, + -60, -64, -68, -125, -127, -118, -97, -98, -100, -116, + -85, -58, -127, -63, -124, -66, -91, -66, -127, -113, + -127, -124, -91, -66, -66, -127, -124, -65, -69, -70, + -106, -107, -108, -127, -72, -73, -127, -124, -99, -127, + -101, -66, -57, -105, -59, -127, -91, -109, -114, -61, + -127, -57, -104, -57, -127, -127, -111, -127, -66, -102, + -71, -110, -127, -115, -57, -112, -103 ] racc_goto_table = [ - 102, 102, 102, 49, 130, 73, 68, 89, 162, 91, - 150, 139, 101, 104, 105, 1, 9, 174, 51, 53, - 54, 42, 115, 70, 117, 79, 79, 79, 79, 56, - 123, 3, 57, 7, 124, 154, 58, 59, 60, 179, - 158, 107, 102, 108, 112, 194, 113, 191, 174, 157, - 39, 122, 202, 91, 133, 97, 199, 115, 70, 138, - 70, 209, 195, 210, 121, 46, 158, 99, 200, 93, - 114, 206, 114, 66, 216, 188, 71, 178, 135, 184, - 134, 110, 177, 137, 212, 190, 192, 78, 82, 83, - 84, 136, 98, 165, 147, 127, 156, 70, 186, 173, + 100, 100, 100, 49, 130, 150, 73, 174, 162, 89, + 91, 56, 1, 68, 57, 103, 104, 105, 58, 59, + 60, 123, 139, 70, 124, 79, 79, 79, 79, 51, + 53, 54, 115, 179, 117, 3, 158, 7, 174, 39, + 194, 191, 157, 121, 100, 112, 154, 113, 107, 99, + 108, 199, 202, 122, 91, 46, 93, 66, 70, 133, + 70, 209, 158, 210, 71, 206, 97, 115, 188, 138, + 114, 135, 114, 9, 216, 110, 195, 178, 42, 184, + 177, 136, 200, 98, 137, 190, 192, 134, 78, 82, + 83, 84, 147, 165, 127, 156, 186, 70, 212, 173, 207, 144, nil, 201, nil, 114, nil, 114, nil, nil, 185, nil, nil, nil, nil, nil, nil, 193, nil, 165, 214, nil, nil, nil, nil, 197, nil, nil, nil, nil, @@ -855,166 +855,166 @@ def raise_parse_error(error_message, location) nil, nil, nil, nil, nil, nil, 211, 197 ] racc_goto_check = [ - 35, 35, 35, 27, 40, 42, 26, 8, 32, 12, - 31, 30, 21, 21, 21, 1, 7, 39, 16, 16, - 16, 7, 45, 27, 45, 27, 27, 27, 27, 15, - 5, 6, 15, 6, 9, 30, 15, 15, 15, 37, - 34, 26, 35, 26, 42, 31, 42, 37, 39, 49, - 10, 8, 32, 12, 21, 16, 31, 45, 27, 45, - 27, 32, 38, 32, 11, 13, 34, 15, 38, 14, - 27, 37, 27, 22, 32, 49, 23, 40, 28, 40, - 26, 29, 33, 42, 38, 40, 40, 24, 24, 24, - 24, 41, 43, 35, 44, 47, 48, 27, 50, 35, - 51, 52, nil, 40, nil, 27, nil, 27, nil, nil, - 35, nil, nil, nil, nil, nil, nil, 35, nil, 35, - 40, nil, nil, nil, nil, 35, nil, nil, nil, nil, - 35, 35, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 35, 35 ] + 20, 20, 20, 28, 40, 32, 42, 39, 33, 8, + 12, 15, 1, 27, 15, 22, 22, 22, 15, 15, + 15, 5, 31, 28, 9, 28, 28, 28, 28, 16, + 16, 16, 45, 37, 45, 6, 35, 6, 39, 10, + 32, 37, 49, 11, 20, 42, 31, 42, 27, 15, + 27, 32, 33, 8, 12, 13, 14, 23, 28, 22, + 28, 33, 35, 33, 24, 37, 16, 45, 49, 45, + 28, 29, 28, 7, 33, 30, 38, 40, 7, 40, + 34, 41, 38, 43, 42, 40, 40, 27, 25, 25, + 25, 25, 44, 20, 47, 48, 50, 28, 38, 20, + 51, 52, nil, 40, nil, 28, nil, 28, nil, nil, + 20, nil, nil, nil, nil, nil, nil, 20, nil, 20, + 40, nil, nil, nil, nil, 20, nil, nil, nil, nil, + 20, 20, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 20, 20 ] racc_goto_pointer = [ - nil, 15, nil, nil, nil, -59, 31, 13, -37, -55, - 46, -23, -35, 53, 23, 12, 5, nil, nil, nil, - nil, -46, 41, 43, 53, nil, -26, -9, -32, 11, - -107, -131, -140, -82, -105, -58, nil, -126, -121, -140, - -88, -19, -28, 40, -38, -57, nil, 5, -49, -96, - -71, -98, -24 ] + nil, 12, nil, nil, nil, -68, 35, 70, -35, -65, + 35, -44, -34, 43, 10, -6, 16, nil, nil, nil, + -58, nil, -43, 25, 31, 54, nil, -19, -9, -39, + 5, -96, -136, -140, -84, -109, nil, -132, -107, -150, + -88, -29, -27, 31, -40, -47, nil, 4, -50, -103, + -73, -98, -24 ] racc_goto_default = [ nil, nil, 2, 8, 88, nil, nil, nil, nil, nil, nil, nil, 10, nil, nil, 50, nil, 21, 22, 23, - 100, nil, nil, nil, nil, 67, nil, 75, nil, nil, - nil, nil, nil, 151, 152, 72, 129, nil, nil, 167, + 72, 102, nil, nil, nil, nil, 67, nil, 75, nil, + nil, nil, nil, nil, 151, 152, 129, nil, nil, 167, nil, 76, nil, nil, nil, 80, 90, nil, nil, nil, nil, nil, nil ] racc_reduce_table = [ 0, 0, :racc_error, - 0, 61, :_reduce_1, - 2, 61, :_reduce_2, - 0, 62, :_reduce_3, - 2, 62, :_reduce_4, - 1, 63, :_reduce_5, - 2, 63, :_reduce_6, - 0, 64, :_reduce_none, - 1, 64, :_reduce_none, - 5, 56, :_reduce_none, - 0, 65, :_reduce_10, - 0, 66, :_reduce_11, - 5, 57, :_reduce_12, - 2, 57, :_reduce_none, - 1, 71, :_reduce_14, - 2, 71, :_reduce_15, - 1, 58, :_reduce_none, - 2, 58, :_reduce_17, - 3, 58, :_reduce_none, + 0, 62, :_reduce_1, + 2, 62, :_reduce_2, + 0, 63, :_reduce_3, + 2, 63, :_reduce_4, + 1, 64, :_reduce_5, + 2, 64, :_reduce_6, + 0, 65, :_reduce_none, + 1, 65, :_reduce_none, + 5, 57, :_reduce_none, + 0, 66, :_reduce_10, + 0, 67, :_reduce_11, + 5, 58, :_reduce_12, 2, 58, :_reduce_none, - 2, 58, :_reduce_20, - 2, 58, :_reduce_21, - 3, 58, :_reduce_22, - 2, 58, :_reduce_23, - 1, 58, :_reduce_24, - 1, 58, :_reduce_25, - 2, 58, :_reduce_none, - 1, 76, :_reduce_27, - 2, 76, :_reduce_28, - 2, 67, :_reduce_29, - 1, 67, :_reduce_none, - 1, 67, :_reduce_none, - 1, 67, :_reduce_none, - 3, 67, :_reduce_33, - 3, 67, :_reduce_34, - 3, 67, :_reduce_35, - 2, 67, :_reduce_36, - 2, 67, :_reduce_37, - 2, 67, :_reduce_38, - 2, 67, :_reduce_39, - 2, 67, :_reduce_40, - 2, 72, :_reduce_none, - 2, 72, :_reduce_42, - 2, 72, :_reduce_43, - 2, 72, :_reduce_44, - 2, 72, :_reduce_45, - 2, 72, :_reduce_46, - 1, 81, :_reduce_47, - 2, 81, :_reduce_48, - 1, 77, :_reduce_49, - 2, 77, :_reduce_50, - 3, 77, :_reduce_51, - 0, 84, :_reduce_none, - 1, 84, :_reduce_none, - 3, 80, :_reduce_54, - 0, 87, :_reduce_none, - 1, 87, :_reduce_none, - 8, 73, :_reduce_57, - 5, 74, :_reduce_58, - 8, 74, :_reduce_59, - 1, 85, :_reduce_60, - 3, 85, :_reduce_61, - 1, 86, :_reduce_62, - 3, 86, :_reduce_63, - 0, 95, :_reduce_none, - 1, 95, :_reduce_none, - 1, 88, :_reduce_66, - 3, 88, :_reduce_67, - 3, 88, :_reduce_68, - 6, 88, :_reduce_69, - 3, 88, :_reduce_70, - 3, 88, :_reduce_71, - 0, 83, :_reduce_none, - 1, 83, :_reduce_73, - 1, 97, :_reduce_74, - 2, 97, :_reduce_75, - 1, 78, :_reduce_76, - 2, 78, :_reduce_77, - 3, 78, :_reduce_78, - 1, 90, :_reduce_none, - 1, 90, :_reduce_none, - 0, 98, :_reduce_81, - 0, 99, :_reduce_82, - 5, 70, :_reduce_83, - 1, 100, :_reduce_84, - 2, 100, :_reduce_85, - 1, 79, :_reduce_86, - 2, 79, :_reduce_87, - 3, 79, :_reduce_88, - 1, 82, :_reduce_89, - 1, 82, :_reduce_90, - 0, 102, :_reduce_none, - 1, 102, :_reduce_none, + 1, 72, :_reduce_14, + 2, 72, :_reduce_15, + 1, 59, :_reduce_none, + 2, 59, :_reduce_17, + 3, 59, :_reduce_none, 2, 59, :_reduce_none, + 2, 59, :_reduce_20, + 2, 59, :_reduce_21, + 3, 59, :_reduce_22, + 2, 59, :_reduce_23, + 1, 59, :_reduce_24, + 1, 59, :_reduce_25, 2, 59, :_reduce_none, - 4, 101, :_reduce_95, - 1, 103, :_reduce_96, - 3, 103, :_reduce_97, + 1, 77, :_reduce_27, + 1, 77, :_reduce_28, + 1, 78, :_reduce_29, + 2, 78, :_reduce_30, + 2, 68, :_reduce_31, + 1, 68, :_reduce_none, + 1, 68, :_reduce_none, + 1, 68, :_reduce_none, + 3, 68, :_reduce_35, + 3, 68, :_reduce_36, + 3, 68, :_reduce_37, + 2, 68, :_reduce_38, + 2, 68, :_reduce_39, + 2, 68, :_reduce_40, + 2, 68, :_reduce_41, + 2, 68, :_reduce_42, + 2, 73, :_reduce_none, + 2, 73, :_reduce_44, + 2, 73, :_reduce_45, + 2, 73, :_reduce_46, + 2, 73, :_reduce_47, + 2, 73, :_reduce_48, + 1, 83, :_reduce_49, + 2, 83, :_reduce_50, + 1, 79, :_reduce_51, + 2, 79, :_reduce_52, + 3, 79, :_reduce_53, + 0, 86, :_reduce_none, + 1, 86, :_reduce_none, + 3, 82, :_reduce_56, + 0, 89, :_reduce_none, + 1, 89, :_reduce_none, + 8, 74, :_reduce_59, + 5, 75, :_reduce_60, + 8, 75, :_reduce_61, + 1, 87, :_reduce_62, + 3, 87, :_reduce_63, + 1, 88, :_reduce_64, + 3, 88, :_reduce_65, + 0, 96, :_reduce_none, + 1, 96, :_reduce_none, + 1, 90, :_reduce_68, + 3, 90, :_reduce_69, + 3, 90, :_reduce_70, + 6, 90, :_reduce_71, + 3, 90, :_reduce_72, + 3, 90, :_reduce_73, + 0, 85, :_reduce_none, + 1, 85, :_reduce_75, + 1, 98, :_reduce_76, + 2, 98, :_reduce_77, + 1, 80, :_reduce_78, + 2, 80, :_reduce_79, + 3, 80, :_reduce_80, + 1, 76, :_reduce_none, + 1, 76, :_reduce_none, + 0, 99, :_reduce_83, + 0, 100, :_reduce_84, + 5, 71, :_reduce_85, + 1, 101, :_reduce_86, + 2, 101, :_reduce_87, + 1, 81, :_reduce_88, + 2, 81, :_reduce_89, + 3, 81, :_reduce_90, + 1, 84, :_reduce_91, + 1, 84, :_reduce_92, + 0, 103, :_reduce_none, + 1, 103, :_reduce_none, + 2, 60, :_reduce_none, + 2, 60, :_reduce_none, + 4, 102, :_reduce_97, 1, 104, :_reduce_98, 3, 104, :_reduce_99, - 5, 104, :_reduce_100, - 7, 104, :_reduce_101, - 4, 104, :_reduce_102, - 3, 104, :_reduce_103, - 1, 92, :_reduce_104, - 1, 92, :_reduce_105, - 1, 92, :_reduce_106, + 1, 105, :_reduce_100, + 3, 105, :_reduce_101, + 5, 105, :_reduce_102, + 7, 105, :_reduce_103, + 4, 105, :_reduce_104, + 3, 105, :_reduce_105, + 1, 93, :_reduce_106, 1, 93, :_reduce_107, - 3, 93, :_reduce_108, - 2, 93, :_reduce_109, - 4, 93, :_reduce_110, - 0, 105, :_reduce_111, - 0, 106, :_reduce_112, - 5, 94, :_reduce_113, - 3, 91, :_reduce_114, - 0, 107, :_reduce_115, - 3, 60, :_reduce_116, - 1, 68, :_reduce_none, - 0, 69, :_reduce_none, - 1, 69, :_reduce_none, + 1, 93, :_reduce_108, + 1, 94, :_reduce_109, + 3, 94, :_reduce_110, + 2, 94, :_reduce_111, + 4, 94, :_reduce_112, + 0, 106, :_reduce_113, + 0, 107, :_reduce_114, + 5, 95, :_reduce_115, + 3, 92, :_reduce_116, + 0, 108, :_reduce_117, + 3, 61, :_reduce_118, 1, 69, :_reduce_none, - 1, 69, :_reduce_none, - 1, 75, :_reduce_none, - 1, 75, :_reduce_none, - 0, 89, :_reduce_none, - 1, 89, :_reduce_none, - 1, 96, :_reduce_126 ] + 0, 70, :_reduce_none, + 1, 70, :_reduce_none, + 1, 70, :_reduce_none, + 1, 70, :_reduce_none, + 0, 91, :_reduce_none, + 1, 91, :_reduce_none, + 1, 97, :_reduce_126 ] racc_reduce_n = 127 @@ -1053,31 +1053,32 @@ def raise_parse_error(error_message, location) "%after-reduce" => 29, "%after-shift-error-token" => 30, "%after-pop-stack" => 31, - "%token" => 32, - "%type" => 33, - "%left" => 34, - "%right" => 35, - "%precedence" => 36, - "%nonassoc" => 37, - "%rule" => 38, - "(" => 39, - ")" => 40, - ":" => 41, - "%inline" => 42, - "," => 43, - "|" => 44, - "%prec" => 45, - "{" => 46, - "}" => 47, - "?" => 48, - "+" => 49, - "*" => 50, - "[" => 51, - "]" => 52, - "{...}" => 53, - "%empty" => 54 } - -racc_nt_base = 55 + "-temp-group" => 32, + "%token" => 33, + "%type" => 34, + "%left" => 35, + "%right" => 36, + "%precedence" => 37, + "%nonassoc" => 38, + "%rule" => 39, + "(" => 40, + ")" => 41, + ":" => 42, + "%inline" => 43, + "," => 44, + "|" => 45, + "%prec" => 46, + "{" => 47, + "}" => 48, + "?" => 49, + "+" => 50, + "*" => 51, + "[" => 52, + "]" => 53, + "{...}" => 54, + "%empty" => 55 } + +racc_nt_base = 56 racc_use_result_var = true @@ -1131,6 +1132,7 @@ def raise_parse_error(error_message, location) "\"%after-reduce\"", "\"%after-shift-error-token\"", "\"%after-pop-stack\"", + "\"-temp-group\"", "\"%token\"", "\"%type\"", "\"%left\"", @@ -1174,8 +1176,9 @@ def raise_parse_error(error_message, location) "symbol_declaration", "rule_declaration", "inline_declaration", - "generic_symbol", - "\"-many1@generic_symbol\"", + "symbol", + "\"-group@symbol|TAG\"", + "\"-many1@-group@symbol|TAG\"", "token_declarations", "symbol_declarations", "token_declarations_for_precedence", @@ -1189,7 +1192,6 @@ def raise_parse_error(error_message, location) "\"-option@TAG\"", "rule_rhs", "empty", - "symbol", "named_ref", "parameterizing_suffix", "parameterizing_args", @@ -1371,20 +1373,34 @@ def _reduce_25(val, _values, result) module_eval(<<'.,.,', 'parser.y', 109) def _reduce_27(val, _values, result) - result = val[1] ? val[1].unshift(val[0]) : val + result = val result end .,., module_eval(<<'.,.,', 'parser.y', 109) def _reduce_28(val, _values, result) + result = val + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 109) + def _reduce_29(val, _values, result) + result = val[1] ? val[1].unshift(val[0]) : val + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 109) + def _reduce_30(val, _values, result) result = val[1] ? val[1].unshift(val[0]) : val result end .,., module_eval(<<'.,.,', 'parser.y', 55) - def _reduce_29(val, _values, result) + def _reduce_31(val, _values, result) @grammar.set_union( Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[1]), val[1].line @@ -1394,16 +1410,16 @@ def _reduce_29(val, _values, result) end .,., -# reduce 30 omitted +# reduce 32 omitted -# reduce 31 omitted +# reduce 33 omitted -# reduce 32 omitted +# reduce 34 omitted module_eval(<<'.,.,', 'parser.y', 65) - def _reduce_33(val, _values, result) + def _reduce_35(val, _values, result) @grammar.add_destructor( - ident_or_tags: val[2], + ident_or_tags: val[2].flatten, token_code: val[1], lineno: val[1].line ) @@ -1413,9 +1429,9 @@ def _reduce_33(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 73) - def _reduce_34(val, _values, result) + def _reduce_36(val, _values, result) @grammar.add_printer( - ident_or_tags: val[2], + ident_or_tags: val[2].flatten, token_code: val[1], lineno: val[1].line ) @@ -1425,9 +1441,9 @@ def _reduce_34(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 81) - def _reduce_35(val, _values, result) + def _reduce_37(val, _values, result) @grammar.add_error_token( - ident_or_tags: val[2], + ident_or_tags: val[2].flatten, token_code: val[1], lineno: val[1].line ) @@ -1437,7 +1453,7 @@ def _reduce_35(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 89) - def _reduce_36(val, _values, result) + def _reduce_38(val, _values, result) @grammar.after_shift = val[1] result @@ -1445,7 +1461,7 @@ def _reduce_36(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 93) - def _reduce_37(val, _values, result) + def _reduce_39(val, _values, result) @grammar.before_reduce = val[1] result @@ -1453,7 +1469,7 @@ def _reduce_37(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 97) - def _reduce_38(val, _values, result) + def _reduce_40(val, _values, result) @grammar.after_reduce = val[1] result @@ -1461,7 +1477,7 @@ def _reduce_38(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 101) - def _reduce_39(val, _values, result) + def _reduce_41(val, _values, result) @grammar.after_shift_error_token = val[1] result @@ -1469,17 +1485,17 @@ def _reduce_39(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 105) - def _reduce_40(val, _values, result) + def _reduce_42(val, _values, result) @grammar.after_pop_stack = val[1] result end .,., -# reduce 41 omitted +# reduce 43 omitted module_eval(<<'.,.,', 'parser.y', 111) - def _reduce_42(val, _values, result) + def _reduce_44(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| @grammar.add_type(id: id, tag: hash[:tag]) @@ -1491,7 +1507,7 @@ def _reduce_42(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 119) - def _reduce_43(val, _values, result) + def _reduce_45(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1505,7 +1521,7 @@ def _reduce_43(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 129) - def _reduce_44(val, _values, result) + def _reduce_46(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1519,7 +1535,7 @@ def _reduce_44(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 139) - def _reduce_45(val, _values, result) + def _reduce_47(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1533,7 +1549,7 @@ def _reduce_45(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 149) - def _reduce_46(val, _values, result) + def _reduce_48(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1547,21 +1563,21 @@ def _reduce_46(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 178) - def _reduce_47(val, _values, result) + def _reduce_49(val, _values, result) result = val[1] ? val[1].unshift(val[0]) : val result end .,., module_eval(<<'.,.,', 'parser.y', 178) - def _reduce_48(val, _values, result) + def _reduce_50(val, _values, result) result = val[1] ? val[1].unshift(val[0]) : val result end .,., module_eval(<<'.,.,', 'parser.y', 160) - def _reduce_49(val, _values, result) + def _reduce_51(val, _values, result) val[0].each {|token_declaration| @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: nil, replace: true) } @@ -1571,7 +1587,7 @@ def _reduce_49(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 166) - def _reduce_50(val, _values, result) + def _reduce_52(val, _values, result) val[1].each {|token_declaration| @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[0], replace: true) } @@ -1581,7 +1597,7 @@ def _reduce_50(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 172) - def _reduce_51(val, _values, result) + def _reduce_53(val, _values, result) val[2].each {|token_declaration| @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[1], replace: true) } @@ -1590,23 +1606,23 @@ def _reduce_51(val, _values, result) end .,., -# reduce 52 omitted +# reduce 54 omitted -# reduce 53 omitted +# reduce 55 omitted module_eval(<<'.,.,', 'parser.y', 177) - def _reduce_54(val, _values, result) + def _reduce_56(val, _values, result) result = val result end .,., -# reduce 55 omitted +# reduce 57 omitted -# reduce 56 omitted +# reduce 58 omitted module_eval(<<'.,.,', 'parser.y', 181) - def _reduce_57(val, _values, result) + def _reduce_59(val, _values, result) rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[7], tag: val[5]) @grammar.add_parameterizing_rule(rule) @@ -1615,7 +1631,7 @@ def _reduce_57(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 187) - def _reduce_58(val, _values, result) + def _reduce_60(val, _values, result) rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, [], val[4], is_inline: true) @grammar.add_parameterizing_rule(rule) @@ -1624,7 +1640,7 @@ def _reduce_58(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 192) - def _reduce_59(val, _values, result) + def _reduce_61(val, _values, result) rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, val[4], val[7], is_inline: true) @grammar.add_parameterizing_rule(rule) @@ -1633,21 +1649,21 @@ def _reduce_59(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 196) - def _reduce_60(val, _values, result) + def _reduce_62(val, _values, result) result = [val[0]] result end .,., module_eval(<<'.,.,', 'parser.y', 197) - def _reduce_61(val, _values, result) + def _reduce_63(val, _values, result) result = val[0].append(val[2]) result end .,., module_eval(<<'.,.,', 'parser.y', 201) - def _reduce_62(val, _values, result) + def _reduce_64(val, _values, result) builder = val[0] result = [builder] @@ -1656,7 +1672,7 @@ def _reduce_62(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 206) - def _reduce_63(val, _values, result) + def _reduce_65(val, _values, result) builder = val[2] result = val[0].append(builder) @@ -1664,12 +1680,12 @@ def _reduce_63(val, _values, result) end .,., -# reduce 64 omitted +# reduce 66 omitted -# reduce 65 omitted +# reduce 67 omitted module_eval(<<'.,.,', 'parser.y', 212) - def _reduce_66(val, _values, result) + def _reduce_68(val, _values, result) reset_precs result = Grammar::ParameterizingRule::Rhs.new @@ -1678,7 +1694,7 @@ def _reduce_66(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 217) - def _reduce_67(val, _values, result) + def _reduce_69(val, _values, result) token = val[1] token.alias_name = val[2] builder = val[0] @@ -1690,7 +1706,7 @@ def _reduce_67(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 225) - def _reduce_68(val, _values, result) + def _reduce_70(val, _values, result) builder = val[0] builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]]) result = builder @@ -1700,7 +1716,7 @@ def _reduce_68(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 231) - def _reduce_69(val, _values, result) + def _reduce_71(val, _values, result) builder = val[0] builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5]) result = builder @@ -1710,7 +1726,7 @@ def _reduce_69(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 237) - def _reduce_70(val, _values, result) + def _reduce_72(val, _values, result) user_code = val[1] user_code.alias_name = val[2] builder = val[0] @@ -1722,7 +1738,7 @@ def _reduce_70(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 245) - def _reduce_71(val, _values, result) + def _reduce_73(val, _values, result) sym = @grammar.find_symbol_by_id!(val[2]) @prec_seen = true builder = val[0] @@ -1733,56 +1749,56 @@ def _reduce_71(val, _values, result) end .,., -# reduce 72 omitted +# reduce 74 omitted module_eval(<<'.,.,', 'parser.y', 253) - def _reduce_73(val, _values, result) + def _reduce_75(val, _values, result) result = val[0].s_value result end .,., module_eval(<<'.,.,', 'parser.y', 260) - def _reduce_74(val, _values, result) + def _reduce_76(val, _values, result) result = val[1] ? val[1].unshift(val[0]) : val result end .,., module_eval(<<'.,.,', 'parser.y', 260) - def _reduce_75(val, _values, result) + def _reduce_77(val, _values, result) result = val[1] ? val[1].unshift(val[0]) : val result end .,., module_eval(<<'.,.,', 'parser.y', 255) - def _reduce_76(val, _values, result) + def _reduce_78(val, _values, result) result = [{tag: nil, tokens: val[0]}] result end .,., module_eval(<<'.,.,', 'parser.y', 256) - def _reduce_77(val, _values, result) + def _reduce_79(val, _values, result) result = [{tag: val[0], tokens: val[1]}] result end .,., module_eval(<<'.,.,', 'parser.y', 257) - def _reduce_78(val, _values, result) + def _reduce_80(val, _values, result) result = val[0].append({tag: val[1], tokens: val[2]}) result end .,., -# reduce 79 omitted +# reduce 81 omitted -# reduce 80 omitted +# reduce 82 omitted module_eval(<<'.,.,', 'parser.y', 263) - def _reduce_81(val, _values, result) + def _reduce_83(val, _values, result) begin_c_declaration("}") result @@ -1790,7 +1806,7 @@ def _reduce_81(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 267) - def _reduce_82(val, _values, result) + def _reduce_84(val, _values, result) end_c_declaration result @@ -1798,7 +1814,7 @@ def _reduce_82(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 271) - def _reduce_83(val, _values, result) + def _reduce_85(val, _values, result) result = val[2] result @@ -1806,64 +1822,64 @@ def _reduce_83(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 279) - def _reduce_84(val, _values, result) + def _reduce_86(val, _values, result) result = val[1] ? val[1].unshift(val[0]) : val result end .,., module_eval(<<'.,.,', 'parser.y', 279) - def _reduce_85(val, _values, result) + def _reduce_87(val, _values, result) result = val[1] ? val[1].unshift(val[0]) : val result end .,., module_eval(<<'.,.,', 'parser.y', 274) - def _reduce_86(val, _values, result) + def _reduce_88(val, _values, result) result = [{tag: nil, tokens: val[0]}] result end .,., module_eval(<<'.,.,', 'parser.y', 275) - def _reduce_87(val, _values, result) + def _reduce_89(val, _values, result) result = [{tag: val[0], tokens: val[1]}] result end .,., module_eval(<<'.,.,', 'parser.y', 276) - def _reduce_88(val, _values, result) + def _reduce_90(val, _values, result) result = val[0].append({tag: val[1], tokens: val[2]}) result end .,., module_eval(<<'.,.,', 'parser.y', 278) - def _reduce_89(val, _values, result) + def _reduce_91(val, _values, result) on_action_error("ident after %prec", val[0]) if @prec_seen result end .,., module_eval(<<'.,.,', 'parser.y', 279) - def _reduce_90(val, _values, result) + def _reduce_92(val, _values, result) on_action_error("char after %prec", val[0]) if @prec_seen result end .,., -# reduce 91 omitted - -# reduce 92 omitted - # reduce 93 omitted # reduce 94 omitted +# reduce 95 omitted + +# reduce 96 omitted + module_eval(<<'.,.,', 'parser.y', 287) - def _reduce_95(val, _values, result) + def _reduce_97(val, _values, result) lhs = val[0] lhs.alias_name = val[1] val[3].each do |builder| @@ -1877,7 +1893,7 @@ def _reduce_95(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 298) - def _reduce_96(val, _values, result) + def _reduce_98(val, _values, result) builder = val[0] if !builder.line builder.line = @lexer.line - 1 @@ -1889,7 +1905,7 @@ def _reduce_96(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 306) - def _reduce_97(val, _values, result) + def _reduce_99(val, _values, result) builder = val[2] if !builder.line builder.line = @lexer.line - 1 @@ -1901,7 +1917,7 @@ def _reduce_97(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 315) - def _reduce_98(val, _values, result) + def _reduce_100(val, _values, result) reset_precs result = @grammar.create_rule_builder(@rule_counter, @midrule_action_counter) @@ -1910,7 +1926,7 @@ def _reduce_98(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 320) - def _reduce_99(val, _values, result) + def _reduce_101(val, _values, result) token = val[1] token.alias_name = val[2] builder = val[0] @@ -1922,7 +1938,7 @@ def _reduce_99(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 328) - def _reduce_100(val, _values, result) + def _reduce_102(val, _values, result) token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], alias_name: val[3], location: @lexer.location, args: [val[1]], lhs_tag: val[4]) builder = val[0] builder.add_rhs(token) @@ -1934,7 +1950,7 @@ def _reduce_100(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 336) - def _reduce_101(val, _values, result) + def _reduce_103(val, _values, result) token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, alias_name: val[5], location: @lexer.location, args: val[3], lhs_tag: val[6]) builder = val[0] builder.add_rhs(token) @@ -1946,7 +1962,7 @@ def _reduce_101(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 344) - def _reduce_102(val, _values, result) + def _reduce_104(val, _values, result) user_code = val[1] user_code.alias_name = val[2] user_code.tag = val[3] @@ -1959,7 +1975,7 @@ def _reduce_102(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 353) - def _reduce_103(val, _values, result) + def _reduce_105(val, _values, result) sym = @grammar.find_symbol_by_id!(val[2]) @prec_seen = true builder = val[0] @@ -1971,56 +1987,56 @@ def _reduce_103(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 360) - def _reduce_104(val, _values, result) + def _reduce_106(val, _values, result) result = "option" result end .,., module_eval(<<'.,.,', 'parser.y', 361) - def _reduce_105(val, _values, result) + def _reduce_107(val, _values, result) result = "nonempty_list" result end .,., module_eval(<<'.,.,', 'parser.y', 362) - def _reduce_106(val, _values, result) + def _reduce_108(val, _values, result) result = "list" result end .,., module_eval(<<'.,.,', 'parser.y', 364) - def _reduce_107(val, _values, result) + def _reduce_109(val, _values, result) result = [val[0]] result end .,., module_eval(<<'.,.,', 'parser.y', 365) - def _reduce_108(val, _values, result) + def _reduce_110(val, _values, result) result = val[0].append(val[2]) result end .,., module_eval(<<'.,.,', 'parser.y', 366) - def _reduce_109(val, _values, result) + def _reduce_111(val, _values, result) result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[0])] result end .,., module_eval(<<'.,.,', 'parser.y', 367) - def _reduce_110(val, _values, result) + def _reduce_112(val, _values, result) result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[0].s_value, location: @lexer.location, args: val[2])] result end .,., module_eval(<<'.,.,', 'parser.y', 371) - def _reduce_111(val, _values, result) + def _reduce_113(val, _values, result) if @prec_seen on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec @code_after_prec = true @@ -2032,7 +2048,7 @@ def _reduce_111(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 379) - def _reduce_112(val, _values, result) + def _reduce_114(val, _values, result) end_c_declaration result @@ -2040,7 +2056,7 @@ def _reduce_112(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 383) - def _reduce_113(val, _values, result) + def _reduce_115(val, _values, result) result = val[2] result @@ -2048,14 +2064,14 @@ def _reduce_113(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 386) - def _reduce_114(val, _values, result) + def _reduce_116(val, _values, result) result = val[1].s_value result end .,., module_eval(<<'.,.,', 'parser.y', 390) - def _reduce_115(val, _values, result) + def _reduce_117(val, _values, result) begin_c_declaration('\Z') @grammar.epilogue_first_lineno = @lexer.line + 1 @@ -2064,7 +2080,7 @@ def _reduce_115(val, _values, result) .,., module_eval(<<'.,.,', 'parser.y', 395) - def _reduce_116(val, _values, result) + def _reduce_118(val, _values, result) end_c_declaration @grammar.epilogue = val[2].s_value @@ -2072,10 +2088,6 @@ def _reduce_116(val, _values, result) end .,., -# reduce 117 omitted - -# reduce 118 omitted - # reduce 119 omitted # reduce 120 omitted @@ -2090,7 +2102,7 @@ def _reduce_116(val, _values, result) # reduce 125 omitted -module_eval(<<'.,.,', 'parser.y', 412) +module_eval(<<'.,.,', 'parser.y', 409) def _reduce_126(val, _values, result) result = Lrama::Lexer::Token::Ident.new(s_value: val[0]) result diff --git a/parser.y b/parser.y index 52603a72..056ddbcf 100644 --- a/parser.y +++ b/parser.y @@ -61,26 +61,26 @@ rule | symbol_declaration | rule_declaration | inline_declaration - | "%destructor" param generic_symbol+ + | "%destructor" param (symbol | TAG)+ { @grammar.add_destructor( - ident_or_tags: val[2], + ident_or_tags: val[2].flatten, token_code: val[1], lineno: val[1].line ) } - | "%printer" param generic_symbol+ + | "%printer" param (symbol | TAG)+ { @grammar.add_printer( - ident_or_tags: val[2], + ident_or_tags: val[2].flatten, token_code: val[1], lineno: val[1].line ) } - | "%error-token" param generic_symbol+ + | "%error-token" param (symbol | TAG)+ { @grammar.add_error_token( - ident_or_tags: val[2], + ident_or_tags: val[2].flatten, token_code: val[1], lineno: val[1].line ) @@ -404,9 +404,6 @@ rule | STRING | "{...}" - generic_symbol: symbol - | TAG - empty: /* empty */ | "%empty" diff --git a/spec/fixtures/context/basic.y b/spec/fixtures/context/basic.y index 7f41210b..31f5f701 100644 --- a/spec/fixtures/context/basic.y +++ b/spec/fixtures/context/basic.y @@ -18,6 +18,13 @@ %printer { print_token(); } tNUMBER tSTRING +%destructor { + printf("destructor for i: %d\n", $$); + printf("line for i: %d\n", __LINE__); +} <i> +%error-token { + $$ = 100; +} tNUMBER %lex-param {struct lex_params *p} %parse-param {struct parse_params *p} diff --git a/spec/lrama/context_spec.rb b/spec/lrama/context_spec.rb index 6d2b6245..027d204c 100644 --- a/spec/lrama/context_spec.rb +++ b/spec/lrama/context_spec.rb @@ -98,8 +98,8 @@ expect(context.yytname[context.yytranslate[11]]).to eq("\"escaped vertical tab\"") expect(context.yytname[context.yytranslate[258]]).to eq("keyword_class") expect(context.yyrline).to eq([ - 0, 57, 57, 58, 59, 62, 64, 64, 67, 70, - 71, 74, 77, 80 + 0, 64, 64, 65, 66, 69, 71, 71, 74, 77, + 78, 81, 84, 87 ]) expect(context.yytname).to eq([ "\"EOI\"", "error", "\"invalid token\"", "\"backslash\"",