# # DO NOT MODIFY!!!! # This file is automatically generated by racc 1.4.5 # from racc grammer file "mapparser.y". # require 'racc/parser' # calc.rb : generated by racc # require 'strscan' #require 'map.rb' class MapParser < Racc::Parser module_eval <<'..end mapparser.y modeval..id78efd83f53', 'mapparser.y', 68 def parse( str ) puts "parse start..." tokens = [] scanner = StringScanner.new( str ) puts ( "scanner?" + scanner.string ) until scanner.eos? puts "scanning.. at #{scanner.pos}" case when m = scanner.scan( /\/\/.*$/ ) # comments when m = scanner.scan( /(\s+|\n)/ ) # whitespace and newlines when m = scanner.scan( /\{/ ) tokens.push [:OBRACE, m] when m = scanner.scan( /\}/ ) tokens.push [:EBRACE, m] when m = scanner.scan( /;/ ) tokens.push [:SEMICOLON, m] when m = scanner.scan( /\d+/ ) tokens.push [:NUMBER, m] when m = scanner.scan( /user/i ) tokens.push [:USER, m] when m = scanner.scan( /automount/i ) tokens.push [:AUTOMOUNT, m] when m = scanner.scan( /reconnect/i ) tokens.push [:RECONNECT, m] when m = scanner.scan( /compress/i ) tokens.push [:COMPRESS, m] when m = scanner.scan( /port/i ) tokens.push [:PORT, m] when m = scanner.scan( /(true|1|yes)/i ) tokens.push [:BOOL_TRUE, m] when m = scanner.scan( /(false|0|no)/i ) tokens.push [:BOOL_FALSE, m] when m = scanner.scan( /".+?"/i ) tokens.push [:STRING, m] when m = scanner.scan( /map/i ) tokens.push [:MAP, m] when m = scanner.scan( /server/i ) tokens.push [:SERVER, m] when m = scanner.scan( /./ ) tokens.push [:UNMATCHED, m] puts "UNMATCHED #{m} after #{scanner.pre_match}" end end puts "tokenization ok" tokens.push [false, false] @last_value = yyparse( tokens, :each ) puts "parse end... " end def on_error(error_token_id, error_value, value_stack) msg = "parse error " msg << "after #{value_stack.last} " if value_stack.length > 1 #msg << "after #{value_stack.last} " unless value_stack.empty? msg << "on #{token_to_str(error_token_id)} #{error_value}" raise ParseError, msg end ..end mapparser.y modeval..id78efd83f53 ##### racc 1.4.5 generates ### racc_reduce_table = [ 0, 0, :racc_error, 3, 20, :_reduce_1, 0, 20, :_reduce_2, 1, 21, :_reduce_none, 1, 21, :_reduce_none, 5, 23, :_reduce_5, 4, 22, :_reduce_none, 3, 24, :_reduce_none, 0, 24, :_reduce_none, 1, 25, :_reduce_9, 1, 25, :_reduce_10, 1, 25, :_reduce_11, 1, 25, :_reduce_12, 1, 25, :_reduce_13, 1, 25, :_reduce_14, 5, 31, :_reduce_none, 3, 32, :_reduce_none, 0, 32, :_reduce_none, 2, 26, :_reduce_18, 2, 27, :_reduce_19, 2, 28, :_reduce_20, 2, 29, :_reduce_21, 2, 30, :_reduce_22, 1, 33, :_reduce_23, 1, 33, :_reduce_24 ] racc_reduce_n = 25 racc_shift_n = 44 racc_action_table = [ 25, 33, 34, 28, 3, 16, 17, 5, 18, 20, 22, 6, 41, 33, 34, 30, 42, 33, 34, 15, 12, 13, 31, 11, 35, 10, 9, 38, 39, 8, 43 ] racc_action_check = [ 14, 18, 18, 14, 1, 14, 14, 1, 14, 14, 14, 1, 40, 22, 22, 16, 40, 20, 20, 13, 9, 10, 17, 7, 19, 6, 5, 28, 38, 3, 42 ] racc_action_pointer = [ nil, 4, nil, 29, nil, 22, 20, 21, nil, 15, 13, nil, nil, 13, -6, nil, 11, 9, -16, 22, 0, nil, -4, nil, nil, nil, nil, nil, 23, nil, nil, nil, nil, nil, nil, nil, nil, nil, 23, nil, 6, nil, 28, nil ] racc_action_default = [ -2, -25, -3, -25, -4, -25, -25, -25, 44, -25, -25, -1, -8, -25, -25, -6, -25, -25, -25, -25, -25, -9, -25, -10, -11, -5, -12, -13, -25, -14, -18, -19, -20, -23, -24, -7, -21, -22, -25, -17, -25, -15, -25, -16 ] racc_goto_table = [ 32, 23, 36, 2, 37, 4, 14, 19, 21, 7, 24, 26, 27, 29, 40, 1 ] racc_goto_check = [ 14, 8, 14, 3, 14, 4, 5, 6, 7, 2, 9, 10, 11, 12, 13, 1 ] racc_goto_pointer = [ nil, 15, 8, 2, 4, -6, -7, -6, -13, -4, -3, -2, -1, -25, -18 ] racc_goto_default = [ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil ] racc_token_table = { false => 0, Object.new => 1, :SEMICOLON => 2, :SERVER => 3, :STRING => 4, :OBRACE => 5, :EBRACE => 6, :GLOBAL => 7, :global_opts => 8, :MAP => 9, :server_map_opt => 10, :USER => 11, :PORT => 12, :NUMBER => 13, :AUTOMOUNT => 14, :COMPRESS => 15, :RECONNECT => 16, :BOOL_TRUE => 17, :BOOL_FALSE => 18 } racc_use_result_var = true racc_nt_base = 19 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', 'SEMICOLON', 'SERVER', 'STRING', 'OBRACE', 'EBRACE', 'GLOBAL', 'global_opts', 'MAP', 'server_map_opt', 'USER', 'PORT', 'NUMBER', 'AUTOMOUNT', 'COMPRESS', 'RECONNECT', 'BOOL_TRUE', 'BOOL_FALSE', '$start', 'commands', 'command_blk', 'global_blk', 'server_blk', 'server_opts', 'server_opt', 'user_opt', 'port_opt', 'automount_opt', 'compress_opt', 'reconnect_opt', 'server_map_blk', 'server_map_opts', 'boolean'] Racc_debug_parser = false ##### racc system variables end ##### # reduce 0 omitted module_eval <<'.,.,', 'mapparser.y', 5 def _reduce_1( val, _values, result ) puts "GOT A COMMAND" result end .,., module_eval <<'.,.,', 'mapparser.y', 6 def _reduce_2( val, _values, result ) puts "no command found" result end .,., # reduce 3 omitted # reduce 4 omitted module_eval <<'.,.,', 'mapparser.y', 13 def _reduce_5( val, _values, result ) puts "[server #{val[1]}]" result end .,., # reduce 6 omitted # reduce 7 omitted # reduce 8 omitted module_eval <<'.,.,', 'mapparser.y', 23 def _reduce_9( val, _values, result ) puts "=> user opt" result end .,., module_eval <<'.,.,', 'mapparser.y', 24 def _reduce_10( val, _values, result ) puts "=> port opt" result end .,., module_eval <<'.,.,', 'mapparser.y', 25 def _reduce_11( val, _values, result ) puts "=> automount opt" result end .,., module_eval <<'.,.,', 'mapparser.y', 26 def _reduce_12( val, _values, result ) puts "=> compress opt" result end .,., module_eval <<'.,.,', 'mapparser.y', 27 def _reduce_13( val, _values, result ) puts "=> reconnect opt" result end .,., module_eval <<'.,.,', 'mapparser.y', 28 def _reduce_14( val, _values, result ) puts "=> server_map blk" result end .,., # reduce 15 omitted # reduce 16 omitted # reduce 17 omitted module_eval <<'.,.,', 'mapparser.y', 39 def _reduce_18( val, _values, result ) puts "* user = #{val[1]}" result end .,., module_eval <<'.,.,', 'mapparser.y', 42 def _reduce_19( val, _values, result ) puts "* port = #{val[1]}" result end .,., module_eval <<'.,.,', 'mapparser.y', 45 def _reduce_20( val, _values, result ) puts "* automount = #{@bool_result}" result end .,., module_eval <<'.,.,', 'mapparser.y', 48 def _reduce_21( val, _values, result ) puts "* compress = #{@bool_result}" result end .,., module_eval <<'.,.,', 'mapparser.y', 51 def _reduce_22( val, _values, result ) puts ( "* reconnect = #{@bool_result}" ) result end .,., module_eval <<'.,.,', 'mapparser.y', 54 def _reduce_23( val, _values, result ) @bool_result = true result end .,., module_eval <<'.,.,', 'mapparser.y', 55 def _reduce_24( val, _values, result ) @bool_result = false result end .,., def _reduce_none( val, _values, result ) result end end # class MapParser puts "GOO" bigstr = "" STDIN.read.split(/\n/).each do |a| puts "READING #{a}" bigstr = bigstr + a end puts "PARSING NOW..." parser = MapParser.new begin val = parser.parse( bigstr ) print '= ', val, "\n" rescue ParseError puts $! end