Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.tab.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r388 r389  
    9595  }
    9696
    97   # 指定子 '[]' å†
    98 ã§ã®ã¿ä½¿ç”¨ã§ãã‚‹ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰
     97  # 指定子 '[]' 内でのみ使用できるキーワード
    9998  RESERVED2 = {
    10099    # specifier
     
    113112    # port (entry)
    114113    'inline' => :INLINE,
    115     'ref_desc' => :REF_DESC,   # call も可
     114    'ref_desc' => :REF_DESC,   # call も可
    116115
    117116    # port (call)
     
    157156  }
    158157
    159   # 再帰的なパーサのためのスタック
     158  # 再帰的なパーサのためのスタック
    160159  @@generator_nest = -1
    161160  @@generator_stack = []
    162161  @@current_locale = []
    163162
    164   # import_C 中である
     163  # import_C 中である
    165164  @@import_C = false
    166165
    167   # すべての構文解析が完了した
     166  # すべての構文解析が完了した
    168167  @@b_end_all_parse = false
    169168
    170   # tag なし struct
     169  # tag なし struct
    171170  @@no_struct_tag_num = 0
    172171
    173172  def self.parse( file_name, plugin = nil, b_reuse = false )
    174     # パーサインスタンスを生成(別パーサで読み込む)
     173    # パーサインスタンスを生成(別パーサで読み込む)
    175174    parser = Generator.new
    176175
    177     # plugin から import されている場合の plugin 設定
     176    # plugin から import されている場合の plugin 設定
    178177    parser.set_plugin plugin
    179178
    180     # reuse フラグを設定
     179    # reuse フラグを設定
    181180    parser.set_reuse b_reuse
    182181
    183     # cdl をパース
     182    # cdl をパース
    184183    parser.parse( [file_name] )
    185184
    186     # 終期化 パーサスタックを戻す
     185    # 終期化 パーサスタックを戻す
    187186    parser.finalize
    188187  end
     
    204203  def self.get_plugin
    205204    if @@generator_stack[@@generator_nest] then
    206       # tecsgen 引数の cdl が import される場合は nil
     205      # tecsgen 引数の cdl が import される場合は nil
    207206      return @@generator_stack[@@generator_nest].get_plugin
    208207    else
     
    221220  def self.is_reuse?
    222221    if @@generator_stack[@@generator_nest] then
    223       # tecsgen 引数の cdl が import される場合は nil
     222      # tecsgen 引数の cdl が import される場合は nil
    224223      return @@generator_stack[@@generator_nest].is_reuse?
    225224    else
     
    251250      b_in_string = false
    252251
    253       # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
     252      # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
    254253      TECS_LANG::set_kcode_binary
    255254
     
    261260          TECSIO.foreach(file) {|line|
    262261            col = 1
    263 #            line.rstrip!         æ”¹è¡Œå«ã‚€æ–‡å­—列を扱うようになったので、ここで空白を取り除けなくなった
     262#            line.rstrip!         改行含む文字列を扱うようになったので、ここで空白を取り除けなくなった
    264263
    265264            until line.empty?
     
    267266              if b_in_comment
    268267                case line
    269                   # コメント終了
     268                  # コメント終了
    270269                when /\A\*\//
    271270                  b_in_comment = false
    272271                when /\A./
    273272                  ;
    274                 when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールがå¿
    275 è¦ã«ãªã£ãŸ
     273                when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールが必要になった
    276274                  ;
    277275                end
     
    281279                  @q <<  [:STRING_LITERAL, Token.new(string, file, lineno, col)]
    282280                  b_in_string = false
    283                 elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
     281                elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
    284282                  string += $&
    285                 elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
     283                elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
    286284                  string += line
    287                   # この位置では error メソッドは使えない (token 読出し前)
     285                  # この位置では error メソッドは使えない (token 読出し前)
    288286                  puts "#{file}:#{lineno}:#{col}: error: string literal has newline without escape"
    289287                  @@n_error += 1
     
    291289              else
    292290                case line
    293                 # 空白、プリプロセスディレクティブ
     291                # 空白、プリプロセスディレクティブ
    294292                when /\A\s+/
    295293                  ;
    296                 # 識別子
     294                # 識別子
    297295                when /\A[a-zA-Z_]\w*/
    298296                  word = $&
    299297                  @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
    300                 # 16 進数定数
     298                # 16 進数定数
    301299                when /\A0x[0-9A-Fa-f]+/
    302300                  @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
    303                 # 8 進数定数
     301                # 8 進数定数
    304302                when /\A0[0-7]+/
    305303                  @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
    306                 # 浮動小数定数
     304                # 浮動小数定数
    307305                when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
    308306                  @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
    309                 # 整数定数
     307                # 整数定数
    310308                when /\A\d+/
    311309                  @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
    312                 # 文字定数
     310                # 文字定数
    313311                when /\A'(?:[^'\\]|\\.)'/
    314312                  @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
    315                 # 文字列
    316 #                "#include  #include #include \"../systask/logtask.cfg\"       æœ€å¾Œã® " 忘れ)で無限ループ
     313                # 文字列
     314#                "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
    317315#                when /\A"(?:[^"\\]+|\\.)*"/
    318                 when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
     316                when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
    319317                  @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
    320                 # 文字列 (改行あり)
     318                # 文字列 (改行あり)
    321319                when /\A"(?:[^"\\]|\\.)*\\\n$/
    322320                  string = $&
    323321                  b_in_string = true
    324                 # 文字列 (改行あり, escape なし)
     322                # 文字列 (改行あり, escape なし)
    325323                when /\A("(?:[^"\\]|\e\.)*)\n$/
    326324                  string = $1 + "\\\n"
    327325                  b_in_string = true
    328                   # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
     326                  # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
    329327                  puts "#{file}:#{lineno}:#{col}: error: string literal has newline without escape"
    330328                  @@n_error += 1
    331                 # 山括弧で囲まれた文字列
     329                # 山括弧で囲まれた文字列
    332330                # when /\A<[0-9A-Za-z_\. \/]+>/   # AB: angle bracke
    333                 when /\A<(?:[^>\\]|\\.)*>/   # これはうまく行くようだ
     331                when /\A<(?:[^>\\]|\\.)*>/   # これはうまく行くようだ
    334332                  @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)]
    335                 # 行コメント
     333                # 行コメント
    336334                when /\A\/\/.*$/
    337                   # 読み飛ばすだけ
    338                 # コメント開始
     335                  # 読み飛ばすだけ
     336                # コメント開始
    339337                when /\A\/\*/
    340338                  b_in_comment = true
    341                 # '>>', '<<' など
     339                # '>>', '<<' など
    342340                when /\A>>/, /\A<</, /\A==/, /\A!=/, /\A\&\&/, /\A\|\|/
    343341                  @q << [$&, Token.new($&, file, lineno, col)]
    344342                when /\A::/, /\A=>/, /\A<=/, /\A>=/
    345343                  @q << [$&, Token.new($&, file, lineno, col)]
    346                 # '(', ')' など一文字の記号、または未知の記号
     344                # '(', ')' など一文字の記号、または未知の記号
    347345                when /\A./
    348346                  @q << [$&, Token.new($&, file, lineno, col)]
     
    368366      }
    369367
    370       # 終了の印
     368      # 終了の印
    371369      @q << nil
    372370
     
    388386
    389387      if token[0] == :IDENTIFIER then
    390         # TYPE_NAME トークンへ置換え
     388        # TYPE_NAME トークンへ置換え
    391389        if Namespace.is_typename?( token[1].val ) then
    392390          token[0] = :TYPE_NAME
    393391        elsif @in_specifier && RESERVED2[ token[1].val.to_s ] then
    394           # 指定子キーワード( '[', ']' å†
    395 ã§ã®ã¿æœ‰åŠ¹)
     392          # 指定子キーワード( '[', ']' 内でのみ有効)
    396393          token[0] = RESERVED2[ token[1].val.to_s ]
    397394        end
    398395      end
    399396
    400       if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生)
     397      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生)
    401398        locale = @@current_locale[@@generator_nest]
    402399        if token then
     
    430427  @@n_info = 0
    431428
    432   # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切)
     429  # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切)
    433430  def self.error( msg, *arg )
    434431    locale = nil
     
    440437
    441438    msg = TECSMsg.get_error_message( msg )
    442     # $1, $2, ... を arg で置換
     439    # $1, $2, ... を arg で置換
    443440    count = 1
    444441    arg.each{ |a|
     
    448445    }
    449446
    450     # import_C の中でのエラー?
     447    # import_C の中でのエラー?
    451448    if @@import_C then
    452449      C_parser.error( msg )
    453450    else
    454451
    455       # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
    456       # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
    457       # は、解析中の位置を出力する.(new_XXX で owner が子要素のチェッ
    458       # クをすると owner の行番号が出てしまう点で、ずれが生じている)
     452      # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
     453      # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
     454      # は、解析中の位置を出力する.(new_XXX で owner が子要素のチェッ
     455      # クをすると owner の行番号が出てしまう点で、ずれが生じている)
    459456
    460457      if @@b_end_all_parse == false || locale == nil then
     
    469466  end
    470467
    471   # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切)
     468  # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切)
    472469  def self.warning( msg, *arg )
    473470    locale = nil
     
    479476
    480477    msg = TECSMsg.get_warning_message( msg )
    481     # $1, $2, ... を arg で置換
     478    # $1, $2, ... を arg で置換
    482479    count = 1
    483480    arg.each{ |a|
     
    487484    }
    488485
    489     # import_C の中でのウォーニング?
     486    # import_C の中でのウォーニング?
    490487    if @@import_C then
    491488      C_parser.warning( msg )
     
    502499  end
    503500
    504   # このメソッドは構文解析、意味解析からのみ呼出し可
     501  # このメソッドは構文解析、意味解析からのみ呼出し可
    505502  def self.info( msg, *arg )
    506503    locale = nil
     
    512509
    513510    msg = TECSMsg.get_info_message( msg )
    514     # $1, $2, ... を arg で置換
     511    # $1, $2, ... を arg で置換
    515512    count = 1
    516513    arg.each{ |a|
     
    520517    }
    521518
    522     # import_C の中でのウォーニング?
     519    # import_C の中でのウォーニング?
    523520    if @@import_C then
    524521      C_parser.info( msg )
     
    555552  end
    556553
    557   #===  '[' specifier 始め
     554  #===  '[' specifier 始め
    558555  def set_in_specifier
    559556    # p "set_in_specifier"
     
    561558  end
    562559
    563   #=== ']' specifier 終わり
     560  #=== ']' specifier 終わり
    564561  def unset_in_specifier
    565562    # p "unset_in_specifier"
     
    567564  end
    568565
    569   # statement_specifier は構文解釈途中で参ç
    570 §ã—たいため
     566  # statement_specifier は構文解釈途中で参照したいため
    571567  @@statement_specifier_stack = []
    572568  def self.add_statement_specifier( ss )
     
    585581  end
    586582
    587   #=== すべての構文解析が完了したことを報告
     583  #=== すべての構文解析が完了したことを報告
    588584  def self.end_all_parse
    589585    @@b_end_all_parse = true
     
    23692365module_eval(<<'.,.,', 'bnf.y.rb', 76)
    23702366  def _reduce_13(val, _values, result)
    2371                         # 連接した文字列を1つの文字列にまとめる
     2367                        # 連接した文字列を1つの文字列にまとめる
    23722368                        str = "\"" + val[0].val.gsub( /\"(.*)\"/, "\\1" ) + val[1].val.gsub( /\"(.*)\"/, "\\1" ) + "\""
    23732369                        result = Token.new( str, val[0].file, val[0].lineno, val[0].col )
     
    29472943module_eval(<<'.,.,', 'bnf.y.rb', 379)
    29482944  def _reduce_104(val, _values, result)
    2949                         # tag が無い場合、å†
    2950 éƒ¨åã‚’与える
     2945                        # tag が無い場合、内部名を与える
    29512946                        result = StructType.new( :"TAG__#{@@no_struct_tag_num}__" )
    29522947                        @@no_struct_tag_num += 1
     
    32673262  def _reduce_153(val, _values, result)
    32683263                        val[0].add_param( val[2] )
    3269                         # result = val[0] 不要
     3264                        # result = val[0] 不要
    32703265               
    32713266    result
     
    34223417                                result = val[1]
    34233418                        else
    3424                                 # エラー:仮で val[0] を返す
     3419                                # エラー:仮で val[0] を返す
    34253420                                result = val[0]
    34263421                        end
     
    35683563                        obj = val[3]
    35693564                        if obj.kind_of?( Cell ) || obj.kind_of?( Signature ) || obj.kind_of?( Celltype ) || obj.kind_of?( CompositeCelltype )then
    3570                                 # cell, signature 以外は、指定子を置けない
     3565                                # cell, signature 以外は、指定子を置けない
    35713566                        else
    3572               Generator.get_statement_specifier   # クリア
     3567              Generator.get_statement_specifier   # クリア
    35733568              Generator.error( "G1009 unexpected specifier"  )
    35743569                        end
     
    39413936                                val[1].check
    39423937                        else
    3943                                 # mikan 関数のé
    3944 åˆ—も以下のメッセージになる
     3938                                # mikan 関数の配列も以下のメッセージになる
    39453939                                Generator.error( "G1010 Not function"  )
    39463940                                result = nil
     
    39973991  def _reduce_265(val, _values, result)
    39983992                        if val[3].kind_of? Port then
    3999                                 val[3].set_specifier val[1]  # 設定順序あり
     3993                                val[3].set_specifier val[1]  # 設定順序あり
    40003994                                Celltype.new_port( val[3] )
    40013995                        else
    4002                                 # Port 以外では指定子はエラー
     3996                                # Port 以外では指定子はエラー
    40033997                                Generator.error( "G1012 $1 : cannot put specifier here" , val[1] )
    40043998                        end
     
    42054199  def _reduce_298(val, _values, result)
    42064200                        val[3].each{ |i|       # i:Decl
    4207                                 i.set_kind( :ATTRIBUTE )   # 設定順序あり
     4201                                i.set_kind( :ATTRIBUTE )   # 設定順序あり
    42084202                                i.set_specifier_list( [val[1]] )
    42094203                                i.check
     
    42874281  def _reduce_309(val, _values, result)
    42884282                        val[3].each{ |i|       # i:Decl
    4289                                 i.set_kind( :VAR )   # 設定順序あり
     4283                                i.set_kind( :VAR )   # 設定順序あり
    42904284                                i.set_specifier_list( [val[1]] )
    42914285                                i.check
     
    45684562  def _reduce_354(val, _values, result)
    45694563                        if val[0].kind_of?( Port ) then
    4570                                 CompositeCelltype.new_port( val[0] )   # é
    4571 å»¶ã—て登録
     4564                                CompositeCelltype.new_port( val[0] )   # 遅延して登録
    45724565                        end
    45734566               
     
    45794572  def _reduce_355(val, _values, result)
    45804573                        if val[3].kind_of?( Port ) then
    4581                                 # port 以外 val[3] に有効な値がå
    4582 ¥ã£ã¦ã„ないので、以下のメソッドを適用できない
    4583                                 # 現状 port, cell 以外は指定子を受け付けない
    4584                                 # (しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する)
     4574                                # port 以外 val[3] に有効な値が入っていないので、以下のメソッドを適用できない
     4575                                # 現状 port, cell 以外は指定子を受け付けない
     4576                                # (しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する)
    45854577                                val[3].set_specifier( Generator.get_statement_specifier )
    4586                                 CompositeCelltype.new_port( val[3] )   # é
    4587 å»¶ã—て登録 (set_specifier 後)
     4578                                CompositeCelltype.new_port( val[3] )   # 遅延して登録 (set_specifier 後)
    45884579                        elsif val[3].kind_of?( Cell ) then
    4589                                 # Cell.end_of_parse にて設定
     4580                                # Cell.end_of_parse にて設定
    45904581                        else
    4591               Generator.get_statement_specifier   # クリア
     4582              Generator.get_statement_specifier   # クリア
    45924583              Generator.error( "G1013 unexpected specifier"  )
    45934584                        end
     
    48774868                        if obj.kind_of?( Cell ) then
    48784869                        else
    4879               Generator.get_statement_specifier   # クリア
     4870              Generator.get_statement_specifier   # クリア
    48804871              Generator.error( "G9999 unexpected specifier"  )
    48814872                        end
     
    51025093
    51035094
    5104 # ファイル => INCLUDE("header")のé
    5105 åˆ—
     5095# ファイル => INCLUDE("header")の配列
    51065096Include = Hash.new {|hash, key| hash[key] = []}
    51075097
     
    51575147
    51585148#= TECSIO
    5159 #  Ruby2.0(1.9) 対応に伴い導å
    5160 ¥ã—たクラス
    5161 #  SJIS 以外では、ASCII-8BIT としてå
    5162 ¥åŠ›ã™ã‚‹
     5149#  Ruby2.0(1.9) 対応に伴い導入したクラス
     5150#  SJIS 以外では、ASCII-8BIT として入力する
    51635151class TECSIO
    5164   def self.foreach(file) # ブロック引数 { |line| }
    5165     pr = Proc.new   # このメソッドのブロック引数を pr に代å
    5166 ¥
     5152  def self.foreach(file) # ブロック引数 { |line| }
     5153    pr = Proc.new   # このメソッドのブロック引数を pr に代入
    51675154    if $b_no_kcode then
    51685155          msg = "E".encode $Ruby19_File_Encode
    51695156      if( $Ruby19_File_Encode == "Shift_JIS" )
    51705157
    5171         # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる.
    5172         # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される.
    5173         # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる.
    5174         # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
    5175         # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある.
     5158        # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる.
     5159        # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される.
     5160        # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる.
     5161        # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
     5162        # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある.
    51765163
    51775164        mode = "r:Windows-31J"
     
    51975184  end
    51985185
    5199   #=== 文字コードが相違する場合一致させる
    5200   # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
    5201   # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
     5186  #=== 文字コードが相違する場合一致させる
     5187  # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
     5188  # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
    52025189  #
    5203   # このメソッドは、エラーメッセージ出力でも使用されていることに注意.
     5190  # このメソッドは、エラーメッセージ出力でも使用されていることに注意.
    52045191  #
    52055192  #msg_enc::Encode | String
    52065193  def self.str_code_convert( msg, str )
    52075194    if $b_no_kcode == false then
    5208       return str                          # Ruby V1.8 まで
     5195      return str                          # Ruby V1.8 まで
    52095196    end
    52105197    if msg.encoding != str.encoding then
    5211       option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
     5198      option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
    52125199      # return str.encode( msg.encoding, option )
    52135200      str = str.encode( "utf-8", option )
Note: See TracChangeset for help on using the changeset viewer.