Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb	(revision 321)
@@ -6,49 +6,34 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: tecsgen.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
@@ -56,6 +41,6 @@
 class TECSGEN
 
-  #=== import ãã¹ (-I) ãæ«å°¾ã«è¿½å 
-  # æ¢ã«ç»é²æ¸ã¿ã§ããã°ãè¿½å ããªã
+  #=== import パス (-I) を末尾に追加
+  # 既に登録済みであれば、追加しない
   def self.add_import_path path
     if $import_path.index( path ) == nil then
@@ -65,7 +50,7 @@
   end
 
-  #=== EXEB çã®ãã¹ã®èª¿æ´
-  # ç°å¢å¤æ° TECSPATH ã cygwin ã¹ã¿ã¤ã«ã ã¨ãexerb çã§ã¯æ±ããªã
-  # $import_path ã¨ $TECSPATH ãèª¿æ´ãã
+  #=== EXEB 版のパスの調整
+  # 環境変数 TECSPATH が cygwin スタイルだと、exerb 版では扱えない
+  # $import_path と $TECSPATH を調整する
   def self.adjust_exerb_path
     if $IN_EXERB then
@@ -74,5 +59,5 @@
       paths = []
       $import_path.each{ |path|
-        # cygpath ã¯ '..' ãç°¡ç´ãã¦ãã¾ãã®ã§ãnew_tecspath ã§ç½®æãã
+        # cygpath は '..' を簡約してしまうので、new_tecspath で置換する
         # paths << cygpath( path, path )
         paths << path.sub( pattern, new_tecspath )
@@ -85,7 +70,7 @@
   end
 
-  #=== $(TECSPATH) ã¸ã®ç½®æ
-  #path::String   : ENV[ 'TECSPATH' ] ã«ä¸è´ããé¨åãããã°ã "$(TECSPATH)" ã«ç½®æ
-  #b_global::Bool : true ãªã gsub ã§ç½®æãfalse ãªã sub ã§ç½®æ
+  #=== $(TECSPATH) への置換
+  #path::String   : ENV[ 'TECSPATH' ] に一致する部分があれば、 "$(TECSPATH)" に置換
+  #b_global::Bool : true なら gsub で置換。false なら sub で置換
   def self.subst_tecspath( path, b_global = false )
     tp = $tecspath.dup
@@ -102,7 +87,7 @@
   end
 
-  #=== path ã¯çµ¶å¯¾ãã¹ã?
+  #=== path は絶対パスか?
   #path:: String   :
-  # '/' ã¾ãã¯ '$' ã§å§ã¾ãå ´åãçµ¶å¯¾ãã¹ã¨å¤å®ãã
+  # '/' または '$' で始まる場合、絶対パスと判定する
   def self.is_absolute_path?( path )
     pa = path[0..0]; pa2 = path[0..1]
@@ -116,5 +101,5 @@
   end
 
-  #=== tecsgen ã®ããã©ã«ããè¨­å®
+  #=== tecsgen のデフォルトを設定
   def self.set_default_config
     Makefile::set_default_config
@@ -122,8 +107,7 @@
 
   ###
-  #== Makefile.templ ã®åºåå
-å®¹ãè¿½å ãå¤æ´ããããã®æä½
+  #== Makefile.templ の出力内容を追加、変更するための操作
   module Makefile
-    # åºå®ããã¦ããå¤æ°(add_var ã§å¤æ´ã§ããªã)
+    # 固定されている変数(add_var で変更できない)
     @@fixed_vars = { :INCLUDES => nil, :DEFINES => nil, :TARGET_BASE => nil, :BASE_DIR => nil }
     @@config_mode = false
@@ -140,11 +124,11 @@
     @@lines = []
 
-    #=== OTHER_OBJS ã«è¿½å ãã
+    #=== OTHER_OBJS に追加する
     def self.add_obj obj
       @@objs << obj
     end
-    #=== è¿½å ããå¤æ°
-    # ãã©ã°ã¤ã³ããã¯ãããã©ã«ãå¤ãå¤æ´ã§ãã
-    # config ã«ãã
+    #=== 追加する変数
+    # プラグインからは、デフォルト値を変更できる
+    # config により
     def self.add_var( var, val, comment = nil )
       if @@fixed_vars[ var ]
@@ -159,36 +143,36 @@
       end
     end
-    #=== LDFLAGS ã«è¿½å ãã
+    #=== LDFLAGS に追加する
     def self.add_ldflag ldflag
       @@ldflags += " " + ldflag
     end
-    #=== ãµã¼ããã¹ãè¿½å ãã
-    # CFLAGS, vpath ã«è¿½å ãã
+    #=== サーチパスを追加する
+    # CFLAGS, vpath に追加する
     def self.add_search_path path
       @@search_path << path
     end
-    #=== PRE_TECSGEN_TARGET ã«è¿½å ãã
-    # PRE_TECSGEN_TARGET ã« target ãè¿½å ãã
+    #=== PRE_TECSGEN_TARGET に追加する
+    # PRE_TECSGEN_TARGET に target を追加する
     def self.add_pre_tecsgen_target target
       @@pre_tecsgen_target << pre_tecsgen_target
     end
-    #=== POST_TECSGEN_TARGET ã«è¿½å ãã
-    # POST_TECSGEN_TARGET ã« target ãè¿½å ãã
+    #=== POST_TECSGEN_TARGET に追加する
+    # POST_TECSGEN_TARGET に target を追加する
     def self.add_post_tecsgen_target target
       @@post_tecsgen_target << pre_tecsgen_target
     end
-    #=== è¿½å ããå¤æ°
+    #=== 追加する変数
     def self.add_line( line )
       @@lines << line.to_s + "\n"
     end
 
-    def self.get_objs  # Array ãè¿ã
+    def self.get_objs  # Array を返す
       return @@objs.uniq
     end
-    def self.get_vars  # Array ãè¿ã
+    def self.get_vars  # Array を返す
       if RUBY_VERSION >= '1.9' then
         return (@@vars.keys + @@vars_default.keys).sort.uniq
       else
-        # V1.8 ã§ã¯ãSymbol ã® sort ãã§ããªãã®ã§ãä¸æ¦ String ã«ç½®æãã
+        # V1.8 では、Symbol の sort ができないので、一旦 String に置換する
         return (@@vars.keys + @@vars_default.keys).map{|s| s.to_s }.sort.uniq.map!{|s| s.to_sym }
       end
@@ -200,23 +184,23 @@
       return @@var_comments[ var ]
     end
-    def self.get_ldflags  # String ãè¿ã
+    def self.get_ldflags  # String を返す
       return @@ldflags
     end
-    def self.get_search_path  # Array ãè¿ã
+    def self.get_search_path  # Array を返す
       return @@search_path.uniq
     end
-    def self.get_pre_tecsgen_target  # Array ãè¿ã
+    def self.get_pre_tecsgen_target  # Array を返す
       return @@pre_tecsgen_target.uniq
     end
-    def self.get_post_tecsgen_target  # Array ãè¿ã
+    def self.get_post_tecsgen_target  # Array を返す
       return @@post_tecsgen_target.uniq
     end
-    def self.get_lines  # ä»å ããè¡ãå¾ã
+    def self.get_lines  # 付加する行を得る
       return @@lines.uniq
     end
 
-    #=== TECSGEN ã®ããã©ã«ãè¨­å®ãè¡ã
+    #=== TECSGEN のデフォルト設定を行う
     # Makefile 
-    # @@fixed_vars ã§å®ç¾©ããã¦ããå¤æ°ã¯ãå¤æ´ã§ãããå®æ°å®ç¾©ããã¦ãã
+    # @@fixed_vars で定義されている変数は、変更できず、定数定義されている
     def self.set_default_config
       add_var( "TARGET", "$(TARGET_BASE).exe", "default target name"  )
@@ -235,9 +219,9 @@
 
   def syntax_analisys argv
-    # ã«ã¼ã namespace (region) ãçæ
+    # ルート namespace (region) を生成
     @root_namespace = Region.new("::")
 
-    ####  æ§æè§£æ (post ã³ã¼ããé¤ã) ####
-    # ãã¹ã¦ã® cdl ã import ãã
+    ####  構文解析 (post コードを除く) ####
+    # すべての cdl を import する
     argv.each{ |f|
       dbgPrint( "## Import: #{f}\n")
@@ -245,7 +229,7 @@
     }
 
-    # ãã¹ã¦ã®æ§æè§£éãå®äºãããã¨ã®å ±å
-    #   å®éã«ã¯ãå¾ãããã©ã°ã¤ã³ã®çæãã CDL ã®ãã¼ã¹ãè¡ããã
-    #   ã¨ã©ã¼è¡æ°ã®æ±ºå®æ¹æ³ã®å¤æ´ã®ããã«è¡ã
+    # すべての構文解釈が完了したことの報告
+    #   実際には、後からプラグインの生成する CDL のパースが行われる
+    #   エラー行数の決定方法の変更のために行う
     Generator.end_all_parse
     dbgPrint( "## End all parse (except Post Code)\n")
@@ -253,19 +237,19 @@
 
   def semantics_analisys_1
-    ####  æå³è§£æï¼ (post ã³ã¼ããé¤ã) ####
+    ####  意味解析１ (post コードを除く) ####
     dbgPrint( "## Creating reverse join \n")
     Cell.create_reverse_join
 
-    #0 set_definition_join ã¯2åå¼ã³åºãããï¼1åç®ï¼
+    #0 set_definition_join は2回呼び出される（1回目）
     dbgPrint( "## Checking all join\n")
     @root_namespace.set_definition_join
-    # @root_namespace.set_require_join                   ### ãã£ããè¦åãããéè¤ã¨ã©ã¼ãè¦éã
-    # through ãã©ã°ã¤ã³ã§çæãããã»ã«ã«ã require ãçæã§ãã (set_definition_join ã®å¾ãã§å®æ½)
-
-    ####  post ã³ã¼ãã®çæã¨æ§æè§£æ ####
-    # å¼æ°ããªããã°ããã©ã°ã¤ã³ã®ãã¹ãã³ã¼ããåºåããªã
+    # @root_namespace.set_require_join                   ### いったん見合わせ。重複エラーを見逃す
+    # through プラグインで生成されたセルにも require も生成できる (set_definition_join の後ろで実施)
+
+    ####  post コードの生成と構文解析 ####
+    # 引数がなければ、プラグインのポストコードを出力しない
     if ARGV.length > 0 then
       dbgPrint( "## Generating Post Code\n")
-      # ãã©ã°ã¤ã³ã®ãã¹ãã³ã¼ãã®åºåã¨ import
+      # プラグインのポストコードの出力と import
       tmp_file_name = "#{$gen}/tmp_plugin_post_code.cdl"
       file = nil
@@ -277,5 +261,5 @@
 
       if file then
-        # through ãã©ã°ã¤ã³ã®ãã¹ãã³ã¼ãçæ
+        # through プラグインのポストコード生成
         PluginModule.gen_plugin_post_code file
 
@@ -290,33 +274,29 @@
     end
 
-    ####  æå³è§£æï¼ (post ã³ã¼ã) ####
+    ####  意味解析１ (post コード) ####
     dbgPrint( "## Creating reverse join (for post code) \n")
     Cell.create_reverse_join
 
-    # Join ã®å®ç¾©ã®è¨­å®ã¨ãã§ãã¯
-    #0 # åæ¹åç
-§å¯¾å¿
-    #0 set_definition_join ã¯2åå¼ã³åºãããï¼2åç®ï¼  post_code ã§çæããã
+    # Join の定義の設定とチェック
+    #0 # 前方参照対応
+    #0 set_definition_join は2回呼び出される（2回目）  post_code で生成された
     dbgPrint( "## Checking all join (for cells generated by Post Code\n")
     @root_namespace.set_definition_join
 
     dbgPrint( "## Set require join\n")
-    @root_namespace.set_require_join   # mikan post ã®åã«ã
-    # ãã¹ãã³ã¼ãã§çæãããã»ã«ã® require ã®join ãçæ
-    # mikan require ã§ through ãé©ç¨ããã¦ããã¹ãã³ã¼ããå¿
-è¦ã¨ãªã£ã¦ãåºåãããªã
+    @root_namespace.set_require_join   # mikan post の前にも
+    # ポストコードで生成されたセルの require のjoin を生成
+    # mikan require で through が適用されて、ポストコードが必要となっても出力されない
   end # semantics_analisys_1
 
   def semantics_analisys_2
-    ####  æå³è§£æï¼ ####
+    ####  意味解析２ ####
     Cell.make_cell_list2
     dbgPrint( "## Set fixed join\n")
     Cell.create_reverse_require_join
-    # create_reverse_require_join ã¯ set_detinition_join ã«åãè¾¼ããã¨ãã§ããªã
-        # namespace ã«ä¾å­ããªãåºç¾é ã§è¡ã
-        # mikan through ãã©ã°ã¤ã³ãé©ç¨ãããã¹ãã³ã¼ãã«å½±é¿ãä¸ããå ´åãèæ
-®ã§ãã¦ããªã
-        # mikan post code ã«å½±é¿ã®ãããã®ã§ããã°ãæ©ãã« reverse_require_join ã®çµåãå¿
-è¦
+    # create_reverse_require_join は set_detinition_join に埋め込むことができない
+        # namespace に依存しない出現順で行う
+        # mikan through プラグインが適用されポストコードに影響を与える場合が考慮できていない
+        # mikan post code に影響のあるものであれば、早くに reverse_require_join の結合が必要
     dbgPrint( "## Setting port reference count\n")
     @root_namespace.set_port_reference_count
@@ -325,5 +305,5 @@
     @root_namespace.check_join
 
-    # mikan ãã©ã°ã¤ã³ã§çæãããã³ã³ãã¼ãã³ãã® set_def_and_check_join
+    # mikan プラグインで生成されたコンポーネントの set_def_and_check_join
 
     dbgPrint( "## Checking referenced but undefined cell\n")
@@ -332,5 +312,5 @@
 
   def optimize_and_generate
-    #### Region link root ãã¨ã«ãªããã£ãã¤ãºããã³çæ ####
+    #### Region link root ごとにオプティマイズおよび生成 ####
     Region.get_link_roots.each { |region|
 
@@ -354,6 +334,6 @@
       end
 
-      # ã»ã«ãä¸ã¤ããªããã°çæããªã
-      # ã»ã«ã®çæããªãå ´å
+      # セルが一つもなければ生成しない
+      # セルの生成がない場合
       if region.get_n_cells == 0 then
         if $region_list.length > 0 then
@@ -385,13 +365,12 @@
 
       dbgPrint( "## Unset optimize variables\n")
-      @root_namespace.reset_optimize   # æé©åããªã»ãããã
+      @root_namespace.reset_optimize   # 最適化をリセットする
 
       if Generator.get_n_error == 0 then
-        # ã¨ã©ã¼ãçºçãã¦ããããè¨­å®ããªã
+        # エラーが発生していたら、設定しない
         dbgPrint( "## Set cell id\n")
-        @root_namespace.set_cell_id_and_domain      # ã»ã«ã® ID ã¨ãã¡ã¤ã³æ
-å ±ãè¨­å®ï¼linkunit æ¯ã«0ããã¤ããï¼
-
-        # ã¨ã©ã¼ãçºçãã¦ããããæé©åã¯å®æ½ããªã
+        @root_namespace.set_cell_id_and_domain      # セルの ID とドメイン情報を設定（linkunit 毎に0からつける）
+
+        # エラーが発生していたら、最適化は実施しない
         if ! $unopt then
           dbgPrint( "## Optimizing: Link Region=#{@root_namespace.get_name}\n")
@@ -401,5 +380,5 @@
 
       if $show_tree then
-        # ã¨ã©ã¼ãçºçãã¦ãã¦ãè¡¨ç¤ºï¼ã¨ã©ã¼çºçæã¯æé©åããã¦ããªãã®ã§æ³¨æï¼
+        # エラーが発生していても表示（エラー発生時は最適化されていないので注意）
         print "##### show_tree LinkRegion=#{region.get_name} #####\n"
         @root_namespace.show_tree(0)
@@ -407,5 +386,5 @@
       end
 
-      # æ§æè§£éãæå³è§£æã§ã¨ã©ã¼çºçãã¦ããããã³ã¼ãçæãããªã
+      # 構文解釈、意味解析でエラー発生していたら、コード生成をしない
       if Generator.get_n_error != 0 then
         print_report
@@ -413,5 +392,5 @@
       end
 
-      #### ã³ã¼ãçæ ####
+      #### コード生成 ####
       begin
         dbgPrint( "## Generating: Link Region=#{@root_namespace.get_name}\n")
@@ -420,5 +399,5 @@
         @root_namespace.generate_post
       rescue
-        # éå¸¸ããã¸ã¯æ¥ãªã (generate, generate_post ã§å¦ç½®ããã)
+        # 通常ここへは来ない (generate, generate_post で処置される)
         Generator.error( "G9999 fail to generate" )
       end
@@ -438,8 +417,8 @@
     }
 
-    # update ãã
-    # APPFile ã§çæããããã¡ã¤ã«ã¯ãããå¤åãããã°ãããã§æ´æ°ãã
-    # ã³ã¼ãçææ®µéã§ã¨ã©ã¼ãçºçããã°ãæ´æ°ããªã
-    # CFile ã§çæããããã®ã¯ãæ´æ°ããã¦ãã
+    # update する
+    # APPFile で生成されたファイルは、もし変化があれば、ここで更新する
+    # コード生成段階でエラーが発生すれば、更新しない
+    # CFile で生成されたものは、更新されている
     if Generator.get_n_error == 0 then
       begin
