From 3e72cdd693921e2802c9b6b543e36832c00d65e5 Mon Sep 17 00:00:00 2001 From: ydah <13041216+ydah@users.noreply.github.com> Date: Sat, 10 Feb 2024 01:08:50 +0900 Subject: [PATCH] Define an Inlining grammar --- lib/lrama/grammar/inline/resolver.rb | 21 + lib/lrama/grammar/inline/rhs.rb | 15 + lib/lrama/grammar/inline/rule.rb | 14 + lib/lrama/lexer.rb | 1 + lib/lrama/parser.rb | 1125 ++++++++++++++------------ parser.y | 65 ++ 6 files changed, 746 insertions(+), 495 deletions(-) create mode 100644 lib/lrama/grammar/inline/resolver.rb create mode 100644 lib/lrama/grammar/inline/rhs.rb create mode 100644 lib/lrama/grammar/inline/rule.rb diff --git a/lib/lrama/grammar/inline/resolver.rb b/lib/lrama/grammar/inline/resolver.rb new file mode 100644 index 00000000..267bd1f5 --- /dev/null +++ b/lib/lrama/grammar/inline/resolver.rb @@ -0,0 +1,21 @@ +module Lrama + class Grammar + class Inline + class Resolver + attr_accessor :rules + + def initialize + @rules = [] + end + + def add_inline_rule(rule) + @rules << rule + end + + def find(token) + @rules.select { |rule| rule.name == token.s_value }.last + end + end + end + end +end diff --git a/lib/lrama/grammar/inline/rhs.rb b/lib/lrama/grammar/inline/rhs.rb new file mode 100644 index 00000000..94a6060b --- /dev/null +++ b/lib/lrama/grammar/inline/rhs.rb @@ -0,0 +1,15 @@ +module Lrama + class Grammar + class Inline + class Rhs + attr_accessor :symbols, :user_code, :precedence_sym + + def initialize + @symbols = [] + @user_code = nil + @precedence_sym = nil + end + end + end + end +end diff --git a/lib/lrama/grammar/inline/rule.rb b/lib/lrama/grammar/inline/rule.rb new file mode 100644 index 00000000..00371b0b --- /dev/null +++ b/lib/lrama/grammar/inline/rule.rb @@ -0,0 +1,14 @@ +module Lrama + class Grammar + class Inline + class Rule + attr_reader :name, :rhs_list + + def initialize(name, rhs_list) + @name = name + @rhs_list = rhs_list + end + end + end + end +end diff --git a/lib/lrama/lexer.rb b/lib/lrama/lexer.rb index b94fad57..64121100 100644 --- a/lib/lrama/lexer.rb +++ b/lib/lrama/lexer.rb @@ -31,6 +31,7 @@ class Lexer %code %rule %no-stdlib + %inline ) def initialize(grammar_file) diff --git a/lib/lrama/parser.rb b/lib/lrama/parser.rb index e5f2384e..d5dc87dd 100644 --- a/lib/lrama/parser.rb +++ b/lib/lrama/parser.rb @@ -658,7 +658,7 @@ def token_to_str(t) module Lrama class Parser < Racc::Parser -module_eval(<<'...end parser.y/module_eval...', 'parser.y', 501) +module_eval(<<'...end parser.y/module_eval...', 'parser.y', 566) include Lrama::Report::Duration @@ -732,303 +732,328 @@ def raise_parse_error(error_message, location) ##### State transition tables begin ### racc_action_table = [ - 86, 45, 87, 146, 145, 68, 45, 45, 146, 189, - 68, 68, 45, 6, 189, 7, 68, 148, 200, 45, - 144, 44, 148, 190, 59, 164, 165, 166, 190, 3, - 45, 41, 44, 8, 68, 64, 35, 42, 45, 149, - 44, 41, 88, 71, 149, 191, 81, 45, 48, 44, - 191, 22, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 22, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 9, 45, 48, 44, 13, 14, 15, 16, 17, - 18, 48, 51, 19, 20, 21, 22, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 45, 45, 44, - 44, 52, 71, 71, 45, 45, 44, 44, 45, 71, - 44, 53, 68, 174, 45, 45, 44, 44, 68, 174, - 45, 45, 44, 44, 68, 174, 45, 45, 44, 44, - 68, 174, 45, 45, 44, 44, 68, 174, 45, 45, - 44, 44, 68, 174, 45, 45, 44, 44, 68, 68, - 45, 45, 44, 44, 68, 68, 45, 45, 44, 44, - 68, 68, 45, 45, 180, 44, 68, 68, 45, 45, - 180, 44, 68, 68, 45, 45, 180, 44, 68, 164, - 165, 166, 84, 45, 45, 44, 44, 142, 193, 143, - 194, 164, 165, 166, 209, 211, 194, 194, 54, 55, - 56, 77, 78, 82, 84, 89, 89, 89, 91, 97, - 101, 102, 105, 105, 105, 105, 108, 111, 112, 114, - 116, 117, 118, 119, 120, 123, 127, 128, 129, 132, - 133, 134, 136, 151, 153, 154, 155, 156, 157, 158, - 159, 132, 161, 169, 170, 179, 184, 185, 187, 192, - 179, 84, 184, 206, 208, 84, 213, 84 ] + 89, 47, 90, 46, 47, 70, 157, 47, 70, 46, + 47, 70, 157, 6, 70, 7, 3, 153, 156, 47, + 159, 46, 8, 153, 61, 47, 159, 205, 47, 70, + 205, 43, 70, 47, 155, 46, 37, 70, 66, 154, + 44, 206, 160, 91, 206, 154, 50, 47, 160, 46, + 50, 23, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 50, 53, 207, 9, 47, 207, 46, 14, 15, + 16, 17, 18, 19, 54, 55, 20, 21, 22, 23, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 43, 217, 47, 56, 46, 84, 70, 35, 57, 179, + 180, 181, 47, 47, 46, 46, 58, 73, 73, 79, + 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 47, 47, 46, 46, 80, 73, 73, 47, 47, 46, + 46, 70, 189, 47, 47, 46, 46, 70, 189, 47, + 47, 46, 46, 70, 189, 47, 47, 46, 46, 70, + 189, 47, 47, 46, 46, 70, 189, 47, 47, 46, + 46, 70, 189, 47, 47, 46, 46, 70, 70, 47, + 47, 46, 46, 70, 70, 47, 47, 46, 46, 70, + 70, 47, 47, 196, 46, 70, 70, 47, 47, 196, + 46, 70, 70, 47, 47, 196, 46, 70, 179, 180, + 181, 87, 47, 47, 46, 46, 149, 210, 150, 211, + 179, 180, 181, 228, 230, 211, 211, 81, 85, 87, + 92, 92, 92, 94, 100, 104, 105, 108, 108, 108, + 108, 111, 112, 115, 116, 118, 120, 121, 122, 123, + 124, 127, 131, 134, 135, 136, 139, 140, 141, 143, + 151, 162, 164, 165, 166, 167, 168, 169, 170, 134, + 87, 139, 176, 184, 185, 194, 195, 200, 201, 203, + 209, 194, 87, 220, 200, 224, 226, 87, 87, 232, + 87 ] racc_action_check = [ - 43, 131, 43, 131, 130, 131, 160, 178, 160, 178, - 160, 178, 197, 2, 197, 2, 197, 131, 189, 27, - 130, 27, 160, 178, 27, 189, 189, 189, 197, 1, - 28, 9, 28, 3, 28, 28, 7, 13, 29, 131, - 29, 36, 43, 29, 160, 178, 36, 14, 15, 14, - 197, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 4, 58, 16, 58, 4, 4, 4, 4, 4, - 4, 17, 18, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 30, 31, 30, - 31, 19, 30, 31, 32, 59, 32, 59, 155, 32, - 155, 22, 155, 155, 156, 70, 156, 70, 156, 156, - 157, 71, 157, 71, 157, 157, 171, 97, 171, 97, - 171, 171, 175, 99, 175, 99, 175, 175, 176, 105, - 176, 105, 176, 176, 63, 64, 63, 64, 63, 64, - 102, 104, 102, 104, 102, 104, 124, 149, 124, 149, - 124, 149, 161, 191, 161, 191, 161, 191, 192, 194, - 192, 194, 192, 194, 200, 107, 200, 107, 200, 147, - 147, 147, 147, 121, 125, 121, 125, 126, 181, 126, - 181, 182, 182, 182, 203, 207, 203, 207, 24, 25, - 26, 33, 34, 39, 40, 47, 49, 50, 51, 57, - 61, 62, 69, 74, 75, 76, 77, 83, 84, 90, - 92, 93, 94, 95, 96, 100, 108, 109, 110, 111, - 112, 113, 115, 135, 137, 138, 139, 140, 141, 142, - 143, 144, 146, 150, 152, 158, 163, 167, 177, 180, - 187, 188, 193, 196, 201, 206, 212, 213 ] + 45, 133, 45, 133, 138, 133, 138, 171, 138, 171, + 175, 171, 175, 2, 175, 2, 1, 133, 137, 28, + 138, 28, 3, 171, 28, 193, 175, 193, 214, 193, + 214, 9, 214, 29, 137, 29, 7, 29, 29, 133, + 14, 193, 138, 45, 214, 171, 16, 15, 175, 15, + 17, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 18, 19, 193, 4, 60, 214, 60, 4, 4, + 4, 4, 4, 4, 20, 23, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 38, 205, 65, 25, 65, 38, 65, 4, 26, 205, + 205, 205, 30, 31, 30, 31, 27, 30, 31, 34, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 32, 33, 32, 33, 35, 32, 33, 166, 61, 166, + 61, 166, 166, 167, 72, 167, 72, 167, 167, 168, + 73, 168, 73, 168, 168, 186, 100, 186, 100, 186, + 186, 190, 102, 190, 102, 190, 190, 191, 108, 191, + 108, 191, 191, 66, 105, 66, 105, 66, 105, 107, + 128, 107, 128, 107, 128, 154, 160, 154, 160, 154, + 160, 176, 207, 176, 207, 176, 207, 209, 211, 209, + 211, 209, 211, 217, 110, 217, 110, 217, 158, 158, + 158, 158, 125, 129, 125, 129, 130, 197, 130, 197, + 198, 198, 198, 221, 225, 221, 225, 36, 41, 42, + 49, 51, 52, 53, 59, 63, 64, 71, 76, 77, + 78, 79, 80, 86, 87, 93, 95, 96, 97, 98, + 99, 103, 111, 112, 113, 114, 115, 116, 117, 119, + 132, 142, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 155, 157, 161, 163, 169, 173, 178, 182, 192, + 196, 203, 204, 208, 210, 213, 218, 220, 224, 231, + 232 ] racc_action_pointer = [ - nil, 29, 3, 33, 62, nil, nil, 29, nil, 27, - nil, nil, nil, 31, 44, 29, 54, 62, 77, 82, - nil, nil, 92, nil, 179, 180, 181, 16, 27, 35, - 94, 95, 101, 196, 200, nil, 37, nil, nil, 180, - 159, nil, nil, -5, nil, nil, nil, 186, nil, 187, - 188, 189, nil, nil, nil, nil, nil, 201, 69, 102, - nil, 204, 203, 141, 142, nil, nil, nil, nil, 204, - 112, 118, nil, nil, 205, 206, 207, 181, nil, nil, - nil, nil, nil, 180, 213, nil, nil, nil, nil, nil, - 217, nil, 218, 219, 220, 221, 222, 124, nil, 130, - 218, nil, 147, nil, 148, 136, nil, 172, 221, 216, - 226, 189, 184, 229, nil, 230, nil, nil, nil, nil, - nil, 180, nil, nil, 153, 181, 151, nil, nil, nil, - -19, -2, nil, nil, nil, 213, nil, 214, 215, 216, - 217, 218, 202, 235, 201, nil, 207, 137, nil, 154, - 223, nil, 224, nil, nil, 105, 111, 117, 205, nil, - 3, 159, nil, 238, nil, nil, nil, 245, nil, nil, - nil, 123, nil, nil, nil, 129, 135, 209, 4, nil, - 214, 152, 149, nil, nil, nil, nil, 210, 206, -17, - nil, 160, 165, 244, 166, nil, 233, 9, nil, nil, - 171, 252, nil, 158, nil, nil, 210, 159, nil, nil, - nil, nil, 236, 212, nil ] + nil, 16, 3, 22, 55, nil, nil, 29, nil, 27, + nil, nil, nil, nil, 34, 44, 27, 31, 42, 57, + 55, nil, nil, 56, nil, 74, 79, 87, 16, 30, + 99, 100, 117, 118, 104, 119, 215, nil, 86, nil, + nil, 195, 173, nil, nil, -5, nil, nil, nil, 201, + nil, 202, 203, 204, nil, nil, nil, nil, nil, 216, + 62, 125, nil, 219, 218, 89, 160, nil, nil, nil, + nil, 219, 131, 137, nil, nil, 220, 221, 222, 196, + 195, nil, nil, nil, nil, nil, 196, 229, nil, nil, + nil, nil, nil, 233, nil, 234, 235, 236, 237, 238, + 143, nil, 149, 234, nil, 161, nil, 166, 155, nil, + 191, 237, 203, 233, 243, 206, 200, 246, nil, 247, + nil, nil, nil, nil, nil, 199, nil, nil, 167, 200, + 170, nil, 211, -2, nil, nil, nil, -5, 1, nil, + nil, nil, 231, nil, 232, 233, 234, 235, 236, 220, + 253, 219, 214, nil, 172, 221, nil, 227, 155, nil, + 173, 243, nil, 244, nil, nil, 124, 130, 136, 225, + nil, 4, nil, 264, nil, 7, 178, nil, 259, nil, + nil, nil, 266, nil, nil, nil, 142, nil, nil, nil, + 148, 154, 230, 22, nil, nil, 235, 171, 167, nil, + nil, nil, nil, 231, 226, 56, nil, 179, 253, 184, + 266, 185, nil, 255, 25, nil, nil, 190, 274, nil, + 231, 177, nil, nil, 232, 178, nil, nil, nil, nil, + nil, 259, 234, nil ] racc_action_default = [ - -2, -131, -8, -131, -131, -3, -4, -131, 215, -131, - -9, -10, -11, -131, -131, -131, -131, -131, -131, -131, - -23, -24, -131, -28, -131, -131, -131, -131, -131, -131, - -131, -131, -131, -131, -131, -7, -116, -89, -91, -131, - -113, -115, -12, -120, -87, -88, -119, -14, -78, -15, - -16, -131, -20, -25, -29, -32, -35, -38, -44, -131, - -47, -64, -39, -68, -131, -71, -73, -74, -128, -40, - -81, -131, -84, -86, -41, -42, -43, -131, -5, -1, - -90, -117, -92, -131, -131, -13, -121, -122, -123, -75, - -131, -17, -131, -131, -131, -131, -131, -131, -48, -45, - -66, -65, -131, -72, -69, -131, -85, -82, -131, -131, - -131, -97, -131, -131, -79, -131, -21, -26, -30, -33, - -36, -46, -49, -67, -70, -83, -131, -51, -6, -118, - -93, -94, -98, -114, -76, -131, -18, -131, -131, -131, - -131, -131, -131, -131, -97, -96, -87, -113, -102, -131, - -131, -80, -131, -22, -27, -131, -131, -131, -55, -52, - -95, -131, -99, -129, -106, -107, -108, -131, -105, -77, - -19, -31, -124, -126, -127, -34, -37, -50, -53, -56, - -87, -131, -109, -100, -130, -103, -125, -55, -113, -87, - -60, -131, -131, -129, -131, -111, -131, -54, -57, -58, - -131, -131, -63, -131, -101, -110, -113, -131, -61, -112, - -104, -59, -131, -113, -62 ] + -2, -142, -8, -142, -142, -3, -4, -142, 234, -142, + -9, -10, -11, -12, -142, -142, -142, -142, -142, -142, + -142, -24, -25, -142, -29, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -7, -127, -100, + -102, -142, -124, -126, -13, -131, -98, -99, -130, -15, + -89, -16, -17, -142, -21, -26, -30, -33, -36, -39, + -45, -142, -48, -75, -40, -79, -142, -82, -84, -85, + -139, -41, -92, -142, -95, -97, -42, -43, -44, -142, + -142, -5, -1, -101, -128, -103, -142, -142, -14, -132, + -133, -134, -86, -142, -18, -142, -142, -142, -142, -142, + -142, -49, -46, -77, -76, -142, -83, -80, -142, -96, + -93, -142, -68, -142, -142, -108, -142, -142, -90, -142, + -22, -27, -31, -34, -37, -47, -50, -78, -81, -94, + -142, -52, -65, -66, -69, -6, -129, -104, -105, -109, + -125, -87, -142, -19, -142, -142, -142, -142, -142, -142, + -142, -68, -124, -71, -142, -108, -107, -98, -124, -113, + -142, -142, -91, -142, -23, -28, -142, -142, -142, -56, + -53, -67, -70, -142, -74, -106, -142, -110, -140, -117, + -118, -119, -142, -116, -88, -20, -32, -135, -137, -138, + -35, -38, -51, -54, -57, -72, -98, -142, -120, -111, + -141, -114, -136, -56, -124, -98, -61, -142, -142, -142, + -140, -142, -122, -142, -55, -58, -59, -142, -142, -64, + -124, -142, -112, -121, -124, -142, -62, -73, -123, -115, + -60, -142, -124, -63 ] racc_goto_table = [ - 83, 63, 46, 58, 98, 65, 106, 163, 183, 37, - 178, 1, 2, 181, 107, 61, 4, 73, 73, 73, - 73, 131, 186, 47, 49, 50, 186, 186, 69, 74, - 75, 76, 171, 175, 176, 99, 80, 104, 204, 197, - 103, 65, 195, 106, 203, 98, 61, 61, 125, 199, - 36, 79, 207, 5, 160, 34, 109, 10, 73, 73, - 11, 106, 12, 43, 85, 115, 152, 98, 92, 137, - 93, 138, 94, 121, 139, 124, 95, 140, 96, 65, - 141, 103, 57, 62, 100, 61, 122, 61, 126, 177, - 201, 212, 113, 73, 150, 73, 90, 135, 130, 167, - 196, 103, 110, nil, nil, nil, nil, 162, 147, 61, - nil, nil, nil, 73, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 168, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 147, 182, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 198, nil, - nil, nil, nil, nil, nil, 188, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 210, nil, 202, 182, - nil, 205, nil, 214, 188, nil, nil, 182 ] + 86, 48, 60, 67, 65, 109, 101, 110, 39, 178, + 138, 197, 133, 199, 63, 1, 75, 75, 75, 75, + 193, 202, 49, 51, 52, 202, 202, 71, 76, 77, + 78, 186, 190, 191, 2, 102, 4, 83, 38, 106, + 67, 107, 129, 109, 221, 222, 63, 63, 101, 212, + 175, 171, 225, 82, 214, 5, 216, 36, 75, 75, + 113, 10, 109, 11, 12, 13, 45, 88, 119, 163, + 95, 101, 144, 96, 125, 145, 97, 146, 98, 67, + 128, 106, 147, 99, 148, 59, 63, 64, 63, 103, + 126, 130, 192, 218, 75, 231, 75, 132, 173, 208, + 117, 161, 106, 93, 142, 137, 182, 152, 213, 114, + 172, 63, 158, nil, nil, 75, 177, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 174, nil, + nil, nil, nil, nil, 183, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 152, nil, nil, nil, 158, + 198, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 215, nil, nil, nil, nil, 204, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, + nil, 219, 229, 198, nil, 223, nil, nil, 204, nil, + 233, 198 ] racc_goto_check = [ - 41, 46, 34, 32, 33, 40, 53, 42, 59, 54, - 39, 1, 2, 43, 52, 34, 3, 34, 34, 34, - 34, 58, 63, 14, 14, 14, 63, 63, 31, 31, - 31, 31, 20, 20, 20, 32, 54, 46, 59, 39, - 40, 40, 42, 53, 43, 33, 34, 34, 52, 42, - 4, 5, 43, 6, 58, 7, 8, 9, 34, 34, - 10, 53, 11, 12, 13, 15, 16, 33, 17, 18, - 21, 22, 23, 32, 24, 46, 25, 26, 27, 40, - 28, 40, 29, 30, 35, 34, 36, 34, 37, 38, - 44, 45, 48, 34, 49, 34, 50, 51, 57, 60, - 61, 40, 62, nil, nil, nil, nil, 41, 40, 34, - nil, nil, nil, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, 40, nil, + 42, 35, 33, 41, 51, 58, 34, 57, 59, 43, + 63, 44, 48, 64, 35, 1, 35, 35, 35, 35, + 40, 68, 15, 15, 15, 68, 68, 32, 32, 32, + 32, 21, 21, 21, 2, 33, 3, 59, 4, 41, + 41, 51, 57, 58, 44, 64, 35, 35, 34, 43, + 63, 48, 44, 5, 40, 6, 43, 7, 35, 35, + 8, 9, 58, 10, 11, 12, 13, 14, 16, 17, + 18, 34, 19, 22, 33, 23, 24, 25, 26, 41, + 51, 41, 27, 28, 29, 30, 35, 31, 35, 36, + 37, 38, 39, 45, 35, 46, 35, 47, 49, 50, + 53, 54, 41, 55, 56, 62, 65, 41, 66, 67, + 42, 35, 41, nil, nil, 35, 42, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, nil, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 41, nil, 40, 40, - nil, 40, nil, 41, 40, nil, nil, 40 ] + nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 41, nil, nil, nil, 41, + 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 42, nil, nil, nil, nil, 41, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 42, nil, + nil, 41, 42, 41, nil, 41, nil, nil, 41, nil, + 42, 41 ] racc_goto_pointer = [ - nil, 11, 12, 14, 41, 15, 51, 49, -22, 53, - 56, 58, 49, 21, 8, -26, -70, 16, -47, nil, - -123, 17, -46, 18, -44, 21, -42, 22, -40, 55, - 55, -1, -24, -54, -12, 23, -14, -20, -69, -148, - -23, -40, -140, -148, -100, -117, -27, nil, 3, -40, - 48, -17, -57, -64, 0, nil, nil, -13, -90, -155, - -49, -85, 21, -149 ] + nil, 15, 34, 34, 29, 15, 53, 51, -21, 57, + 59, 60, 61, 51, 22, 6, -26, -74, 16, -48, + nil, -135, 18, -46, 20, -45, 21, -41, 25, -40, + 57, 58, -3, -26, -54, -14, 26, -13, -20, -77, + -149, -26, -42, -149, -165, -113, -131, -15, -100, -55, + -96, -25, nil, 8, -40, 53, -14, -66, -67, -1, + nil, nil, -10, -105, -165, -53, -93, 25, -165 ] racc_goto_default = [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 39, nil, nil, nil, nil, nil, nil, nil, nil, 23, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 60, 66, nil, nil, nil, nil, nil, - 173, nil, nil, nil, nil, nil, nil, 67, nil, nil, - nil, nil, 70, 72, nil, 38, 40, nil, nil, nil, - nil, nil, nil, 172 ] + 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 24, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 62, 68, nil, nil, nil, nil, + nil, 188, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 69, nil, nil, nil, nil, 72, 74, nil, + 40, 42, nil, nil, nil, nil, nil, nil, 187 ] racc_reduce_table = [ 0, 0, :racc_error, - 5, 49, :_reduce_none, - 0, 50, :_reduce_none, - 2, 50, :_reduce_none, - 0, 55, :_reduce_4, - 0, 56, :_reduce_5, - 5, 54, :_reduce_6, - 2, 54, :_reduce_none, - 0, 51, :_reduce_8, + 5, 50, :_reduce_none, + 0, 51, :_reduce_none, 2, 51, :_reduce_none, - 1, 57, :_reduce_none, - 1, 57, :_reduce_none, - 2, 57, :_reduce_12, - 3, 57, :_reduce_none, - 2, 57, :_reduce_none, - 2, 57, :_reduce_15, - 2, 57, :_reduce_16, - 0, 63, :_reduce_17, - 0, 64, :_reduce_18, - 7, 57, :_reduce_19, - 0, 65, :_reduce_20, - 0, 66, :_reduce_21, - 6, 57, :_reduce_22, - 1, 57, :_reduce_23, - 1, 57, :_reduce_none, - 0, 69, :_reduce_25, - 0, 70, :_reduce_26, - 6, 58, :_reduce_27, - 1, 58, :_reduce_none, - 0, 71, :_reduce_29, - 0, 72, :_reduce_30, - 7, 58, :_reduce_none, - 0, 73, :_reduce_32, - 0, 74, :_reduce_33, - 7, 58, :_reduce_34, - 0, 75, :_reduce_35, - 0, 76, :_reduce_36, - 7, 58, :_reduce_37, - 2, 67, :_reduce_none, - 2, 67, :_reduce_39, - 2, 67, :_reduce_40, - 2, 67, :_reduce_41, - 2, 67, :_reduce_42, - 2, 67, :_reduce_43, - 1, 77, :_reduce_44, - 2, 77, :_reduce_45, - 3, 77, :_reduce_46, - 1, 80, :_reduce_47, - 2, 80, :_reduce_48, - 3, 81, :_reduce_49, - 7, 59, :_reduce_50, - 1, 85, :_reduce_51, - 3, 85, :_reduce_52, - 1, 86, :_reduce_53, - 3, 86, :_reduce_54, - 0, 87, :_reduce_55, - 1, 87, :_reduce_56, - 3, 87, :_reduce_57, - 3, 87, :_reduce_58, - 5, 87, :_reduce_59, - 0, 92, :_reduce_60, - 0, 93, :_reduce_61, - 7, 87, :_reduce_62, - 3, 87, :_reduce_63, - 0, 83, :_reduce_none, - 1, 83, :_reduce_none, - 0, 84, :_reduce_none, - 1, 84, :_reduce_none, - 1, 78, :_reduce_68, - 2, 78, :_reduce_69, - 3, 78, :_reduce_70, - 1, 94, :_reduce_71, - 2, 94, :_reduce_72, - 1, 88, :_reduce_none, - 1, 88, :_reduce_none, - 0, 96, :_reduce_75, - 0, 97, :_reduce_76, - 6, 62, :_reduce_77, - 0, 98, :_reduce_78, - 0, 99, :_reduce_79, - 5, 62, :_reduce_80, - 1, 79, :_reduce_81, - 2, 79, :_reduce_82, - 3, 79, :_reduce_83, - 1, 100, :_reduce_84, - 2, 100, :_reduce_85, - 1, 101, :_reduce_none, - 1, 82, :_reduce_87, - 1, 82, :_reduce_88, - 1, 52, :_reduce_none, + 0, 56, :_reduce_4, + 0, 57, :_reduce_5, + 5, 55, :_reduce_6, + 2, 55, :_reduce_none, + 0, 52, :_reduce_8, 2, 52, :_reduce_none, - 1, 102, :_reduce_none, - 2, 102, :_reduce_none, - 4, 103, :_reduce_93, - 1, 105, :_reduce_94, - 3, 105, :_reduce_95, - 2, 105, :_reduce_none, - 0, 106, :_reduce_97, - 1, 106, :_reduce_98, - 3, 106, :_reduce_99, - 4, 106, :_reduce_100, - 6, 106, :_reduce_101, - 0, 108, :_reduce_102, - 0, 109, :_reduce_103, - 7, 106, :_reduce_104, - 3, 106, :_reduce_105, - 1, 90, :_reduce_106, - 1, 90, :_reduce_107, - 1, 90, :_reduce_108, - 1, 91, :_reduce_109, - 3, 91, :_reduce_110, - 2, 91, :_reduce_111, - 4, 91, :_reduce_112, - 0, 89, :_reduce_none, - 3, 89, :_reduce_114, - 1, 104, :_reduce_none, - 0, 53, :_reduce_none, - 0, 110, :_reduce_117, - 3, 53, :_reduce_118, - 1, 60, :_reduce_none, - 0, 61, :_reduce_none, - 1, 61, :_reduce_none, - 1, 61, :_reduce_none, - 1, 61, :_reduce_none, - 1, 68, :_reduce_124, - 2, 68, :_reduce_125, - 1, 111, :_reduce_none, - 1, 111, :_reduce_none, - 1, 95, :_reduce_128, - 0, 107, :_reduce_none, - 1, 107, :_reduce_none ] - -racc_reduce_n = 131 - -racc_shift_n = 215 + 1, 58, :_reduce_none, + 1, 58, :_reduce_none, + 1, 58, :_reduce_none, + 2, 58, :_reduce_13, + 3, 58, :_reduce_none, + 2, 58, :_reduce_none, + 2, 58, :_reduce_16, + 2, 58, :_reduce_17, + 0, 65, :_reduce_18, + 0, 66, :_reduce_19, + 7, 58, :_reduce_20, + 0, 67, :_reduce_21, + 0, 68, :_reduce_22, + 6, 58, :_reduce_23, + 1, 58, :_reduce_24, + 1, 58, :_reduce_none, + 0, 71, :_reduce_26, + 0, 72, :_reduce_27, + 6, 59, :_reduce_28, + 1, 59, :_reduce_none, + 0, 73, :_reduce_30, + 0, 74, :_reduce_31, + 7, 59, :_reduce_none, + 0, 75, :_reduce_33, + 0, 76, :_reduce_34, + 7, 59, :_reduce_35, + 0, 77, :_reduce_36, + 0, 78, :_reduce_37, + 7, 59, :_reduce_38, + 2, 69, :_reduce_none, + 2, 69, :_reduce_40, + 2, 69, :_reduce_41, + 2, 69, :_reduce_42, + 2, 69, :_reduce_43, + 2, 69, :_reduce_44, + 1, 79, :_reduce_45, + 2, 79, :_reduce_46, + 3, 79, :_reduce_47, + 1, 82, :_reduce_48, + 2, 82, :_reduce_49, + 3, 83, :_reduce_50, + 7, 60, :_reduce_51, + 1, 87, :_reduce_52, + 3, 87, :_reduce_53, + 1, 88, :_reduce_54, + 3, 88, :_reduce_55, + 0, 89, :_reduce_56, + 1, 89, :_reduce_57, + 3, 89, :_reduce_58, + 3, 89, :_reduce_59, + 5, 89, :_reduce_60, + 0, 94, :_reduce_61, + 0, 95, :_reduce_62, + 7, 89, :_reduce_63, + 3, 89, :_reduce_64, + 4, 61, :_reduce_65, + 1, 96, :_reduce_66, + 3, 96, :_reduce_67, + 0, 97, :_reduce_68, + 1, 97, :_reduce_69, + 3, 97, :_reduce_70, + 0, 98, :_reduce_71, + 0, 99, :_reduce_72, + 7, 97, :_reduce_73, + 3, 97, :_reduce_74, + 0, 85, :_reduce_none, + 1, 85, :_reduce_none, + 0, 86, :_reduce_none, + 1, 86, :_reduce_none, + 1, 80, :_reduce_79, + 2, 80, :_reduce_80, + 3, 80, :_reduce_81, + 1, 100, :_reduce_82, + 2, 100, :_reduce_83, + 1, 90, :_reduce_none, + 1, 90, :_reduce_none, + 0, 102, :_reduce_86, + 0, 103, :_reduce_87, + 6, 64, :_reduce_88, + 0, 104, :_reduce_89, + 0, 105, :_reduce_90, + 5, 64, :_reduce_91, + 1, 81, :_reduce_92, + 2, 81, :_reduce_93, + 3, 81, :_reduce_94, + 1, 106, :_reduce_95, + 2, 106, :_reduce_96, + 1, 107, :_reduce_none, + 1, 84, :_reduce_98, + 1, 84, :_reduce_99, + 1, 53, :_reduce_none, + 2, 53, :_reduce_none, + 1, 108, :_reduce_none, + 2, 108, :_reduce_none, + 4, 109, :_reduce_104, + 1, 111, :_reduce_105, + 3, 111, :_reduce_106, + 2, 111, :_reduce_none, + 0, 112, :_reduce_108, + 1, 112, :_reduce_109, + 3, 112, :_reduce_110, + 4, 112, :_reduce_111, + 6, 112, :_reduce_112, + 0, 114, :_reduce_113, + 0, 115, :_reduce_114, + 7, 112, :_reduce_115, + 3, 112, :_reduce_116, + 1, 92, :_reduce_117, + 1, 92, :_reduce_118, + 1, 92, :_reduce_119, + 1, 93, :_reduce_120, + 3, 93, :_reduce_121, + 2, 93, :_reduce_122, + 4, 93, :_reduce_123, + 0, 91, :_reduce_none, + 3, 91, :_reduce_125, + 1, 110, :_reduce_none, + 0, 54, :_reduce_none, + 0, 116, :_reduce_128, + 3, 54, :_reduce_129, + 1, 62, :_reduce_none, + 0, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 70, :_reduce_135, + 2, 70, :_reduce_136, + 1, 117, :_reduce_none, + 1, 117, :_reduce_none, + 1, 101, :_reduce_139, + 0, 113, :_reduce_none, + 1, 113, :_reduce_none ] + +racc_reduce_n = 142 + +racc_shift_n = 234 racc_token_table = { false => 0, @@ -1073,14 +1098,15 @@ def raise_parse_error(error_message, location) "|" => 39, "%empty" => 40, "%prec" => 41, - "?" => 42, - "+" => 43, - "*" => 44, - "[" => 45, - "]" => 46, - "{...}" => 47 } + "%inline" => 42, + "?" => 43, + "+" => 44, + "*" => 45, + "[" => 46, + "]" => 47, + "{...}" => 48 } -racc_nt_base = 48 +racc_nt_base = 49 racc_use_result_var = true @@ -1144,6 +1170,7 @@ def raise_parse_error(error_message, location) "\"|\"", "\"%empty\"", "\"%prec\"", + "\"%inline\"", "\"?\"", "\"+\"", "\"*\"", @@ -1162,6 +1189,7 @@ def raise_parse_error(error_message, location) "bison_declaration", "grammar_declaration", "rule_declaration", + "inline_declarations", "variable", "value", "params", @@ -1196,12 +1224,16 @@ def raise_parse_error(error_message, location) "parameterizing_args", "@15", "@16", - "symbol_declaration_list", - "string_as_id", + "inline_rhs_list", + "inline_rhs", "@17", "@18", + "symbol_declaration_list", + "string_as_id", "@19", "@20", + "@21", + "@22", "token_declaration_list_for_precedence", "token_declaration_for_precedence", "rules_or_grammar_declaration", @@ -1210,9 +1242,9 @@ def raise_parse_error(error_message, location) "rhs_list", "rhs", "tag_opt", - "@21", - "@22", "@23", + "@24", + "@25", "generic_symlist_item" ] Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) @@ -1268,19 +1300,21 @@ def _reduce_8(val, _values, result) # reduce 11 omitted -module_eval(<<'.,.,', 'parser.y', 32) - def _reduce_12(val, _values, result) +# reduce 12 omitted + +module_eval(<<'.,.,', 'parser.y', 33) + def _reduce_13(val, _values, result) @grammar.expect = val[1] result end .,., -# reduce 13 omitted - # reduce 14 omitted -module_eval(<<'.,.,', 'parser.y', 37) - def _reduce_15(val, _values, result) +# reduce 15 omitted + +module_eval(<<'.,.,', 'parser.y', 38) + def _reduce_16(val, _values, result) val[1].each {|token| @grammar.lex_param = Grammar::Code::NoReferenceCode.new(type: :lex_param, token_code: token).token_code.s_value } @@ -1289,8 +1323,8 @@ def _reduce_15(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 43) - def _reduce_16(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 44) + def _reduce_17(val, _values, result) val[1].each {|token| @grammar.parse_param = Grammar::Code::NoReferenceCode.new(type: :parse_param, token_code: token).token_code.s_value } @@ -1299,81 +1333,81 @@ def _reduce_16(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 49) - def _reduce_17(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 50) + def _reduce_18(val, _values, result) begin_c_declaration("}") result end .,., -module_eval(<<'.,.,', 'parser.y', 53) - def _reduce_18(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 54) + def _reduce_19(val, _values, result) end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 57) - def _reduce_19(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 58) + def _reduce_20(val, _values, result) @grammar.add_percent_code(id: val[1], code: val[4]) result end .,., -module_eval(<<'.,.,', 'parser.y', 61) - def _reduce_20(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 62) + def _reduce_21(val, _values, result) begin_c_declaration("}") result end .,., -module_eval(<<'.,.,', 'parser.y', 65) - def _reduce_21(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 66) + def _reduce_22(val, _values, result) end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 69) - def _reduce_22(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 70) + def _reduce_23(val, _values, result) @grammar.initial_action = Grammar::Code::InitialActionCode.new(type: :initial_action, token_code: val[3]) result end .,., -module_eval(<<'.,.,', 'parser.y', 71) - def _reduce_23(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 72) + def _reduce_24(val, _values, result) @grammar.no_stdlib = true result end .,., -# reduce 24 omitted +# reduce 25 omitted -module_eval(<<'.,.,', 'parser.y', 76) - def _reduce_25(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 77) + def _reduce_26(val, _values, result) begin_c_declaration("}") result end .,., -module_eval(<<'.,.,', 'parser.y', 80) - def _reduce_26(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 81) + def _reduce_27(val, _values, result) end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 84) - def _reduce_27(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 85) + def _reduce_28(val, _values, result) @grammar.set_union( Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[3]), val[3].line @@ -1383,44 +1417,44 @@ def _reduce_27(val, _values, result) end .,., -# reduce 28 omitted +# reduce 29 omitted -module_eval(<<'.,.,', 'parser.y', 92) - def _reduce_29(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 93) + def _reduce_30(val, _values, result) begin_c_declaration("}") result end .,., -module_eval(<<'.,.,', 'parser.y', 96) - def _reduce_30(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 97) + def _reduce_31(val, _values, result) end_c_declaration result end .,., -# reduce 31 omitted +# reduce 32 omitted -module_eval(<<'.,.,', 'parser.y', 101) - def _reduce_32(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 102) + def _reduce_33(val, _values, result) begin_c_declaration("}") result end .,., -module_eval(<<'.,.,', 'parser.y', 105) - def _reduce_33(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 106) + def _reduce_34(val, _values, result) end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 109) - def _reduce_34(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 110) + def _reduce_35(val, _values, result) @grammar.add_printer( ident_or_tags: val[6], token_code: val[3], @@ -1431,24 +1465,24 @@ def _reduce_34(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 117) - def _reduce_35(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 118) + def _reduce_36(val, _values, result) begin_c_declaration("}") result end .,., -module_eval(<<'.,.,', 'parser.y', 121) - def _reduce_36(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 122) + def _reduce_37(val, _values, result) end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 125) - def _reduce_37(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 126) + def _reduce_38(val, _values, result) @grammar.add_error_token( ident_or_tags: val[6], token_code: val[3], @@ -1459,10 +1493,10 @@ def _reduce_37(val, _values, result) end .,., -# reduce 38 omitted +# reduce 39 omitted -module_eval(<<'.,.,', 'parser.y', 135) - def _reduce_39(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 136) + def _reduce_40(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| @grammar.add_type(id: id, tag: hash[:tag]) @@ -1473,8 +1507,8 @@ def _reduce_39(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 143) - def _reduce_40(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 144) + def _reduce_41(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1487,8 +1521,8 @@ def _reduce_40(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 153) - def _reduce_41(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 154) + def _reduce_42(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1501,8 +1535,8 @@ def _reduce_41(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 163) - def _reduce_42(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 164) + def _reduce_43(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1515,8 +1549,8 @@ def _reduce_42(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 173) - def _reduce_43(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 174) + def _reduce_44(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1529,8 +1563,8 @@ def _reduce_43(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 184) - def _reduce_44(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 185) + def _reduce_45(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) } @@ -1539,8 +1573,8 @@ def _reduce_44(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 190) - def _reduce_45(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 191) + def _reduce_46(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) } @@ -1549,8 +1583,8 @@ def _reduce_45(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 196) - def _reduce_46(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 197) + def _reduce_47(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) } @@ -1559,29 +1593,29 @@ def _reduce_46(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 201) - def _reduce_47(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 202) + def _reduce_48(val, _values, result) result = [val[0]] result end .,., -module_eval(<<'.,.,', 'parser.y', 202) - def _reduce_48(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 203) + def _reduce_49(val, _values, result) result = val[0].append(val[1]) result end .,., -module_eval(<<'.,.,', 'parser.y', 204) - def _reduce_49(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 205) + def _reduce_50(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'parser.y', 208) - def _reduce_50(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 209) + def _reduce_51(val, _values, result) rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[6]) @grammar.add_parameterizing_rule(rule) @@ -1589,22 +1623,22 @@ def _reduce_50(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 212) - def _reduce_51(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 213) + def _reduce_52(val, _values, result) result = [val[0]] result end .,., -module_eval(<<'.,.,', 'parser.y', 213) - def _reduce_52(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 214) + def _reduce_53(val, _values, result) result = val[0].append(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.y', 217) - def _reduce_53(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 218) + def _reduce_54(val, _values, result) builder = val[0] result = [builder] @@ -1612,8 +1646,8 @@ def _reduce_53(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 222) - def _reduce_54(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 223) + def _reduce_55(val, _values, result) builder = val[2] result = val[0].append(builder) @@ -1621,8 +1655,8 @@ def _reduce_54(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 228) - def _reduce_55(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 229) + def _reduce_56(val, _values, result) reset_precs result = Grammar::ParameterizingRule::Rhs.new @@ -1630,8 +1664,8 @@ def _reduce_55(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 233) - def _reduce_56(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 234) + def _reduce_57(val, _values, result) reset_precs result = Grammar::ParameterizingRule::Rhs.new @@ -1639,8 +1673,8 @@ def _reduce_56(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 238) - def _reduce_57(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 239) + def _reduce_58(val, _values, result) token = val[1] token.alias_name = val[2] builder = val[0] @@ -1651,8 +1685,8 @@ def _reduce_57(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 246) - def _reduce_58(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 247) + def _reduce_59(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 @@ -1661,8 +1695,8 @@ def _reduce_58(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 252) - def _reduce_59(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 253) + def _reduce_60(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]) result = builder @@ -1671,8 +1705,8 @@ def _reduce_59(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 258) - def _reduce_60(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 259) + def _reduce_61(val, _values, result) if @prec_seen on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec @code_after_prec = true @@ -1683,16 +1717,16 @@ def _reduce_60(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 266) - def _reduce_61(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 267) + def _reduce_62(val, _values, result) end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 270) - def _reduce_62(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 271) + def _reduce_63(val, _values, result) user_code = val[3] user_code.alias_name = val[6] builder = val[0] @@ -1703,8 +1737,8 @@ def _reduce_62(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 278) - def _reduce_63(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 279) + def _reduce_64(val, _values, result) sym = @grammar.find_symbol_by_id!(val[2]) @prec_seen = true builder = val[0] @@ -1715,168 +1749,269 @@ def _reduce_63(val, _values, result) end .,., -# reduce 64 omitted +module_eval(<<'.,.,', 'parser.y', 288) + def _reduce_65(val, _values, result) + rule = Grammar::Inline::Rule.new(val[1].s_value, val[3]) + @grammar.add_inline_rule(rule) -# reduce 65 omitted + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 294) + def _reduce_66(val, _values, result) + builder = val[0] + result = [builder] -# reduce 66 omitted + result + end +.,., -# reduce 67 omitted +module_eval(<<'.,.,', 'parser.y', 299) + def _reduce_67(val, _values, result) + builder = val[2] + result = val[0].append(builder) -module_eval(<<'.,.,', 'parser.y', 293) + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 305) def _reduce_68(val, _values, result) - result = [{tag: nil, tokens: val[0]}] + reset_precs + result = Grammar::Inline::Rhs.new result end .,., -module_eval(<<'.,.,', 'parser.y', 297) +module_eval(<<'.,.,', 'parser.y', 310) def _reduce_69(val, _values, result) - result = [{tag: val[0], tokens: val[1]}] + reset_precs + result = Grammar::Inline::Rhs.new result end .,., -module_eval(<<'.,.,', 'parser.y', 301) +module_eval(<<'.,.,', 'parser.y', 315) def _reduce_70(val, _values, result) - result = val[0].append({tag: val[1], tokens: val[2]}) + token = val[1] + token.alias_name = val[2] + builder = val[0] + builder.symbols << token + result = builder result end .,., -module_eval(<<'.,.,', 'parser.y', 304) +module_eval(<<'.,.,', 'parser.y', 323) def _reduce_71(val, _values, result) - result = [val[0]] + if @prec_seen + on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec + @code_after_prec = true + end + begin_c_declaration("}") + result end .,., -module_eval(<<'.,.,', 'parser.y', 305) +module_eval(<<'.,.,', 'parser.y', 331) def _reduce_72(val, _values, result) + end_c_declaration + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 335) + def _reduce_73(val, _values, result) + user_code = val[3] + user_code.alias_name = val[6] + builder = val[0] + builder.user_code = user_code + result = builder + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 343) + def _reduce_74(val, _values, result) + sym = @grammar.find_symbol_by_id!(val[2]) + @prec_seen = true + builder = val[0] + builder.precedence_sym = sym + result = builder + + result + end +.,., + +# reduce 75 omitted + +# reduce 76 omitted + +# reduce 77 omitted + +# reduce 78 omitted + +module_eval(<<'.,.,', 'parser.y', 358) + def _reduce_79(val, _values, result) + result = [{tag: nil, tokens: val[0]}] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 362) + def _reduce_80(val, _values, result) + result = [{tag: val[0], tokens: val[1]}] + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 366) + def _reduce_81(val, _values, result) + result = val[0].append({tag: val[1], tokens: val[2]}) + + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 369) + def _reduce_82(val, _values, result) + result = [val[0]] + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 370) + def _reduce_83(val, _values, result) result = val[0].append(val[1]) result end .,., -# reduce 73 omitted +# reduce 84 omitted -# reduce 74 omitted +# reduce 85 omitted -module_eval(<<'.,.,', 'parser.y', 312) - def _reduce_75(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 377) + def _reduce_86(val, _values, result) begin_c_declaration("}") result end .,., -module_eval(<<'.,.,', 'parser.y', 316) - def _reduce_76(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 381) + def _reduce_87(val, _values, result) end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 320) - def _reduce_77(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 385) + def _reduce_88(val, _values, result) result = val[0].append(val[3]) result end .,., -module_eval(<<'.,.,', 'parser.y', 324) - def _reduce_78(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 389) + def _reduce_89(val, _values, result) begin_c_declaration("}") result end .,., -module_eval(<<'.,.,', 'parser.y', 328) - def _reduce_79(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 393) + def _reduce_90(val, _values, result) end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 332) - def _reduce_80(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 397) + def _reduce_91(val, _values, result) result = [val[2]] result end .,., -module_eval(<<'.,.,', 'parser.y', 337) - def _reduce_81(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 402) + def _reduce_92(val, _values, result) result = [{tag: nil, tokens: val[0]}] result end .,., -module_eval(<<'.,.,', 'parser.y', 341) - def _reduce_82(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 406) + def _reduce_93(val, _values, result) result = [{tag: val[0], tokens: val[1]}] result end .,., -module_eval(<<'.,.,', 'parser.y', 345) - def _reduce_83(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 410) + def _reduce_94(val, _values, result) result = val[0].append({tag: val[1], tokens: val[2]}) result end .,., -module_eval(<<'.,.,', 'parser.y', 348) - def _reduce_84(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 413) + def _reduce_95(val, _values, result) result = [val[0]] result end .,., -module_eval(<<'.,.,', 'parser.y', 349) - def _reduce_85(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 414) + def _reduce_96(val, _values, result) result = val[0].append(val[1]) result end .,., -# reduce 86 omitted +# reduce 97 omitted -module_eval(<<'.,.,', 'parser.y', 353) - def _reduce_87(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 418) + def _reduce_98(val, _values, result) on_action_error("ident after %prec", val[0]) if @prec_seen result end .,., -module_eval(<<'.,.,', 'parser.y', 354) - def _reduce_88(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 419) + def _reduce_99(val, _values, result) on_action_error("char after %prec", val[0]) if @prec_seen result end .,., -# reduce 89 omitted +# reduce 100 omitted -# reduce 90 omitted +# reduce 101 omitted -# reduce 91 omitted +# reduce 102 omitted -# reduce 92 omitted +# reduce 103 omitted -module_eval(<<'.,.,', 'parser.y', 364) - def _reduce_93(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 429) + def _reduce_104(val, _values, result) lhs = val[0] lhs.alias_name = val[1] val[3].each do |builder| @@ -1889,8 +2024,8 @@ def _reduce_93(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 375) - def _reduce_94(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 440) + def _reduce_105(val, _values, result) builder = val[0] if !builder.line builder.line = @lexer.line - 1 @@ -1901,8 +2036,8 @@ def _reduce_94(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 383) - def _reduce_95(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 448) + def _reduce_106(val, _values, result) builder = val[2] if !builder.line builder.line = @lexer.line - 1 @@ -1913,10 +2048,10 @@ def _reduce_95(val, _values, result) end .,., -# reduce 96 omitted +# reduce 107 omitted -module_eval(<<'.,.,', 'parser.y', 393) - def _reduce_97(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 458) + def _reduce_108(val, _values, result) reset_precs result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter) @@ -1924,8 +2059,8 @@ def _reduce_97(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 398) - def _reduce_98(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 463) + def _reduce_109(val, _values, result) reset_precs result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter) @@ -1933,8 +2068,8 @@ def _reduce_98(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 403) - def _reduce_99(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 468) + def _reduce_110(val, _values, result) token = val[1] token.alias_name = val[2] builder = val[0] @@ -1945,8 +2080,8 @@ def _reduce_99(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 411) - def _reduce_100(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 476) + def _reduce_111(val, _values, result) token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]], lhs_tag: val[3]) builder = val[0] builder.add_rhs(token) @@ -1957,8 +2092,8 @@ def _reduce_100(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 419) - def _reduce_101(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 484) + def _reduce_112(val, _values, result) token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5]) builder = val[0] builder.add_rhs(token) @@ -1969,8 +2104,8 @@ def _reduce_101(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 427) - def _reduce_102(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 492) + 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 @@ -1981,16 +2116,16 @@ def _reduce_102(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 435) - def _reduce_103(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 500) + def _reduce_114(val, _values, result) end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 439) - def _reduce_104(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 504) + def _reduce_115(val, _values, result) user_code = val[3] user_code.alias_name = val[6] builder = val[0] @@ -2001,8 +2136,8 @@ def _reduce_104(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 447) - def _reduce_105(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 512) + def _reduce_116(val, _values, result) sym = @grammar.find_symbol_by_id!(val[2]) @prec_seen = true builder = val[0] @@ -2013,70 +2148,70 @@ def _reduce_105(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 454) - def _reduce_106(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 519) + def _reduce_117(val, _values, result) result = "option" result end .,., -module_eval(<<'.,.,', 'parser.y', 455) - def _reduce_107(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 520) + def _reduce_118(val, _values, result) result = "nonempty_list" result end .,., -module_eval(<<'.,.,', 'parser.y', 456) - def _reduce_108(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 521) + def _reduce_119(val, _values, result) result = "list" result end .,., -module_eval(<<'.,.,', 'parser.y', 458) - def _reduce_109(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 523) + def _reduce_120(val, _values, result) result = [val[0]] result end .,., -module_eval(<<'.,.,', 'parser.y', 459) - def _reduce_110(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 524) + def _reduce_121(val, _values, result) result = val[0].append(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.y', 460) - def _reduce_111(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 525) + def _reduce_122(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', 461) - def _reduce_112(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 526) + def _reduce_123(val, _values, result) result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[0].s_value, location: @lexer.location, args: val[2])] result end .,., -# reduce 113 omitted +# reduce 124 omitted -module_eval(<<'.,.,', 'parser.y', 464) - def _reduce_114(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 529) + def _reduce_125(val, _values, result) result = val[1].s_value result end .,., -# reduce 115 omitted +# reduce 126 omitted -# reduce 116 omitted +# reduce 127 omitted -module_eval(<<'.,.,', 'parser.y', 471) - def _reduce_117(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 536) + def _reduce_128(val, _values, result) begin_c_declaration('\Z') @grammar.epilogue_first_lineno = @lexer.line + 1 @@ -2084,8 +2219,8 @@ def _reduce_117(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 476) - def _reduce_118(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 541) + def _reduce_129(val, _values, result) end_c_declaration @grammar.epilogue = val[2].s_value @@ -2093,44 +2228,44 @@ def _reduce_118(val, _values, result) end .,., -# reduce 119 omitted +# reduce 130 omitted -# reduce 120 omitted +# reduce 131 omitted -# reduce 121 omitted +# reduce 132 omitted -# reduce 122 omitted +# reduce 133 omitted -# reduce 123 omitted +# reduce 134 omitted -module_eval(<<'.,.,', 'parser.y', 487) - def _reduce_124(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 552) + def _reduce_135(val, _values, result) result = [val[0]] result end .,., -module_eval(<<'.,.,', 'parser.y', 488) - def _reduce_125(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 553) + def _reduce_136(val, _values, result) result = val[0].append(val[1]) result end .,., -# reduce 126 omitted +# reduce 137 omitted -# reduce 127 omitted +# reduce 138 omitted -module_eval(<<'.,.,', 'parser.y', 493) - def _reduce_128(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 558) + def _reduce_139(val, _values, result) result = Lrama::Lexer::Token::Ident.new(s_value: val[0]) result end .,., -# reduce 129 omitted +# reduce 140 omitted -# reduce 130 omitted +# reduce 141 omitted def _reduce_none(val, _values, result) val[0] diff --git a/parser.y b/parser.y index f5b9f402..ca5177a0 100644 --- a/parser.y +++ b/parser.y @@ -30,6 +30,7 @@ rule bison_declaration: grammar_declaration | rule_declaration + | inline_declarations | "%expect" INTEGER { @grammar.expect = val[1] } | "%define" variable value | "%param" params @@ -283,6 +284,70 @@ rule result = builder } + inline_declarations: "%inline" IDENTIFIER ":" inline_rhs_list + { + rule = Grammar::Inline::Rule.new(val[1].s_value, val[3]) + @grammar.add_inline_rule(rule) + } + + inline_rhs_list: inline_rhs + { + builder = val[0] + result = [builder] + } + | inline_rhs_list "|" inline_rhs + { + builder = val[2] + result = val[0].append(builder) + } + + inline_rhs: /* empty */ + { + reset_precs + result = Grammar::Inline::Rhs.new + } + | "%empty" + { + reset_precs + result = Grammar::Inline::Rhs.new + } + | inline_rhs symbol named_ref_opt + { + token = val[1] + token.alias_name = val[2] + builder = val[0] + builder.symbols << token + result = builder + } + | inline_rhs "{" + { + if @prec_seen + on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec + @code_after_prec = true + end + begin_c_declaration("}") + } + C_DECLARATION + { + end_c_declaration + } + "}" named_ref_opt + { + user_code = val[3] + user_code.alias_name = val[6] + builder = val[0] + builder.user_code = user_code + result = builder + } + | inline_rhs "%prec" symbol + { + sym = @grammar.find_symbol_by_id!(val[2]) + @prec_seen = true + builder = val[0] + builder.precedence_sym = sym + result = builder + } + int_opt: # empty | INTEGER