#
# DO NOT MODIFY!!!!
# This file is automatically generated by racc 1.4.5
# from racc grammer file "path_parse.y".
#

require 'racc/parser'


class PathParser < Racc::Parser

module_eval <<'..end path_parse.y modeval..idc3fa4458c5', 'path_parse.y', 74
  
  METHODS = "(plot|analysis|overlay|cut)"
  def parse(str)
    @yydebug = true
    unless str.kind_of?(String)
      raise "argument must be String"
    end
    @q = []
    until str.empty?
      case str
      when /\A\[\d+(,\d+)?\]/         # '[00,00,...]'
        @q.push [:SLICE, $&[1..-2]]
      when /\A\/\[/                   # '/['
        @q.push [:BRACKETOPEN, "["]
      when /\A\]\]/                   # ']]'
        @q.push [:BRACKETCLOSE, "]"]
        @q.push [:BRACKETCLOSE, "]"]
      when /\A\]\[\d+(,\d+)?\]/       # '][00,00,...]'
        @q.push [:BRACKETCLOSE, "]"]
        @q.push [:SLICE, $&[2..-2]] 
      when /\A\]\/#{METHODS}\(/o      # ']/method('
        @q.push [:BRACKETCLOSE, "]"]
        @q.push [:METHOD, $&[2..-2]]
      when /\A\],\//                  # '],/'
                                      # '],' で終わるnode名は禁止
        @q.push [:BRACKETCLOSE, "]"]
        @q.push [",", ","]
        @q.push ["/", "/"]
      when /\A\]\Z/                   # ']' 最後
        @q.push [:BRACKETCLOSE, "]"]
      when /\A\/#{METHODS}\(/o        # '/method('
        @q.push [:METHOD, $&[1..-2]]
      when /\A\/find\(/               # '/find('
        @q.push [:FIND, $&[1..-2]]
      when /\A[\/;,\[\]\)]/           # '/;,[])' のいずれか
        @q.push [$&, $&]
      when /\A\d+/                    # '00...'
        @q.push [:NUMBER, $&]
      when /\A[\w=>\-\.\s&]+/
        @q.push [:STRING, $&]
      when /\A[<+_@#^!~]+/
        @q.push [:PATHSTRING, $&]
      end
      str = $'
    end
    @q.push [false, '$end']
    do_parse
  end

  def next_token
    @q.shift
  end

..end path_parse.y modeval..idc3fa4458c5

##### racc 1.4.5 generates ###

racc_reduce_table = [
 0, 0, :racc_error,
 1, 21, :_reduce_1,
 1, 22, :_reduce_2,
 2, 22, :_reduce_3,
 3, 22, :_reduce_4,
 3, 22, :_reduce_5,
 4, 22, :_reduce_6,
 1, 23, :_reduce_none,
 3, 23, :_reduce_8,
 2, 19, :_reduce_9,
 3, 19, :_reduce_10,
 4, 19, :_reduce_11,
 5, 19, :_reduce_12,
 1, 19, :_reduce_13,
 3, 19, :_reduce_14,
 1, 24, :_reduce_none,
 2, 24, :_reduce_16,
 3, 24, :_reduce_17,
 1, 25, :_reduce_none,
 1, 25, :_reduce_none,
 2, 20, :_reduce_20,
 1, 20, :_reduce_none,
 1, 20, :_reduce_none,
 2, 26, :_reduce_23,
 1, 27, :_reduce_none,
 2, 27, :_reduce_25,
 1, 28, :_reduce_none,
 1, 28, :_reduce_none,
 1, 28, :_reduce_none,
 1, 28, :_reduce_none,
 1, 28, :_reduce_none,
 1, 28, :_reduce_none,
 1, 28, :_reduce_none,
 1, 28, :_reduce_none ]

racc_reduce_n = 34

racc_shift_n = 52

racc_action_table = [
    18,    36,    42,    21,    37,    12,    13,    31,    14,    15,
    16,    19,    18,    24,    25,    21,   nil,    12,    13,   nil,
    14,    15,    16,    19,    18,   nil,     3,    21,     5,    12,
    13,   nil,    14,    15,    16,    19,     2,     3,     3,     5,
     5,    30,    24,    25,   nil,    39,    40,     2,     2,    28,
    24,    25,    34,   nil,    51,    40,    50,    24,    25,    24,
    25,    24,    25,    48,    40,    24,    25,   nil,    24,    25,
    44,    40,   nil,    45,   nil,    24,    25,    43,    40,    24,
    25,     8,    24,    25,     9,    40,    11,   nil,     8,    24,
    25,     9,     8,    11,   nil,     9,   nil,    11 ]

racc_action_check = [
    17,    23,    31,    17,    23,    17,    17,     7,    17,    17,
    17,    17,    28,     8,     8,    28,   nil,    28,    28,   nil,
    28,    28,    28,    28,     2,   nil,     3,     2,     3,     2,
     2,   nil,     2,     2,     2,     2,     3,    37,     0,    37,
     0,     6,     5,     5,   nil,    26,    26,    37,     0,     6,
    26,    26,     9,   nil,    49,    49,    45,     9,     9,    49,
    49,    45,    45,    41,    41,    30,    30,   nil,    41,    41,
    33,    33,   nil,    33,   nil,    33,    33,    32,    32,    40,
    40,    22,    32,    32,    22,    47,    22,   nil,    46,    47,
    47,    46,     1,    46,   nil,     1,   nil,     1 ]

racc_action_pointer = [
    35,    87,    18,    23,   nil,    31,    36,     7,     2,    46,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,    -6,   nil,   nil,
   nil,   nil,    76,    -3,   nil,   nil,    39,   nil,     6,   nil,
    54,     2,    71,    64,   nil,   nil,   nil,    34,   nil,   nil,
    68,    57,   nil,   nil,   nil,    50,    83,    78,   nil,    48,
   nil,   nil ]

racc_action_default = [
   -34,    -1,   -22,   -34,   -21,   -34,    -2,   -34,   -34,   -34,
    -3,   -13,   -26,   -28,   -27,   -29,   -30,   -23,   -32,   -31,
   -24,   -33,    -7,   -34,   -18,   -19,   -34,   -15,   -34,   -20,
   -34,   -34,   -34,   -34,    -9,   -25,    -4,   -34,   -16,    -5,
   -34,   -34,    52,   -14,   -10,   -34,    -8,   -17,    -6,   -34,
   -11,   -12 ]

racc_goto_table = [
    26,    38,     1,    32,    33,    22,     7,    38,    38,    23,
    29,    35,   nil,   nil,   nil,   nil,    38,   nil,   nil,   nil,
   nil,   nil,    38,   nil,    38,    41,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,    47,   nil,   nil,   nil,    46,
    49 ]

racc_goto_check = [
     6,     7,     4,     6,     6,     4,     3,     7,     7,     5,
     8,    10,   nil,   nil,   nil,   nil,     7,   nil,   nil,   nil,
   nil,   nil,     7,   nil,     7,     6,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,     6,   nil,   nil,   nil,     4,
     6 ]

racc_goto_pointer = [
   nil,   nil,   nil,     6,     2,     6,    -5,   -25,     4,   nil,
    -6 ]

racc_goto_default = [
   nil,    10,     6,   nil,   nil,   nil,   nil,    27,     4,    17,
    20 ]

racc_token_table = {
 false => 0,
 Object.new => 1,
 :slice => 2,
 :BRACKETOPEN => 3,
 :BRACKETCLOSE => 4,
 :FIND => 5,
 ")" => 6,
 "," => 7,
 :METHOD => 8,
 ";" => 9,
 :SLICE => 10,
 :STRING => 11,
 :NUMBER => 12,
 "/" => 13,
 :PATHSTRING => 14,
 "[" => 15,
 "]" => 16,
 "(" => 17 }

racc_use_result_var = true

racc_nt_base = 18

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',
'slice',
'BRACKETOPEN',
'BRACKETCLOSE',
'FIND',
'")"',
'","',
'METHOD',
'";"',
'SLICE',
'STRING',
'NUMBER',
'"/"',
'PATHSTRING',
'"["',
'"]"',
'"("',
'$start',
'method',
'path',
'target',
'resource',
'resources',
'argstring',
'argsubstring',
'node',
'pathstring',
'pathsubstring']

Racc_debug_parser = false

##### racc system variables end #####

 # reduce 0 omitted

module_eval <<'.,.,', 'path_parse.y', 8
  def _reduce_1( val, _values, result )
 result = [val[0]] unless result.kind_of?(Array)
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 10
  def _reduce_2( val, _values, result )
 result = val[0]
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 21
  def _reduce_3( val, _values, result )
 if val[0].kind_of?(String) # "path"
                 result = [val[0], val[1]]
               elsif val[0][-1].kind_of?(String) # [res, "path"]
                 result = [val[0], val[1]]
               elsif val[0][-1][0].kind_of?(Symbol) # [res,[:method,opt]]
                 result << val[1]
               else # [res,[res,[:method,opt]]]
                 result = [val[0], val[1]]
               end
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 22
  def _reduce_4( val, _values, result )
 result = val[1]
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 23
  def _reduce_5( val, _values, result )
 result = ["/", [val[0].to_sym, val[1]]]
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 24
  def _reduce_6( val, _values, result )
 result = [val[0], [val[1].to_sym, val[2]]]
   result
  end
.,.,

 # reduce 7 omitted

module_eval <<'.,.,', 'path_parse.y', 37
  def _reduce_8( val, _values, result )
 if val[0].kind_of?(String) # "path"
                 result = [val[0], val[2]]
               elsif val[0][-1].kind_of?(String) # [res, "path"]
                 result << val[2]
               elsif val[0][-1][0].kind_of?(Symbol) # [res, [:method,opt]]
                 result = [val[0], val[2]]
               elsif val[0][-1][0] # [res, [res, [:method,opt]]]
                 result << val[2]
               end
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 38
  def _reduce_9( val, _values, result )
 result = [val[0].to_sym, nil]
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 39
  def _reduce_10( val, _values, result )
 result = [val[0].to_sym, val[1]]
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 40
  def _reduce_11( val, _values, result )
 result = [val[0].to_sym, val[1..-2].join]
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 41
  def _reduce_12( val, _values, result )
 result = [val[0].to_sym, val[1..-2].join]
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 42
  def _reduce_13( val, _values, result )
 result = [:slice, val[0].split(",").map{|s| s.to_i}]
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 43
  def _reduce_14( val, _values, result )
 result = [val[0].to_sym, val[1]]
   result
  end
.,.,

 # reduce 15 omitted

module_eval <<'.,.,', 'path_parse.y', 46
  def _reduce_16( val, _values, result )
 result << val[1]
   result
  end
.,.,

module_eval <<'.,.,', 'path_parse.y', 47
  def _reduce_17( val, _values, result )
 result = val.join
   result
  end
.,.,

 # reduce 18 omitted

 # reduce 19 omitted

module_eval <<'.,.,', 'path_parse.y', 52
  def _reduce_20( val, _values, result )
 if val[0] == "/" then raise("'//' is not allowed") else result << val[1] end
   result
  end
.,.,

 # reduce 21 omitted

 # reduce 22 omitted

module_eval <<'.,.,', 'path_parse.y', 56
  def _reduce_23( val, _values, result )
 result << val[1]
   result
  end
.,.,

 # reduce 24 omitted

module_eval <<'.,.,', 'path_parse.y', 59
  def _reduce_25( val, _values, result )
 result << val[1]
   result
  end
.,.,

 # reduce 26 omitted

 # reduce 27 omitted

 # reduce 28 omitted

 # reduce 29 omitted

 # reduce 30 omitted

 # reduce 31 omitted

 # reduce 32 omitted

 # reduce 33 omitted

 def _reduce_none( val, _values, result )
  result
 end

end   # class PathParser
