Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r270 r321  
    66#   Copyright (C) 2008-2014 by TOPPERS Project
    77#--
    8 #   ä¸Šè¨˜è‘—作権è€
    9 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    10 #   ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    11 #   å¤‰ãƒ»å†é
    12 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    13 #   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    14 #       æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    15 #       ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    16 #   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    17 #       ç”¨ã§ãã‚‹å½¢ã§å†é
    18 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    19 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    20 #       è€
    21 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    22 #       ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    23 #   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    24 #       ç”¨ã§ããªã„形で再é
    25 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    26 #       ã¨ï¼Ž
    27 #     (a) 再é
    28 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    29 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    30 #         ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    31 #     (b) 再é
    32 å¸ƒã®å½¢æ
    33 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    34 #         å ±å‘Šã™ã‚‹ã“と.
    35 #   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    36 #       å®³ã‹ã‚‰ã‚‚,上記著作権è€
    37 ãŠã‚ˆã³TOPPERSプロジェクトをå
    38 è²¬ã™ã‚‹ã“と.
    39 #       ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    40 #       ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    41 ãŠã‚ˆã³TOPPERSプロジェクトを
    42 #       å
    43 è²¬ã™ã‚‹ã“と.
     8#   上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     9#   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10#   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11#   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12#       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13#       スコード中に含まれていること.
     14#   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15#       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16#       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17#       の無保証規定を掲載すること.
     18#   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19#       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20#       と.
     21#     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22#         作権表示,この利用条件および下記の無保証規定を掲載すること.
     23#     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24#         報告すること.
     25#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26#       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27#       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28#       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29#       免責すること.
    4430
    45 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    46 ãŠ
    47 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    48 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    49 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    50 #   ã®è²¬ä»»ã‚’負わない.
     31#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35#   の責任を負わない.
    5136
    52 #   $Id: tecsgen.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
     37#   $Id$
    5338#++
    5439
     
    5641class TECSGEN
    5742
    58   #=== import パス (-I) を末尾に追加
    59   # 既に登録済みであれば、追加しない
     43  #=== import パス (-I) を末尾に追加
     44  # 既に登録済みであれば、追加しない
    6045  def self.add_import_path path
    6146    if $import_path.index( path ) == nil then
     
    6550  end
    6651
    67   #=== EXEB 版のパスの調整
    68   # 環境変数 TECSPATH が cygwin スタイルだと、exerb 版では扱えない
    69   # $import_path と $TECSPATH を調整する
     52  #=== EXEB 版のパスの調整
     53  # 環境変数 TECSPATH が cygwin スタイルだと、exerb 版では扱えない
     54  # $import_path と $TECSPATH を調整する
    7055  def self.adjust_exerb_path
    7156    if $IN_EXERB then
     
    7459      paths = []
    7560      $import_path.each{ |path|
    76         # cygpath は '..' を簡約してしまうので、new_tecspath で置換する
     61        # cygpath は '..' を簡約してしまうので、new_tecspath で置換する
    7762        # paths << cygpath( path, path )
    7863        paths << path.sub( pattern, new_tecspath )
     
    8570  end
    8671
    87   #=== $(TECSPATH) への置換
    88   #path::String   : ENV[ 'TECSPATH' ] に一致する部分があれば、 "$(TECSPATH)" に置換
    89   #b_global::Bool : true なら gsub で置換。false なら sub で置換
     72  #=== $(TECSPATH) への置換
     73  #path::String   : ENV[ 'TECSPATH' ] に一致する部分があれば、 "$(TECSPATH)" に置換
     74  #b_global::Bool : true なら gsub で置換。false なら sub で置換
    9075  def self.subst_tecspath( path, b_global = false )
    9176    tp = $tecspath.dup
     
    10287  end
    10388
    104   #=== path は絶対パスか?
     89  #=== path は絶対パスか?
    10590  #path:: String   :
    106   # '/' または '$' で始まる場合、絶対パスと判定する
     91  # '/' または '$' で始まる場合、絶対パスと判定する
    10792  def self.is_absolute_path?( path )
    10893    pa = path[0..0]; pa2 = path[0..1]
     
    116101  end
    117102
    118   #=== tecsgen のデフォルトを設定
     103  #=== tecsgen のデフォルトを設定
    119104  def self.set_default_config
    120105    Makefile::set_default_config
     
    122107
    123108  ###
    124   #== Makefile.templ の出力å†
    125 å®¹ã‚’追加、変更するための操作
     109  #== Makefile.templ の出力内容を追加、変更するための操作
    126110  module Makefile
    127     # 固定されている変数(add_var で変更できない)
     111    # 固定されている変数(add_var で変更できない)
    128112    @@fixed_vars = { :INCLUDES => nil, :DEFINES => nil, :TARGET_BASE => nil, :BASE_DIR => nil }
    129113    @@config_mode = false
     
    140124    @@lines = []
    141125
    142     #=== OTHER_OBJS に追加する
     126    #=== OTHER_OBJS に追加する
    143127    def self.add_obj obj
    144128      @@objs << obj
    145129    end
    146     #=== 追加する変数
    147     # プラグインからは、デフォルト値を変更できる
    148     # config により
     130    #=== 追加する変数
     131    # プラグインからは、デフォルト値を変更できる
     132    # config により
    149133    def self.add_var( var, val, comment = nil )
    150134      if @@fixed_vars[ var ]
     
    159143      end
    160144    end
    161     #=== LDFLAGS に追加する
     145    #=== LDFLAGS に追加する
    162146    def self.add_ldflag ldflag
    163147      @@ldflags += " " + ldflag
    164148    end
    165     #=== サーチパスを追加する
    166     # CFLAGS, vpath に追加する
     149    #=== サーチパスを追加する
     150    # CFLAGS, vpath に追加する
    167151    def self.add_search_path path
    168152      @@search_path << path
    169153    end
    170     #=== PRE_TECSGEN_TARGET に追加する
    171     # PRE_TECSGEN_TARGET に target を追加する
     154    #=== PRE_TECSGEN_TARGET に追加する
     155    # PRE_TECSGEN_TARGET に target を追加する
    172156    def self.add_pre_tecsgen_target target
    173157      @@pre_tecsgen_target << pre_tecsgen_target
    174158    end
    175     #=== POST_TECSGEN_TARGET に追加する
    176     # POST_TECSGEN_TARGET に target を追加する
     159    #=== POST_TECSGEN_TARGET に追加する
     160    # POST_TECSGEN_TARGET に target を追加する
    177161    def self.add_post_tecsgen_target target
    178162      @@post_tecsgen_target << pre_tecsgen_target
    179163    end
    180     #=== 追加する変数
     164    #=== 追加する変数
    181165    def self.add_line( line )
    182166      @@lines << line.to_s + "\n"
    183167    end
    184168
    185     def self.get_objs  # Array を返す
     169    def self.get_objs  # Array を返す
    186170      return @@objs.uniq
    187171    end
    188     def self.get_vars  # Array を返す
     172    def self.get_vars  # Array を返す
    189173      if RUBY_VERSION >= '1.9' then
    190174        return (@@vars.keys + @@vars_default.keys).sort.uniq
    191175      else
    192         # V1.8 では、Symbol の sort ができないので、一旦 String に置換する
     176        # V1.8 では、Symbol の sort ができないので、一旦 String に置換する
    193177        return (@@vars.keys + @@vars_default.keys).map{|s| s.to_s }.sort.uniq.map!{|s| s.to_sym }
    194178      end
     
    200184      return @@var_comments[ var ]
    201185    end
    202     def self.get_ldflags  # String を返す
     186    def self.get_ldflags  # String を返す
    203187      return @@ldflags
    204188    end
    205     def self.get_search_path  # Array を返す
     189    def self.get_search_path  # Array を返す
    206190      return @@search_path.uniq
    207191    end
    208     def self.get_pre_tecsgen_target  # Array を返す
     192    def self.get_pre_tecsgen_target  # Array を返す
    209193      return @@pre_tecsgen_target.uniq
    210194    end
    211     def self.get_post_tecsgen_target  # Array を返す
     195    def self.get_post_tecsgen_target  # Array を返す
    212196      return @@post_tecsgen_target.uniq
    213197    end
    214     def self.get_lines  # 付加する行を得る
     198    def self.get_lines  # 付加する行を得る
    215199      return @@lines.uniq
    216200    end
    217201
    218     #=== TECSGEN のデフォルト設定を行う
     202    #=== TECSGEN のデフォルト設定を行う
    219203    # Makefile
    220     # @@fixed_vars で定義されている変数は、変更できず、定数定義されている
     204    # @@fixed_vars で定義されている変数は、変更できず、定数定義されている
    221205    def self.set_default_config
    222206      add_var( "TARGET", "$(TARGET_BASE).exe", "default target name"  )
     
    235219
    236220  def syntax_analisys argv
    237     # ルート namespace (region) を生成
     221    # ルート namespace (region) を生成
    238222    @root_namespace = Region.new("::")
    239223
    240     ####  構文解析 (post コードを除く) ####
    241     # すべての cdl を import する
     224    ####  構文解析 (post コードを除く) ####
     225    # すべての cdl を import する
    242226    argv.each{ |f|
    243227      dbgPrint( "## Import: #{f}\n")
     
    245229    }
    246230
    247     # すべての構文解釈が完了したことの報告
    248     #   å®Ÿéš›ã«ã¯ã€å¾Œã‹ã‚‰ãƒ—ラグインの生成する CDL のパースが行われる
    249     #   ã‚¨ãƒ©ãƒ¼è¡Œæ•°ã®æ±ºå®šæ–¹æ³•ã®å¤‰æ›´ã®ãŸã‚ã«è¡Œã†
     231    # すべての構文解釈が完了したことの報告
     232    #   実際には、後からプラグインの生成する CDL のパースが行われる
     233    #   エラー行数の決定方法の変更のために行う
    250234    Generator.end_all_parse
    251235    dbgPrint( "## End all parse (except Post Code)\n")
     
    253237
    254238  def semantics_analisys_1
    255     ####  意味解析1 (post コードを除く) ####
     239    ####  意味解析1 (post コードを除く) ####
    256240    dbgPrint( "## Creating reverse join \n")
    257241    Cell.create_reverse_join
    258242
    259     #0 set_definition_join は2回呼び出される(1回目)
     243    #0 set_definition_join は2回呼び出される(1回目)
    260244    dbgPrint( "## Checking all join\n")
    261245    @root_namespace.set_definition_join
    262     # @root_namespace.set_require_join                   ### いったん見合わせ。重複エラーを見逃す
    263     # through プラグインで生成されたセルにも require も生成できる (set_definition_join の後ろで実施)
    264 
    265     ####  post コードの生成と構文解析 ####
    266     # 引数がなければ、プラグインのポストコードを出力しない
     246    # @root_namespace.set_require_join                   ### いったん見合わせ。重複エラーを見逃す
     247    # through プラグインで生成されたセルにも require も生成できる (set_definition_join の後ろで実施)
     248
     249    ####  post コードの生成と構文解析 ####
     250    # 引数がなければ、プラグインのポストコードを出力しない
    267251    if ARGV.length > 0 then
    268252      dbgPrint( "## Generating Post Code\n")
    269       # プラグインのポストコードの出力と import
     253      # プラグインのポストコードの出力と import
    270254      tmp_file_name = "#{$gen}/tmp_plugin_post_code.cdl"
    271255      file = nil
     
    277261
    278262      if file then
    279         # through プラグインのポストコード生成
     263        # through プラグインのポストコード生成
    280264        PluginModule.gen_plugin_post_code file
    281265
     
    290274    end
    291275
    292     ####  意味解析1 (post コード) ####
     276    ####  意味解析1 (post コード) ####
    293277    dbgPrint( "## Creating reverse join (for post code) \n")
    294278    Cell.create_reverse_join
    295279
    296     # Join の定義の設定とチェック
    297     #0 # 前方参ç
    298 §å¯¾å¿œ
    299     #0 set_definition_join は2回呼び出される(2回目)  post_code で生成された
     280    # Join の定義の設定とチェック
     281    #0 # 前方参照対応
     282    #0 set_definition_join は2回呼び出される(2回目)  post_code で生成された
    300283    dbgPrint( "## Checking all join (for cells generated by Post Code\n")
    301284    @root_namespace.set_definition_join
    302285
    303286    dbgPrint( "## Set require join\n")
    304     @root_namespace.set_require_join   # mikan post の前にも
    305     # ポストコードで生成されたセルの require のjoin を生成
    306     # mikan require で through が適用されて、ポストコードがå¿
    307 è¦ã¨ãªã£ã¦ã‚‚出力されない
     287    @root_namespace.set_require_join   # mikan post の前にも
     288    # ポストコードで生成されたセルの require のjoin を生成
     289    # mikan require で through が適用されて、ポストコードが必要となっても出力されない
    308290  end # semantics_analisys_1
    309291
    310292  def semantics_analisys_2
    311     ####  意味解析2 ####
     293    ####  意味解析2 ####
    312294    Cell.make_cell_list2
    313295    dbgPrint( "## Set fixed join\n")
    314296    Cell.create_reverse_require_join
    315     # create_reverse_require_join は set_detinition_join に埋め込むことができない
    316         # namespace に依存しない出現順で行う
    317         # mikan through プラグインが適用されポストコードに影響を与える場合が考æ
    318 ®ã§ãã¦ã„ない
    319         # mikan post code に影響のあるものであれば、早くに reverse_require_join の結合がå¿
    320 è¦
     297    # create_reverse_require_join は set_detinition_join に埋め込むことができない
     298        # namespace に依存しない出現順で行う
     299        # mikan through プラグインが適用されポストコードに影響を与える場合が考慮できていない
     300        # mikan post code に影響のあるものであれば、早くに reverse_require_join の結合が必要
    321301    dbgPrint( "## Setting port reference count\n")
    322302    @root_namespace.set_port_reference_count
     
    325305    @root_namespace.check_join
    326306
    327     # mikan プラグインで生成されたコンポーネントの set_def_and_check_join
     307    # mikan プラグインで生成されたコンポーネントの set_def_and_check_join
    328308
    329309    dbgPrint( "## Checking referenced but undefined cell\n")
     
    332312
    333313  def optimize_and_generate
    334     #### Region link root ごとにオプティマイズおよび生成 ####
     314    #### Region link root ごとにオプティマイズおよび生成 ####
    335315    Region.get_link_roots.each { |region|
    336316
     
    354334      end
    355335
    356       # セルが一つもなければ生成しない
    357       # セルの生成がない場合
     336      # セルが一つもなければ生成しない
     337      # セルの生成がない場合
    358338      if region.get_n_cells == 0 then
    359339        if $region_list.length > 0 then
     
    385365
    386366      dbgPrint( "## Unset optimize variables\n")
    387       @root_namespace.reset_optimize   # 最適化をリセットする
     367      @root_namespace.reset_optimize   # 最適化をリセットする
    388368
    389369      if Generator.get_n_error == 0 then
    390         # エラーが発生していたら、設定しない
     370        # エラーが発生していたら、設定しない
    391371        dbgPrint( "## Set cell id\n")
    392         @root_namespace.set_cell_id_and_domain      # セルの ID とドメインæƒ
    393 å ±ã‚’設定(linkunit 毎に0からつける)
    394 
    395         # エラーが発生していたら、最適化は実施しない
     372        @root_namespace.set_cell_id_and_domain      # セルの ID とドメイン情報を設定(linkunit 毎に0からつける)
     373
     374        # エラーが発生していたら、最適化は実施しない
    396375        if ! $unopt then
    397376          dbgPrint( "## Optimizing: Link Region=#{@root_namespace.get_name}\n")
     
    401380
    402381      if $show_tree then
    403         # エラーが発生していても表示(エラー発生時は最適化されていないので注意)
     382        # エラーが発生していても表示(エラー発生時は最適化されていないので注意)
    404383        print "##### show_tree LinkRegion=#{region.get_name} #####\n"
    405384        @root_namespace.show_tree(0)
     
    407386      end
    408387
    409       # 構文解釈、意味解析でエラー発生していたら、コード生成をしない
     388      # 構文解釈、意味解析でエラー発生していたら、コード生成をしない
    410389      if Generator.get_n_error != 0 then
    411390        print_report
     
    413392      end
    414393
    415       #### コード生成 ####
     394      #### コード生成 ####
    416395      begin
    417396        dbgPrint( "## Generating: Link Region=#{@root_namespace.get_name}\n")
     
    420399        @root_namespace.generate_post
    421400      rescue
    422         # 通常ここへは来ない (generate, generate_post で処置される)
     401        # 通常ここへは来ない (generate, generate_post で処置される)
    423402        Generator.error( "G9999 fail to generate" )
    424403      end
     
    438417    }
    439418
    440     # update する
    441     # APPFile で生成されたファイルは、もし変化があれば、ここで更新する
    442     # コード生成段階でエラーが発生すれば、更新しない
    443     # CFile で生成されたものは、更新されている
     419    # update する
     420    # APPFile で生成されたファイルは、もし変化があれば、ここで更新する
     421    # コード生成段階でエラーが発生すれば、更新しない
     422    # CFile で生成されたものは、更新されている
    444423    if Generator.get_n_error == 0 then
    445424      begin
Note: See TracChangeset for help on using the changeset viewer.