diff options
Diffstat (limited to 'test/racc/regress/machete')
-rw-r--r-- | test/racc/regress/machete | 833 |
1 files changed, 833 insertions, 0 deletions
diff --git a/test/racc/regress/machete b/test/racc/regress/machete new file mode 100644 index 0000000000..83d73899ec --- /dev/null +++ b/test/racc/regress/machete @@ -0,0 +1,833 @@ +# +# DO NOT MODIFY!!!! +# This file is automatically generated by Racc 1.4.14 +# from Racc grammer file "". +# + +require 'racc/parser.rb' +module Machete + class Parser < Racc::Parser + +module_eval(<<'...end machete.y/module_eval...', 'machete.y', 175) + +include Matchers + +class SyntaxError < StandardError; end + +def parse(input) + @input = input + @pos = 0 + + do_parse +end + +private + +def integer_value(value) + if value =~ /^0[bB]/ + value[2..-1].to_i(2) + elsif value =~ /^0[oO]/ + value[2..-1].to_i(8) + elsif value =~ /^0[dD]/ + value[2..-1].to_i(10) + elsif value =~ /^0[xX]/ + value[2..-1].to_i(16) + elsif value =~ /^0/ + value.to_i(8) + else + value.to_i + end +end + +def symbol_value(value) + value[1..-1].to_sym +end + +def string_value(value) + quote = value[0..0] + if quote == "'" + value[1..-2].gsub("\\\\", "\\").gsub("\\'", "'") + elsif quote == '"' + value[1..-2]. + gsub("\\\\", "\\"). + gsub('\\"', '"'). + gsub("\\n", "\n"). + gsub("\\t", "\t"). + gsub("\\r", "\r"). + gsub("\\f", "\f"). + gsub("\\v", "\v"). + gsub("\\a", "\a"). + gsub("\\e", "\e"). + gsub("\\b", "\b"). + gsub("\\s", "\s"). + gsub(/\\([0-7]{1,3})/) { $1.to_i(8).chr }. + gsub(/\\x([0-9a-fA-F]{1,2})/) { $1.to_i(16).chr } + else + raise "Unknown quote: #{quote.inspect}." + end +end + +REGEXP_OPTIONS = { + 'i' => Regexp::IGNORECASE, + 'm' => Regexp::MULTILINE, + 'x' => Regexp::EXTENDED +} + +def regexp_value(value) + /\A\/(.*)\/([imx]*)\z/ =~ value + pattern, options = $1, $2 + + Regexp.new(pattern, options.chars.map { |ch| REGEXP_OPTIONS[ch] }.inject(:|)) +end + +# "^" needs to be here because if it were among operators recognized by +# METHOD_NAME, "^=" would be recognized as two tokens. +SIMPLE_TOKENS = [ + "|", + "<", + ">", + ",", + "=", + "^=", + "^", + "$=", + "[", + "]", + "*=", + "*", + "+", + "?", + "{", + "}" +] + +COMPLEX_TOKENS = [ + [:NIL, /^nil/], + [:TRUE, /^true/], + [:FALSE, /^false/], + # INTEGER needs to be before METHOD_NAME, otherwise e.g. "+1" would be + # recognized as two tokens. + [ + :INTEGER, + /^ + [+-]? # sign + ( + 0[bB][01]+(_[01]+)* # binary (prefixed) + | + 0[oO][0-7]+(_[0-7]+)* # octal (prefixed) + | + 0[dD]\d+(_\d+)* # decimal (prefixed) + | + 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)* # hexadecimal (prefixed) + | + 0[0-7]*(_[0-7]+)* # octal (unprefixed) + | + [1-9]\d*(_\d+)* # decimal (unprefixed) + ) + /x + ], + [ + :SYMBOL, + /^ + : + ( + # class name + [A-Z][a-zA-Z0-9_]* + | + # regular method name + [a-z_][a-zA-Z0-9_]*[?!=]? + | + # instance variable name + @[a-zA-Z_][a-zA-Z0-9_]* + | + # class variable name + @@[a-zA-Z_][a-zA-Z0-9_]* + | + # operator (sorted by length, then alphabetically) + (<=>|===|\[\]=|\*\*|\+@|-@|<<|<=|==|=~|>=|>>|\[\]|[%&*+\-\/<>^`|~]) + ) + /x + ], + [ + :STRING, + /^ + ( + ' # sinqle-quoted string + ( + \\[\\'] # escape + | + [^'] # regular character + )* + ' + | + " # double-quoted string + ( + \\ # escape + ( + [\\"ntrfvaebs] # one-character escape + | + [0-7]{1,3} # octal number escape + | + x[0-9a-fA-F]{1,2} # hexadecimal number escape + ) + | + [^"] # regular character + )* + " + ) + /x + ], + [ + :REGEXP, + /^ + \/ + ( + \\ # escape + ( + [\\\/ntrfvaebs\(\)\[\]\{\}\-\.\?\*\+\|\^\$] # one-character escape + | + [0-7]{2,3} # octal number escape + | + x[0-9a-fA-F]{1,2} # hexadecimal number escape + ) + | + [^\/] # regular character + )* + \/ + [imx]* + /x + ], + # ANY, EVEN and ODD need to be before METHOD_NAME, otherwise they would be + # recognized as method names. + [:ANY, /^any/], + [:EVEN, /^even/], + [:ODD, /^odd/], + # We exclude "*", "+", "<", ">", "^" and "|" from method names since they are + # lexed as simple tokens. This is because they have also other meanings in + # Machette patterns beside Ruby method names. + [ + :METHOD_NAME, + /^ + ( + # regular name + [a-z_][a-zA-Z0-9_]*[?!=]? + | + # operator (sorted by length, then alphabetically) + (<=>|===|\[\]=|\*\*|\+@|-@|<<|<=|==|=~|>=|>>|\[\]|[%&\-\/`~]) + ) + /x + ], + [:CLASS_NAME, /^[A-Z][a-zA-Z0-9_]*/] +] + +def next_token + skip_whitespace + + return false if remaining_input.empty? + + # Complex tokens need to be before simple tokens, otherwise e.g. "<<" would be + # recognized as two tokens. + + COMPLEX_TOKENS.each do |type, regexp| + if remaining_input =~ regexp + @pos += $&.length + return [type, $&] + end + end + + SIMPLE_TOKENS.each do |token| + if remaining_input[0...token.length] == token + @pos += token.length + return [token, token] + end + end + + raise SyntaxError, "Unexpected character: #{remaining_input[0..0].inspect}." +end + +def skip_whitespace + if remaining_input =~ /\A^[ \t\r\n]+/ + @pos += $&.length + end +end + +def remaining_input + @input[@pos..-1] +end + +def on_error(error_token_id, error_value, value_stack) + raise SyntaxError, "Unexpected token: #{error_value.inspect}." +end +...end machete.y/module_eval... +##### State transition tables begin ### + +racc_action_table = [ + 75, 24, 9, 10, 11, 12, 13, 14, 15, 16, + 66, 67, 68, 7, 48, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 74, 8, 7, 76, 9, 10, + 11, 12, 13, 14, 15, 16, 71, 18, 8, 7, + 72, 9, 10, 11, 12, 13, 14, 15, 16, 73, + 70, 8, 7, 19, 9, 10, 11, 12, 13, 14, + 15, 16, 69, 18, 8, 7, 30, 31, 32, 51, + 52, 53, 54, 33, 34, 35, 29, 8, 41, 38, + 39, 77, 30, 31, 32, 47, 36, 37, 40, 33, + 34, 35, 29, nil, 41, 38, 39, 18, 49, 50, + 62, 63, 36, 37, 40, 43, 44, 55, 64, 65, + 45, 46, 57, 58, nil, nil, nil, nil, nil, 56 ] + +racc_action_check = [ + 70, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 54, 54, 0, 22, 8, 8, 8, 8, 8, + 8, 8, 8, 1, 70, 0, 8, 71, 18, 18, + 18, 18, 18, 18, 18, 18, 56, 1, 8, 18, + 57, 48, 48, 48, 48, 48, 48, 48, 48, 58, + 55, 18, 48, 7, 51, 51, 51, 51, 51, 51, + 51, 51, 55, 61, 48, 51, 19, 19, 19, 28, + 28, 28, 28, 19, 19, 19, 19, 51, 19, 19, + 19, 75, 50, 50, 50, 21, 19, 19, 19, 50, + 50, 50, 50, nil, 50, 50, 50, 20, 26, 26, + 52, 52, 50, 50, 50, 20, 20, 46, 53, 53, + 20, 20, 46, 46, nil, nil, nil, nil, nil, 46 ] + +racc_action_pointer = [ + 0, 23, nil, nil, nil, nil, nil, 38, 13, nil, + nil, nil, nil, nil, nil, nil, nil, 1, 26, 64, + 83, 59, -3, nil, nil, nil, 82, nil, 51, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 102, nil, 39, nil, + 80, 52, 94, 102, 4, 33, 31, 11, 20, nil, + nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, + -5, -2, nil, nil, nil, 52, nil, nil ] + +racc_action_default = [ + -56, -56, -1, -3, -4, -5, -6, -7, -33, -48, + -49, -50, -51, -52, -53, -54, -55, -56, -56, -56, + -37, -56, -34, -35, 78, -2, -56, -9, -56, -19, + -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, + -30, -31, -38, -39, -40, -41, -56, -32, -56, -8, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -36, + -10, -11, -12, -15, -13, -16, -14, -17, -18, -42, + -56, -56, -46, -47, -43, -56, -44, -45 ] + +racc_goto_table = [ + 1, 23, 27, 21, 22, 42, 25, 26, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 60, nil, nil, nil, nil, nil, nil, + nil, 59, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 61 ] + +racc_goto_check = [ + 1, 12, 8, 10, 11, 13, 2, 7, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 8, nil, nil, nil, nil, nil, nil, + nil, 12, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 1 ] + +racc_goto_pointer = [ + nil, 0, -12, nil, nil, nil, nil, -12, -17, nil, + -5, -4, -7, -15 ] + +racc_goto_default = [ + nil, 20, 2, 3, 4, 5, 6, nil, nil, 28, + nil, nil, nil, nil ] + +racc_reduce_table = [ + 0, 0, :racc_error, + 1, 31, :_reduce_none, + 3, 31, :_reduce_2, + 1, 32, :_reduce_none, + 1, 32, :_reduce_none, + 1, 32, :_reduce_none, + 1, 32, :_reduce_none, + 1, 33, :_reduce_7, + 4, 33, :_reduce_8, + 1, 37, :_reduce_none, + 3, 37, :_reduce_10, + 3, 38, :_reduce_11, + 3, 38, :_reduce_12, + 3, 38, :_reduce_13, + 3, 38, :_reduce_14, + 3, 38, :_reduce_15, + 3, 38, :_reduce_16, + 3, 38, :_reduce_17, + 3, 38, :_reduce_18, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 1, 39, :_reduce_none, + 3, 34, :_reduce_32, + 0, 40, :_reduce_33, + 1, 40, :_reduce_none, + 1, 41, :_reduce_35, + 3, 41, :_reduce_36, + 1, 42, :_reduce_none, + 2, 42, :_reduce_38, + 1, 43, :_reduce_39, + 1, 43, :_reduce_40, + 1, 43, :_reduce_41, + 3, 43, :_reduce_42, + 4, 43, :_reduce_43, + 4, 43, :_reduce_44, + 5, 43, :_reduce_45, + 3, 43, :_reduce_46, + 3, 43, :_reduce_47, + 1, 35, :_reduce_48, + 1, 35, :_reduce_49, + 1, 35, :_reduce_50, + 1, 35, :_reduce_51, + 1, 35, :_reduce_52, + 1, 35, :_reduce_53, + 1, 35, :_reduce_54, + 1, 36, :_reduce_55 ] + +racc_reduce_n = 56 + +racc_shift_n = 78 + +racc_token_table = { + false => 0, + :error => 1, + :NIL => 2, + :TRUE => 3, + :FALSE => 4, + :INTEGER => 5, + :SYMBOL => 6, + :STRING => 7, + :REGEXP => 8, + :ANY => 9, + :EVEN => 10, + :ODD => 11, + :METHOD_NAME => 12, + :CLASS_NAME => 13, + "|" => 14, + "<" => 15, + ">" => 16, + "," => 17, + "=" => 18, + "^=" => 19, + "$=" => 20, + "*=" => 21, + "*" => 22, + "+" => 23, + "^" => 24, + "[" => 25, + "]" => 26, + "?" => 27, + "{" => 28, + "}" => 29 } + +racc_nt_base = 30 + +racc_use_result_var = true + +Racc_arg = [ + racc_action_table, + racc_action_check, + racc_action_default, + racc_action_pointer, + racc_goto_table, + racc_goto_check, + racc_goto_default, + racc_goto_pointer, + racc_nt_base, + racc_reduce_table, + racc_token_table, + racc_shift_n, + racc_reduce_n, + racc_use_result_var ] + +Racc_token_to_s_table = [ + "$end", + "error", + "NIL", + "TRUE", + "FALSE", + "INTEGER", + "SYMBOL", + "STRING", + "REGEXP", + "ANY", + "EVEN", + "ODD", + "METHOD_NAME", + "CLASS_NAME", + "\"|\"", + "\"<\"", + "\">\"", + "\",\"", + "\"=\"", + "\"^=\"", + "\"$=\"", + "\"*=\"", + "\"*\"", + "\"+\"", + "\"^\"", + "\"[\"", + "\"]\"", + "\"?\"", + "\"{\"", + "\"}\"", + "$start", + "expression", + "primary", + "node", + "array", + "literal", + "any", + "attrs", + "attr", + "method_name", + "items_opt", + "items", + "item", + "quantifier" ] + +Racc_debug_parser = false + +##### State transition tables end ##### + +# reduce 0 omitted + +# reduce 1 omitted + +module_eval(<<'.,.,', 'machete.y', 44) + def _reduce_2(val, _values, result) + result = if val[0].is_a?(ChoiceMatcher) + ChoiceMatcher.new(val[0].alternatives << val[2]) + else + ChoiceMatcher.new([val[0], val[2]]) + end + + result + end +.,., + +# reduce 3 omitted + +# reduce 4 omitted + +# reduce 5 omitted + +# reduce 6 omitted + +module_eval(<<'.,.,', 'machete.y', 57) + def _reduce_7(val, _values, result) + result = NodeMatcher.new(val[0].to_sym) + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 60) + def _reduce_8(val, _values, result) + result = NodeMatcher.new(val[0].to_sym, val[2]) + + result + end +.,., + +# reduce 9 omitted + +module_eval(<<'.,.,', 'machete.y', 64) + def _reduce_10(val, _values, result) + result = val[0].merge(val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 66) + def _reduce_11(val, _values, result) + result = { val[0].to_sym => val[2] } + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 68) + def _reduce_12(val, _values, result) + result = { + val[0].to_sym => SymbolRegexpMatcher.new( + Regexp.new("^" + Regexp.escape(symbol_value(val[2]).to_s)) + ) + } + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 75) + def _reduce_13(val, _values, result) + result = { + val[0].to_sym => SymbolRegexpMatcher.new( + Regexp.new(Regexp.escape(symbol_value(val[2]).to_s) + "$") + ) + } + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 82) + def _reduce_14(val, _values, result) + result = { + val[0].to_sym => SymbolRegexpMatcher.new( + Regexp.new(Regexp.escape(symbol_value(val[2]).to_s)) + ) + } + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 89) + def _reduce_15(val, _values, result) + result = { + val[0].to_sym => StringRegexpMatcher.new( + Regexp.new("^" + Regexp.escape(string_value(val[2]))) + ) + } + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 96) + def _reduce_16(val, _values, result) + result = { + val[0].to_sym => StringRegexpMatcher.new( + Regexp.new(Regexp.escape(string_value(val[2])) + "$") + ) + } + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 103) + def _reduce_17(val, _values, result) + result = { + val[0].to_sym => StringRegexpMatcher.new( + Regexp.new(Regexp.escape(string_value(val[2]))) + ) + } + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 110) + def _reduce_18(val, _values, result) + result = { + val[0].to_sym => IndifferentRegexpMatcher.new( + Regexp.new(regexp_value(val[2])) + ) + } + + result + end +.,., + +# reduce 19 omitted + +# reduce 20 omitted + +# reduce 21 omitted + +# reduce 22 omitted + +# reduce 23 omitted + +# reduce 24 omitted + +# reduce 25 omitted + +# reduce 26 omitted + +# reduce 27 omitted + +# reduce 28 omitted + +# reduce 29 omitted + +# reduce 30 omitted + +# reduce 31 omitted + +module_eval(<<'.,.,', 'machete.y', 134) + def _reduce_32(val, _values, result) + result = ArrayMatcher.new(val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 136) + def _reduce_33(val, _values, result) + result = [] + result + end +.,., + +# reduce 34 omitted + +module_eval(<<'.,.,', 'machete.y', 139) + def _reduce_35(val, _values, result) + result = [val[0]] + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 140) + def _reduce_36(val, _values, result) + result = val[0] << val[2] + result + end +.,., + +# reduce 37 omitted + +module_eval(<<'.,.,', 'machete.y', 143) + def _reduce_38(val, _values, result) + result = Quantifier.new(val[0], *val[1]) + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 145) + def _reduce_39(val, _values, result) + result = [0, nil, 1] + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 146) + def _reduce_40(val, _values, result) + result = [1, nil, 1] + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 147) + def _reduce_41(val, _values, result) + result = [0, 1, 1] + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 149) + def _reduce_42(val, _values, result) + result = [integer_value(val[1]), integer_value(val[1]), 1] + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 152) + def _reduce_43(val, _values, result) + result = [integer_value(val[1]), nil, 1] + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 155) + def _reduce_44(val, _values, result) + result = [0, integer_value(val[2]), 1] + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 158) + def _reduce_45(val, _values, result) + result = [integer_value(val[1]), integer_value(val[3]), 1] + + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 160) + def _reduce_46(val, _values, result) + result = [0, nil, 2] + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 161) + def _reduce_47(val, _values, result) + result = [1, nil, 2] + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 163) + def _reduce_48(val, _values, result) + result = LiteralMatcher.new(nil) + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 164) + def _reduce_49(val, _values, result) + result = LiteralMatcher.new(true) + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 165) + def _reduce_50(val, _values, result) + result = LiteralMatcher.new(false) + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 166) + def _reduce_51(val, _values, result) + result = LiteralMatcher.new(integer_value(val[0])) + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 167) + def _reduce_52(val, _values, result) + result = LiteralMatcher.new(symbol_value(val[0])) + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 168) + def _reduce_53(val, _values, result) + result = LiteralMatcher.new(string_value(val[0])) + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 169) + def _reduce_54(val, _values, result) + result = LiteralMatcher.new(regexp_value(val[0])) + result + end +.,., + +module_eval(<<'.,.,', 'machete.y', 171) + def _reduce_55(val, _values, result) + result = AnyMatcher.new + result + end +.,., + +def _reduce_none(val, _values, result) + val[0] +end + + end # class Parser + end # module Machete |