#
# DO NOT MODIFY!!!!
# This file is automatically generated by Racc 1.4.14
# from Racc grammer file "".
#

require 'racc/parser.rb'
class Generator < Racc::Parser

module_eval(<<'...end bnf.y.rb/module_eval...', 'bnf.y.rb', 1534)

  RESERVED = {
    # keyword
    'namespace' => :NAMESPACE,
    'signature' => :SIGNATURE,
    'celltype' => :CELLTYPE,
    'cell' => :CELL,
    'attr' => :ATTRIBUTE,
    'var' => :VAR,
    'call' => :CALL,
    'entry' => :ENTRY,
    'composite' => :COMPOSITE,
    'require' => :REQUIRE,
    'factory' => :FACTORY,
    'FACTORY' => :CTFACTORY,
    'typedef' => :TYPEDEF,
    'struct' => :STRUCT,
    'region' => :REGION,
    'import' => :IMPORT,
    'import_C' => :IMPORT_C,
    'generate' => :GENERATE,
    '__tool_info__' => :TOOL_INFO,

    # types
    'void'    => :VOID,

    'volatile'=> :VOLATILE,
    'const'   => :CONST,

    'signed'  => :SIGNED,
    'unsigned'=> :UNSIGNED,

    'int8_t'    => :INT8_T,
    'int16_t'   => :INT16_T,
    'int32_t'   => :INT32_T,
    'int64_t'   => :INT64_T,
    'int128_t'  => :INT128_T,
    'uint8_t'   => :UINT8_T,
    'uint16_t'  => :UINT16_T,
    'uint32_t'  => :UINT32_T,
    'uint64_t'  => :UINT64_T,
    'uint128_t' => :UINT128_T,

    'float32_t'   => :FLOAT32_T,
    'double64_t'  => :DOUBLE64_T,
    'bool_t'      => :BOOL_T,
    'char_t'  => :CHAR_T,
    'schar_t'  => :SCHAR_T,
    'uchar_t'  => :UCHAR_T,

    # unrecommened types
    'int'     => :INT,
#   'intptr'  => :INTPTR,
    'short'   => :SHORT,
    'long'    => :LONG,

    # obsolete types
    'char'    => :CHAR,
#    'int8'    => :INT8,
#    'int16'   => :INT16,
#    'int32'   => :INT32,
#    'int64'   => :INT64,
#    'int128'  => :INT128,
#    'float'   => :FLOAT,
#    'double'  => :DOUBLE,
#    'bool'    => :BOOL,

    'enum'    => :ENUM,
    'enum8'   => :ENUM8,
    'enum16'  => :ENUM16,
    'enum32'  => :ENUM32,
    'enum64'  => :ENUM64,

    'true'    => :TRUE,
    'false'   => :FALSE,

    'C_EXP'   => :C_EXP,

    'Descriptor'   => :DESCRIPTOR,

    # location information for TECSCDE
    '__location_information__' => :__LOCATION_INFORMATION__,
    '__cell__' => :__CELL__,
    '__join__' => :__JOIN__,
  }

  # 指定子 '[]' 内でのみ使用できるキーワード
  RESERVED2 = {
    # specifier
    'id' => :ID,

    # signature
    'callback' => :CALLBACK,
    'context' => :CONTEXT,
    'deviate' => :DEVIATE,

    # celltype
    'singleton' => :SINGLETON,
    'idx_is_id' => :IDX_IS_ID,
    'active' => :ACTIVE,

    # port (entry)
    'inline' => :INLINE,
    'ref_desc' => :REF_DESC,   # call も可

    # port (call)
    'optional' => :OPTIONAL,
    'dynamic' => :DYNAMIC,

    # port (call), attribute
    'omit' => :OMIT,

    # attribute
    'choice' => :CHOICE,

    # cell
    'allocator' => :ALLOCATOR,
    'prototype' => :PROTOTYPE,
    'restrict'  => :RESTRICT,

    # FuncType
    'oneway' => :ONEWAY,

    # parameter (basic)
    'in' => :IN,
    'out' => :OUT,
    'inout' => :INOUT,
    'send' => :SEND,
    'receive' => :RECEIVE,

    # parameter 
    'size_is' => :SIZE_IS,
    'count_is' => :COUNT_IS,
    'string' => :STRING,
    'nullable' => :NULLABLE,

    'through' => :THROUGH,
    'in_through' => :IN_THROUGH,
    'out_through' => :OUT_THROUGH,
    'to_through' => :TO_THROUGH,

    'node' => :NODE,
    'linkunit' => :LINKUNIT ,
    'domain' => :DOMAIN,
    'class' => :CLASS,
  }

  # 再帰的なパーサのためのスタック
  @@generator_nest = -1
  @@generator_stack = []
  @@current_locale = []

  # import_C 中である
  @@import_C = false

  # すべての構文解析が完了した
  @@b_end_all_parse = false

  # tag なし struct
  @@no_struct_tag_num = 0

  def self.parse( file_name, plugin = nil, b_reuse = false )
    # パーサインスタンスを生成(別パーサで読み込む)
    parser = Generator.new

    # plugin から import されている場合の plugin 設定
    parser.set_plugin plugin

    # reuse フラグを設定
    parser.set_reuse b_reuse

    # cdl をパース
    parser.parse( [file_name] )

    # 終期化　パーサスタックを戻す
    parser.finalize
  end

  def finalize

    # mikan Namespace.pop
    Namespace.pop
    Signature.pop
    Celltype.pop
    Cell.pop
    CompositeCelltype.pop
  end

  def set_plugin( plugin )
    @plugin = plugin
  end

  def self.get_plugin
    if @@generator_stack[@@generator_nest] then
      # tecsgen 引数の cdl が import される場合は nil
      return @@generator_stack[@@generator_nest].get_plugin
    else
      return nil
    end
  end

  def get_plugin
    @plugin
  end

  def set_reuse( b_reuse )
    @b_reuse = b_reuse
  end

  def self.is_reuse?
    if @@generator_stack[@@generator_nest] then
      # tecsgen 引数の cdl が import される場合は nil
      return @@generator_stack[@@generator_nest].is_reuse?
    else
      return false
    end
  end

  def is_reuse?
    @b_reuse
  end

  def parse(files)

    # mikan Namespace.push
    Namespace.push
    Signature.push
    Celltype.push
    Cell.push
    CompositeCelltype.push

    @@generator_nest += 1
    @@generator_stack[@@generator_nest] = self
    @in_specifier = false

    begin

      @q = []
      b_in_comment = false
      b_in_string = false

      # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
      TECS_LANG::set_kcode_binary

      files.each {|file|
        lineno = 1
        begin
          string = ""
#2.0          IO.foreach(file) {|line|
          TECSIO.foreach(file) {|line|
            col = 1
#            line.rstrip!         改行含む文字列を扱うようになったので、ここで空白を取り除けなくなった

            until line.empty?

              if b_in_comment
                case line
                  # コメント終了
                when /\A\*\//
                  b_in_comment = false
                when /\A./
                  ;
                when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールが必要になった
                  ;
                end
              elsif b_in_string
                if line =~ /\A(?:[^"\\]|\\.)*"/
                  string = "#{string}#{$&}"
                  @q <<  [:STRING_LITERAL, Token.new(string, file, lineno, col)]
                  b_in_string = false
                elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
                  string += $&
                elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
                  string += line
                  # この位置では error メソッドは使えない (token 読出し前)
                  puts "error: #{file} line #{lineno}: string literal has newline without escape"
                  @@n_error += 1
                end
              else
                case line
                # 空白、プリプロセスディレクティブ
                when /\A\s+/
                  ;
                # 識別子
                when /\A[a-zA-Z_]\w*/
                  word = $&
                  @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
                # 16 進数定数
                when /\A0x[0-9A-Fa-f]+/
                  @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
                # 8 進数定数
                when /\A0[0-7]+/
                  @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
                # 浮動小数定数
                when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
                  @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
                # 整数定数
                when /\A\d+/
                  @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
                # 文字定数
                when /\A'(?:[^'\\]|\\.)'/
                  @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
                # 文字列
#                "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
#                when /\A"(?:[^"\\]+|\\.)*"/
                when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
                  @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
                # 文字列 (改行あり)
                when /\A"(?:[^"\\]|\\.)*\\\n$/
                  string = $&
                  b_in_string = true
                # 文字列 (改行あり, escape なし)
                when /\A("(?:[^"\\]|\e\.)*)\n$/
                  string = $1 + "\\\n"
                  b_in_string = true
                  # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
                  puts "error: #{file} line #{lineno}: string literal has newline without escape"
                  @@n_error += 1
                # 山括弧で囲まれた文字列
                when /\A<[0-9A-Za-z_\. \/]+>/   # AB: angle bracke
                  @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)]
                # 行コメント
                when /\A\/\/.*$/
                  # 読み飛ばすだけ
                # コメント開始
                when /\A\/\*/
                  b_in_comment = true
                # '>>', '<<' など
                when /\A>>/, /\A<</, /\A==/, /\A!=/, /\A\&\&/, /\A\|\|/
                  @q << [$&, Token.new($&, file, lineno, col)]
                when /\A::/, /\A=>/, /\A<=/, /\A>=/
                  @q << [$&, Token.new($&, file, lineno, col)]
                # '(', ')' など一文字の記号、または未知の記号
                when /\A./
                  @q << [$&, Token.new($&, file, lineno, col)]
                else
                  raise
                end
              end

              line = $'
              col += $&.length
            end

            lineno += 1
          }

        rescue => evar
          Generator.error( "G1014 while open or reading \'$1\'" , file )
          if $debug then
            p puts( evar )
            pp $@
          end
        end
      }

      # 終了の印
      @q << nil

      @yydebug = true
      do_parse

    ensure
      @@generator_nest -= 1
      TECS_LANG::reset_kcode
    end

  end

  def next_token
    token = @q.shift

    if token then
      @@current_locale[@@generator_nest] = token[1].locale

      if token[0] == :IDENTIFIER then
        # TYPE_NAME トークンへ置換え
        if Namespace.is_typename?( token[1].val ) then
          token[0] = :TYPE_NAME
        elsif @in_specifier && RESERVED2[ token[1].val.to_s ] then
          # 指定子キーワード（ '[', ']' 内でのみ有効)
          token[0] = RESERVED2[ token[1].val.to_s ]
        end
      end

      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
        locale = @@current_locale[@@generator_nest]
        if token then
          print( "#{locale[0]}: line #{locale[1]} : #{token[0]} '#{token[1].val}'\n" )
        else
          print( "#{locale[0]}: line #{locale[1]} : EOF\n" )
        end
      end
    else
      token = [ false, false ]
    end

    token
  end

  def on_error(t, v, vstack)
    # p t, token_to_str(t), vstack
    if token_to_str(t) == "$end" then
      Generator.error( "G1015 Unexpected EOF"  )
    else
      Generator.error( "G1016 syntax error near \'$1\'" , v.val )
    end
  end

  def self.current_locale
    @@current_locale[ @@generator_nest ]
  end

  @@n_error = 0
  @@n_warning = 0
  @@n_info = 0

  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
  def self.error( msg, *arg )
    locale = nil
    self.error2( locale, msg, *arg )
  end

  def self.error2( locale, msg, *arg )
    @@n_error += 1

    msg = TECSMsg.get_error_message( msg )
    # $1, $2, ... を arg で置換
    count = 1
    arg.each{ |a|
      str = TECSIO.str_code_convert( msg, a.to_s )
      msg.sub!( /\$#{count}/, str )
      count += 1
    }

    # import_C の中でのエラー？
    if @@import_C then
      C_parser.error( msg )
    else

      # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
      # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
      # は、解析中の位置を出力する．(new_XXX で owner が子要素のチェッ
      # クをすると owner の行番号が出てしまう点で、ずれが生じている)

      if @@b_end_all_parse == false || locale == nil then
        locale = @@current_locale[ @@generator_nest ]
      end
      if locale then
        Console.puts "error: #{locale[0]}: line #{locale[1]} #{msg}"
      else
        Console.puts "error: #{msg}"
      end
    end
  end

  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
  def self.warning( msg, *arg )
    locale = nil
    self.warning2( locale, msg, *arg )
  end

  def self.warning2( locale, msg, *arg )
    @@n_warning += 1

    msg = TECSMsg.get_warning_message( msg )
    # $1, $2, ... を arg で置換
    count = 1
    arg.each{ |a|
      str = TECSIO.str_code_convert( msg, a.to_s )
      msg.sub!( /\$#{count}/, str )
      count += 1
    }

    # import_C の中でのウォーニング？
    if @@import_C then
      C_parser.warning( msg )
    else
      if @@b_end_all_parse == false || locale == nil then
        locale = @@current_locale[ @@generator_nest ]
      end
      if locale then
        Console.puts "warning: #{locale[0]}: line #{locale[1]} #{msg}"
      else
        Console.puts "warning: #{msg}"
      end
    end
  end

  # このメソッドは構文解析、意味解析からのみ呼出し可
  def self.info( msg, *arg )
    locale = nil
    self.info2( locale, msg, *arg )
  end

  def self.info2( locale, msg, *arg )
    @@n_info += 1

    msg = TECSMsg.get_info_message( msg )
    # $1, $2, ... を arg で置換
    count = 1
    arg.each{ |a|
      str = TECSIO.str_code_convert( msg, a.to_s )
      msg.sub!( /\$#{count}/, str )
      count += 1
    }

    # import_C の中でのウォーニング？
    if @@import_C then
      C_parser.info( msg )
    else
      if @@b_end_all_parse == false || locale == nil then
        locale = @@current_locale[ @@generator_nest ]
      end
      if locale then
        Console.puts "info: #{locale[0]}: line #{locale[1]} #{msg}"
      else
        Console.puts "info: #{msg}"
      end
    end
  end

  def self.get_n_error
    @@n_error
  end

  def self.get_n_warning
    @@n_warning
  end

  def self.get_n_info
    @@n_info
  end

  def self.get_nest
    @@generator_nest
  end

  def self.parsing_C?
    @@import_C
  end

  #===  '[' specifier 始め
  def set_in_specifier
    # p "set_in_specifier"
    @in_specifier = true
  end

  #=== ']' specifier 終わり
  def unset_in_specifier
    # p "unset_in_specifier"
    @in_specifier = false
  end

  # statement_specifier は構文解釈途中で参照したいため
  @@statement_specifier_stack = []
  def self.add_statement_specifier( ss )
    if( @@statement_specifier_stack[ @@generator_nest ] == nil )then
      @@statement_specifier_stack[ @@generator_nest ] = [ ss ]
    else
      @@statement_specifier_stack[ @@generator_nest ] << ss
    end
  end


  def self.get_statement_specifier
    spec_list = @@statement_specifier_stack[ @@generator_nest ]
    @@statement_specifier_stack[ @@generator_nest ] = nil
    return spec_list
  end

  #=== すべての構文解析が完了したことを報告
  def self.end_all_parse
    @@b_end_all_parse = true
  end

...end bnf.y.rb/module_eval...
##### State transition tables begin ###

clist = [
'66,575,328,666,538,872,78,330,562,328,78,78,78,163,199,200,201,202,203',
'204,205,207,846,208,678,700,897,135,647,212,213,214,215,216,217,218',
'679,249,761,711,565,547,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24',
'25,26,27,28,29,30,31,32,33,34,35,38,465,189,693,333,334,42,43,44,45',
'46,47,48,49,896,180,644,256,559,177,815,163,135,189,135,135,135,135',
'189,66,189,189,70,68,69,135,71,72,328,73,78,74,304,305,324,860,901,189',
'255,162,325,136,327,189,75,75,75,76,77,77,77,135,88,189,189,189,189',
'79,87,101,80,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28',
'29,30,31,32,33,34,35,38,78,426,569,668,899,42,43,44,45,46,47,48,49,189',
'178,189,136,66,136,136,136,136,256,135,446,89,100,78,78,136,328,70,68',
'69,667,71,72,135,73,571,74,304,305,324,135,135,135,478,868,325,479,327',
'867,399,75,136,76,89,77,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24',
'25,26,27,28,29,30,31,32,33,34,35,38,450,48,49,400,839,42,43,44,45,46',
'47,48,49,135,135,328,838,66,304,305,306,607,307,308,310,311,406,208',
'78,136,136,70,68,69,401,71,72,797,73,150,74,78,149,136,654,304,305,324',
'78,796,136,136,136,325,75,327,76,407,77,5,6,7,10,13,14,15,16,17,18,19',
'20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,835,163,403,661,402',
'42,43,44,45,46,47,48,49,163,648,826,403,88,697,136,136,432,78,87,681',
'816,574,89,208,520,720,70,68,69,660,71,72,532,73,196,74,510,636,827',
'199,200,201,202,203,204,205,207,208,208,75,682,76,135,77,212,213,214',
'215,216,217,218,304,305,306,889,307,308,310,311,199,200,201,202,203',
'204,205,207,817,208,635,747,518,135,637,212,213,214,215,216,217,218',
'529,888,415,199,200,201,202,203,204,205,207,341,208,342,528,343,135',
'234,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,414',
'208,270,878,235,135,719,212,213,214,215,216,217,218,525,277,589,504',
'691,314,180,136,582,590,721,581,199,200,201,202,203,204,205,207,879',
'208,720,587,163,135,776,212,213,214,215,216,217,218,503,690,313,136',
'199,200,201,202,203,204,205,207,264,208,523,698,282,135,770,212,213',
'214,215,216,217,218,347,582,136,275,581,348,349,898,180,850,199,200',
'201,202,203,204,205,207,163,208,699,283,91,135,136,212,213,214,215,216',
'217,218,199,200,201,202,203,204,205,207,851,208,722,833,691,135,162',
'212,213,214,215,216,217,218,630,163,88,887,136,902,478,886,87,479,347',
'859,89,163,409,348,349,88,631,699,832,794,903,87,904,234,592,89,629',
'170,136,199,200,201,202,203,204,205,207,858,208,564,408,90,135,235,212',
'213,214,215,216,217,218,522,199,200,201,202,203,204,205,207,136,208',
'521,150,906,135,149,212,213,214,215,216,217,218,199,200,201,202,203',
'204,205,207,136,208,394,395,396,135,360,212,213,214,215,216,217,218',
'199,200,201,202,203,204,205,207,361,208,394,395,396,135,362,212,213',
'214,215,216,217,218,145,146,363,199,200,201,202,203,204,205,207,437',
'208,287,288,454,135,136,212,213,214,215,216,217,218,234,354,355,356',
'357,591,436,438,439,440,441,456,457,458,455,136,347,350,351,515,235',
'348,349,199,200,201,202,203,204,205,207,907,208,352,353,514,135,136',
'212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,513,208',
'358,359,512,135,136,212,213,214,215,216,217,218,364,365,511,199,200',
'201,202,203,204,205,207,208,208,404,336,482,135,136,212,213,214,215',
'216,217,218,199,200,201,202,203,204,205,207,481,208,517,518,474,135',
'473,212,213,214,215,216,217,218,472,199,200,201,202,203,204,205,207',
'470,208,350,351,463,135,136,212,213,214,215,216,217,218,350,351,234',
'354,355,356,357,607,454,737,738,740,741,437,136,88,352,353,196,739,785',
'87,235,608,234,89,610,743,742,456,457,458,455,436,438,439,440,441,611',
'136,354,355,356,357,235,352,353,199,200,201,202,203,204,205,207,336',
'208,352,353,612,135,136,212,213,214,215,216,217,218,614,199,200,201',
'202,203,204,205,207,472,208,352,353,615,135,136,212,213,214,215,216',
'217,218,199,200,201,202,203,204,205,207,616,208,358,359,617,135,618',
'212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,208,208',
'594,336,908,135,621,212,213,214,215,216,217,218,620,288,163,199,200',
'201,202,203,204,205,207,462,208,787,788,459,135,136,212,213,214,215',
'216,217,218,625,199,200,201,202,203,204,205,207,448,208,789,790,445',
'135,136,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207',
'444,208,421,772,641,135,136,212,213,214,215,216,217,218,88,88,234,382',
'383,384,87,87,420,643,89,89,419,418,136,377,378,379,380,381,385,417',
'235,416,625,199,200,201,202,203,204,205,207,413,208,412,662,663,135',
'136,212,213,214,215,216,217,218,142,199,200,201,202,203,204,205,207',
'410,208,405,159,669,135,136,212,213,214,215,216,217,218,199,200,201',
'202,203,204,205,207,372,208,371,369,674,135,136,212,213,214,215,216',
'217,218,199,200,201,202,203,204,205,207,368,208,675,237,676,135,363',
'212,213,214,215,216,217,218,304,305,306,234,307,308,310,311,362,199',
'200,201,202,203,204,205,207,136,208,361,680,360,135,235,212,213,214',
'215,216,217,218,683,199,200,201,202,203,204,205,207,136,208,336,685',
'686,135,687,212,213,214,215,216,217,218,199,200,201,202,203,204,205',
'207,136,208,688,689,189,135,692,212,213,214,215,216,217,218,199,200',
'201,202,203,204,205,207,136,208,335,208,695,135,312,212,213,214,215',
'216,217,218,290,289,286,199,200,201,202,203,204,205,207,285,208,704',
'163,706,135,136,212,213,214,215,216,217,218,737,738,740,741,707,708',
'88,88,163,196,739,710,87,87,284,136,89,89,743,742,712,713,714,199,200',
'201,202,203,204,205,207,715,208,718,281,280,135,136,212,213,214,215',
'216,217,218,199,200,201,202,203,204,205,207,723,208,726,571,75,135,136',
'212,213,214,215,216,217,218,729,730,472,20,21,22,23,24,25,26,27,28,29',
'30,31,32,33,136,196,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25',
'26,27,28,29,30,31,32,33,34,35,38,279,744,745,272,3,42,43,44,45,46,47',
'48,49,748,749,136,117,118,119,120,121,122,123,199,200,201,202,203,204',
'205,207,750,208,610,752,753,135,136,212,213,214,215,216,217,218,199',
'200,201,202,203,204,205,207,754,208,180,756,625,135,759,212,213,214',
'215,216,217,218,199,200,201,202,203,204,205,207,760,208,270,208,264',
'135,764,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207',
'159,208,257,767,89,135,247,212,213,214,215,216,217,218,771,196,193,192',
'199,200,201,202,203,204,205,207,779,208,780,191,782,135,136,212,213',
'214,215,216,217,218,199,200,201,202,203,204,205,207,783,208,189,81,910',
'135,136,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207',
'791,208,188,793,187,135,136,212,213,214,215,216,217,218,199,200,201',
'202,203,204,205,207,795,208,186,670,798,135,136,212,213,214,215,216',
'217,218,799,800,803,804,199,200,201,202,203,204,205,207,805,208,806',
'654,718,135,136,212,213,214,215,216,217,218,737,738,740,741,180,88,88',
'88,811,196,739,87,87,87,136,89,89,89,743,742,812,813,199,200,201,202',
'203,204,205,207,814,208,185,184,726,135,136,212,213,214,215,216,217',
'218,199,200,201,202,203,204,205,207,823,208,180,176,175,135,136,212',
'213,214,215,216,217,218,382,383,384,472,117,118,119,120,121,122,123',
'828,377,378,379,380,381,385,136,5,6,7,10,13,14,15,16,17,18,19,20,21',
'22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,174,173,831,172,171,42',
'43,44,45,46,47,48,49,168,836,136,167,166,840,841,-386,842,843,199,200',
'201,202,203,204,205,207,844,208,165,164,160,135,136,212,213,214,215',
'216,217,218,199,200,201,202,203,204,205,345,848,208,803,159,156,135',
'208,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,854',
'208,155,147,857,135,144,212,213,214,215,216,217,218,199,200,201,202',
'203,204,205,207,143,208,862,863,142,135,865,212,213,214,215,216,217',
'218,140,869,870,871,199,200,201,202,203,204,205,207,134,208,132,874',
'875,135,136,212,213,214,215,216,217,218,199,200,201,202,203,204,205',
'207,130,208,877,126,838,135,136,212,213,214,215,216,217,218,199,200',
'201,202,203,204,205,207,880,208,881,587,328,135,136,212,213,214,215',
'216,217,218,199,200,201,202,203,204,205,207,883,208,884,885,125,135',
'136,212,213,214,215,216,217,218,124,890,891,234,104,105,106,107,108',
'109,110,111,112,113,114,88,892,96,136,92,544,87,545,235,542,89,199,200',
'201,202,203,204,205,207,548,208,189,270,541,135,136,212,213,214,215',
'216,217,218,199,200,201,202,203,204,205,207,540,208,558,537,536,135',
'136,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207,,208',
',,,135,136,212,213,214,215,216,217,218,199,200,201,202,203,204,205,207',
',208,,,,135,,212,213,214,215,216,217,218,,,,,199,200,201,202,203,204',
'205,207,,208,,772,,135,136,212,213,214,215,216,217,218,199,200,201,202',
'203,204,205,207,,208,,,,135,136,212,213,214,215,216,217,218,199,200',
'201,202,203,204,205,207,,208,,,,135,136,212,213,214,215,216,217,218',
'199,200,201,202,203,204,205,207,,208,,,,135,136,212,213,214,215,216',
'217,218,,,,,199,200,201,202,203,204,205,207,,208,,,,135,136,212,213',
'214,215,216,217,218,199,200,201,202,203,204,205,207,,208,,,,135,136',
'212,213,214,215,216,217,218,737,738,740,741,,88,,,,196,739,87,,,136',
'89,,,743,742,,,,,,,,,,,,,,,,,136,104,105,106,107,108,109,110,111,112',
'113,114,,,,478,585,,584,,,,,,,89,136,,,,,,,472,,,,,,117,118,119,120',
'121,122,123,,,136,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26',
'27,28,29,30,31,32,33,34,35,38,241,,78,,,42,43,44,45,46,47,48,49,,,,',
',,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27',
'28,29,30,31,32,33,34,35,38,672,,78,,,42,43,44,45,46,47,48,49,,,,,,,',
',,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28',
'29,30,31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,',
',,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30',
'31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49,506,,,,,,,,,,,,,,,',
',,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31',
'32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6',
'7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33',
'34,35,38,78,,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13',
'14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38',
'78,428,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15',
'16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,,',
',,42,43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17',
'18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,387,,,,42',
'43,44,45,46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19',
'20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,,,,,42,43,44,45',
'46,47,48,49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22',
'23,24,25,26,27,28,29,30,31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48',
'49,,,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25',
'26,27,28,29,30,31,32,33,34,35,38,128,516,,,,42,43,44,45,46,47,48,49',
',,,,,,,,,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26',
'27,28,29,30,31,32,33,34,35,38,78,,,,,42,43,44,45,46,47,48,49,,,,,,,',
',,,,,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28',
'29,30,31,32,33,34,35,38,78,632,,,,42,43,44,45,46,47,48,49,,,,,,,,,,',
',,,,,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29',
'30,31,32,33,34,35,38,78,638,,,,42,43,44,45,46,47,48,49,,,,,,,,,,,,,',
',,,,,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30',
'31,32,33,34,35,38,,658,,,,42,43,44,45,46,47,48,49,104,105,106,107,108',
'109,110,111,112,113,114,,,,,,,,,,,,,,,,,,,,,,,,,,,,117,118,119,120,121',
'122,123,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29',
'30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47,48,49,5,6,7,10,13,14,15',
'16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,,,,,',
'42,43,44,45,46,47,48,49,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24',
'25,26,27,28,29,30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47,48,49,5,6',
'7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33',
'34,35,38,,,,,,42,43,44,45,46,47,48,49,5,6,7,10,13,14,15,16,17,18,19',
'20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,,,,,,42,43,44,45',
'46,47,48,49,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28',
'29,30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47,48,49,5,6,7,10,13,14',
'15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,38,,',
',,,42,43,44,45,46,47,48,49,5,6,7,10,13,14,15,16,17,18,19,20,21,22,23',
'24,25,26,27,28,29,30,31,32,33,34,35,38,,,,,,42,43,44,45,46,47' ]
        racc_action_table = arr = ::Array.new(3623, nil)
        idx = 0
        clist.each do |str|
          str.split(',', -1).each do |i|
            arr[idx] = i.to_i unless i.empty?
            idx += 1
          end
        end

clist = [
'2,469,843,576,422,856,192,194,450,192,329,2,613,434,630,630,630,630',
'630,630,630,630,824,630,596,630,893,630,560,630,630,630,630,630,630',
'630,597,154,703,642,454,434,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2',
'2,2,2,2,2,2,2,2,329,422,613,194,194,2,2,2,2,2,2,2,2,893,414,560,157',
'447,125,777,573,721,460,558,631,303,470,576,291,856,469,2,2,2,839,2',
'2,563,2,291,2,192,192,192,843,895,824,157,573,192,630,192,596,329,2',
'613,2,329,2,613,782,85,703,642,597,154,2,85,41,2,291,291,291,291,291',
'291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291',
'291,291,291,291,291,291,187,291,461,577,895,291,291,291,291,291,291',
'291,291,447,125,777,721,185,558,631,303,470,258,286,308,89,41,315,185',
'839,315,291,291,291,577,291,291,92,291,462,291,563,563,563,512,75,325',
'340,851,563,340,563,851,258,291,782,291,340,291,185,185,185,185,185',
'185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185',
'185,185,185,185,185,185,315,89,89,262,812,185,185,185,185,185,185,185',
'185,511,333,463,812,161,187,187,187,756,187,187,187,187,267,413,161',
'286,308,185,185,185,262,185,185,756,185,148,185,561,148,92,561,315,315',
'315,294,756,512,75,325,315,185,315,185,267,185,161,161,161,161,161,161',
'161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161',
'161,161,161,161,161,808,392,264,568,264,161,161,161,161,161,161,161',
'161,375,561,784,625,127,625,511,333,294,778,127,599,778,465,127,412',
'392,808,161,161,161,568,161,161,411,161,472,161,375,553,784,720,720',
'720,720,720,720,720,720,410,720,161,599,161,720,161,720,720,720,720',
'720,720,720,294,294,294,880,294,294,294,294,257,257,257,257,257,257',
'257,257,778,257,553,684,684,257,553,257,257,257,257,257,257,257,409',
'880,278,474,474,474,474,474,474,474,474,210,474,210,408,210,474,720',
'474,474,474,474,474,474,474,403,403,403,403,403,403,403,403,278,403',
'407,866,720,403,653,403,403,403,403,403,403,403,402,172,480,366,609',
'190,172,720,580,483,653,580,479,479,479,479,479,479,479,479,866,479',
'653,479,716,479,720,479,479,479,479,479,479,479,366,609,190,257,889',
'889,889,889,889,889,889,889,401,889,396,626,176,889,716,889,889,889',
'889,889,889,889,488,477,474,171,477,488,488,894,171,834,504,504,504',
'504,504,504,504,504,102,504,626,176,9,504,403,504,504,504,504,504,504',
'504,862,862,862,862,862,862,862,862,834,862,657,801,751,862,102,862',
'862,862,862,862,862,862,549,115,253,879,479,897,476,879,253,476,221',
'841,253,452,269,221,221,88,549,657,801,751,898,88,901,504,504,88,549',
'115,889,859,859,859,859,859,859,859,859,841,859,452,269,8,859,504,859',
'859,859,859,859,859,859,395,513,513,513,513,513,513,513,513,504,513',
'394,86,904,513,86,513,513,513,513,513,513,513,848,848,848,848,848,848',
'848,848,862,848,254,254,254,848,498,848,848,848,848,848,848,848,359',
'359,359,359,359,359,359,359,499,359,520,520,520,359,500,359,359,359',
'359,359,359,359,82,82,501,358,358,358,358,358,358,358,358,547,358,181',
'181,564,358,859,358,358,358,358,358,358,358,848,496,496,496,496,502',
'547,547,547,547,547,564,564,564,564,513,487,222,222,384,848,487,487',
'806,806,806,806,806,806,806,806,905,806,223,223,383,806,848,806,806',
'806,806,806,806,806,357,357,357,357,357,357,357,357,382,357,225,225',
'381,357,359,357,357,357,357,357,357,357,230,230,380,797,797,797,797',
'797,797,797,797,368,797,265,265,343,797,358,797,797,797,797,797,797',
'797,796,796,796,796,796,796,796,796,342,796,389,389,338,796,337,796',
'796,796,796,796,796,796,335,356,356,356,356,356,356,356,356,334,356',
'489,489,327,356,806,356,356,356,356,356,356,356,490,490,797,495,495',
'495,495,525,318,739,739,739,739,297,357,696,491,491,739,739,739,696',
'797,526,796,696,528,739,739,318,318,318,318,297,297,297,297,297,529',
'797,224,224,224,224,796,492,492,355,355,355,355,355,355,355,355,530',
'355,493,493,531,355,796,355,355,355,355,355,355,355,533,354,354,354',
'354,354,354,354,354,739,354,494,494,534,354,356,354,354,354,354,354',
'354,354,353,353,353,353,353,353,353,353,535,353,497,497,536,353,537',
'353,353,353,353,353,353,353,352,352,352,352,352,352,352,352,538,352',
'505,505,906,352,543,352,352,352,352,352,352,352,539,539,544,748,748',
'748,748,748,748,748,748,326,748,742,742,324,748,355,748,748,748,748',
'748,748,748,548,729,729,729,729,729,729,729,729,309,729,743,743,307',
'729,354,729,729,729,729,729,729,729,719,719,719,719,719,719,719,719',
'306,719,285,719,557,719,353,719,719,719,719,719,719,719,430,602,748',
'246,246,246,430,602,284,559,430,602,283,282,352,246,246,246,246,246',
'246,281,748,280,565,351,351,351,351,351,351,351,351,276,351,274,570',
'572,351,748,351,351,351,351,351,351,351,272,147,147,147,147,147,147',
'147,147,271,147,266,256,578,147,729,147,147,147,147,147,147,147,350',
'350,350,350,350,350,350,350,242,350,240,236,583,350,719,350,350,350',
'350,350,350,350,149,149,149,149,149,149,149,149,235,149,586,149,588',
'149,229,149,149,149,149,149,149,149,546,546,546,147,546,546,546,546',
'228,349,349,349,349,349,349,349,349,351,349,227,598,226,349,147,349',
'349,349,349,349,349,349,600,714,714,714,714,714,714,714,714,147,714',
'206,604,605,714,606,714,714,714,714,714,714,714,348,348,348,348,348',
'348,348,348,350,348,607,608,198,348,611,348,348,348,348,348,348,348',
'710,710,710,710,710,710,710,710,149,710,195,616,619,710,189,710,710',
'710,710,710,710,710,184,183,179,347,347,347,347,347,347,347,347,178',
'347,632,634,636,347,349,347,347,347,347,347,347,347,827,827,827,827',
'637,638,373,288,640,827,827,641,373,288,177,714,373,288,827,827,643',
'644,646,706,706,706,706,706,706,706,706,648,706,651,175,174,706,348',
'706,706,706,706,706,706,706,345,345,345,345,345,345,345,345,658,345',
'662,663,664,345,710,345,345,345,345,345,345,345,665,666,827,36,36,36',
'36,36,36,36,36,36,36,36,36,36,36,347,668,345,345,345,345,345,345,345',
'345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345',
'345,345,345,345,173,671,673,169,1,345,345,345,345,345,345,345,345,688',
'689,706,260,260,260,260,260,260,260,515,515,515,515,515,515,515,515',
'691,515,692,693,694,515,345,515,515,515,515,515,515,515,166,166,166',
'166,166,166,166,166,695,166,168,697,699,166,700,166,166,166,166,166',
'166,166,341,341,341,341,341,341,341,341,701,341,167,165,164,341,707',
'341,341,341,341,341,341,341,682,682,682,682,682,682,682,682,160,682',
'159,711,152,682,151,682,682,682,682,682,682,682,718,144,141,139,521',
'521,521,521,521,521,521,521,725,521,727,138,730,521,515,521,521,521',
'521,521,521,521,522,522,522,522,522,522,522,522,731,522,137,3,909,522',
'166,522,522,522,522,522,522,522,523,523,523,523,523,523,523,523,746',
'523,136,749,133,523,341,523,523,523,523,523,523,523,581,581,581,581',
'581,581,581,581,755,581,131,581,760,581,682,581,581,581,581,581,581',
'581,761,763,764,766,908,908,908,908,908,908,908,908,767,908,768,769',
'770,908,521,908,908,908,908,908,908,908,783,783,783,783,771,146,518',
'245,772,783,783,146,518,245,522,146,518,245,783,783,773,775,290,290',
'290,290,290,290,290,290,776,290,129,128,780,290,523,290,290,290,290',
'290,290,290,207,207,207,207,207,207,207,207,781,207,126,124,123,207',
'581,207,207,207,207,207,207,207,510,510,510,783,170,170,170,170,170',
'170,170,793,510,510,510,510,510,510,908,207,207,207,207,207,207,207',
'207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207',
'207,207,207,207,122,119,799,118,117,207,207,207,207,207,207,207,207',
'114,810,290,110,108,814,815,816,817,821,211,211,211,211,211,211,211',
'211,822,211,106,104,101,211,207,211,211,211,211,211,211,211,212,212',
'212,212,212,212,212,212,828,212,833,100,95,212,836,212,212,212,212,212',
'212,212,902,902,902,902,902,902,902,902,837,902,94,84,840,902,80,902',
'902,902,902,902,902,902,591,591,591,591,591,591,591,591,79,591,845,846',
'77,591,850,591,591,591,591,591,591,591,76,852,853,855,575,575,575,575',
'575,575,575,575,74,575,73,860,861,575,211,575,575,575,575,575,575,575',
'234,234,234,234,234,234,234,234,72,234,863,70,869,234,212,234,234,234',
'234,234,234,234,584,584,584,584,584,584,584,584,872,584,873,584,874',
'584,902,584,584,584,584,584,584,584,514,514,514,514,514,514,514,514',
'876,514,877,878,69,514,591,514,514,514,514,514,514,514,68,881,882,234',
'162,162,162,162,162,162,162,162,162,162,162,4,883,38,575,16,431,4,432',
'234,428,4,365,365,365,365,365,365,365,365,437,365,442,443,426,365,234',
'365,365,365,365,365,365,365,364,364,364,364,364,364,364,364,425,364',
'446,419,416,364,584,364,364,364,364,364,364,364,363,363,363,363,363',
'363,363,363,,363,,,,363,514,363,363,363,363,363,363,363,838,838,838',
'838,838,838,838,838,,838,,,,838,,838,838,838,838,838,838,838,,,,,835',
'835,835,835,835,835,835,835,,835,,835,,835,365,835,835,835,835,835,835',
'835,362,362,362,362,362,362,362,362,,362,,,,362,364,362,362,362,362',
'362,362,362,361,361,361,361,361,361,361,361,,361,,,,361,363,361,361',
'361,361,361,361,361,823,823,823,823,823,823,823,823,,823,,,,823,838',
'823,823,823,823,823,823,823,,,,,360,360,360,360,360,360,360,360,,360',
',,,360,835,360,360,360,360,360,360,360,811,811,811,811,811,811,811,811',
',811,,,,811,362,811,811,811,811,811,811,811,669,669,669,669,,424,,,',
'669,669,424,,,361,424,,,669,669,,,,,,,,,,,,,,,,,823,54,54,54,54,54,54',
'54,54,54,54,54,,,,478,478,,478,,,,,,,478,360,,,,,,,669,,,,,,54,54,54',
'54,54,54,54,,,811,478,478,478,478,478,478,478,478,478,478,478,478,478',
'478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,150,,150',
',,478,478,478,478,478,478,478,478,,,,,,,,,,,,,,,,,,,,,150,150,150,150',
'150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150',
'150,150,150,150,150,150,150,582,,582,,,150,150,150,150,150,150,150,150',
',,,,,,,,,,,,,,,,,,,,582,582,582,582,582,582,582,582,582,582,582,582',
'582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,372',
',,,,582,582,582,582,582,582,582,582,,,,,,,,,,,,,,,,,,,372,372,372,372',
'372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372',
'372,372,372,372,372,372,372,459,,,,,372,372,372,372,372,372,372,372',
'372,,,,,,,,,,,,,,,,,,459,459,459,459,459,459,459,459,459,459,459,459',
'459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,250',
',,,,459,459,459,459,459,459,459,459,,,,,,,,,,,,,,,,,,,250,250,250,250',
'250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250',
'250,250,250,250,250,250,250,293,,,,,250,250,250,250,250,250,250,250',
',,,,,,,,,,,,,,,,,,293,293,293,293,293,293,293,293,293,293,293,293,293',
'293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,445,293',
',,,293,293,293,293,293,293,293,293,,,,,,,,,,,,,,,,,,,445,445,445,445',
'445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445',
'445,445,445,445,445,445,445,251,,,,,445,445,445,445,445,445,445,445',
',,,,,,,,,,,,,,,,,,251,251,251,251,251,251,251,251,251,251,251,251,251',
'251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,444,251',
',,,251,251,251,251,251,251,251,251,,,,,,,,,,,,,,,,,,,444,444,444,444',
'444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444',
'444,444,444,444,444,444,444,156,,,,,444,444,444,444,444,444,444,444',
',,,,,,,,,,,,,,,,,,156,156,156,156,156,156,156,156,156,156,156,156,156',
'156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,386,,,,',
'156,156,156,156,156,156,156,156,,,,,,,,,,,,,,,,,,,386,386,386,386,386',
'386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386',
'386,386,386,386,386,386,71,386,,,,386,386,386,386,386,386,386,386,,',
',,,,,,,,,,,,,,,,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71',
'71,71,71,71,71,71,71,71,71,71,550,,,,,71,71,71,71,71,71,71,71,,,,,,',
',,,,,,,,,,,,550,550,550,550,550,550,550,550,550,550,550,550,550,550',
'550,550,550,550,550,550,550,550,550,550,550,550,550,550,554,550,,,,550',
'550,550,550,550,550,550,550,,,,,,,,,,,,,,,,,,,554,554,554,554,554,554',
'554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554',
'554,554,554,554,554,566,554,,,,554,554,554,554,554,554,554,554,,,,,',
',,,,,,,,,,,,,566,566,566,566,566,566,566,566,566,566,566,566,566,566',
'566,566,566,566,566,566,566,566,566,566,566,566,566,566,,566,,,,566',
'566,566,566,566,566,566,566,464,464,464,464,464,464,464,464,464,464',
'464,,,,,,,,,,,,,,,,,,,,,,,,,,,,464,464,464,464,464,464,464,244,244,244',
'244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244',
'244,244,244,244,244,244,244,244,,,,,,244,244,244,244,244,244,244,244',
'40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40',
'40,40,40,40,40,,,,,,40,40,40,40,40,40,40,40,289,289,289,289,289,289',
'289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289',
'289,289,289,289,289,,,,,,289,289,289,289,289,289,289,289,709,709,709',
'709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709',
'709,709,709,709,709,709,709,709,,,,,,709,709,709,709,709,709,709,709',
'519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519',
'519,519,519,519,519,519,519,519,519,519,519,,,,,,519,519,519,519,519',
'519,519,519,622,622,622,622,622,622,622,622,622,622,622,622,622,622',
'622,622,622,622,622,622,622,622,622,622,622,622,622,622,,,,,,622,622',
'622,622,622,622,622,622,705,705,705,705,705,705,705,705,705,705,705',
'705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705',
',,,,,705,705,705,705,705,705,705,705,239,239,239,239,239,239,239,239',
'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239',
'239,239,239,,,,,,239,239,239,239,239,239' ]
        racc_action_check = arr = ::Array.new(3623, nil)
        idx = 0
        clist.each do |str|
          str.split(',', -1).each do |i|
            arr[idx] = i.to_i unless i.empty?
            idx += 1
          end
        end

racc_action_pointer = [
   nil,  1442,    -1,  1586,  1989,   nil,   nil,   nil,   602,   527,
   nil,   nil,   nil,   nil,   nil,   nil,  1993,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,  1340,   nil,  1985,   nil,
  3295,   123,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,  2182,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,  1974,  1964,
  1919,  2991,  1910,  1890,  1888,   198,  1876,  1866,   nil,  1806,
  1852,   nil,   679,   nil,  1816,   122,   655,   nil,   607,   174,
   nil,   nil,   190,   nil,  1786,  1766,   nil,   nil,   nil,   nil,
  1821,  1744,   550,   nil,  1805,   nil,  1804,   nil,  1788,   nil,
  1787,   nil,   nil,   nil,  1784,   587,   nil,  1775,  1774,  1772,
   nil,   nil,  1771,  1714,  1711,    77,  1706,   350,  1627,  1628,
   nil,  1558,   nil,  1538,   nil,   nil,  1592,  1477,  1549,  1481,
   nil,  1480,   nil,   nil,  1539,   nil,  1663,  1133,   285,  1177,
  2340,  1531,  1520,   nil,    27,   nil,  2873,    45,   nil,  1495,
  1520,   271,  1895,   nil,  1502,  1505,  1481,  1500,  1478,  1312,
  1607,   538,   476,  1423,  1344,  1343,   525,  1328,  1300,  1260,
   nil,   692,   nil,  1287,  1290,   184,   nil,   156,   nil,  1276,
   450,   nil,    -6,   nil,   -65,  1277,   nil,   nil,  1159,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,  1232,  1709,   nil,   nil,
   437,  1801,  1823,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   590,   741,   751,   893,   767,  1204,  1186,  1174,  1157,
   774,   nil,   nil,   nil,  1915,  1178,  1155,   nil,   nil,  3541,
  1157,   nil,  1124,   nil,  3254,  1665,  1017,   nil,   nil,   nil,
  2578,  2755,   nil,   592,   612,   nil,  1131,   414,   149,   nil,
  1324,   nil,   248,   nil,   332,   814,  1135,   271,   nil,   599,
   nil,  1102,  1119,   nil,  1081,   nil,  1079,   nil,   430,   nil,
  1069,  1098,  1060,  1088,  1055,  1035,   176,   nil,  1322,  3336,
  1687,    97,   nil,  2637,   291,   nil,   nil,   802,   nil,   nil,
   nil,   nil,   nil,    80,   nil,   nil,  1002,   984,   177,   980,
   nil,   nil,   nil,   nil,   nil,   183,   nil,   nil,   797,   nil,
   nil,   nil,   nil,   nil,   961,   199,   900,   857,   nil,    -2,
   nil,   nil,   nil,   254,   858,   787,   nil,   840,   838,   nil,
   206,  1503,   829,   811,   nil,  1367,   nil,  1300,  1253,  1208,
  1155,  1110,   993,   971,   949,   926,   857,   787,   720,   695,
  2191,  2143,  2121,  2051,  2029,  2007,   447,   nil,   811,   nil,
   nil,   nil,  2460,  1321,   nil,   342,   nil,   nil,   nil,   nil,
   804,   792,   788,   770,   754,   nil,  2932,   nil,   nil,   806,
   nil,   nil,   330,   nil,   654,   643,   524,   nil,   nil,   nil,
   nil,   516,   470,   461,   nil,   nil,   nil,   458,   381,   423,
   383,   308,   359,   271,    69,   nil,  2032,   nil,   nil,  2032,
   nil,   nil,   -37,   nil,  2233,  2029,  1981,   nil,  1967,   nil,
  1078,  1893,  1965,   nil,     0,   nil,   nil,  2008,   nil,   nil,
   nil,   nil,  1911,  2005,  2814,  2696,  1999,    73,   nil,   nil,
   -32,   nil,   599,   nil,    31,   nil,   nil,   nil,   nil,  2519,
   -16,   155,   192,   255,  3160,   328,   nil,   nil,   nil,    -8,
    81,   nil,   370,   nil,   439,   nil,   596,   537,  2279,   495,
   474,   nil,   nil,   484,   nil,   nil,   nil,   741,   526,   849,
   861,   871,   900,   912,   935,   856,   717,   951,   671,   671,
   676,   685,   710,   nil,   553,   995,   nil,   nil,   nil,   nil,
  1660,   253,   197,   651,  1959,  1459,   nil,   nil,  1664,  3418,
   634,  1551,  1573,  1595,   nil,   874,   891,   nil,   892,   877,
   925,   930,   nil,   940,   953,   940,   975,   947,   992,   977,
   nil,   nil,   nil,   969,  1006,   nil,  1084,   638,  1027,   587,
  3050,   nil,   nil,   310,  3109,   nil,   nil,  1003,    78,  1081,
    13,   284,   nil,    92,   642,  1096,  3168,   nil,   305,   nil,
  1109,   nil,   996,    77,   nil,  1893,   -11,   130,  1108,   nil,
   484,  1617,  2401,  1159,  1937,   nil,  1179,   nil,  1178,   nil,
   nil,  1867,   nil,   nil,   nil,   nil,    14,    26,  1211,   356,
  1222,   nil,  1079,   nil,  1234,  1235,  1237,  1250,  1252,   448,
   nil,  1198,   nil,     0,   nil,   nil,  1277,   nil,   nil,  1279,
   nil,   nil,  3459,   nil,   nil,   346,   524,   nil,   nil,   nil,
    12,    79,  1272,   nil,  1300,   nil,  1305,  1286,  1289,   nil,
  1319,  1326,    25,  1304,  1305,   nil,  1337,   nil,  1315,   nil,
   nil,  1231,   nil,   465,   nil,   nil,   nil,   577,  1337,   nil,
   nil,   nil,  1364,  1365,  1256,  1350,  1377,   nil,  1398,  2235,
   nil,  1426,   nil,  1430,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,  1525,   nil,   387,   nil,   nil,   nil,  1409,  1437,
   nil,  1454,  1456,  1432,  1463,  1451,   887,  1479,   nil,  1480,
  1457,  1500,   nil,    24,   nil,  3500,  1345,  1448,   nil,  3377,
  1275,  1523,   nil,   nil,  1231,   nil,   496,   nil,  1540,  1063,
   384,    76,   nil,   nil,   nil,  1521,   nil,  1549,   nil,  1041,
  1437,  1544,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   888,
   nil,   nil,  1026,  1049,   nil,   nil,  1595,   nil,  1018,  1594,
   nil,   548,   nil,   nil,   nil,  1587,   262,   nil,   nil,   nil,
  1591,  1626,   nil,  1632,  1632,   nil,  1634,  1613,  1614,  1641,
  1531,  1656,  1633,  1674,   nil,  1648,  1683,    75,   352,   nil,
  1686,  1678,   115,  1665,   344,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,  1729,   nil,   nil,   834,   812,   nil,  1742,
   nil,   547,   nil,   nil,   nil,   nil,   765,   nil,   330,   nil,
  1753,  2213,   229,   nil,  1783,  1784,  1672,  1761,   nil,   nil,
   nil,  1674,  1771,  2165,     8,   nil,   nil,  1322,  1791,   nil,
   nil,   nil,   nil,  1824,   544,  2099,  1828,  1815,  2073,    89,
  1819,   598,   nil,   -13,   nil,  1838,  1865,   nil,   673,   nil,
  1843,   205,  1879,  1883,   nil,  1854,    -9,   nil,   nil,   628,
  1892,  1867,   575,  1917,   nil,   nil,   464,   nil,   nil,  1887,
   nil,   nil,  1932,  1936,  1936,   nil,  1959,  1900,  1932,   591,
   399,  1944,  1945,  1928,   nil,   nil,   nil,   nil,   nil,   521,
   nil,   nil,   nil,    11,   539,   100,   nil,   595,   581,   nil,
   nil,   614,  1845,   nil,   650,   765,   966,   nil,  1643,  1577,
   nil ]

racc_action_default = [
  -195,  -442,    -1,  -442,  -442,   -69,   -70,   -71,   -72,   -73,
   -74,   -75,   -76,   -77,   -78,   -79,  -442,   -81,   -82,   -83,
   -84,   -85,   -86,   -87,   -88,   -89,   -90,   -91,   -92,   -93,
   -94,   -95,   -96,   -97,   -98,   -99,  -442,  -101,  -104,  -118,
  -442,  -442,  -126,  -127,  -128,  -129,  -130,  -131,  -136,  -137,
  -192,  -193,  -194,  -196,  -442,  -198,  -199,  -200,  -201,  -202,
  -203,  -204,  -207,  -208,  -209,  -210,  -211,  -235,  -442,  -442,
  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -408,  -442,
  -442,   911,  -442,   -65,   -67,  -442,  -139,  -140,  -442,  -146,
  -206,  -205,  -442,  -100,  -106,  -442,  -109,   -72,   -73,  -119,
  -442,  -125,  -442,  -212,  -442,  -215,  -442,  -217,  -442,  -219,
  -442,  -221,  -222,  -223,  -442,  -442,  -389,  -442,  -442,  -442,
  -397,  -398,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
  -248,  -442,  -255,  -442,  -261,  -251,  -442,  -328,  -442,  -442,
  -351,  -442,  -401,  -413,  -442,   -62,  -442,  -442,  -138,  -442,
  -442,  -442,  -147,  -148,  -442,  -102,  -442,  -442,  -132,  -134,
  -442,  -442,  -442,  -409,  -442,  -442,  -442,  -442,  -442,  -442,
  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
  -338,  -442,  -245,  -442,  -243,  -442,  -256,  -442,  -252,  -442,
  -442,  -329,  -442,  -402,  -442,  -442,  -435,   -66,    -2,    -3,
    -4,    -5,    -6,    -7,    -8,    -9,   -10,  -442,   -12,   -14,
   -18,  -442,  -442,   -22,   -23,   -24,   -25,   -26,   -27,   -28,
   -30,   -34,   -37,   -40,   -45,   -48,   -50,   -52,   -54,   -56,
   -58,   -61,   -68,  -186,  -442,  -442,  -442,  -143,   -63,  -442,
  -442,  -145,  -150,  -152,  -442,  -156,  -442,  -141,  -149,   -80,
  -442,  -442,  -107,  -442,  -442,  -123,  -442,  -442,  -442,  -197,
  -442,  -213,  -442,  -225,  -442,  -442,  -442,  -442,  -229,  -442,
  -292,  -442,  -442,  -390,  -442,  -392,  -442,  -394,  -442,  -407,
  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -241,  -442,  -442,
  -442,  -442,  -249,  -442,  -442,  -262,  -264,  -442,  -266,  -267,
  -268,  -269,  -270,  -442,  -289,  -290,  -442,  -442,  -442,  -442,
  -314,  -315,  -253,  -325,  -327,  -442,  -352,  -354,  -442,  -356,
  -357,  -358,  -359,  -367,  -442,  -442,  -442,  -442,  -384,  -442,
  -410,  -411,  -412,  -442,  -442,  -442,   -13,  -442,  -442,   -60,
  -172,  -442,  -442,  -442,   -19,  -442,   -20,  -442,  -442,  -442,
  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -190,  -442,  -142,
   -64,  -144,  -442,  -157,  -155,  -442,  -159,  -161,  -162,  -163,
  -442,  -442,  -166,  -442,  -442,  -171,  -442,  -105,  -108,  -442,
  -120,  -122,  -442,  -112,  -114,  -442,  -442,  -133,  -135,  -124,
  -214,  -442,  -442,  -442,  -216,  -218,  -220,  -442,  -442,  -442,
  -442,  -442,  -442,  -442,  -442,  -396,  -442,  -400,  -236,  -442,
  -238,  -239,  -442,  -246,  -442,  -442,  -442,  -250,  -442,  -257,
  -442,  -442,  -442,  -263,  -442,  -271,  -273,  -442,  -275,  -276,
  -277,  -278,  -291,  -442,  -442,  -442,  -251,  -442,  -316,  -330,
  -442,  -353,  -442,  -360,  -442,  -363,  -364,  -365,  -366,  -442,
  -374,  -442,  -442,  -442,  -442,  -442,  -403,  -404,  -405,  -442,
  -442,  -421,  -442,   -11,  -442,  -173,  -174,  -175,  -442,  -442,
  -442,   -16,   -17,  -442,   -31,   -32,   -33,   -35,   -36,   -38,
   -39,   -41,   -42,   -43,   -44,   -46,   -47,   -49,   -51,   -53,
   -55,   -57,  -442,  -187,  -442,  -442,  -151,  -153,  -154,  -158,
  -442,  -442,  -442,  -442,  -442,  -442,  -103,  -110,  -442,  -442,
  -442,  -442,  -442,  -442,  -226,  -442,  -442,  -230,  -442,  -442,
  -339,  -442,  -402,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
  -244,  -247,  -254,  -442,  -442,  -260,  -442,  -442,  -442,  -442,
  -442,  -295,  -297,  -442,  -442,  -306,  -308,  -442,  -442,  -442,
  -442,  -442,  -350,  -442,  -442,  -442,  -442,  -369,  -442,  -375,
  -442,  -385,  -442,  -442,  -388,  -442,  -442,  -442,  -442,   -29,
  -176,  -442,  -442,  -442,  -408,  -182,  -442,  -178,  -442,   -15,
   -21,  -442,  -188,  -191,  -189,  -160,  -442,  -442,  -442,  -442,
  -442,  -121,  -442,  -113,  -442,  -442,  -442,  -442,  -442,  -442,
  -233,  -442,  -224,  -442,  -391,  -393,  -442,  -399,  -237,  -442,
  -242,  -258,  -442,  -265,  -272,  -442,  -442,  -279,  -280,  -285,
  -442,  -442,  -442,  -296,  -442,  -299,  -442,  -442,  -442,  -307,
  -442,  -442,  -442,  -442,  -442,  -317,  -442,  -320,  -442,  -331,
  -332,  -442,  -334,  -442,  -344,  -355,  -361,  -442,  -442,  -370,
  -371,  -373,  -442,  -442,  -442,  -442,  -442,  -422,  -442,  -442,
  -180,  -442,  -184,  -442,  -177,  -183,  -179,   -59,  -164,  -165,
  -167,  -168,  -442,  -170,  -442,  -115,  -116,  -117,  -442,  -442,
  -231,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -274,  -442,
  -442,  -442,  -293,  -442,  -294,  -442,  -442,  -442,  -305,  -442,
  -442,  -442,  -311,  -313,  -442,  -326,  -442,  -336,  -442,  -442,
  -442,  -442,  -362,  -368,  -376,  -442,  -386,  -442,  -406,  -442,
  -442,  -442,  -423,  -425,  -426,  -427,  -428,  -429,  -430,  -442,
  -436,  -437,  -442,  -442,  -181,  -185,  -442,  -111,  -442,  -442,
  -234,  -442,  -387,  -395,  -240,  -442,  -442,  -281,  -282,  -286,
  -442,  -442,  -298,  -442,  -442,  -309,  -442,  -442,  -442,  -442,
  -442,  -442,  -442,  -442,  -349,  -442,  -442,  -442,  -442,  -382,
  -442,  -442,  -442,  -442,  -442,  -432,  -433,  -438,  -439,  -440,
  -441,  -169,  -227,  -442,  -232,  -259,  -442,  -442,  -287,  -442,
  -300,  -442,  -303,  -304,  -310,  -312,  -442,  -333,  -442,  -335,
  -442,  -442,  -442,  -342,  -442,  -442,  -344,  -442,  -377,  -378,
  -379,  -442,  -442,  -442,  -442,  -424,  -431,  -442,  -442,  -283,
  -284,  -288,  -301,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
  -442,  -442,  -372,  -442,  -383,  -442,  -442,  -434,  -442,  -302,
  -442,  -442,  -442,  -442,  -340,  -442,  -442,  -343,  -345,  -442,
  -442,  -442,  -442,  -442,  -228,  -318,  -442,  -321,  -323,  -442,
  -337,  -341,  -442,  -442,  -442,  -381,  -442,  -442,  -442,  -442,
  -442,  -442,  -442,  -442,  -420,  -319,  -322,  -324,  -347,  -442,
  -346,  -380,  -416,  -442,  -442,  -442,  -418,  -442,  -442,  -414,
  -415,  -442,  -442,  -348,  -442,  -442,  -442,  -419,  -442,  -442,
  -417 ]

racc_goto_table = [
    54,   137,   232,    84,   236,   265,   263,   161,   179,   195,
   339,   152,   240,   572,   238,   102,   153,    99,   154,   323,
   169,   266,   389,   329,   531,   468,   533,   534,   467,   393,
     9,   181,   425,   435,    50,   376,   453,   344,   268,   570,
     8,   552,   556,   649,   650,   609,   141,   732,   127,    83,
   271,   388,   251,   274,   276,   338,   552,   475,   316,   717,
   773,   725,   295,   555,   157,   551,   802,   626,   491,   492,
   493,   494,   239,   487,   488,   495,   496,   489,   490,   248,
   567,   452,   566,   480,   657,   461,   568,   151,   778,   367,
   724,   819,   273,   339,   278,   194,   331,   332,   895,   900,
   893,   471,   577,   370,     1,   784,     2,   502,   238,   346,
   497,   498,   398,   499,   500,   501,    82,   786,   373,    93,
    94,   250,    95,   392,   258,   601,   182,   397,   148,   507,
   375,   580,   366,   253,    51,   849,    52,   259,   261,   262,
   267,   549,   323,   183,   339,    84,   386,   552,   339,   129,
   291,   556,   619,   131,   254,   293,   429,   133,   294,   260,
   623,   825,   434,   552,   757,   443,   239,   701,   339,   433,
   550,   633,   639,   484,   485,   486,   852,   821,   809,   822,
   634,   451,   801,    54,   340,   297,   388,   659,   554,     9,
   318,   197,   640,   483,   560,   583,   645,   646,   866,     8,
   138,   190,   561,   449,   716,   847,   807,   808,   505,   751,
   139,   315,   422,     9,   655,   nil,   nil,   292,   nil,   nil,
   nil,   nil,   nil,     8,   nil,   nil,   nil,   253,   253,   442,
   694,   nil,   nil,   nil,   447,   nil,   238,   nil,   nil,   nil,
   727,   411,   nil,   524,   374,   nil,   nil,   nil,   254,   254,
   530,   460,   530,   530,   nil,   598,   599,   600,   526,   469,
   818,   820,   nil,   604,   605,   606,   424,   476,   nil,   nil,
   430,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   527,   nil,
   509,   nil,   656,   624,   nil,   nil,   nil,   423,   nil,    54,
   nil,   431,   297,   nil,   239,   603,   535,   519,   nil,   595,
   579,   nil,   762,   nil,   nil,   nil,   765,   nil,   nil,   468,
   nil,   nil,   467,   318,   nil,   nil,   339,   339,   339,     9,
   nil,   nil,   340,   427,   339,   339,   339,   464,   539,     8,
   nil,   nil,   nil,   nil,   588,   nil,   nil,   578,   nil,   546,
   586,   nil,   238,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   563,   nil,   593,
   728,   nil,   613,   253,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   684,   508,   nil,   nil,   nil,   nil,   nil,   530,   nil,
   nil,   nil,   nil,   nil,   254,   nil,   nil,   nil,   nil,   nil,
   323,   nil,   nil,   861,   677,   nil,   576,   nil,   nil,   nil,
   239,   nil,   nil,   nil,   nil,   476,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   182,   882,   573,   nil,   nil,   nil,   543,
   665,   nil,   nil,   nil,   nil,   nil,   671,   596,   597,   588,
   nil,   nil,   553,   557,   673,   nil,   238,   nil,   763,   622,
   853,   nil,   766,   nil,   nil,   nil,   530,   553,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   664,   nil,
   nil,   nil,   nil,   nil,   642,   702,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   602,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   239,   nil,   nil,   nil,   nil,   339,
   nil,   nil,   nil,   339,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   731,   nil,   nil,   nil,   746,   nil,   705,
   nil,   758,   nil,   nil,   nil,   709,   nil,   nil,   553,   nil,
   nil,   nil,   557,   837,   nil,   nil,   nil,   703,   nil,   651,
   nil,   nil,   nil,   nil,   553,   nil,   nil,   nil,   nil,   768,
   nil,   nil,   nil,   nil,   774,   775,   nil,   nil,   nil,   nil,
   855,   nil,   nil,   nil,   781,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   696,
   nil,   873,   nil,   792,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   464,   nil,   nil,   339,   nil,   nil,   nil,   nil,   nil,
   nil,   769,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   894,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   339,   nil,   nil,   nil,   nil,   nil,   777,   nil,   nil,
   nil,   829,   830,   810,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   834,   339,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   530,   nil,   845,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   774,   nil,   339,   nil,   nil,   755,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   864,   nil,   nil,   nil,   nil,   824,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   876,   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,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   905,   nil,   nil,
   nil,   nil,   nil,   909,   nil,   856,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   651 ]

racc_goto_check = [
    45,     4,    32,    31,    23,     5,    85,    47,    83,   167,
    22,    29,    55,   153,    28,    68,    53,    25,     4,   101,
    47,    23,    44,   157,    84,    74,    84,    84,    76,    48,
    34,    89,     6,   106,    64,    60,   145,    10,    86,   154,
    33,    24,    24,   129,   130,    88,   156,   170,    25,    30,
    83,    43,    40,    83,    83,    11,    24,    61,   138,   133,
   135,   152,    98,   118,    51,   113,   116,   107,    14,    14,
    14,    14,    29,    12,    12,    15,    15,    13,    13,    53,
   113,   140,   146,     6,   107,   147,   148,    31,   149,    32,
   150,   151,   158,    22,   159,   161,   162,   163,   164,   165,
   166,   168,   169,    28,     1,   173,     2,     6,    28,     8,
    16,    17,    23,    18,    19,    20,    26,   170,    27,    37,
    39,    41,    42,    46,    51,    49,    31,    52,    54,    57,
    59,    62,    63,    25,    65,   116,    66,    67,    80,    81,
    82,    87,   101,    90,    22,    31,    40,    24,    22,    91,
    92,    24,    84,    93,    45,    94,    95,    96,    97,    45,
    99,   170,   100,    24,   108,   110,    29,   111,    22,    98,
   112,   113,   118,    10,    10,    10,   135,   152,   133,   152,
   114,   138,   115,    45,    25,    45,    43,   113,   117,    34,
    45,    30,   119,    11,   121,    61,   122,   123,   124,    33,
   125,   126,   127,   128,   131,   170,   132,   134,     5,    88,
   136,   137,     4,    34,   139,   nil,   nil,    64,   nil,   nil,
   nil,   nil,   nil,    33,   nil,   nil,   nil,    25,    25,     4,
    84,   nil,   nil,   nil,     4,   nil,    28,   nil,   nil,   nil,
   154,   156,   nil,    85,    31,   nil,   nil,   nil,    45,    45,
     5,     4,     5,     5,   nil,     6,     6,     6,    23,     4,
   129,   130,   nil,     6,     6,     6,    25,    53,   nil,   nil,
    25,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    86,   nil,
    47,   nil,   145,   106,   nil,   nil,   nil,    31,   nil,    45,
   nil,    45,    45,   nil,    29,    48,    83,    47,   nil,    60,
    10,   nil,    24,   nil,   nil,   nil,    24,   nil,   nil,    74,
   nil,   nil,    76,    45,   nil,   nil,    22,    22,    22,    34,
   nil,   nil,    25,    64,    22,    22,    22,    45,    89,    33,
   nil,   nil,   nil,   nil,    23,   nil,   nil,   167,   nil,    47,
    55,   nil,    28,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,    47,   nil,    32,
    74,   nil,   157,    25,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,    44,    31,   nil,   nil,   nil,   nil,   nil,     5,   nil,
   nil,   nil,   nil,   nil,    45,   nil,   nil,   nil,   nil,   nil,
   101,   nil,   nil,   153,    22,   nil,     4,   nil,   nil,   nil,
    29,   nil,   nil,   nil,   nil,    53,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,    31,   153,    68,   nil,   nil,   nil,    31,
    23,   nil,   nil,   nil,   nil,   nil,    23,     4,     4,    23,
   nil,   nil,    45,    45,    55,   nil,    28,   nil,     6,    47,
    84,   nil,     6,   nil,   nil,   nil,     5,    45,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    47,   nil,
   nil,   nil,   nil,   nil,     4,    23,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,    25,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,    29,   nil,   nil,   nil,   nil,    22,
   nil,   nil,   nil,    22,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   167,   nil,   nil,   nil,    23,   nil,    47,
   nil,    85,   nil,   nil,   nil,    47,   nil,   nil,    45,   nil,
   nil,   nil,    45,     6,   nil,   nil,   nil,     4,   nil,    45,
   nil,   nil,   nil,   nil,    45,   nil,   nil,   nil,   nil,    23,
   nil,   nil,   nil,   nil,    23,    32,   nil,   nil,   nil,   nil,
     6,   nil,   nil,   nil,    23,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    25,
   nil,     6,   nil,    32,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,    45,   nil,   nil,    22,   nil,   nil,   nil,   nil,   nil,
   nil,    47,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,     6,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,    22,   nil,   nil,   nil,   nil,   nil,     4,   nil,   nil,
   nil,    32,    32,    83,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,    23,    22,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,     5,   nil,    23,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    23,   nil,    22,   nil,   nil,    31,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,    32,   nil,   nil,   nil,   nil,     4,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,    23,   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,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,    23,   nil,   nil,
   nil,   nil,   nil,    23,   nil,     4,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,    45 ]

racc_goto_pointer = [
   nil,   104,   106,   nil,   -74,  -160,  -258,   nil,  -103,   nil,
  -174,  -152,  -277,  -275,  -286,  -283,  -250,  -250,  -249,  -249,
  -249,   nil,  -197,  -145,  -403,   -23,   112,  -126,  -136,   -78,
    45,    -1,  -145,    38,    28,   nil,   nil,    83,   nil,    82,
  -104,   -34,    84,  -200,  -231,    -2,  -131,   -95,  -225,  -393,
   nil,   -36,  -129,   -73,    43,  -138,   nil,  -243,   nil,  -116,
  -211,  -283,  -345,  -102,    32,   132,   134,   -24,   -39,   nil,
   nil,   nil,   nil,   nil,  -304,   nil,  -301,   nil,   nil,   nil,
   -24,   -25,   -27,  -118,  -386,  -158,  -129,  -302,  -483,   -96,
    15,    77,   -35,    80,   -31,  -137,    83,   -29,  -125,  -386,
  -135,  -173,   nil,   nil,   nil,   nil,  -264,  -481,  -535,   nil,
  -138,  -463,  -274,  -379,  -373,  -582,  -698,  -257,  -382,  -365,
   nil,  -254,  -364,  -363,  -653,   125,    63,  -247,  -110,  -518,
  -517,  -447,  -563,  -592,  -562,  -659,   134,    19,  -134,  -349,
  -237,   nil,   nil,   nil,   nil,  -282,  -377,  -240,  -375,  -636,
  -570,  -687,  -601,  -450,  -423,   nil,   -31,  -170,   -78,   -79,
   nil,   -48,   -98,   -97,  -794,  -796,  -784,  -135,  -234,  -370,
  -622,   nil,   nil,  -634 ]

racc_goto_default = [
   nil,   nil,   nil,   209,   198,   206,   337,   210,   219,   211,
   220,   nil,   221,   222,   223,   224,   225,   226,   227,   228,
   229,   230,   231,   233,    67,     4,   nil,   245,    39,    40,
   nil,   391,   nil,    97,    98,    11,    12,    37,    36,   nil,
   nil,   nil,   nil,   252,   nil,   246,   nil,   nil,   nil,   390,
    41,   nil,   158,    85,    86,   nil,   242,   243,   244,   nil,
   nil,   nil,   477,   nil,   nil,   nil,   nil,    53,   nil,    55,
    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
   103,   nil,   nil,   nil,   nil,   628,   nil,   269,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   296,
   nil,   298,   299,   300,   301,   302,   nil,   nil,   627,   303,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   309,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   652,   nil,   653,   nil,   nil,   nil,   nil,   317,
   nil,   319,   320,   321,   322,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   326,   nil,   115,   nil,   nil,   116,   nil,
   466,   nil,   nil,   nil,   nil,   nil,   nil,   733,   735,   nil,
   nil,   734,   736,   nil ]

racc_reduce_table = [
  0, 0, :racc_error,
  1, 142, :_reduce_none,
  1, 144, :_reduce_2,
  1, 144, :_reduce_3,
  1, 144, :_reduce_4,
  1, 144, :_reduce_5,
  1, 144, :_reduce_6,
  1, 144, :_reduce_7,
  1, 144, :_reduce_8,
  1, 144, :_reduce_9,
  1, 144, :_reduce_10,
  3, 144, :_reduce_11,
  1, 146, :_reduce_none,
  2, 146, :_reduce_13,
  1, 148, :_reduce_none,
  4, 148, :_reduce_15,
  3, 148, :_reduce_16,
  3, 148, :_reduce_17,
  1, 149, :_reduce_none,
  2, 149, :_reduce_19,
  2, 149, :_reduce_20,
  4, 149, :_reduce_21,
  1, 150, :_reduce_22,
  1, 150, :_reduce_23,
  1, 150, :_reduce_24,
  1, 150, :_reduce_25,
  1, 150, :_reduce_26,
  1, 150, :_reduce_27,
  1, 151, :_reduce_none,
  4, 151, :_reduce_29,
  1, 153, :_reduce_none,
  3, 153, :_reduce_31,
  3, 153, :_reduce_32,
  3, 153, :_reduce_33,
  1, 154, :_reduce_none,
  3, 154, :_reduce_35,
  3, 154, :_reduce_36,
  1, 155, :_reduce_none,
  3, 155, :_reduce_38,
  3, 155, :_reduce_39,
  1, 156, :_reduce_none,
  3, 156, :_reduce_41,
  3, 156, :_reduce_42,
  3, 156, :_reduce_43,
  3, 156, :_reduce_44,
  1, 157, :_reduce_none,
  3, 157, :_reduce_46,
  3, 157, :_reduce_47,
  1, 158, :_reduce_none,
  3, 158, :_reduce_49,
  1, 159, :_reduce_none,
  3, 159, :_reduce_51,
  1, 160, :_reduce_none,
  3, 160, :_reduce_53,
  1, 161, :_reduce_none,
  3, 161, :_reduce_55,
  1, 162, :_reduce_none,
  3, 162, :_reduce_57,
  1, 163, :_reduce_none,
  5, 163, :_reduce_59,
  1, 147, :_reduce_60,
  1, 164, :_reduce_61,
  3, 165, :_reduce_62,
  1, 168, :_reduce_none,
  2, 168, :_reduce_64,
  1, 167, :_reduce_65,
  3, 167, :_reduce_66,
  1, 171, :_reduce_none,
  3, 171, :_reduce_68,
  1, 169, :_reduce_69,
  1, 169, :_reduce_70,
  1, 169, :_reduce_71,
  1, 169, :_reduce_none,
  1, 169, :_reduce_none,
  1, 169, :_reduce_74,
  1, 169, :_reduce_none,
  1, 169, :_reduce_none,
  1, 169, :_reduce_77,
  1, 169, :_reduce_78,
  1, 169, :_reduce_79,
  4, 169, :_reduce_80,
  1, 177, :_reduce_81,
  1, 177, :_reduce_82,
  1, 177, :_reduce_83,
  1, 178, :_reduce_84,
  1, 178, :_reduce_85,
  1, 178, :_reduce_86,
  1, 178, :_reduce_87,
  1, 178, :_reduce_88,
  1, 178, :_reduce_89,
  1, 178, :_reduce_90,
  1, 178, :_reduce_91,
  1, 178, :_reduce_92,
  1, 178, :_reduce_93,
  1, 178, :_reduce_94,
  1, 178, :_reduce_95,
  1, 178, :_reduce_96,
  1, 178, :_reduce_97,
  1, 179, :_reduce_98,
  1, 179, :_reduce_99,
  2, 176, :_reduce_100,
  1, 176, :_reduce_none,
  0, 182, :_reduce_102,
  6, 174, :_reduce_103,
  0, 183, :_reduce_104,
  5, 174, :_reduce_105,
  2, 174, :_reduce_106,
  1, 181, :_reduce_none,
  2, 181, :_reduce_none,
  1, 180, :_reduce_109,
  3, 184, :_reduce_110,
  6, 184, :_reduce_111,
  1, 187, :_reduce_112,
  3, 187, :_reduce_113,
  1, 189, :_reduce_114,
  4, 189, :_reduce_115,
  4, 189, :_reduce_116,
  4, 189, :_reduce_117,
  1, 166, :_reduce_none,
  2, 166, :_reduce_119,
  1, 185, :_reduce_120,
  3, 185, :_reduce_121,
  1, 190, :_reduce_none,
  4, 175, :_reduce_none,
  5, 175, :_reduce_none,
  2, 175, :_reduce_none,
  1, 191, :_reduce_126,
  1, 191, :_reduce_127,
  1, 191, :_reduce_128,
  1, 191, :_reduce_129,
  1, 191, :_reduce_130,
  1, 191, :_reduce_131,
  1, 192, :_reduce_none,
  3, 192, :_reduce_none,
  1, 193, :_reduce_none,
  3, 193, :_reduce_none,
  1, 170, :_reduce_136,
  1, 170, :_reduce_137,
  2, 172, :_reduce_138,
  1, 172, :_reduce_none,
  1, 195, :_reduce_140,
  3, 195, :_reduce_141,
  4, 195, :_reduce_142,
  3, 195, :_reduce_143,
  4, 195, :_reduce_144,
  3, 195, :_reduce_145,
  1, 194, :_reduce_146,
  2, 194, :_reduce_147,
  2, 194, :_reduce_148,
  3, 194, :_reduce_149,
  1, 196, :_reduce_none,
  3, 196, :_reduce_none,
  1, 197, :_reduce_152,
  3, 197, :_reduce_153,
  3, 198, :_reduce_154,
  2, 198, :_reduce_155,
  1, 198, :_reduce_156,
  2, 198, :_reduce_157,
  3, 199, :_reduce_158,
  1, 200, :_reduce_159,
  3, 200, :_reduce_160,
  1, 201, :_reduce_161,
  1, 201, :_reduce_162,
  1, 201, :_reduce_163,
  4, 201, :_reduce_164,
  4, 201, :_reduce_165,
  1, 201, :_reduce_166,
  4, 201, :_reduce_167,
  4, 201, :_reduce_168,
  6, 201, :_reduce_169,
  4, 201, :_reduce_170,
  1, 201, :_reduce_171,
  1, 152, :_reduce_none,
  2, 152, :_reduce_173,
  1, 202, :_reduce_none,
  1, 202, :_reduce_none,
  2, 202, :_reduce_none,
  3, 203, :_reduce_177,
  2, 203, :_reduce_178,
  3, 203, :_reduce_179,
  3, 203, :_reduce_180,
  4, 203, :_reduce_181,
  2, 203, :_reduce_182,
  3, 203, :_reduce_none,
  3, 203, :_reduce_184,
  4, 203, :_reduce_185,
  1, 173, :_reduce_186,
  3, 173, :_reduce_187,
  4, 173, :_reduce_188,
  4, 173, :_reduce_189,
  1, 204, :_reduce_190,
  3, 204, :_reduce_191,
  2, 143, :_reduce_none,
  2, 143, :_reduce_none,
  2, 143, :_reduce_none,
  0, 143, :_reduce_none,
  1, 205, :_reduce_none,
  4, 205, :_reduce_197,
  1, 208, :_reduce_none,
  1, 208, :_reduce_none,
  1, 208, :_reduce_none,
  1, 208, :_reduce_none,
  1, 208, :_reduce_none,
  1, 208, :_reduce_none,
  1, 208, :_reduce_none,
  2, 208, :_reduce_none,
  2, 208, :_reduce_none,
  1, 208, :_reduce_none,
  1, 208, :_reduce_none,
  1, 208, :_reduce_none,
  1, 208, :_reduce_none,
  1, 208, :_reduce_none,
  1, 209, :_reduce_212,
  3, 209, :_reduce_213,
  4, 221, :_reduce_214,
  1, 221, :_reduce_215,
  4, 221, :_reduce_216,
  1, 221, :_reduce_217,
  4, 221, :_reduce_218,
  1, 221, :_reduce_219,
  4, 221, :_reduce_220,
  1, 221, :_reduce_221,
  1, 221, :_reduce_222,
  1, 221, :_reduce_223,
  6, 221, :_reduce_224,
  1, 222, :_reduce_225,
  3, 222, :_reduce_226,
  7, 226, :_reduce_227,
  10, 226, :_reduce_228,
  1, 223, :_reduce_229,
  3, 223, :_reduce_230,
  5, 227, :_reduce_231,
  7, 227, :_reduce_232,
  1, 229, :_reduce_233,
  3, 229, :_reduce_234,
  1, 211, :_reduce_235,
  5, 219, :_reduce_236,
  7, 219, :_reduce_237,
  5, 218, :_reduce_238,
  5, 218, :_reduce_239,
  9, 220, :_reduce_240,
  4, 210, :_reduce_241,
  7, 210, :_reduce_242,
  1, 231, :_reduce_none,
  4, 231, :_reduce_none,
  1, 230, :_reduce_245,
  3, 230, :_reduce_246,
  6, 212, :_reduce_247,
  1, 232, :_reduce_248,
  1, 233, :_reduce_none,
  2, 233, :_reduce_none,
  1, 145, :_reduce_251,
  2, 145, :_reduce_252,
  3, 145, :_reduce_253,
  6, 213, :_reduce_254,
  1, 234, :_reduce_255,
  0, 235, :_reduce_256,
  2, 235, :_reduce_257,
  3, 236, :_reduce_258,
  6, 236, :_reduce_259,
  6, 214, :_reduce_260,
  1, 237, :_reduce_261,
  1, 238, :_reduce_none,
  2, 238, :_reduce_none,
  1, 239, :_reduce_264,
  4, 239, :_reduce_265,
  1, 240, :_reduce_none,
  1, 240, :_reduce_none,
  1, 240, :_reduce_none,
  1, 240, :_reduce_none,
  1, 240, :_reduce_none,
  1, 241, :_reduce_271,
  3, 241, :_reduce_272,
  1, 247, :_reduce_273,
  4, 247, :_reduce_274,
  1, 247, :_reduce_275,
  1, 247, :_reduce_276,
  1, 247, :_reduce_277,
  1, 247, :_reduce_278,
  1, 248, :_reduce_279,
  1, 248, :_reduce_280,
  3, 248, :_reduce_281,
  3, 248, :_reduce_282,
  5, 249, :_reduce_283,
  5, 249, :_reduce_284,
  4, 242, :_reduce_285,
  6, 242, :_reduce_286,
  7, 242, :_reduce_287,
  8, 242, :_reduce_288,
  1, 250, :_reduce_289,
  1, 250, :_reduce_290,
  1, 251, :_reduce_291,
  1, 228, :_reduce_none,
  1, 252, :_reduce_none,
  5, 243, :_reduce_294,
  1, 253, :_reduce_295,
  2, 253, :_reduce_296,
  1, 254, :_reduce_297,
  4, 254, :_reduce_298,
  1, 255, :_reduce_299,
  4, 255, :_reduce_300,
  5, 255, :_reduce_301,
  3, 256, :_reduce_302,
  1, 256, :_reduce_303,
  1, 257, :_reduce_none,
  5, 244, :_reduce_305,
  1, 258, :_reduce_306,
  2, 258, :_reduce_307,
  1, 259, :_reduce_308,
  4, 259, :_reduce_309,
  4, 260, :_reduce_310,
  5, 245, :_reduce_311,
  7, 245, :_reduce_312,
  5, 246, :_reduce_none,
  1, 261, :_reduce_314,
  1, 261, :_reduce_315,
  0, 262, :_reduce_none,
  2, 262, :_reduce_none,
  7, 263, :_reduce_318,
  9, 263, :_reduce_319,
  1, 264, :_reduce_none,
  1, 265, :_reduce_321,
  3, 265, :_reduce_322,
  1, 265, :_reduce_323,
  3, 265, :_reduce_324,
  0, 269, :_reduce_325,
  8, 215, :_reduce_326,
  4, 215, :_reduce_327,
  1, 266, :_reduce_328,
  1, 267, :_reduce_329,
  0, 268, :_reduce_none,
  2, 268, :_reduce_none,
  2, 268, :_reduce_none,
  4, 270, :_reduce_333,
  1, 270, :_reduce_334,
  3, 272, :_reduce_335,
  1, 272, :_reduce_336,
  6, 274, :_reduce_337,
  1, 224, :_reduce_338,
  1, 225, :_reduce_none,
  6, 273, :_reduce_340,
  7, 273, :_reduce_341,
  4, 273, :_reduce_342,
  6, 273, :_reduce_343,
  1, 275, :_reduce_none,
  6, 271, :_reduce_345,
  9, 271, :_reduce_346,
  9, 271, :_reduce_347,
  12, 271, :_reduce_348,
  1, 276, :_reduce_none,
  6, 216, :_reduce_350,
  1, 277, :_reduce_351,
  1, 278, :_reduce_none,
  2, 278, :_reduce_none,
  1, 279, :_reduce_354,
  4, 279, :_reduce_355,
  1, 280, :_reduce_none,
  1, 280, :_reduce_none,
  1, 280, :_reduce_none,
  1, 280, :_reduce_none,
  1, 281, :_reduce_360,
  3, 281, :_reduce_361,
  4, 286, :_reduce_362,
  1, 286, :_reduce_363,
  1, 286, :_reduce_364,
  1, 286, :_reduce_365,
  1, 286, :_reduce_366,
  1, 282, :_reduce_367,
  5, 283, :_reduce_368,
  1, 287, :_reduce_369,
  2, 287, :_reduce_370,
  0, 291, :_reduce_371,
  8, 284, :_reduce_372,
  4, 284, :_reduce_373,
  1, 288, :_reduce_374,
  1, 289, :_reduce_375,
  0, 290, :_reduce_none,
  2, 290, :_reduce_none,
  2, 290, :_reduce_none,
  2, 290, :_reduce_none,
  6, 292, :_reduce_380,
  4, 292, :_reduce_381,
  6, 285, :_reduce_382,
  8, 285, :_reduce_383,
  1, 294, :_reduce_none,
  1, 295, :_reduce_none,
  1, 293, :_reduce_none,
  9, 217, :_reduce_387,
  6, 217, :_reduce_388,
  1, 296, :_reduce_none,
  3, 296, :_reduce_none,
  6, 299, :_reduce_391,
  3, 299, :_reduce_392,
  6, 299, :_reduce_393,
  3, 299, :_reduce_394,
  8, 299, :_reduce_395,
  4, 299, :_reduce_396,
  1, 299, :_reduce_397,
  1, 299, :_reduce_398,
  6, 299, :_reduce_399,
  4, 299, :_reduce_400,
  1, 297, :_reduce_401,
  0, 298, :_reduce_none,
  2, 298, :_reduce_none,
  2, 298, :_reduce_none,
  1, 301, :_reduce_none,
  4, 301, :_reduce_406,
  1, 300, :_reduce_407,
  1, 186, :_reduce_408,
  1, 188, :_reduce_409,
  4, 206, :_reduce_none,
  2, 302, :_reduce_none,
  2, 302, :_reduce_none,
  0, 302, :_reduce_none,
  14, 303, :_reduce_414,
  2, 305, :_reduce_415,
  0, 305, :_reduce_416,
  6, 306, :_reduce_417,
  13, 304, :_reduce_418,
  5, 307, :_reduce_419,
  0, 307, :_reduce_420,
  5, 207, :_reduce_421,
  3, 309, :_reduce_422,
  3, 310, :_reduce_423,
  5, 310, :_reduce_424,
  1, 311, :_reduce_none,
  1, 311, :_reduce_none,
  1, 311, :_reduce_none,
  1, 311, :_reduce_none,
  1, 311, :_reduce_429,
  1, 311, :_reduce_430,
  3, 313, :_reduce_431,
  2, 313, :_reduce_432,
  1, 314, :_reduce_433,
  3, 314, :_reduce_434,
  1, 308, :_reduce_435,
  1, 312, :_reduce_436,
  1, 312, :_reduce_437,
  2, 312, :_reduce_438,
  2, 312, :_reduce_439,
  2, 312, :_reduce_440,
  2, 312, :_reduce_441 ]

racc_reduce_n = 442

racc_shift_n = 911

racc_token_table = {
  false => 0,
  :error => 1,
  :TRUE => 2,
  :FALSE => 3,
  :INTEGER_CONSTANT => 4,
  :FLOATING_CONSTANT => 5,
  :OCTAL_CONSTANT => 6,
  :HEX_CONSTANT => 7,
  :CHARACTER_LITERAL => 8,
  "(" => 9,
  ")" => 10,
  :STRING_LITERAL => 11,
  "[" => 12,
  "]" => 13,
  "." => 14,
  :IDENTIFIER => 15,
  "->" => 16,
  :SIZEOF => 17,
  "&" => 18,
  "*" => 19,
  "+" => 20,
  "-" => 21,
  "~" => 22,
  "!" => 23,
  "/" => 24,
  "%" => 25,
  "<<" => 26,
  ">>" => 27,
  "<" => 28,
  ">" => 29,
  "<=" => 30,
  ">=" => 31,
  "==" => 32,
  "!=" => 33,
  "^" => 34,
  "|" => 35,
  "&&" => 36,
  "||" => 37,
  "?" => 38,
  ":" => 39,
  ";" => 40,
  "," => 41,
  "=" => 42,
  :VOID => 43,
  :FLOAT32_T => 44,
  :DOUBLE64_T => 45,
  :TYPE_NAME => 46,
  :BOOL_T => 47,
  :FLOAT => 48,
  :DOUBLE => 49,
  :DESCRIPTOR => 50,
  :CHAR_T => 51,
  :SCHAR_T => 52,
  :UCHAR_T => 53,
  :CHAR => 54,
  :SHORT => 55,
  :INT => 56,
  :LONG => 57,
  :INT8_T => 58,
  :INT16_T => 59,
  :INT32_T => 60,
  :INT64_T => 61,
  :INT128_T => 62,
  :UINT8_T => 63,
  :UINT16_T => 64,
  :UINT32_T => 65,
  :UINT64_T => 66,
  :UINT128_T => 67,
  :SIGNED => 68,
  :UNSIGNED => 69,
  :STRUCT => 70,
  "{" => 71,
  "}" => 72,
  :STRING => 73,
  :SIZE_IS => 74,
  :COUNT_IS => 75,
  :ENUM => 76,
  :ENUM8 => 77,
  :ENUM16 => 78,
  :ENUM32 => 79,
  :ENUM64 => 80,
  :ENUM128 => 81,
  :CONST => 82,
  :VOLATILE => 83,
  "..." => 84,
  :IN => 85,
  :OUT => 86,
  :INOUT => 87,
  :SEND => 88,
  :RECEIVE => 89,
  :NULLABLE => 90,
  :C_EXP => 91,
  :ALLOCATOR => 92,
  :CALLBACK => 93,
  :CONTEXT => 94,
  :DEVIATE => 95,
  :ID => 96,
  :PROTOTYPE => 97,
  :RESTRICT => 98,
  :SINGLETON => 99,
  :IDX_IS_ID => 100,
  :ACTIVE => 101,
  :GENERATE => 102,
  :IMPORT_C => 103,
  :IMPORT => 104,
  :AB_STRING_LITERAL => 105,
  :TYPEDEF => 106,
  :NAMESPACE => 107,
  "::" => 108,
  :SIGNATURE => 109,
  :ONEWAY => 110,
  :CELLTYPE => 111,
  :INLINE => 112,
  :OPTIONAL => 113,
  :REF_DESC => 114,
  :DYNAMIC => 115,
  :OMIT => 116,
  :CALL => 117,
  :ENTRY => 118,
  :ATTRIBUTE => 119,
  :CHOICE => 120,
  :VAR => 121,
  :REQUIRE => 122,
  :FACTORY => 123,
  :CTFACTORY => 124,
  :CELL => 125,
  :THROUGH => 126,
  :COMPOSITE => 127,
  "=>" => 128,
  :REGION => 129,
  :IN_THROUGH => 130,
  :OUT_THROUGH => 131,
  :TO_THROUGH => 132,
  :NODE => 133,
  :LINKUNIT => 134,
  :DOMAIN => 135,
  :CLASS => 136,
  :__LOCATION_INFORMATION__ => 137,
  :__CELL__ => 138,
  :__JOIN__ => 139,
  :TOOL_INFO => 140 }

racc_nt_base = 141

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",
  "TRUE",
  "FALSE",
  "INTEGER_CONSTANT",
  "FLOATING_CONSTANT",
  "OCTAL_CONSTANT",
  "HEX_CONSTANT",
  "CHARACTER_LITERAL",
  "\"(\"",
  "\")\"",
  "STRING_LITERAL",
  "\"[\"",
  "\"]\"",
  "\".\"",
  "IDENTIFIER",
  "\"->\"",
  "SIZEOF",
  "\"&\"",
  "\"*\"",
  "\"+\"",
  "\"-\"",
  "\"~\"",
  "\"!\"",
  "\"/\"",
  "\"%\"",
  "\"<<\"",
  "\">>\"",
  "\"<\"",
  "\">\"",
  "\"<=\"",
  "\">=\"",
  "\"==\"",
  "\"!=\"",
  "\"^\"",
  "\"|\"",
  "\"&&\"",
  "\"||\"",
  "\"?\"",
  "\":\"",
  "\";\"",
  "\",\"",
  "\"=\"",
  "VOID",
  "FLOAT32_T",
  "DOUBLE64_T",
  "TYPE_NAME",
  "BOOL_T",
  "FLOAT",
  "DOUBLE",
  "DESCRIPTOR",
  "CHAR_T",
  "SCHAR_T",
  "UCHAR_T",
  "CHAR",
  "SHORT",
  "INT",
  "LONG",
  "INT8_T",
  "INT16_T",
  "INT32_T",
  "INT64_T",
  "INT128_T",
  "UINT8_T",
  "UINT16_T",
  "UINT32_T",
  "UINT64_T",
  "UINT128_T",
  "SIGNED",
  "UNSIGNED",
  "STRUCT",
  "\"{\"",
  "\"}\"",
  "STRING",
  "SIZE_IS",
  "COUNT_IS",
  "ENUM",
  "ENUM8",
  "ENUM16",
  "ENUM32",
  "ENUM64",
  "ENUM128",
  "CONST",
  "VOLATILE",
  "\"...\"",
  "IN",
  "OUT",
  "INOUT",
  "SEND",
  "RECEIVE",
  "NULLABLE",
  "C_EXP",
  "ALLOCATOR",
  "CALLBACK",
  "CONTEXT",
  "DEVIATE",
  "ID",
  "PROTOTYPE",
  "RESTRICT",
  "SINGLETON",
  "IDX_IS_ID",
  "ACTIVE",
  "GENERATE",
  "IMPORT_C",
  "IMPORT",
  "AB_STRING_LITERAL",
  "TYPEDEF",
  "NAMESPACE",
  "\"::\"",
  "SIGNATURE",
  "ONEWAY",
  "CELLTYPE",
  "INLINE",
  "OPTIONAL",
  "REF_DESC",
  "DYNAMIC",
  "OMIT",
  "CALL",
  "ENTRY",
  "ATTRIBUTE",
  "CHOICE",
  "VAR",
  "REQUIRE",
  "FACTORY",
  "CTFACTORY",
  "CELL",
  "THROUGH",
  "COMPOSITE",
  "\"=>\"",
  "REGION",
  "IN_THROUGH",
  "OUT_THROUGH",
  "TO_THROUGH",
  "NODE",
  "LINKUNIT",
  "DOMAIN",
  "CLASS",
  "__LOCATION_INFORMATION__",
  "__CELL__",
  "__JOIN__",
  "TOOL_INFO",
  "$start",
  "all",
  "component_description",
  "primary_expression",
  "namespace_identifier",
  "string_literal_list",
  "expression",
  "postfix_expression",
  "unary_expression",
  "unary_operator",
  "cast_expression",
  "type_name",
  "multiplicative_expression",
  "additive_expression",
  "shift_expression",
  "relational_expression",
  "equality_expression",
  "and_expression",
  "exclusive_or_expression",
  "inclusive_or_expression",
  "logical_and_expression",
  "logical_or_expression",
  "conditional_expression",
  "constant_expression",
  "declaration",
  "type_specifier_qualifier_list",
  "init_declarator_list",
  "declaration_specifiers",
  "type_specifier",
  "type_qualifier",
  "init_declarator",
  "declarator",
  "initializer",
  "struct_specifier",
  "enum_specifier",
  "sign_int_type",
  "char_type",
  "int_type",
  "sign",
  "struct_tag",
  "struct_declaration_list",
  "@1",
  "@2",
  "struct_declaration",
  "struct_declarator_list",
  "spec_L",
  "pointer_specifier_list",
  "spec_R",
  "pointer_specifier",
  "struct_declarator",
  "enum_type",
  "enumerator_list",
  "enumerator",
  "pointer",
  "direct_declarator",
  "parameter_type_list",
  "parameter_list",
  "parameter_declaration",
  "parameter_specifier_list_bracket",
  "parameter_specifier_list",
  "parameter_specifier",
  "abstract_declarator",
  "direct_abstract_declarator",
  "initializer_list",
  "specified_statement",
  "location_information",
  "tool_info",
  "statement",
  "statement_specifier_list",
  "typedef",
  "const_statement",
  "namespace",
  "signature",
  "celltype",
  "cell",
  "composite_celltype",
  "region",
  "import",
  "import_C",
  "generate_statement",
  "statement_specifier",
  "alloc_list",
  "restrict_list",
  "plugin_name",
  "plugin_arg",
  "alloc",
  "restrict",
  "port_name",
  "region_name_list",
  "declarator_list",
  "typedef_specifier",
  "namespace_name",
  "statement_list",
  "signature_name",
  "function_head_list",
  "function_head",
  "celltype_name",
  "celltype_statement_list",
  "specified_celltype_statement",
  "celltype_statement",
  "celltype_statement_specifier_list",
  "port",
  "attribute",
  "var",
  "require",
  "factory",
  "celltype_statement_specifier",
  "alloc_list2",
  "alloc2",
  "port_type",
  "namespace_signature_name",
  "array_size",
  "attribute_declaration_list",
  "attribute_declaration",
  "attribute_specifier",
  "choice_list",
  "choice_element",
  "var_declaration_list",
  "var_declaration",
  "var_specifier",
  "factory_head",
  "factory_function_list",
  "factory_function",
  "factory_function_name",
  "arg_list",
  "namespace_celltype_name",
  "cell_name",
  "join_list",
  "@3",
  "specified_join",
  "reverse_join",
  "join_specifier_list",
  "join",
  "join_specifier",
  "cae_name",
  "array_index",
  "composite_celltype_name",
  "composite_celltype_statement_list",
  "specified_composite_celltype_statement",
  "composite_celltype_statement",
  "composite_celltype_statement_specifier_list",
  "composite_port",
  "composite_attribute",
  "internal_cell",
  "export_join",
  "composite_celltype_statement_specifier",
  "composite_attribute_declaration_list",
  "internal_namespace_celltype_name",
  "internal_cell_name",
  "internal_join_list",
  "@4",
  "external_join",
  "internal_cell_elem_name",
  "export_name",
  "internal_ref_cell_name",
  "region_specifier_list",
  "region_name",
  "region_statement",
  "region_specifier",
  "namespace_region_name",
  "region_cell",
  "cell_location_join_location_list",
  "cell_location",
  "join_location",
  "port_location_list",
  "port_location",
  "bar_list",
  "JSON_string",
  "JSON_object",
  "JSON_property_list",
  "JSON_value",
  "JSON_number",
  "JSON_array",
  "JSON_array_list" ]

Racc_debug_parser = false

##### State transition tables end #####

# reduce 0 omitted

# reduce 1 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 52)
  def _reduce_2(val, _values, result)
     result = [ :IDENTIFIER, val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 54)
  def _reduce_3(val, _values, result)
     result = [ :BOOL_CONSTANT, true ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 56)
  def _reduce_4(val, _values, result)
     result = [ :BOOL_CONSTANT, false ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 58)
  def _reduce_5(val, _values, result)
     result = [ :INTEGER_CONSTANT, val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 60)
  def _reduce_6(val, _values, result)
     result = [ :FLOATING_CONSTANT, val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 62)
  def _reduce_7(val, _values, result)
     result = [ :OCTAL_CONSTANT, val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 64)
  def _reduce_8(val, _values, result)
     result = [ :HEX_CONSTANT, val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 66)
  def _reduce_9(val, _values, result)
     result = [ :CHARACTER_LITERAL, val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 68)
  def _reduce_10(val, _values, result)
     result = [ :STRING_LITERAL_LIST, val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 70)
  def _reduce_11(val, _values, result)
     result = [ :PARENTHESES, val[1].get_elements ] 
    result
  end
.,.,

# reduce 12 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 76)
  def _reduce_13(val, _values, result)
    			# 連接した文字列を1つの文字列にまとめる
			str = "\"" + val[0].val.gsub( /\"(.*)\"/, "\\1" ) + val[1].val.gsub( /\"(.*)\"/, "\\1" ) + "\""
			result = Token.new( str, val[0].file, val[0].lineno, val[0].col )
		
    result
  end
.,.,

# reduce 14 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 85)
  def _reduce_15(val, _values, result)
     result = [ :OP_SUBSC, val[0], val[2] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 87)
  def _reduce_16(val, _values, result)
     result = [ :OP_DOT, val[0], val[2] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 89)
  def _reduce_17(val, _values, result)
     result = [ :OP_REF, val[0], val[2] ] 
    result
  end
.,.,

# reduce 18 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 95)
  def _reduce_19(val, _values, result)
     result = [ val[0], val[1] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 97)
  def _reduce_20(val, _values, result)
     result = [ :OP_SIZEOF_EXPR, val[1] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 99)
  def _reduce_21(val, _values, result)
     result = [ :OP_SIZEOF_TYPE, val[1] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 102)
  def _reduce_22(val, _values, result)
     result = :OP_U_AMP 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 103)
  def _reduce_23(val, _values, result)
     result = :OP_U_ASTER 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 104)
  def _reduce_24(val, _values, result)
     result = :OP_U_PLUS 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 105)
  def _reduce_25(val, _values, result)
     result = :OP_U_MINUS 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 106)
  def _reduce_26(val, _values, result)
     result = :OP_U_TILDE 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 107)
  def _reduce_27(val, _values, result)
     result = :OP_U_EXCLAM 
    result
  end
.,.,

# reduce 28 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 112)
  def _reduce_29(val, _values, result)
      result = [ :CAST, val[1], val[3] ] 
    result
  end
.,.,

# reduce 30 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 117)
  def _reduce_31(val, _values, result)
     result = [ :OP_MULT, val[0], val[2] ]  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 119)
  def _reduce_32(val, _values, result)
     result = [ :OP_DIV, val[0], val[2] ]  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 121)
  def _reduce_33(val, _values, result)
     result = [ :OP_REMAIN, val[0], val[2] ]  
    result
  end
.,.,

# reduce 34 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 126)
  def _reduce_35(val, _values, result)
     result = [ :OP_ADD, val[0], val[2] ]  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 128)
  def _reduce_36(val, _values, result)
     result = [ :OP_SUB, val[0], val[2] ]  
    result
  end
.,.,

# reduce 37 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 133)
  def _reduce_38(val, _values, result)
     result = [ :OP_LSFT, val[0], val[2] ]  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 135)
  def _reduce_39(val, _values, result)
     result = [ :OP_RSFT, val[0], val[2] ]  
    result
  end
.,.,

# reduce 40 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 140)
  def _reduce_41(val, _values, result)
     result = [ :OP_LT, val[0], val[2] ]  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 142)
  def _reduce_42(val, _values, result)
     result = [ :OP_GT, val[0], val[2] ]  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 144)
  def _reduce_43(val, _values, result)
     result = [ :OP_LE, val[0], val[2] ]  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 146)
  def _reduce_44(val, _values, result)
     result = [ :OP_GE, val[0], val[2] ]  
    result
  end
.,.,

# reduce 45 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 151)
  def _reduce_46(val, _values, result)
     result = [ :OP_EQ, val[0], val[2] ]  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 153)
  def _reduce_47(val, _values, result)
     result = [ :OP_NE, val[0], val[2] ]  
    result
  end
.,.,

# reduce 48 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 158)
  def _reduce_49(val, _values, result)
     result = [ :OP_AND, val[0], val[2] ]  
    result
  end
.,.,

# reduce 50 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 163)
  def _reduce_51(val, _values, result)
     result = [ :OP_EOR, val[0], val[2] ]  
    result
  end
.,.,

# reduce 52 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 168)
  def _reduce_53(val, _values, result)
     result = [ :OP_OR, val[0], val[2] ]  
    result
  end
.,.,

# reduce 54 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 173)
  def _reduce_55(val, _values, result)
     result = [ :OP_LAND, val[0], val[2] ]  
    result
  end
.,.,

# reduce 56 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 178)
  def _reduce_57(val, _values, result)
     result = [ :OP_LOR, val[0], val[2] ]  
    result
  end
.,.,

# reduce 58 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 183)
  def _reduce_59(val, _values, result)
     result = [ :OP_CEX, val[0], val[2].get_elements, val[4] ]  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 190)
  def _reduce_60(val, _values, result)
    			result = Expression.new( val[0] )
			# result.print
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 197)
  def _reduce_61(val, _values, result)
    			result = Expression.new( val[0] )
			# result.print

			# res = result.eval_const( nil )
			# if res then
			#   puts "val: #{res}"
			# else
			#   puts "val: nil"
			# end
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 219)
  def _reduce_62(val, _values, result)
    			val[1].each { |i|	# i: Decl
				i.set_type( val[0] )
			}
			result = val[1]
		
    result
  end
.,.,

# reduce 63 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 235)
  def _reduce_64(val, _values, result)
    			val[1].set_qualifier( val[0] )
			result = val[1]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 241)
  def _reduce_65(val, _values, result)
     result = [val[0]] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 243)
  def _reduce_66(val, _values, result)
     result << val[2] 
    result
  end
.,.,

# reduce 67 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 248)
  def _reduce_68(val, _values, result)
     val[0].set_initializer( val[2] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 254)
  def _reduce_69(val, _values, result)
     result = VoidType.new 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 255)
  def _reduce_70(val, _values, result)
     result = FloatType.new(32) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 256)
  def _reduce_71(val, _values, result)
     result = FloatType.new(64) 
    result
  end
.,.,

# reduce 72 omitted

# reduce 73 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 259)
  def _reduce_74(val, _values, result)
     result = DefinedType.new( val[0].val ) 
    result
  end
.,.,

# reduce 75 omitted

# reduce 76 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 263)
  def _reduce_77(val, _values, result)
     result = BoolType.new 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 269)
  def _reduce_78(val, _values, result)
    			Generator.warning( "W5002 float: obsolete type. use float32_t"  )
			result = FloatType.new(32)
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 273)
  def _reduce_79(val, _values, result)
    			Generator.warning( "W5003 double: obsolete type. use double64_t"  )
			result = FloatType.new(64)
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 276)
  def _reduce_80(val, _values, result)
              # namespace_identifier: signature name
			result = DescriptorType.new( val[2] )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 281)
  def _reduce_81(val, _values, result)
     result = IntType.new( -1 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 284)
  def _reduce_82(val, _values, result)
    			result = IntType.new( -1 )
			result.set_sign( :SIGNED, true )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 289)
  def _reduce_83(val, _values, result)
    			result = IntType.new( -1 )
			result.set_sign( :UNSIGNED, true )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 295)
  def _reduce_84(val, _values, result)
    			# Generator.warning( "W5004 char: obsolete type. use char_t"  )
			result = IntType.new( -11 )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 298)
  def _reduce_85(val, _values, result)
     result = IntType.new( -2 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 299)
  def _reduce_86(val, _values, result)
     result = IntType.new( -3 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 300)
  def _reduce_87(val, _values, result)
     result = IntType.new( -4 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 324)
  def _reduce_88(val, _values, result)
     result = IntType.new( 8 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 325)
  def _reduce_89(val, _values, result)
     result = IntType.new( 16 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 326)
  def _reduce_90(val, _values, result)
     result = IntType.new( 32 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 327)
  def _reduce_91(val, _values, result)
     result = IntType.new( 64 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 328)
  def _reduce_92(val, _values, result)
     result = IntType.new( 128 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 331)
  def _reduce_93(val, _values, result)
    			result = IntType.new( 8 )
			result.set_sign( :UNSIGNED, true )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 336)
  def _reduce_94(val, _values, result)
    			result = IntType.new( 16 )
			result.set_sign( :UNSIGNED, true )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 341)
  def _reduce_95(val, _values, result)
    			result = IntType.new( 32 )
			result.set_sign( :UNSIGNED, true )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 346)
  def _reduce_96(val, _values, result)
    			result = IntType.new( 64 )
			result.set_sign( :UNSIGNED, true )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 351)
  def _reduce_97(val, _values, result)
    			result = IntType.new( 128 )
			result.set_sign( :UNSIGNED, true )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 356)
  def _reduce_98(val, _values, result)
     result = :SIGNED 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 357)
  def _reduce_99(val, _values, result)
     result = :UNSIGNED 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 363)
  def _reduce_100(val, _values, result)
    			val[1].set_sign( val[0] )
			result = val[1]
		
    result
  end
.,.,

# reduce 101 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 371)
  def _reduce_102(val, _values, result)
     StructType.set_define( true )  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 374)
  def _reduce_103(val, _values, result)
    			StructType.end_of_parse
			result = val[1]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 379)
  def _reduce_104(val, _values, result)
    			# tag が無い場合、内部名を与える
			result = StructType.new( :"$TAG_#{@@no_struct_tag_num}" )
			@@no_struct_tag_num += 1
			StructType.set_define( true )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 386)
  def _reduce_105(val, _values, result)
    			StructType.end_of_parse
			result = val[1]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 391)
  def _reduce_106(val, _values, result)
    			StructType.set_define( false )
			StructType.end_of_parse
			result = val[1]
		
    result
  end
.,.,

# reduce 107 omitted

# reduce 108 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 402)
  def _reduce_109(val, _values, result)
     result = StructType.new( val[0].val ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 408)
  def _reduce_110(val, _values, result)
    			val[1].each { |i|	# i: Decl
				i.set_type( val[0] )
				i.set_kind( :MEMBER )
				i.check
				StructType.new_member( i )
			}
			result = val[1]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 418)
  def _reduce_111(val, _values, result)
    			val[4].each { |i|	# i: Decl
				i.set_type( val[3] )
				i.set_kind( :MEMBER )
  				i.set_specifier_list val[1]
				i.check
				StructType.new_member( i )
			}
			result = val[4]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 429)
  def _reduce_112(val, _values, result)
     result = [ val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 430)
  def _reduce_113(val, _values, result)
     result <<  val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 433)
  def _reduce_114(val, _values, result)
     result = [:STRING,-1] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 434)
  def _reduce_115(val, _values, result)
     result = [:STRING,val[2]] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 435)
  def _reduce_116(val, _values, result)
     result = [:SIZE_IS,val[2]] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 436)
  def _reduce_117(val, _values, result)
     result = [:COUNT_IS,val[2]] 
    result
  end
.,.,

# reduce 118 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 447)
  def _reduce_119(val, _values, result)
    			val[1].set_qualifier( val[0] )
			result = val[1]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 456)
  def _reduce_120(val, _values, result)
     result = [ val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 458)
  def _reduce_121(val, _values, result)
     result << val[2] 
    result
  end
.,.,

# reduce 122 omitted

# reduce 123 omitted

# reduce 124 omitted

# reduce 125 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 471)
  def _reduce_126(val, _values, result)
     result = EnumType.new( -1 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 472)
  def _reduce_127(val, _values, result)
     result = EnumType.new( 8 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 473)
  def _reduce_128(val, _values, result)
     result = EnumType.new( 16 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 474)
  def _reduce_129(val, _values, result)
     result = EnumType.new( 32 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 475)
  def _reduce_130(val, _values, result)
     result = EnumType.new( 64 ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 476)
  def _reduce_131(val, _values, result)
     result = EnumType.new( 128 ) 
    result
  end
.,.,

# reduce 132 omitted

# reduce 133 omitted

# reduce 134 omitted

# reduce 135 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 487)
  def _reduce_136(val, _values, result)
     result = :CONST 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 488)
  def _reduce_137(val, _values, result)
     result = :VOLATILE 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 493)
  def _reduce_138(val, _values, result)
    			val[1].set_type( val[0] )
			result = val[1]
		
    result
  end
.,.,

# reduce 139 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 500)
  def _reduce_140(val, _values, result)
     result = Decl.new( val[0].val ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 502)
  def _reduce_141(val, _values, result)
     result = val[1] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 505)
  def _reduce_142(val, _values, result)
    			val[0].set_type( ArrayType.new( val[2] ) )
			result = val[0]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 510)
  def _reduce_143(val, _values, result)
    			val[0].set_type( ArrayType.new )
			result = val[0]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 515)
  def _reduce_144(val, _values, result)
    			val[0].set_type( FuncType.new( val[2] ) )
			result = val[0]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 521)
  def _reduce_145(val, _values, result)
    			Generator.warning( "W5010 need 'void' for no parameter"  )
			val[0].set_type( FuncType.new )
			result = val[0]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 528)
  def _reduce_146(val, _values, result)
     result = PtrType.new 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 531)
  def _reduce_147(val, _values, result)
    			result = PtrType.new
			result.set_qualifier( val[1] )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 536)
  def _reduce_148(val, _values, result)
    			val[1].set_type(PtrType.new)
			result = val[1]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 541)
  def _reduce_149(val, _values, result)
    			ptrtype = PtrType.new
			ptrtype.set_qualifier( val[1] )
			val[2].set_type( ptrtype )
			result = val[2]
		
    result
  end
.,.,

# reduce 150 omitted

# reduce 151 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 555)
  def _reduce_152(val, _values, result)
     result = ParamList.new( val[0] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 558)
  def _reduce_153(val, _values, result)
    			val[0].add_param( val[2] )
			# result = val[0] 不要
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 568)
  def _reduce_154(val, _values, result)
    			val[2].set_kind( :PARAMETER )
			paramdecl = ParamDecl.new( val[2], val[1], val[0] )
			val[2].check
			result = paramdecl
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 577)
  def _reduce_155(val, _values, result)
    			Generator.error( "G1001 need specifier for \'$1\'" , val[1].get_name )
			result = nil
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 582)
  def _reduce_156(val, _values, result)
    			unless val[0].instance_of?( VoidType ) then
				Generator.error( "G1002 need parameter name"  )
			end
			result = nil
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 590)
  def _reduce_157(val, _values, result)
    			unless val[1].instance_of?( VoidType ) then
				Generator.error( "G1003 need parameter name"  )
			end
			result = nil
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 597)
  def _reduce_158(val, _values, result)
     result = val[1] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 601)
  def _reduce_159(val, _values, result)
     result = val[0] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 603)
  def _reduce_160(val, _values, result)
     result = result + val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 606)
  def _reduce_161(val, _values, result)
     result = [ [:IN]  ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 607)
  def _reduce_162(val, _values, result)
     result = [ [:OUT] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 608)
  def _reduce_163(val, _values, result)
     result = [ [:INOUT] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 609)
  def _reduce_164(val, _values, result)
     result = [ [:SEND,   val[2]] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 610)
  def _reduce_165(val, _values, result)
     result = [ [:RECEIVE,val[2]] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 611)
  def _reduce_166(val, _values, result)
     result = [ [:STRING,nil] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 612)
  def _reduce_167(val, _values, result)
     result = [ [:STRING,  val[2]] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 613)
  def _reduce_168(val, _values, result)
     result = [ [:SIZE_IS, val[2]] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 616)
  def _reduce_169(val, _values, result)
    			result = [ [:SIZE_IS,val[2]], [:MAX_IS, val[4]] ]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 618)
  def _reduce_170(val, _values, result)
     result = [ [:COUNT_IS,val[2]] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 619)
  def _reduce_171(val, _values, result)
     result = [ [:NULLABLE] ] 
    result
  end
.,.,

# reduce 172 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 625)
  def _reduce_173(val, _values, result)
    			if val[1] then
				val[1].set_type( val[0] )
				result = val[1]
			else
				# エラー：仮で val[0] を返す
				result = val[0]
			end
		
    result
  end
.,.,

# reduce 174 omitted

# reduce 175 omitted

# reduce 176 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 642)
  def _reduce_177(val, _values, result)
     result = val[1] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 645)
  def _reduce_178(val, _values, result)
    			Generator.error( "G1004 impossible array type"  )
			result = nil
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 650)
  def _reduce_179(val, _values, result)
    			Generator.error( "G1005 impossible array type"  )
			result = nil
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 655)
  def _reduce_180(val, _values, result)
    			Generator.error( "G1006 impossible array type"  )
			result = nil
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 660)
  def _reduce_181(val, _values, result)
    			Generator.error( "G1007 impossible array type"  )
			result = nil
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 665)
  def _reduce_182(val, _values, result)
    			Generator.error( "G1008 impossible function type"  )
			result = nil
		
    result
  end
.,.,

# reduce 183 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 671)
  def _reduce_184(val, _values, result)
    			Generator.warning( "W5011 need 'void' for no parameter"  )
			val[0].set_type( FuncType.new )
			result = val[0]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 677)
  def _reduce_185(val, _values, result)
    			val[0].set_type( FuncType.new( val[2] ) )
			result = val[0]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 684)
  def _reduce_186(val, _values, result)
     result = val[0] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 686)
  def _reduce_187(val, _values, result)
     result = val[1] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 688)
  def _reduce_188(val, _values, result)
     result = val[1] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 691)
  def _reduce_189(val, _values, result)
     result = C_EXP.new( val[2] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 696)
  def _reduce_190(val, _values, result)
    			result = [ val[0] ]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 700)
  def _reduce_191(val, _values, result)
    			val[0] << val[2]
			result = val[0]
		
    result
  end
.,.,

# reduce 192 omitted

# reduce 193 omitted

# reduce 194 omitted

# reduce 195 omitted

# reduce 196 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 719)
  def _reduce_197(val, _values, result)
    			obj = val[3]
			if obj.kind_of?( Cell ) || obj.kind_of?( Signature ) || obj.kind_of?( Celltype ) || obj.kind_of?( CompositeCelltype )then
                                # cell, signature 以外は、指定子を置けない
			else
              Generator.get_statement_specifier   # クリア
              Generator.error( "G1009 unexpected specifier"  )
			end
		
    result
  end
.,.,

# reduce 198 omitted

# reduce 199 omitted

# reduce 200 omitted

# reduce 201 omitted

# reduce 202 omitted

# reduce 203 omitted

# reduce 204 omitted

# reduce 205 omitted

# reduce 206 omitted

# reduce 207 omitted

# reduce 208 omitted

# reduce 209 omitted

# reduce 210 omitted

# reduce 211 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 748)
  def _reduce_212(val, _values, result)
     Generator.add_statement_specifier val[0]	
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 750)
  def _reduce_213(val, _values, result)
     Generator.add_statement_specifier val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 754)
  def _reduce_214(val, _values, result)
     result = [ :ALLOCATOR, val[2] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 756)
  def _reduce_215(val, _values, result)
     result = [ :CALLBACK ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 758)
  def _reduce_216(val, _values, result)
     result = [ :CONTEXT, val[2].val ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 760)
  def _reduce_217(val, _values, result)
     result = [ :DEVIATE ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 762)
  def _reduce_218(val, _values, result)
     result = [ :ID, val[2] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 764)
  def _reduce_219(val, _values, result)
     result = [ :PROTOTYPE ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 766)
  def _reduce_220(val, _values, result)
     result = [ :RESTRICT, val[2] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 767)
  def _reduce_221(val, _values, result)
     result = [:SINGLETON] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 768)
  def _reduce_222(val, _values, result)
     result = [:IDX_IS_ID] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 769)
  def _reduce_223(val, _values, result)
     result = [:ACTIVE] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 771)
  def _reduce_224(val, _values, result)
     result = [:GENERATE, val[2].val, val[4].val] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 774)
  def _reduce_225(val, _values, result)
     result = [ val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 775)
  def _reduce_226(val, _values, result)
     result << val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 779)
  def _reduce_227(val, _values, result)
      result = [ :NORMAL_ALLOC, val[0], nil, val[2], val[4], val[6] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 781)
  def _reduce_228(val, _values, result)
      result = [ :NORMAL_ALLOC, val[0], val[2], val[5], val[7], val[9] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 790)
  def _reduce_229(val, _values, result)
    	result = [val[0]]		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 792)
  def _reduce_230(val, _values, result)
    	result << val[2]		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 796)
  def _reduce_231(val, _values, result)
    	result = [ val[0].val, nil, val[3] ]		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 798)
  def _reduce_232(val, _values, result)
    	result = [ val[0].val, val[2].val, val[5] ]		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 802)
  def _reduce_233(val, _values, result)
    	result = [val[0].val]		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 804)
  def _reduce_234(val, _values, result)
    	result << val[2].val		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 809)
  def _reduce_235(val, _values, result)
    			val[0].each { |decl|
				decl.set_kind( :CONSTANT )
				Namespace.new_const_decl( decl )
				decl.check
			}
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 819)
  def _reduce_236(val, _values, result)
    			@@import_C = true
			Import_C.new( val[2] )
			@@import_C = false
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 825)
  def _reduce_237(val, _values, result)
    			@@import_C = true
			Import_C.new( val[2], val[4] )
			@@import_C = false
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 832)
  def _reduce_238(val, _values, result)
     Import.new( val[2] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 834)
  def _reduce_239(val, _values, result)
     Import.new( val[2], true ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 839)
  def _reduce_240(val, _values, result)
     Generate.new( val[2].val, val[4], val[6] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 844)
  def _reduce_241(val, _values, result)
    			val[2].each{ |i|       # i:Decl
				i.set_kind( :TYPEDEF )
    		}
			Typedef.new_decl_list( val[1], val[2] )
			val[2].each{ |i|       # i:Decl
				i.check
			}
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 854)
  def _reduce_242(val, _values, result)
    			val[5].each{ |i|       # i:Decl
				i.set_kind( :TYPEDEF )
			}
			Typedef.new_decl_list( val[4], val[5] )
			val[5].each{ |i|       # i:Decl
				i.check
			}
		
    result
  end
.,.,

# reduce 243 omitted

# reduce 244 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 871)
  def _reduce_245(val, _values, result)
     result = [ val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 873)
  def _reduce_246(val, _values, result)
     result << val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 877)
  def _reduce_247(val, _values, result)
    val[1].end_of_parse
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 881)
  def _reduce_248(val, _values, result)
    result = Namespace.new(val[0].val)
    result
  end
.,.,

# reduce 249 omitted

# reduce 250 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 889)
  def _reduce_251(val, _values, result)
     result = NamespacePath.new( val[0].val, false ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 890)
  def _reduce_252(val, _values, result)
     result = NamespacePath.new( val[1].val, true ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 892)
  def _reduce_253(val, _values, result)
     result = val[0].append!( val[2].val ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 897)
  def _reduce_254(val, _values, result)
     result = val[1].end_of_parse( val[3] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 901)
  def _reduce_255(val, _values, result)
    result = Signature.new( val[0].val ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 907)
  def _reduce_256(val, _values, result)
     result = NamedList.new( nil, "function" ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 909)
  def _reduce_257(val, _values, result)
     result = val[0].add_item( val[1] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 914)
  def _reduce_258(val, _values, result)
    			# val[1]: Decl
			if val[1].is_function? then
				result = FuncHead.new( val[1], val[0], false )
				val[1].set_kind :FUNCHEAD
				val[1].check
			else
				# mikan 関数の配列も以下のメッセージになる
				Generator.error( "G1010 Not function"  )
				result = nil
			end
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 927)
  def _reduce_259(val, _values, result)
    			if val[4].is_function? then
				result = FuncHead.new( val[4], val[3], true )
			else
				Generator.error( "G1011 Not function"  )
				result = nil
			end
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 940)
  def _reduce_260(val, _values, result)
    			val[1].end_of_parse
			result = val[1]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 946)
  def _reduce_261(val, _values, result)
     result = Celltype.new(val[0].val) 
    result
  end
.,.,

# reduce 262 omitted

# reduce 263 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 955)
  def _reduce_264(val, _values, result)
    			if val[0].kind_of? Port then
				Celltype.new_port( val[0] )
			end
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 961)
  def _reduce_265(val, _values, result)
    			if val[3].kind_of? Port then
				val[3].set_specifier val[1]  # 設定順序あり
				Celltype.new_port( val[3] )
			else
				# Port 以外では指定子はエラー
				Generator.error( "G1012 $1 : cannot put specifier here" , val[1] )
			end
		
    result
  end
.,.,

# reduce 266 omitted

# reduce 267 omitted

# reduce 268 omitted

# reduce 269 omitted

# reduce 270 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 980)
  def _reduce_271(val, _values, result)
     result = [ val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 982)
  def _reduce_272(val, _values, result)
     result << val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 985)
  def _reduce_273(val, _values, result)
     result = [ :INLINE ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 986)
  def _reduce_274(val, _values, result)
     result = [ :ALLOCATOR, val[2] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 987)
  def _reduce_275(val, _values, result)
     result = [ :OPTIONAL ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 988)
  def _reduce_276(val, _values, result)
     result = [ :REF_DESC ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 989)
  def _reduce_277(val, _values, result)
     result = [ :DYNAMIC ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 990)
  def _reduce_278(val, _values, result)
     result = [ :OMIT ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 993)
  def _reduce_279(val, _values, result)
     result = [ val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 994)
  def _reduce_280(val, _values, result)
     result = [ val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 995)
  def _reduce_281(val, _values, result)
     result << val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 996)
  def _reduce_282(val, _values, result)
     result << val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1000)
  def _reduce_283(val, _values, result)
      result = [ :INTERNAL_ALLOC, val[0].val, val[2].val, val[4] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1002)
  def _reduce_284(val, _values, result)
      result = [ :RELAY_ALLOC, val[0].val, val[2].val, val[4] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1008)
  def _reduce_285(val, _values, result)
     result = Port.new( val[2].val, val[1], val[0] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1010)
  def _reduce_286(val, _values, result)
     result = Port.new( val[2].val, val[1], val[0], "[]" ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1012)
  def _reduce_287(val, _values, result)
     result = Port.new(val[2].val, val[1], val[0], val[4]) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1014)
  def _reduce_288(val, _values, result)
     result = Port.new( val[2].val, val[1], val[0], nil, val[4], val[ 6 ].val ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1017)
  def _reduce_289(val, _values, result)
     result = :CALL 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1018)
  def _reduce_290(val, _values, result)
     result = :ENTRY 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1022)
  def _reduce_291(val, _values, result)
     result = val[0] 
    result
  end
.,.,

# reduce 292 omitted

# reduce 293 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1034)
  def _reduce_294(val, _values, result)
     result = nil 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1038)
  def _reduce_295(val, _values, result)
     Celltype.new_attribute( val[0] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1040)
  def _reduce_296(val, _values, result)
     Celltype.new_attribute( val[1] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1046)
  def _reduce_297(val, _values, result)
    			val[0].each{ |i|       # i:Decl
				i.set_kind( :ATTRIBUTE )
				i.check
			}
			result = val[0]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1054)
  def _reduce_298(val, _values, result)
    			val[3].each{ |i|       # i:Decl
				i.set_kind( :ATTRIBUTE )   # 設定順序あり
				i.set_specifier_list( [val[1]] )
				i.check
			}
			result = val[3]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1063)
  def _reduce_299(val, _values, result)
     result = [:OMIT] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1064)
  def _reduce_300(val, _values, result)
     result = [:SIZE_IS,val[2]] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1065)
  def _reduce_301(val, _values, result)
      result = [:CHOICE,val[3]] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1068)
  def _reduce_302(val, _values, result)
      result << val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1069)
  def _reduce_303(val, _values, result)
      result = [ val[0] ] 
    result
  end
.,.,

# reduce 304 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1077)
  def _reduce_305(val, _values, result)
     result = nil 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1081)
  def _reduce_306(val, _values, result)
     Celltype.new_var( val[0] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1083)
  def _reduce_307(val, _values, result)
     Celltype.new_var( val[1] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1088)
  def _reduce_308(val, _values, result)
    			val[0].each{ |i|       # i:Decl
				i.set_kind( :VAR )
				i.check
			}
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1095)
  def _reduce_309(val, _values, result)
    			val[3].each{ |i|       # i:Decl
				i.set_kind( :VAR )   # 設定順序あり
				i.set_specifier_list( [val[1]] )
				i.check
			}
			result = val[3]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1104)
  def _reduce_310(val, _values, result)
     result = [:SIZE_IS,val[2]] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1110)
  def _reduce_311(val, _values, result)
    			Celltype.new_require( val[1], val[3] )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1114)
  def _reduce_312(val, _values, result)
    			Celltype.new_require( val[3], val[5], val[1].val )
		
    result
  end
.,.,

# reduce 313 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1122)
  def _reduce_314(val, _values, result)
     Factory.set_f_celltype( false ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1123)
  def _reduce_315(val, _values, result)
     Factory.set_f_celltype( true ) 
    result
  end
.,.,

# reduce 316 omitted

# reduce 317 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1131)
  def _reduce_318(val, _values, result)
     Factory.new( val[0].val, val[2], val[4], nil    ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1133)
  def _reduce_319(val, _values, result)
     Factory.new( val[0].val, val[2], val[4], val[6] ) 
    result
  end
.,.,

# reduce 320 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1140)
  def _reduce_321(val, _values, result)
     result = [ [ :IDENTIFIER, val[0].val ] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1142)
  def _reduce_322(val, _values, result)
     result << [ :IDENTIFIER, val[2].val ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1144)
  def _reduce_323(val, _values, result)
     result = [ [ :STRING_LITERAL, val[0].val ] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1146)
  def _reduce_324(val, _values, result)
     result << [ :STRING_LITERAL, val[2].val ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1151)
  def _reduce_325(val, _values, result)
     Cell.new_def 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1153)
  def _reduce_326(val, _values, result)
     result = Cell.end_of_parse true 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1155)
  def _reduce_327(val, _values, result)
     result = Cell.end_of_parse false 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1159)
  def _reduce_328(val, _values, result)
     result = Cell.new(val[0]) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1163)
  def _reduce_329(val, _values, result)
     result = Cell.set_name(val[0].val) 
    result
  end
.,.,

# reduce 330 omitted

# reduce 331 omitted

# reduce 332 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1172)
  def _reduce_333(val, _values, result)
     val[3].set_specifier_list( val[1] )  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1174)
  def _reduce_334(val, _values, result)
     val[0].set_specifier_list( [] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1178)
  def _reduce_335(val, _values, result)
     result << val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1180)
  def _reduce_336(val, _values, result)
     result = [val[0]] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1184)
  def _reduce_337(val, _values, result)
     result = [ :THROUGH, val[2], val[4] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1187)
  def _reduce_338(val, _values, result)
     result = val[0] 
    result
  end
.,.,

# reduce 339 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1201)
  def _reduce_340(val, _values, result)
    			result = Join.new( val[0].val,  -1, val[4] )
			Cell.new_join( result, true )
		 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1206)
  def _reduce_341(val, _values, result)
    			result = Join.new( val[0].val, val[2], val[5] )
			Cell.new_join( result, true )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1211)
  def _reduce_342(val, _values, result)
    			result = Join.new( val[0].val, nil, val[2] )
			Cell.new_join( result, true )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1216)
  def _reduce_343(val, _values, result)
    			result = Join.new( val[0].val, nil, [ :COMPOSITE, val[4] ] )
			Cell.new_join( result, true )
		
    result
  end
.,.,

# reduce 344 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1227)
  def _reduce_345(val, _values, result)
    			rj = ReverseJoin.new( val[0].val, nil, val[2], val[4].val )
			Cell.new_reverse_join( rj )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1233)
  def _reduce_346(val, _values, result)
    			rj = ReverseJoin.new( val[0].val, nil, val[2], val[4].val, val[6] )
			Cell.new_reverse_join( rj )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1239)
  def _reduce_347(val, _values, result)
    			rj = ReverseJoin.new( val[0].val, val[2], val[5], val[7].val )
			Cell.new_reverse_join( rj )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1245)
  def _reduce_348(val, _values, result)
    			rj = ReverseJoin.new( val[0].val, val[2], val[5], val[7].val, val[9] )
			Cell.new_reverse_join( rj )
		
    result
  end
.,.,

# reduce 349 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1257)
  def _reduce_350(val, _values, result)
    			CompositeCelltype.end_of_parse
			result = val[1]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1263)
  def _reduce_351(val, _values, result)
     result = CompositeCelltype.new(val[0].val) 
    result
  end
.,.,

# reduce 352 omitted

# reduce 353 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1272)
  def _reduce_354(val, _values, result)
    			if val[0].kind_of?( Port ) then
				CompositeCelltype.new_port( val[0] )   # 遅延して登録
			end
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1278)
  def _reduce_355(val, _values, result)
    			if val[3].kind_of?( Port ) then
				# port 以外 val[3] に有効な値が入っていないので、以下のメソッドを適用できない
				# 現状 port, cell 以外は指定子を受け付けない
				# （しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する）
				val[3].set_specifier( Generator.get_statement_specifier )
				CompositeCelltype.new_port( val[3] )   # 遅延して登録 (set_specifier 後)
			elsif val[3].kind_of?( Cell ) then
				# Cell.end_of_parse にて設定
			else
              Generator.get_statement_specifier   # クリア
              Generator.error( "G1013 unexpected specifier"  )
			end
		
    result
  end
.,.,

# reduce 356 omitted

# reduce 357 omitted

# reduce 358 omitted

# reduce 359 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1302)
  def _reduce_360(val, _values, result)
    			Generator.add_statement_specifier val[0]
			result = [ val[0] ]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1307)
  def _reduce_361(val, _values, result)
    			Generator.add_statement_specifier val[2]
			result = val[0] << val[2]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1312)
  def _reduce_362(val, _values, result)
     result = [ :ALLOCATOR, val[2] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1313)
  def _reduce_363(val, _values, result)
     result = [ :OMIT ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1314)
  def _reduce_364(val, _values, result)
     result = [ :OPTIONAL ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1315)
  def _reduce_365(val, _values, result)
     result = [ :REF_DESC ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1316)
  def _reduce_366(val, _values, result)
     result = [ :DYNAMIC ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1321)
  def _reduce_367(val, _values, result)
    			# CompositeCelltype.new_port( val[0] )
			result = val[0]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1328)
  def _reduce_368(val, _values, result)
     result = nil 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1332)
  def _reduce_369(val, _values, result)
     CompositeCelltype.new_attribute( val[0] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1334)
  def _reduce_370(val, _values, result)
     CompositeCelltype.new_attribute( val[1] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1339)
  def _reduce_371(val, _values, result)
     Cell.new_def 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1341)
  def _reduce_372(val, _values, result)
     result = Cell.end_of_parse true 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1343)
  def _reduce_373(val, _values, result)
     result = Cell.end_of_parse false 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1348)
  def _reduce_374(val, _values, result)
     Cell.new(val[0],true) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1352)
  def _reduce_375(val, _values, result)
     Cell.set_name(val[0].val) 
    result
  end
.,.,

# reduce 376 omitted

# reduce 377 omitted

# reduce 378 omitted

# reduce 379 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1363)
  def _reduce_380(val, _values, result)
    	Cell.external_join( val[0].val, val[4].val, true )	
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1365)
  def _reduce_381(val, _values, result)
    	Cell.external_join( val[0].val, val[2].val, false )	
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1372)
  def _reduce_382(val, _values, result)
    			CompositeCelltype.new_join( val[0].val,
						val[2].val, val[4].val, :ENTRY )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1377)
  def _reduce_383(val, _values, result)
    			CompositeCelltype.new_join( val[2].val,
						val[4].val, val[6].val, :ENTRY )
		
    result
  end
.,.,

# reduce 384 omitted

# reduce 385 omitted

# reduce 386 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1393)
  def _reduce_387(val, _values, result)
     Region.end_of_parse 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1395)
  def _reduce_388(val, _values, result)
     Region.end_of_parse 
    result
  end
.,.,

# reduce 389 omitted

# reduce 390 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1404)
  def _reduce_391(val, _values, result)
     Region.new_in_through( val[2].val, val[4].val ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1406)
  def _reduce_392(val, _values, result)
     Region.new_in_through 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1408)
  def _reduce_393(val, _values, result)
     Region.new_out_through( val[2].val, val[4].val ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1410)
  def _reduce_394(val, _values, result)
     Region.new_out_through() 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1412)
  def _reduce_395(val, _values, result)
     Region.new_to_through( val[2], val[4].val, val[6].val ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1414)
  def _reduce_396(val, _values, result)
     Region.new_to_through( val[2], nil, nil ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1416)
  def _reduce_397(val, _values, result)
     Region.set_type( :NODE ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1418)
  def _reduce_398(val, _values, result)
     Region.set_type( :LINKUNIT ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1420)
  def _reduce_399(val, _values, result)
     Region.set_domain( val[2].val, val[4] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1422)
  def _reduce_400(val, _values, result)
     Region.set_type( :CLASS, val[2].val ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1426)
  def _reduce_401(val, _values, result)
     result = Region.new( val[0].val ) 
    result
  end
.,.,

# reduce 402 omitted

# reduce 403 omitted

# reduce 404 omitted

# reduce 405 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1437)
  def _reduce_406(val, _values, result)
    			obj = val[3]
			if obj.kind_of?( Cell ) then
			else
              Generator.get_statement_specifier   # クリア
              Generator.error( "G9999 unexpected specifier"  )
			end
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1459)
  def _reduce_407(val, _values, result)
     result = [ val[0].val ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1464)
  def _reduce_408(val, _values, result)
     set_in_specifier 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1466)
  def _reduce_409(val, _values, result)
     unset_in_specifier 
    result
  end
.,.,

# reduce 410 omitted

# reduce 411 omitted

# reduce 412 omitted

# reduce 413 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1480)
  def _reduce_414(val, _values, result)
    			TECSGEN::Cell_location.new( val[1], val[3], val[5], val[7], val[9], val[12] )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1486)
  def _reduce_415(val, _values, result)
    			result = val[0] << val[1]
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1489)
  def _reduce_416(val, _values, result)
     result = [] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1493)
  def _reduce_417(val, _values, result)
     result = [ val[0], val[2], val[3] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1498)
  def _reduce_418(val, _values, result)
                TECSGEN::Join_location.new( val[2], val[4], val[6], val[8], val[11] )
		
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1504)
  def _reduce_419(val, _values, result)
                result = val[0] << [ val[1], val[3] ]
          
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1506)
  def _reduce_420(val, _values, result)
     result = [] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1510)
  def _reduce_421(val, _values, result)
     TOOL_INFO.new( val[2].to_sym, val[4] ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1511)
  def _reduce_422(val, _values, result)
      result = val[1] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1512)
  def _reduce_423(val, _values, result)
     result = { val[0].to_sym => val[2] } 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1514)
  def _reduce_424(val, _values, result)
     val[0][ val[2].to_sym ] = val[4] 
    result
  end
.,.,

# reduce 425 omitted

# reduce 426 omitted

# reduce 427 omitted

# reduce 428 omitted

module_eval(<<'.,.,', 'bnf.y.rb', 1516)
  def _reduce_429(val, _values, result)
     result=val[0].val 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1516)
  def _reduce_430(val, _values, result)
     result=val[0].val 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1517)
  def _reduce_431(val, _values, result)
     result = val[1]  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1518)
  def _reduce_432(val, _values, result)
     result = []  
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1519)
  def _reduce_433(val, _values, result)
     result = [ val[0] ] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1520)
  def _reduce_434(val, _values, result)
     val[0] << val[2] 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1521)
  def _reduce_435(val, _values, result)
     result = val[0].val.gsub!( /\"(.*)\"/, "\\1" ) 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1522)
  def _reduce_436(val, _values, result)
     result = val[0].val.to_i 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1523)
  def _reduce_437(val, _values, result)
     result = val[0].val.to_f 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1524)
  def _reduce_438(val, _values, result)
     result = - val[0].val.to_i 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1525)
  def _reduce_439(val, _values, result)
     result = - val[0].val.to_f 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1526)
  def _reduce_440(val, _values, result)
     result = val[0].val.to_i 
    result
  end
.,.,

module_eval(<<'.,.,', 'bnf.y.rb', 1527)
  def _reduce_441(val, _values, result)
     result = val[0].val.to_f 
    result
  end
.,.,

def _reduce_none(val, _values, result)
  val[0]
end

end   # class Generator



# ファイル => INCLUDE("header")の配列
Include = Hash.new {|hash, key| hash[key] = []}


class Token

  attr_accessor :val, :file, :lineno, :col

  def initialize(val, file, lineno, col)
    @val = val
    @file = file
    @lineno = lineno
    @col = col

  end

  def to_s
    @val.to_s
  end

  def to_sym
    @val.to_sym
  end

  def get_name
    @val
  end

  def locale
    [@file, @lineno, @col]
  end

  def eql?(other)
    if other.is_a? Symbol
      @val == other
    elsif other.is_a? Token
      @val == other.val
    elsif other.is_a? String
      @val.to_s == other
    else
      raise ArgumentError
    end
  end

  alias == eql?

  def show_tree( indent )
    indent.times { print "  " }
    print "#{@val}\n"
  end

end

#= TECSIO
#  Ruby2.0(1.9) 対応に伴い導入したクラス
#  SJIS 以外では、ASCII-8BIT として入力する
class TECSIO
  def self.foreach(file) # ブロック引数 { |line| }
    pr = Proc.new   # このメソッドのブロック引数を pr に代入
    if $b_no_kcode then
	  msg = "E".encode $Ruby19_File_Encode
      if( $Ruby19_File_Encode == "Shift_JIS" )

        # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる．
        # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される．
        # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる．
        # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
        # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある．

        mode = "r:Windows-31J"
      else
        mode = "r:#{$Ruby19_File_Encode}"
      end
      # mode = "r"
    else
	  msg = "E"
      mode = "r"
    end

    f = File.open( file, mode )
    begin
      f.each{ |line|
        # dbgPrint line
        line = str_code_convert( msg, line )
        pr.call( line )
      }
    ensure
      f.close
    end
  end

  #=== 文字コードが相違する場合一致させる
  # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
  # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
  #
  # このメソッドは、エラーメッセージ出力でも使用されていることに注意．
  #
  #msg_enc::Encode | String
  def self.str_code_convert( msg, str )
    if $b_no_kcode == false then
      return str                          # Ruby V1.8 まで
    end
    if msg.encoding != str.encoding then
      option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
      # return str.encode( msg.encoding, option )
      str = str.encode( "utf-8", option )
      return str.encode( msg.encoding, option )
    else
      return str
    end
  end
end
