Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb	(revision 321)
@@ -6,49 +6,34 @@
 #   Copyright (C) 2008-2016 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: generate.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
@@ -134,5 +119,5 @@
 end
 
-# celltype_private.h ãçæ
+# celltype_private.h を生成
 
 class Namespace
@@ -140,8 +125,6 @@
 
     begin
-      # root namespace ãªãã° makefile ãåºåãã(å
-¨ã»ã«ã¿ã¤ãã«é¢ãããã®ã ã)
-      # å
-ã«åºåãã
+      # root namespace ならば makefile を出力する(全セルタイプに関わるものだけ)
+      # 先に出力する
       if @name == "::" then
 
@@ -155,18 +138,18 @@
 
       dbgPrint "generating region: #{$generating_region.get_name} namespace=#{@name} gen_dir=#{$gen}\n"
-      # global_tecsgen.h (typedef, struct, const) ã®çæ
+      # global_tecsgen.h (typedef, struct, const) の生成
       gen_global_header
 
-      # signature ã®ã³ã¼ããçæ
+      # signature のコードを生成
       @signature_list.each { |s|
         s.generate
       }
 
-      # celltype ã®ã³ã¼ããçæ
+      # celltype のコードを生成
       @celltype_list.each { |t|
         t.generate
       }
 
-      # ãµããã¼ã ã¹ãã¼ã¹ã®ã³ã¼ããçæ
+      # サブネームスペースのコードを生成
       @namespace_list.each { |n|
         n.generate
@@ -174,5 +157,5 @@
 
     rescue => evar
-      # ããã¹ã¿ãã¯ãã¬ã¼ã¹ãåºãã¾ã§ãæéãããããããªãã°ãæ¬¡ãã³ã¡ã³ãã¢ã¦ããã¦ã¿ãã¹ã
+      # もしスタックトレースが出るまでい時間がかかるようならば、次をコメントアウトしてみるべし
       cdl_error( "H1001 tecsgen: fatal internal error during code generation"  )
       print_exception( evar )
@@ -187,18 +170,18 @@
 
     begin
-      # global_tecsgen.h (typedef, struct, const) ã®çµããã®ã¬ã¼ãã³ã¼ãçæ
+      # global_tecsgen.h (typedef, struct, const) の終わりのガードコード生成
       gen_global_header_post
 
-      # signature ã®ã³ã¼ããçæ
+      # signature のコードを生成
       @signature_list.each { |s|
         s.generate_post
       }
 
-      # celltype ã®ã³ã¼ããçæ
+      # celltype のコードを生成
       @celltype_list.each { |t|
         t.generate_post
       }
 
-      # ãµããã¼ã ã¹ãã¼ã¹ã®ã³ã¼ããçæ
+      # サブネームスペースのコードを生成
       @namespace_list.each { |n|
         n.generate_post
@@ -214,5 +197,5 @@
   def gen_global_header
 
-    # global_tecs.h ã®çæ
+    # global_tecs.h の生成
     f = AppFile.open( "#{$gen}/global_tecsgen.#{$h_suffix}" )
 
@@ -220,5 +203,5 @@
       print_note f
 
-      # ã¬ã¼ãã³ã¼ããåºå
+      # ガードコードを出力
       f.print <<EOT
 #ifndef GLOBAL_TECSGEN_H
@@ -227,7 +210,7 @@
 EOT
 
-      # import_C ã§æå®ãããããããã¡ã¤ã«ã® #include ãåºå
+      # import_C で指定されたヘッダファイルの #include を出力
       if Import_C.get_header_list2.length > 0 then
-        # ããã include ã®åºå
+        # ヘッダ include の出力
         f.printf TECSMsg.get( :IMP_comment ), "#_IMP_#"
         Import_C.get_header_list2.each{ |h|
@@ -240,11 +223,11 @@
     end
 
-    # typedef, struct, enum ãçæ
+    # typedef, struct, enum を生成
     @decl_list.each { |d|
 
-      # d ã¯ Typedef, StructType, EnumType ã®ãããã
+      # d は Typedef, StructType, EnumType のいずれか
       if d.instance_of?( Typedef ) then
 
-        # Typedef ã®å ´åãdeclarator ã® @type ããCType ã§ãªãã
+        # Typedef の場合、declarator の @type が　CType でないか
         if ! d.get_declarator.get_type.kind_of?( CType ) then
           d.gen_gh f
@@ -252,8 +235,8 @@
       elsif ! d.kind_of?( CType ) then
 
-        # CType ã§ã¯ãªã (StructType ã¾ãã¯ EnumType)
+        # CType ではない (StructType または EnumType)
         d.gen_gh f
 #     else
-#       ããã«è©²å½ããã®ã¯ CStructType, CEnumType
+#       ここに該当するのは CStructType, CEnumType
       end
     }
@@ -283,5 +266,5 @@
     end
 
-    # const ãçæ  mikan
+    # const を生成  mikan
     @const_decl_list.each { |d|
       f.printf( "#define %-14s ((%s%s)%s)\n", d.get_global_name,
@@ -296,5 +279,5 @@
   def gen_global_header_post
 
-    # global_tecs.h ãéã
+    # global_tecs.h を開く
     f = AppFile.open( "#{$gen}/global_tecsgen.#{$h_suffix}" )
 
@@ -310,10 +293,8 @@
   end
 
-  #=== Makefile.tecsgen, Makefile.templ ã®åºå
-  # å
-¨ã»ã«ã¿ã¤ãåãåºåããé¨åãåºå
-  #    ï¼æ¬ã¡ã½ããã¯ root namespace ã«å¯¾ãã¦å¼åºãï¼
-  #     åã
-ã®ã»ã«ã¿ã¤ãã®ã¡ã¼ã¯ã«ã¼ã«ã¯ Celltype ã¯ã©ã¹ã§åºå
+  #=== Makefile.tecsgen, Makefile.templ の出力
+  # 全セルタイプ名を出力する部分を出力
+  #    （本メソッドは root namespace に対して呼出す）
+  #     個々のセルタイプのメークルールは Celltype クラスで出力
   def gen_makefile
     gen_makefile_template
@@ -325,17 +306,17 @@
     return if $generate_no_template
 
-    ### Makefile.templ ã®çæ
+    ### Makefile.templ の生成
     f = AppFile.open( "#{$gen}/Makefile.templ" )
 
     print_Makefile_note f
 
-    # Makefile ã®å¤æ°ã®åºå
+    # Makefile の変数の出力
     f.printf TECSMsg.get( :MVAR_comment ), "#_MVAR_#"
     f.printf "# fixed variable (unchangeable by config or plugin)\n"
 
-    # TARGET ã®åºå (ç¬¬ä¸å¼æ° $target ã« region åããã³ .exe ãä»å )
+    # TARGET の出力 (第一引数 $target に region 名および .exe を付加)
     target = $target
     if $generating_region != @@root_namespace then
-      # å­ region ã®ãªã³ã¯ã¿ã¼ã²ããã®å ´å
+      # 子 region のリンクターゲットの場合
       target += "-#{$generating_region.get_global_name}"
     end
@@ -419,5 +400,5 @@
 EOT
 
-    # make ã«ã¼ã«ã®åºå
+    # make ルールの出力
     f.printf( TECSMsg.get( :MRUL_comment), "#_MRUL_#" )
 
@@ -447,5 +428,5 @@
     f.print "-include $(GEN_DIR)/Makefile.tecsgen\n"
     if $generating_region.get_n_cells != 0 then
-      # Makefile.depend ã® include
+      # Makefile.depend の include
       f.print "-include $(GEN_DIR)/Makefile.depend\n\n"
 
@@ -457,5 +438,5 @@
       f.print "\nsub_regions:$(TIMESTAMP)\n"
       Region.get_link_roots.each {|region|
-        if region.get_global_name != "" then  # Root region: ãã® Makefile èªèº«
+        if region.get_global_name != "" then  # Root region: この Makefile 自身
           f.print "\tcd #{region.get_global_name}; make all\n"
         end
@@ -464,9 +445,9 @@
     end
 
-    # clean: ã¿ã¼ã²ãã
+    # clean: ターゲット
     f.print "clean :\n"
     if $generating_region == @@root_namespace then
       Region.get_link_roots.each {|region|
-        if region.get_global_name != "" then  # Root region: ãã® Makefile èªèº«
+        if region.get_global_name != "" then  # Root region: この Makefile 自身
           f.print "\tcd #{region.get_global_name}; make clean\n"
         end
@@ -479,5 +460,5 @@
     f.print "\n"
 
-    # tecs: ã¿ã¼ã²ãã
+    # tecs: ターゲット
     if $generating_region == @@root_namespace then
       f.print "tecs : $(PRE_TECSGEN_TARGET) $(TIMESTAMP) $(POST_TECSGEN_TARGET)\n\n"
@@ -508,5 +489,5 @@
 
   def gen_makefile_tecsgen
-    ### Makefile.tecsgen ã®çæ
+    ### Makefile.tecsgen の生成
     f = AppFile.open( "#{$gen}/Makefile.tecsgen" )
 
@@ -563,6 +544,5 @@
     domain_regions = nil
     DomainType.get_domain_regions.each{ |dt, regions|
-      # domain_type ã¯ä¸ã¤ã®ãã¼ãã«ã¯ãä¸ã¤ãããªãã®ã§ããã®ã«ã¼ãã¯ãå¿
-ãä¸åããåããªã
+      # domain_type は一つのノードには、一つしかないので、このループは、必ず一回しか回らない
       domain_regions = regions
       domain_type = dt
@@ -687,14 +667,13 @@
   end
 
-  #=== ãã¹ã¦ã®ã»ã«ã¿ã¤ãã®ååãåºå
-  #f::       FILE:   åºåå
-ãã¡ã¤ã«
-  #prepend:: string: åç½®æå­å
-  #append::  string: å¾ç½®æå­å
-  #b_plguin::  bool:   plugin ã«ããçæãããã»ã«ã¿ã¤ããåºå
-  ##b_inline_only::  bool:   true ãªãã° inline ã® entry port ã®ã¿ã®ã»ã«ã¿ã¤ããå«ãã
-  #b_inline_only_or_proc::  bool|Proc:   true ãªãã° inline ã® entry port ã®ã¿ããã¤ã¤ã³ã¢ã¯ãã£ããªã»ã«ã¿ã¤ããå«ãã
-  #                                      Proc ãªãã° Proc ãå®è¡ããçµæ true ãªãã°å«ãã
-  #  namespace "::" ããå¼åºããã
+  #=== すべてのセルタイプの名前を出力
+  #f::       FILE:   出力先ファイル
+  #prepend:: string: 前置文字列
+  #append::  string: 後置文字列
+  #b_plguin::  bool:   plugin により生成されたセルタイプを出力
+  ##b_inline_only::  bool:   true ならば inline の entry port のみのセルタイプを含める
+  #b_inline_only_or_proc::  bool|Proc:   true ならば inline の entry port のみ、かつインアクティブなセルタイプを含める
+  #                                      Proc ならば Proc を実行した結果 true ならば含める
+  #  namespace "::" から呼出される
   def gen_celltype_names( f, prepend, append, b_plugin, b_inline_only_or_proc = true )
     dbgPrint "gen_celltype_names #{@name}\n"
@@ -716,11 +695,10 @@
   end
 
-  #=== ãã¹ã¦ã®ã»ã«ã¿ã¤ãã®ååãåºå
+  #=== すべてのセルタイプの名前を出力
   #region:: Region:
-  # gen_celltype_names ã¨gen_celltype_names_domain ã®ç¸éï¼
-  #   region ã domain_roots ã«å«ãå ´åãåºåããï¼
-  #   ã¾ãã¯ãregion ãå«ã¾ãªãããdomain_roots ãè¤æ°ãã¤ã«ã¼ããªã¼ã¸ã§ã³ã®å ´åãåºåããï¼
-  # ããä»¥å¤ã¯ãgen_celltype_names ã®èª¬æãåç
-§
+  # gen_celltype_names とgen_celltype_names_domain の相違：
+  #   region を domain_roots に含む場合、出力する．
+  #   または、region を含まないが、domain_roots が複数かつルートリージョンの場合、出力する．
+  # それ以外は、gen_celltype_names の説明を参照
   def gen_celltype_names_domain( f, prepend, append, domain_type, region, b_plugin, b_inline_only = true )
     dbgPrint "gen_celltype_names #{@name}\n"
@@ -752,11 +730,11 @@
     }
   end
-  #== Namespace#ãã¹ã¦ã®ã»ã«ã¿ã¤ãã®ååãåºå
-  # ã»ã«ã¿ã¤ãã³ã¼ãã®ããã®åååºå
-  # gen_celltype_names_domain ã¨ gen_celltype_names_domain2 ã®ç¸é
-  # ã»ã©ããä¸ã¤ã®ãªã¼ã¸ã§ã³ã«ããåºããªã
-  #     domain_roots ã1ã¤ã ãã§ãæå®ãªã¼ã¸ã§ã³ãå«ã
-  #     domain_roots ã2ã¤ä»¥ä¸ã§ãæå®ãªã¼ã¸ã§ã³ãã«ã¼ããªã¼ã¸ã§ã³ 
-  # ã»ãã¡ã¤ã³åãä»å ããªã
+  #== Namespace#すべてのセルタイプの名前を出力
+  # セルタイプコードのための名前出力
+  # gen_celltype_names_domain と gen_celltype_names_domain2 の相違
+  # ・どれか一つのリージョンにしか出さない
+  #     domain_roots が1つだけで、指定リージョンを含む
+  #     domain_roots が2つ以上で、指定リージョンがルートリージョン 
+  # ・ドメイン名を付加しない
   def gen_celltype_names_domain2( f, prepend, append, domain_type, region, b_plugin, b_inline_only = true )
     dbgPrint "gen_celltype_names #{@name}\n"
@@ -885,5 +863,5 @@
   def gen_sh_func_tab f
 
-    # ã·ã°ããã£ãã£ã¹ã¯ãªãã¿ã®åºå
+    # シグニチャディスクリプタの出力
     f.printf TECSMsg.get(:SD_comment), "#_SD_#"
     f.print "struct tag_#{@global_name}_VDES {\n"
@@ -891,5 +869,5 @@
     f.print "};\n\n"
 
-    # ã·ã°ããã£é¢æ°ãã¼ãã«ã®åºå
+    # シグニチャ関数テーブルの出力
     f.printf TECSMsg.get(:SFT_comment), "#_SFT_#"
     f.print( "struct tag_#{@global_name}_VMT {\n" )
@@ -906,5 +884,5 @@
         len = items.length
       else
-        # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+        # ここで nil になるのは、引数なしの時に void がなかった場合
         items = []
         len = 0
@@ -932,5 +910,5 @@
   end
 
-  #=== Signature# é¢æ°ã® ID ã® define ãåºå
+  #=== Signature# 関数の ID の define を出力
   def gen_sh_func_id f
     f.print "/* function id */\n"
@@ -951,5 +929,5 @@
   def generate
 
-    if need_generate?    # ã»ã«ã®ãªãã»ã«ã¿ã¤ãã¯çæããªã
+    if need_generate?    # セルのないセルタイプは生成しない
 
       generate_private_header
@@ -962,10 +940,10 @@
       generate_makefile
 
-    elsif $generate_all_template   # ãã³ãã¬ã¼ãã³ã¼ãçæãªãã·ã§ã³
+    elsif $generate_all_template   # テンプレートコード生成オプション
 
       generate_template_code
       generate_inline_template_code
 
-      # generate_makefile_template ã¯ Makefile ã«è¿½è¨ãããã®ã ãããå¼ã³åºããªã
+      # generate_makefile_template は Makefile に追記するものだから、呼び出さない
 
     end
@@ -974,5 +952,5 @@
 
   def generate_post
-    return if ! need_generate?    # ã»ã«ã®ãªãã»ã«ã¿ã¤ãã¯çæããªã
+    return if ! need_generate?    # セルのないセルタイプは生成しない
 
     generate_private_header_post
@@ -994,8 +972,6 @@
     gen_ph_cell_cb_type f
     gen_ph_INIB_as_CB f
-    gen_ph_extern_cell f          # ã»ã«ã¿ã¤ãã°ã«ã³ã¼ãä»¥å¤ã¯åç
-§ããªã
-    gen_ph_typedef_idx f          # mikan åç
-§ãããã®ãã§ãã¦ããªã
+    gen_ph_extern_cell f          # セルタイプグルコード以外は参照しない
+    gen_ph_typedef_idx f          # mikan 参照するものができていない
     gen_ph_ep_fun_prototype f
     end_extern_C f
@@ -1005,6 +981,6 @@
 
     if @n_entry_port_inline == 0 then
-      # inline ããªããã° CB_TYPE_ONLY ã¨ãã
-      # inline ããã®å ´åããã£ãã define ãã¦ããã¦ãå¾ã§ãã¹ã¦ undef ãã
+      # inline がなければ CB_TYPE_ONLY とする
+      # inline ありの場合、いったん define しておいて、後ですべて undef する
       ifndef_cb_type_only f
     end
@@ -1028,8 +1004,6 @@
 #    gen_ph_cell_cb_type f
 #    gen_ph_INIB_as_CB f
-#    gen_ph_extern_cell f          # ã»ã«ã¿ã¤ãã°ã«ã³ã¼ãä»¥å¤ã¯åç
-§ããªã
-    # gen_ph_typedef_idx f          # mikan åç
-§ãããã®ãã§ãã¦ããªã
+#    gen_ph_extern_cell f          # セルタイプグルコード以外は参照しない
+    # gen_ph_typedef_idx f          # mikan 参照するものができていない
 #    gen_ph_ep_fun_prototype f
     gen_ph_ep_skel_prototype f
@@ -1037,5 +1011,5 @@
     endif_macro_only f
 
-    # ç­ç¸®å½¢ãªã©ã®ãã¯ã­åºå
+    # 短縮形などのマクロ出力
     if @n_entry_port_inline == 0 then
       ifndef_cb_type_only f
@@ -1047,6 +1021,6 @@
     gen_ph_test_optional_call_port_abbrev f
     gen_ph_ep_fun_macro f         if @n_entry_port > 0
-    gen_ph_foreach_cell f         # FOREACH ãã¯ã­ã®åºå
-    gen_ph_cb_initialize_macro f   # CB åæåãã¯ã­ã®åºåï¼æ¶è²»ããªãã®ã§ ram_initializer ãã©ã°ã«é¢ãããåºå
+    gen_ph_foreach_cell f         # FOREACH マクロの出力
+    gen_ph_cb_initialize_macro f   # CB 初期化マクロの出力．消費しないので ram_initializer フラグに関わらず出力
     gen_ph_dealloc_code f, ""
     gen_ph_dealloc_code f, "_RESET"
@@ -1095,5 +1069,5 @@
         next if p.get_port_type != :CALL
 
-        # is_...joined ã¯ omit ããã±ã¼ã¹ã§ãåºåããããããomit ãæ¤æ»ããåã«åºå
+        # is_...joined は omit するケースでも出力されるため、omit を検査する前に出力
         if p.is_optional? then
           f.print( "#undef is_#{p.get_name}_joined\n" )
@@ -1130,5 +1104,5 @@
   end
 
-  #=== CELLTYPE_tecsgen.c ãçæ
+  #=== CELLTYPE_tecsgen.c を生成
   def generate_cell_code
     fs = { }
@@ -1165,5 +1139,5 @@
     end
 
-    # ãã¹ã¦ã® _tecsgen.c ã«åºå
+    # すべての _tecsgen.c に出力
     print_note f
     gen_cell_private_header f
@@ -1171,5 +1145,5 @@
     gen_cell_ep_des_type f
 
-    # ãã¹ã¦ã® _tecsgen.c ã«åºå
+    # すべての _tecsgen.c に出力
     fs.each{ |r,f2|
       if f == f2 then
@@ -1182,19 +1156,18 @@
     }
 
-    # ä¸ã¤ã® _tecsgen.c ã«åºå
+    # 一つの _tecsgen.c に出力
     gen_cell_skel_fun f
     gen_cell_fun_table f
     gen_cell_var_init f
 
-    # ã»ã«ãã¨ã« _tecsgen.c ã«åºå
+    # セルごとに _tecsgen.c に出力
     gen_cell_ep_vdes fs
     gen_cell_ep_vdes_array fs
-    gen_cell_cb_out_init fs         # INITIALIZE_CB ã§åç
-§ããããã ram_initializer=false ã§ãæ¶ããªã
+    gen_cell_cb_out_init fs         # INITIALIZE_CB で参照されるため ram_initializer=false でも消せない
     gen_cell_cb fs
     gen_cell_extern_mt fs
     gen_cell_ep_des fs
 
-    # ä¸ã¤ã® _tecsgen.c ã«åºå
+    # 一つの _tecsgen.c に出力
     gen_cell_cb_tab f
     if $ram_initializer then
@@ -1251,13 +1224,13 @@
 
   def gen_ph_include f
-    # ã©ã³ã¿ã¤ã ãããã® include
+    # ランタイムヘッダの include
 #    f.printf TECSMsg.get( :IRTH_comment), "#_IRTH_#"
 #    f.print "#include \"tecs.#{$h_suffix}\"\n\n"
 
-    # ã°ã­ã¼ãã«ãããã® include
+    # グローバルヘッダの include
     f.printf TECSMsg.get( :IGH_comment ), "#_IGH_#"
     f.print "#include \"global_tecsgen.#{$h_suffix}\"\n\n"
 
-    # ã·ã°ããã£ãããã® include
+    # シグニチャヘッダの include
     f.printf TECSMsg.get( :ISH_comment ), "#_ISH_#"
     @port.each { |p|
@@ -1277,7 +1250,6 @@
     end
 
-    # æé©åã®ããåç
-§ããã»ã«ã¿ã¤ãã® CB åã®å®ç¾©ãåè¾¼ã
-    # _CB_TYPE_ONLY ãå®ç¾©ããä¸ã§ include ãã
+    # 最適化のため参照するセルタイプの CB 型の定義を取込む
+    # _CB_TYPE_ONLY を定義した上で include する
     f.printf( TECSMsg.get( :ICT_comment ), "#_ICT_#" )
 
@@ -1292,5 +1264,5 @@
 
       if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
-        # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦ãªã©
+        # 最適化コード (optimize) # スケルトン不要など
         p2 = p.get_real_callee_port
         if p2 then
@@ -1301,5 +1273,5 @@
           end
         # else
-          # optional ã§æªçµå
+          # optional で未結合
         end
       end
@@ -1313,5 +1285,5 @@
 #      next if p.get_port_type != :CALL
 #      if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
-#        # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦ãªã©
+#        # 最適化コード (optimize) # スケルトン不要など
 #        p2 = p.get_real_callee_port
 #        ct = p2.get_celltype
@@ -1329,5 +1301,5 @@
     return if @singleton
 
-    # ID ã®åºæ°ããã³åæ°ã® define ãåºå
+    # ID の基数および個数の define を出力
     f.printf("#define %-20s %10s  /* %s #_NIDB_# */\n", "#{@global_name}_ID_BASE", "(#{@id_base})", TECSMsg.get(:NIDB_comment))
     f.printf("#define %-20s %10s  /* %s  #_NCEL_# */\n\n", "#{@global_name}_N_CELL", "(#{@n_cell_gen})", TECSMsg.get(:NCEL_comment))
@@ -1337,6 +1309,6 @@
     return if @singleton
 
-    # mikan  æé©å
-    # IDX æ­£å½æ§ãã§ãã¯ãã¯ã­ã®åºå
+    # mikan  最適化
+    # IDX 正当性チェックマクロの出力
     f.printf( TECSMsg.get( :CVI_comment ), "#_CVI_#" )
     if @idx_is_id_act then
@@ -1351,5 +1323,5 @@
     return if @singleton
 
-    # IDX æ­£å½æ§ãã§ãã¯ãã¯ã­ï¼ç­ç¸®å½¢ï¼ã®åºå
+    # IDX 正当性チェックマクロ（短縮形）の出力
     f.printf( TECSMsg.get( :CVIA_comment ), "#_CVIA_#")
     f.print("#define VALID_IDX(IDX)  #{@global_name}_VALID_IDX(IDX)\n\n")
@@ -1357,8 +1329,7 @@
   end
 
-  #=== å¼ã³å£é
-åã®å¤§ãããå¾ããã¯ã­ã®åºå
+  #=== 呼び口配列の大きさを得るマクロの出力
   #
-  #ã»ã«ã¿ã¤ããããã¸å¼ã³å£ã®åæ°ãåºå
+  #セルタイプヘッダへ呼び口の個数を出力
   def gen_ph_n_cp f
 
@@ -1374,10 +1345,8 @@
       end
 
-      if p.get_array_size != "[]" then       # åºå®é·é
-å
+      if p.get_array_size != "[]" then       # 固定長配列
         f.print( "#define N_CP_#{p.get_name}    (#{p.get_array_size})\n" )
         f.print( "#define NCP_#{p.get_name}     (#{p.get_array_size})\n" )
-      else                                   # å¯å¤é·é
-å
+      else                                   # 可変長配列
         if @singleton then
           if has_INIB? then
@@ -1388,5 +1357,5 @@
           f.print( "#define N_CP_#{p.get_name}  (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
           f.print( "#define NCP_#{p.get_name}   (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
-          # mikan singleton ãªãã°ãåºå®é·åã§ãã
+          # mikan singleton ならば、固定長化できる
         else
           if has_CB? && has_INIB? then
@@ -1402,8 +1371,7 @@
   end
 
-  #=== åãå£é
-åã®å¤§ãããå¾ããã¯ã­ã®åºå
+  #=== 受け口配列の大きさを得るマクロの出力
   #
-  #ã»ã«ã¿ã¤ããããã¸åãå£ã®åæ°ãåºå
+  #セルタイプヘッダへ受け口の個数を出力
   def gen_ph_n_ep f
 
@@ -1411,6 +1379,5 @@
     @port.each { |p|
       next if p.get_port_type != :ENTRY
-      # next if p.is_omit?                       # åãå£é
-åã®åæ°ã¯çç¥ããªã
+      # next if p.is_omit?                       # 受け口配列の個数は省略しない
       next if p.get_array_size == nil
 
@@ -1420,9 +1387,7 @@
       end
 
-      if p.get_array_size != "[]" then       # åºå®é·é
-å
+      if p.get_array_size != "[]" then       # 固定長配列
         f.print( "#define NEP_#{p.get_name}     (#{p.get_array_size})\n" )
-      else                                   # å¯å¤é·é
-å
+      else                                   # 可変長配列
         if @singleton then
           if has_INIB? then
@@ -1432,5 +1397,5 @@
           end
           f.print( "#define NEP_#{p.get_name}   (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
-          # mikan singleton ãªãã°ãåºå®é·åã§ãã
+          # mikan singleton ならば、固定長化できる
         else
           if has_CB? && has_INIB? then
@@ -1445,5 +1410,5 @@
   end
 
-  #=== optional ãªå¼ã³å£ãçµåããã¦ããããã¹ãããã³ã¼ãã®çæ
+  #=== optional な呼び口が結合されているかテストするコードの生成
   def gen_ph_test_optional_call_port f
     b_comment = false
@@ -1466,5 +1431,5 @@
       next if p.get_port_type != :CALL
       next if ! p.is_optional?
-      # next if p.is_omit?  # omit ã§ã test ã³ã¼ãã¯çæãã
+      # next if p.is_omit?  # omit でも test コードは生成する
 
       if b_comment == false then
@@ -1484,9 +1449,8 @@
       end
 
-      # é¢æ°åã®åºå(æ¨æºï¼åãå£ãã£ã¹ã¯ãªãã¿ãã VMT ã®é¢æ°åãæé©åï¼åãå£é¢æ° or åãå£ãã£ã¹ã¯ãªãã¿)
-      # mikan  å
-¨é¨ã¤ãªãã£ã¦ãããã©ããã§ (1) ãå¤å®ãã
+      # 関数名の出力(標準：受け口ディスクリプタから VMT の関数名、最適化：受け口関数 or 受け口ディスクリプタ)
+      # mikan  全部つながっているかどうかで (1) を判定する
       if ! p.is_VMT_useless? then
-        # æ¨æºã³ã¼ã
+        # 標準コード
         if p.get_array_size == nil then
           if @singleton then
@@ -1496,6 +1460,5 @@
           end
         else
-          # é
-åã®å ´å
+          # 配列の場合
           if @singleton then
             f.print( "\t  ((#{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}!=0) \\\n" )
@@ -1507,18 +1470,17 @@
         end
       else
-        # æé©åã³ã¼ã (optimize) # VMT ä¸è¦ï¼é
-åè¦ç´ ãã¹ã¦åãï¼
+        # 最適化コード (optimize) # VMT 不要（配列要素すべて同じ）
         p2 = p.get_real_callee_port
         if p2 then
           ct = p2.get_celltype
           if p.is_skelton_useless? then
-            # åãå£é¢æ°ãç´æ¥å¼åºã
+            # 受け口関数を直接呼出す
             f.print( "\t  (1)\n" )
           else
-            # åãå£ã¹ã±ã«ãã³é¢æ°ãç´æ¥å¼åºã
+            # 受け口スケルトン関数を直接呼出す
             f.print( "\t  (1)\n" )
           end
         else
-          # optional ã§æªçµå
+          # optional で未結合
           f.print( "\t  (0)    /* not joined */\n" )
         end
@@ -1527,5 +1489,5 @@
   end
 
-  #=== optional ãªå¼ã³å£ãçµåããã¦ããããã¹ãããã³ã¼ãã®çæï¼ç­ç¸®å½¢ï¼
+  #=== optional な呼び口が結合されているかテストするコードの生成（短縮形）
   def gen_ph_test_optional_call_port_abbrev f
     b_comment = false
@@ -1534,5 +1496,5 @@
       next if p.get_port_type != :CALL
       next if ! p.is_optional?
-      # next if p.is_omit?  # omit ã§ã test ã³ã¼ãã¯çæãã
+      # next if p.is_omit?  # omit でも test コードは生成する
 
       if b_comment == false then
@@ -1550,11 +1512,11 @@
   end
 
-  #=== CELLCB ã¸ã®ãã¤ã³ã¿ãå¾ããã¯ã­ãåºå
-  #   ã»ã«ã¿ã¤ããããã¸åºå
+  #=== CELLCB へのポインタを得るマクロを出力
+  #   セルタイプヘッダへ出力
   def gen_ph_get_cellcb f
     f.printf( TECSMsg.get( :GCB_comment ), "#_GCB_#" )
     if ( ! has_CB? && ! has_INIB? ) || @singleton then
       f.print( "#define #{@global_name}_GET_CELLCB(idx) ((void *)0)\n" )
-    elsif @idx_is_id_act then   # mikan åä¸ã®ã»ã«ã®å ´åã®æé©å, idx_is_id ã§ãªãå ´å
+    elsif @idx_is_id_act then   # mikan 単一のセルの場合の最適化, idx_is_id でない場合
       f.print( "#define #{@global_name}_GET_CELLCB(idx) (#{@global_name}_CB_tab[(idx) - #{@global_name}_ID_BASE])\n" )
     else
@@ -1563,6 +1525,6 @@
   end
 
-  #=== CELLCB ã¸ã®ãã¤ã³ã¿ãå¾ããã¯ã­ï¼ç­ç¸®å½¢ï¼ãåºå
-  #  ã»ã«ã¿ã¤ããããã¸åºå
+  #=== CELLCB へのポインタを得るマクロ（短縮形）を出力
+  #  セルタイプヘッダへ出力
   def gen_ph_get_cellcb_abbrev f
     f.printf( TECSMsg.get( :GCBA_comment ), "#_GCBA_#" )
@@ -1580,6 +1542,6 @@
   end
 
-  #===  attribute, var ãã¢ã¯ã»ã¹ãããã¯ã­ãåºå
-  #    ã»ã«ã¿ã¤ããããã¸åºå
+  #===  attribute, var をアクセスするマクロを出力
+  #    セルタイプヘッダへ出力
   def gen_ph_attr_access f
     if @n_attribute_rw > 0 || @n_attribute_ro > 0 then
@@ -1591,5 +1553,5 @@
       next if a.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
@@ -1601,5 +1563,5 @@
         f.printf( "%-20s", "#{@global_name}_ATTR_#{a.get_name}" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         if ! a.is_rw? && has_CB? && has_INIB? then
@@ -1632,10 +1594,10 @@
       end
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
         f.printf( "%-20s", "#{@global_name}_GET_#{a.get_name}()" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_GET_#{a.get_name}(p_that)" )
@@ -1648,5 +1610,5 @@
           f.printf( "%-20s", "#{@global_name}_SET_#{a.get_name}(val)" )
           f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name} = (val))\n" )
-          # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+          # mikan ここでは cell ではなく celltype の名前
         else
           f.printf( "%-20s", "#{@global_name}_SET_#{a.get_name}(p_that,val)" )
@@ -1680,10 +1642,10 @@
       end
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
         f.printf( "%-20s", "#{@global_name}_VAR_#{v.get_name}" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{v.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_VAR_#{v.get_name}(p_that)" )
@@ -1696,10 +1658,10 @@
       next if v.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
         f.printf( "%-20s", "#{@global_name}_GET_#{v.get_name}()" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_CB.#{v.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_GET_#{v.get_name}(p_that)" )
@@ -1711,5 +1673,5 @@
         f.printf( "%-20s", "#{@global_name}_SET_#{v.get_name}(val)" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_CB.#{v.get_name}=(val))\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_SET_#{v.get_name}(p_that,val)" )
@@ -1721,5 +1683,5 @@
   end
 
-  #===  attribute/var ã¢ã¯ã»ã¹ãã¯ã­ï¼ç­ç¸®å½¢ï¼ã³ã¼ãã®çæ
+  #===  attribute/var アクセスマクロ（短縮形）コードの生成
   def gen_ph_attr_access_abbrev f
     if @n_attribute_rw > 0 || @n_attribute_ro > 0 then
@@ -1730,5 +1692,5 @@
       next if a.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       f.printf( "%-20s", "ATTR_#{a.get_name}" )
@@ -1748,5 +1710,5 @@
       next if v.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       f.printf( "%-20s", "VAR_#{v.get_name}" )
@@ -1809,7 +1771,7 @@
         delim = ""
 
-        # é¢æ°åã®åºå(æ¨æºï¼åãå£ãã£ã¹ã¯ãªãã¿ãã VMT ã®é¢æ°åãæé©åï¼åãå£é¢æ° or åãå£ãã£ã¹ã¯ãªãã¿)
+        # 関数名の出力(標準：受け口ディスクリプタから VMT の関数名、最適化：受け口関数 or 受け口ディスクリプタ)
         if ! p.is_VMT_useless? then
-          # æ¨æºã³ã¼ã
+          # 標準コード
           if @singleton then
             f.print( "\t  #{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}" )
@@ -1819,18 +1781,18 @@
           f.print( "#{subsc}->VMT->#{fun.get_name}__T( \\\n" )
         else
-          # æé©åã³ã¼ã (optimize) # VMT ä¸è¦
+          # 最適化コード (optimize) # VMT 不要
           p2 = p.get_real_callee_port
           if p2 then
             ct = p2.get_celltype
             if p.is_skelton_useless? then
-              # åãå£é¢æ°ãç´æ¥å¼åºã
+              # 受け口関数を直接呼出す
               f.print( "\t  #{ct.get_global_name}_#{p2.get_name}_#{fun.get_name}( \\\n" )
             else
-              # åãå£ã¹ã±ã«ãã³é¢æ°ãç´æ¥å¼åºã
+              # 受け口スケルトン関数を直接呼出す
               f.print( "\t  #{ct.get_global_name}_#{p2.get_name}_#{fun.get_name}_skel( \\\n" )
               # print "skelton: #{@name} #{ct.get_global_name}_#{p2.get_name}\n"
             end
           else
-            # optional ã§æªçµå
+            # optional で未結合
             f.print( "\t  ((#{fun.get_declarator.get_type.get_type.get_type_str} (*)()" )
             f.print( "#{fun.get_declarator.get_type.get_type.get_type_str_post})0)()\n" )
@@ -1842,10 +1804,9 @@
         end
 
-        b_join = true    # optional ã§çµåãã¦ããªãå ´å false
-
-        # åãå£æ
-å ±ã®åºå(æ¨æºï¼åãå£ãã£ã¹ã¯ãªãã¿ãæé©åï¼IDX ãªã©)
+        b_join = true    # optional で結合していない場合 false
+
+        # 受け口情報の出力(標準：受け口ディスクリプタ、最適化：IDX など)
         if ! p.is_skelton_useless? && ! p.is_cell_unique? then
-          # æ¨æºã³ã¼ã
+          # 標準コード
           if @singleton then
             f.print( "\t  #{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}#{subsc}" )
@@ -1856,10 +1817,9 @@
           end
         else
-          # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦
-          c2 = p.get_real_callee_cell               # å¯ä¸ã®ã»ã«(ã§ãªãå ´åããããè¤æ°ã»ã«ãããå ´å)
-          p2 = p.get_real_callee_port               # å¯ä¸ã®ãã¼ã(ã§ãªãå ´åã¯ããªã)
+          # 最適化コード (optimize) # スケルトン不要
+          c2 = p.get_real_callee_cell               # 唯一のセル(でない場合もある、複数セルがある場合)
+          p2 = p.get_real_callee_port               # 唯一のポート(でない場合は、ない)
           if p2 then
-            ct = p2.get_celltype                    # å¼ã³å
-ã®ã»ã«ã¿ã¤ã
+            ct = p2.get_celltype                    # 呼び先のセルタイプ
             if ! ct.is_singleton? then
               if ct.has_CB? || ct.has_INIB? then
@@ -1868,6 +1828,6 @@
                   f.print( "\t   #{name_array[7]}" )
                 else
-                  # CELLCB IDX ãæ¸¡ã (æ¨æºã³ã¼ãã¨åãã ããæ±ãåã¯ç°ãªã)
-                  # p.is_skelton_useless? == true/false ã¨ãã«åã
+                  # CELLCB IDX を渡す (標準コードと同じだが、扱う型は異なる)
+                  # p.is_skelton_useless? == true/false ともに同じ
                   f.print( "\t   (p_that)#{inib}->#{p.get_name}#{subsc}" )
                 end
@@ -1880,5 +1840,5 @@
             end
           else
-            # optional ã§æªçµå
+            # optional で未結合
             b_join = false
           end
@@ -1897,7 +1857,7 @@
   end
 
-  #=== send/receive ã§åãåã£ãã¡ã¢ãªé åã dealloc ãããã¯ã­ã³ã¼ã
+  #=== send/receive で受け取ったメモリ領域を dealloc するマクロコード
   #f:: File
-  #b_undef:: bool : true = #undef ã³ã¼ãã®çæ,  false = #define ã³ã¼ãã®çæ
+  #b_undef:: bool : true = #undef コードの生成,  false = #define コードの生成
   def  gen_ph_dealloc_code( f, append_name, b_undef = false )
     b_msg = false
@@ -1906,5 +1866,5 @@
 
       p.each_param{ |port, fd, par|
-        case par.get_direction                        # å¼æ°ã®æ¹åæå®å­ (in, out, inout, send, receive )
+        case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
         when :SEND
           # next if port.get_port_type == :CALL
@@ -1923,5 +1883,5 @@
         end
 
-        #                      ãã¼ãå         é¢æ°å         ãã©ã¡ã¼ã¿å
+        #                      ポート名         関数名         パラメータ名
         dealloc_func_name = "#{port.get_name}_#{fd.get_name}_#{par.get_name}_dealloc"
         dealloc_macro_name = dealloc_func_name.upcase
@@ -1962,5 +1922,5 @@
     @port.each { |p|
       next if p.get_port_type != :CALL
-      # next if p.is_omit?  å¼ã³åºãã¨ã¨ã©ã¼ãèµ·ããã³ã¼ããçæ
+      # next if p.is_omit?  呼び出すとエラーを起こすコードを生成
 
       p.get_signature.get_function_head_array.each{ |fun|
@@ -2067,5 +2027,5 @@
         f.print( "struct tag_#{@global_name}_CB *" )
       elsif has_INIB? then
-        # f.print( "struct tag_#{@global_name}_INIB *" )  # const ãåºåãã¦ããªã
+        # f.print( "struct tag_#{@global_name}_INIB *" )  # const を出力していない
         f.print( "const struct tag_#{@global_name}_INIB *" )
       else
@@ -2103,5 +2063,5 @@
 
         if p.get_array_size then
-          f.print( "#{delim} int_t subscript" )     # mikan singleton æã® ',' ã®å§æ«
+          f.print( "#{delim} int_t subscript" )     # mikan singleton 時の ',' の始末
           delim = ","
         end
@@ -2111,5 +2071,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -2132,5 +2092,5 @@
 
   def gen_ph_ep_skel_prototype f
-    # åãå£ã¹ã±ã«ãã³é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨ãåºå
+    # 受け口スケルトン関数のプロトタイプ宣言を出力
     if @n_entry_port >0 then
       f.printf( TECSMsg.get( :EPSP_comment ), "#_EPSP_#" )
@@ -2139,6 +2099,6 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-#      if p.is_skelton_useless? || ! p.is_VMT_useless? then    # åãå£æé©å
-      if p.is_skelton_useless? then    # åãå£æé©å
+#      if p.is_skelton_useless? || ! p.is_VMT_useless? then    # 受け口最適化
+      if p.is_skelton_useless? then    # 受け口最適化
 #        f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
         next
@@ -2159,5 +2119,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -2182,5 +2142,5 @@
 
     if ( $rom )then
-      # å®æ°é¨ã¯ ROM, å¤æ°é¨ã¯ RAM
+      # 定数部は ROM, 変数部は RAM
 
       if has_INIB? then
@@ -2215,6 +2175,5 @@
 
     else
-      # å
-¨ã¦ RAM
+      # 全て RAM
       f.printf( TECSMsg.get( :CCTPO_comment ), "#_CCTPO_#" )
 
@@ -2230,6 +2189,6 @@
 
 
-  #===   attribute ã®åå®£è¨åºå
-  #inib_cb::  :INIB ã¾ãã¯ :CB
+  #===   attribute の型宣言出力
+  #inib_cb::  :INIB または :CB
   def gen_cell_cb_type_attribute( f, inib_cb )
     if inib_cb == :INIB && @n_attribute_ro > 0 then
@@ -2264,5 +2223,5 @@
       next if v.is_omit?
       next if v.get_size_is == nil
-      next if $rom && inib_cb == :CB      # size_is æå®ããããã®ã¯ INIB ã«ã®ã¿åºåãã
+      next if $rom && inib_cb == :CB      # size_is 指定されたものは INIB にのみ出力する
 
       f.print "    "
@@ -2273,5 +2232,5 @@
 
   def gen_cell_cb_type_var f
-    # å¤æ°ã®åºå
+    # 変数の出力
     if @n_var > 0 then
       f.print "    /* var #_VA_# */ \n"
@@ -2281,5 +2240,5 @@
 
       next if v.is_omit?
-      next if v.get_size_is != nil    # size_is æå®ããã var ã¯ attribute ã¸åºåãã
+      next if v.get_size_is != nil    # size_is 指定された var は attribute へ出力する
 
       f.print "    "
@@ -2295,5 +2254,5 @@
 
   def gen_cell_cb_type_call_port f
-    # å¼ã³å£
+    # 呼び口
     if @n_call_port >0 then
       f.print "    /* call port #_TCP_# */ \n"
@@ -2308,5 +2267,5 @@
       if ! p.is_cell_unique? then
         if ! p.is_skelton_useless? then
-          # æ¨æºå½¢
+          # 標準形
           f.print( "    struct tag_#{p.get_signature.get_global_name}_VDES #{ptr}const*#{p.get_name;};\n" )
           if p.get_array_size == "[]" then
@@ -2314,13 +2273,11 @@
           end
         else
-          # æé©å skelton é¢æ°ãå¼åºããªã(åãå£é¢æ°ãç´æ¥å¼åºã)
-          # å¼ã³å
-ã»ã«ã¿ã¤ãã® CB ã® IDX å
+          # 最適化 skelton 関数を呼出さない(受け口関数を直接呼出す)
+          # 呼び先セルタイプの CB の IDX 型
           if p.get_real_callee_cell then
             f.print( "    " )
             p.get_real_callee_cell.get_celltype.gen_ph_idx_type f
             f.print( " #{ptr}#{p.get_name;};\n" )
-            # ç¸äºåç
-§ã«åãã¦ãtypedef ããåãä½¿ããªã
+            # 相互参照に備えて、typedef した型を使わない
             # f.print( "    #{p.get_real_callee_cell.get_celltype.get_global_name}_IDX #{ptr}#{p.get_name;};\n" )
             if p.get_array_size == "[]" then
@@ -2328,17 +2285,16 @@
             end
           #else
-          #  optional ã§æªçµå
+          #  optional で未結合
           end
         end
       # else
-        # æé©å ä¸ã¤ããã»ã«ããªãå ´åãåãå£ãã£ã¹ã¯ãªãã¿ã¾ãã¯åãå´ã® IDX ã¯å¼ã³å£é¢æ°ãã¯ã­ã«åãè¾¼ã¾ãã
-      end
-    }
-  end
-
-  #=== Celltype#åãå£é
-åæ·»æ°ãè¨æ¶ããå¤æ°ã®å®ç¾©
+        # 最適化 一つしかセルがない場合、受け口ディスクリプタまたは受け側の IDX は呼び口関数マクロに埋め込まれる
+      end
+    }
+  end
+
+  #=== Celltype#受け口配列添数を記憶する変数の定義
   def gen_cell_cb_type_entry_port f
-    # å¼ã³å£
+    # 呼び口
     if @n_entry_port >0 then
       f.print "    /* call port #_NEP_# */ \n"
@@ -2346,6 +2302,5 @@
 
     @port.each{ |p|
-      # next if p.is_omit?                       # åãå£é
-åã®åæ°ã¯çç¥ããªã
+      # next if p.is_omit?                       # 受け口配列の個数は省略しない
       if p.get_port_type == :ENTRY && p.get_array_size == "[]"
         f.print( "    int_t n_#{p.get_name};\n" )
@@ -2389,6 +2344,6 @@
   end
 
-  #===  ã¤ãã¬ã¼ã¿ã³ã¼ã (FOREACH_CELL)ã®çæ
-  #      singleton ã§ã¯åºåããªã
+  #===  イテレータコード (FOREACH_CELL)の生成
+  #      singleton では出力しない
   def gen_ph_foreach_cell f
 
@@ -2431,5 +2386,5 @@
 
 
-  #===  å¤æ°varåæåã³ã¼ã
+  #===  変数var初期化コード
   #
   def gen_ph_cb_initialize_macro f
@@ -2442,7 +2397,7 @@
         type = v.get_type
         if( type.kind_of? PtrType )then
-          # PtrType ã¯ ArrayType ã«ããæ¿ãã
-
-          # åæåå­ã®è¦ç´ æ°ã¨ãã (å¾ã¯ 0 ã§ãã)
+          # PtrType は ArrayType にすり替える
+
+          # 初期化子の要素数とする (後は 0 である)
           t2 = ArrayType.new( Expression.create_integer_constant( init.length, nil ) )
           t2.set_type( type.get_type )
@@ -2512,5 +2467,5 @@
 
     # else
-    #   ã»ã«ãä¸ã¤ããªããã°åºåããªã
+    #   セルが一つもなければ出力しない
     end
 
@@ -2519,5 +2474,5 @@
 
   def gen_ph_inline f
-    # inline ãã¼ããä¸ã¤ã§ãããã°ãinline.h ã® include
+    # inline ポートが一つでもあれば、inline.h の include
     if @n_entry_port_inline > 0 then
       f.printf( TECSMsg.get( :INL_comment ), "#_INL_#" )
@@ -2571,5 +2526,5 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      if p.is_skelton_useless?    # åãå£æé©å
+      if p.is_skelton_useless?    # 受け口最適化
         f.print( "/* #{p.get_name} : omitted by entry port optimize */\n\n" )
         next
@@ -2582,5 +2537,5 @@
         f.print( "    #{@name}_IDX  idx;\n" )
       else
-        # CB ã INIB ãå­å¨ããªã (ã®ã§ãidx ã¨ãã¦æ´æ°ã§åæåãã¦ãã)
+        # CB も INIB も存在しない (ので、idx として整数で初期化しておく)
         f.print( "    int           idx;\n" )
       end
@@ -2600,5 +2555,5 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      if p.is_skelton_useless? then    # åãå£æé©å
+      if p.is_skelton_useless? then    # 受け口最適化
         f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
         next
@@ -2619,5 +2574,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -2641,5 +2596,5 @@
         end
 
-        if functype.get_type_str == "void" then # mikan "void" ã® typedef ã«æªå¯¾å¿
+        if functype.get_type_str == "void" then # mikan "void" の typedef に未対応
           f.print "    "
         else
@@ -2684,5 +2639,5 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      if p.is_VMT_useless? then    # åãå£æé©å
+      if p.is_VMT_useless? then    # 受け口最適化
         f.print "/* #{p.get_name} : omitted by entry port optimize */\n"
         next
@@ -2710,36 +2665,31 @@
     end
 
-    # ãã®ã»ã«ã¿ã¤ãã®ãã¹ã¦ã®ã»ã«ã«ã¤ãã¦
+    # このセルタイプのすべてのセルについて
     @ordered_cell_list.each{ |c|
-      if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+      if c.is_generate? then                           # 生成対象か？
 
         f = fs[ c.get_region.get_domain_root ]
 
-        # çµåã®ãªã¹ã (NamedList)
+        # 結合のリスト (NamedList)
         jl = c.get_join_list
 
-        # å
-¨ã¦ã®çµåãªã¹ãã«ã¤ãã¦
+        # 全ての結合リストについて
         jl.get_items.each{ |j|
 
-          # å·¦è¾ºã®å®ç¾©ãå¾ã
+          # 左辺の定義を得る
           definition = j.get_definition
 
-          # å¼ã³å£ã§ã¯ãªãï¼ãï¼å±æ§ï¼
+          # 呼び口ではない？　（属性）
           next unless definition.instance_of? Port
 
-          port = find j.get_name # celltype ã® Port (ãã¡ãã«æé©åæ
-å ±ããã)
-          # port = definition    # definition ã¯ composite ã® Port ãå¾ããããã¨ããã
+          port = find j.get_name # celltype の Port (こちらに最適化情報がある)
+          # port = definition    # definition は composite の Port が得られることがある
           next if port.is_cell_unique?
           next if port.is_omit?
 
-          # é
-åè¦ç´ ãå¾ãï¼åãå£é
-åã§ãªããã° nil ãè¿ãï¼
+          # 配列要素を得る（受け口配列でなければ nil が返る）
           am = j.get_array_member2
 
-          # å¼ã³å£é
-åã?
+          # 呼び口配列か?
           if am  then
             i = 0
@@ -2748,5 +2698,5 @@
               if j then
                 if am[i].get_cell.get_celltype == self then
-                  # åãã»ã«ã¿ã¤ãã¸çµåãã¦ããå ´å(VDES ã§ã¯ type conflict ã«ãªã)
+                  # 同じセルタイプへ結合している場合(VDES では type conflict になる)
                   p = am[i].get_rhs_port
                   des_type = "const struct tag_#{@global_name}_#{p.get_name}_DES"
@@ -2755,10 +2705,8 @@
                 end
 
-                # å³è¾ºã¯åãå£é
-åãï¼
+                # 右辺は受け口配列か？
                 if j.get_rhs_subscript then
 
-                  # åãå£ã®é
-åæ·»æ°
+                  # 受け口の配列添数
                   subscript = j.get_rhs_subscript
 
@@ -2773,6 +2721,5 @@
                 end
               #else if j == nil
-              #  optioanl ã§é
-åè¦ç´ ãåæåããã¦ããªã
+              #  optioanl で配列要素が初期化されていない
               end
               i += 1
@@ -2780,5 +2727,5 @@
           else
             if j.get_cell.get_celltype == self then
-              # åãã»ã«ã¿ã¤ãã¸çµåãã¦ããå ´å(VDES ã§ã¯ type conflict ã«ãªã)
+              # 同じセルタイプへ結合している場合(VDES では type conflict になる)
               p = j.get_rhs_port
               des_type = "const struct tag_#{@global_name}_#{p.get_name}_DES"
@@ -2788,6 +2735,5 @@
 
             if j.get_rhs_subscript then
-              # åãå£é
-å
+              # 受け口配列
               subscript = j.get_rhs_subscript
               f.printf( "extern %s %s%d;\n",
@@ -2801,6 +2747,5 @@
             end
           end
-          # mikan   cell ã® namespace æªå¯¾å¿ãJoin ã§ Cell ãªãã¸ã§ã¯ããå¼å½ã¦ããå¿
-è¦ãã
+          # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておく必要あり
         }
 
@@ -2812,6 +2757,5 @@
   def gen_cell_ep_vdes_array fs
     if @n_cell_gen >0 then
-      fs.each{ |r, f| f.printf( TECSMsg.get( :CPA_comment ), "#_CPA_#" ) }  # mikan å¼ã³å£é
-åãç¡ãå ´åãåºã¦ãã¾ã
+      fs.each{ |r, f| f.printf( TECSMsg.get( :CPA_comment ), "#_CPA_#" ) }  # mikan 呼び口配列が無い場合も出てしまう
     end
 
@@ -2824,7 +2768,6 @@
           definition = j.get_definition
           next unless definition.instance_of? Port
-          # port = definition    # definition ã¯ composite ã® Port ãå¾ããããã¨ããã
-          port = find j.get_name # celltype ã® Port (ãã¡ãã«æé©åæ
-å ±ããã)
+          # port = definition    # definition は composite の Port が得られることがある
+          port = find j.get_name # celltype の Port (こちらに最適化情報がある)
           next if port.is_cell_unique?
           next if port.is_omit?
@@ -2832,6 +2775,5 @@
           am = j.get_array_member2
           if am  then
-            # å·¦è¾ºã¯é
-å
+            # 左辺は配列
 
             if ! port.is_skelton_useless? then
@@ -2842,10 +2784,8 @@
             else
 
-#              ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©åã®å ´åããã®é
-åã¯åç
-§ãããªã
-              # mikan ãã®ã±ã¼ã¹ããã¹ãããã¦ããªã
+#              スケルトン関数不要最適化の場合、この配列は参照されない
+              # mikan このケースがテストされていない
               f.printf( "const %s_IDX  %s_%s[] = {\n",
-#                        "#{j.get_celltype.get_global_name}",   # å³è¾º composite ã«å¯¾å¿ã§ããªã
+#                        "#{j.get_celltype.get_global_name}",   # 右辺 composite に対応できない
                         "#{j.get_rhs_cell.get_celltype.get_global_name}",
                         "#{c.get_global_name}",
@@ -2864,6 +2804,5 @@
 
               if j then
-                # åä¸ã»ã«ã¿ã¤ãã®çµåã®å ´åãVDES åã¸ã®ã­ã£ã¹ããå¿
-è¦
+                # 同一セルタイプの結合の場合、VDES 型へのキャストが必要
                 if j.get_rhs_cell.get_celltype == self then
                   definition = j.get_definition
@@ -2875,6 +2814,5 @@
                 
                 if j.get_rhs_subscript then
-                  # å³è¾ºé
-åã®å ´å(æé©åã¯ãªã)
+                  # 右辺配列の場合(最適化はない)
                   subscript = j.get_rhs_subscript
                   f.printf( "    %s%d,\n",
@@ -2885,6 +2823,5 @@
 
                 else
-                  # å³è¾ºéé
-åã®å ´å */
+                  # 右辺非配列の場合 */
                   if ! port.is_skelton_useless? then
                     f.printf( "    %s,\n",
@@ -2897,12 +2834,10 @@
                 end
               else
-                # optional ã§å¼ã³å£é
-åè¦ç´ ãåæåããã¦ããªã
+                # optional で呼び口配列要素が初期化されていない
                 f.printf( "    0,\n" )
               end
             # }
             end
-            # mikan   cell ã® namespace æªå¯¾å¿ãJoin ã§ Cell ãªãã¸ã§ã¯ããå¼å½ã¦ããå¿
-è¦ãã
+            # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておく必要あり
             f.print "};\n"
           end
@@ -2914,5 +2849,5 @@
   end
 
-  #=== CB ãåæåãããã­ã°ã©ã ã®çæ
+  #=== CB を初期化するプログラムの生成
   def gen_cell_cb_initialize_code f
     if ! need_CB_initializer?
@@ -2946,8 +2881,8 @@
   end
 
-  # === CB/INIB ã®å¤ã§åæåãããå¤æ°ã®åºå
+  # === CB/INIB の外で初期化される変数の出力
   def gen_cell_cb_out_init fs
 
-    # ã»ã«ããªããã°ãåºåããªã
+    # セルがなければ、出力しない
     if @n_cell_gen == 0 then
       return
@@ -2956,7 +2891,5 @@
     fs.each{ |r, f| f.printf( TECSMsg.get( :AVAI_comment ), "#_AVAI_#" ) }
 
-    # attribute, var ã®ãã¤ã³ã¿åã®åç
-§ããé
-åãçæ
+    # attribute, var のポインタ型の参照する配列を生成
     @ordered_cell_list.each{ |c|
       next if  ! c.is_generate?
@@ -2968,7 +2901,5 @@
       jl = c.get_join_list
 
-      # attribute, var ã®ãã¤ã³ã¿å¤æ°ãé
-åã«ããåæåãããå ´åã®ãé
-åãåºå
+      # attribute, var のポインタ変数が配列により初期化される場合の、配列を出力
       av_list = ct.get_attribute_list + ct.get_var_list
       if av_list.length != 0 then
@@ -2986,9 +2917,7 @@
 
             if size then
-              # å¼ãè©ä¾¡ãã(attribute, var ã«å«ã¾ããå¤æ°ãåç
-§å¯è½)
+              # 式を評価する(attribute, var に含まれる変数を参照可能)
               sz = size.eval_const( c.get_join_list, c.get_celltype.get_name_list )
-              # å¼ãçæããªãã (å¤æ°ãå«ã¾ãªãå½¢ã«ãã)  ä¸å®å
-¨ãªå½¢ã§ Token ãçæ (ã¨ã©ã¼çºçããªããã)
+              # 式を生成しなおす (変数を含まない形にする)  不完全な形で Token を生成 (エラー発生しないから)
               size = Expression.new( [:INTEGER_CONSTANT, Token.new(sz, nil, 0, 0)] )
               array_type = ArrayType.new( size )
@@ -3004,5 +2933,5 @@
 								# name_array[3]: cell_CB_INIT
               if !( $ram_initializer && a.get_kind == :VAR ) then
-                # -R (ram initializer ä½¿ç¨) ã®å ´å var ã¯åæåã³ã¼ããåºåããªã
+                # -R (ram initializer 使用) の場合 var は初期化コードを出力しない
                 if( init )then
                   str = " = #{gen_cell_cb_init( f, c, name_array, array_type, init, a.get_identifier, 1, true )}"
@@ -3022,7 +2951,7 @@
   end
 
-  #=== var ã®åæå¤ã® ROM é¨ã¸ã®
+  #=== var の初期値の ROM 部への
   def gen_cell_var_init f
-    # var ã®{ }ã§å²ã¾ããåæå¤æå®ããããèª¿ã¹ã
+    # var の{ }で囲まれた初期値指定があるか調べる
     n_init = 0
     @var.each { |v|
@@ -3041,7 +2970,7 @@
 
           if( type.kind_of? PtrType )then
-            # PtrType ã¯ ArrayType ã«ããæ¿ãã
-
-            # åæåå­ã®è¦ç´ æ°ã ãã¨ããï¼å¾ã¯ 0)
+            # PtrType は ArrayType にすり替える
+
+            # 初期化子の要素数だけとする（後は 0)
             t2 = ArrayType.new( Expression.create_integer_constant( init.length, nil ) )
             t2.set_type( type.get_type )
@@ -3049,16 +2978,15 @@
           end
 
-          c = @ordered_cell_list[0]   # ä»®ã® cell (å®éã«ã¯ä½¿ãããªã)
+          c = @ordered_cell_list[0]   # 仮の cell (実際には使われない)
           name_array = get_name_array( c )
           # f.print "const #{type0.get_type_str}\t#{@global_name}_#{v.get_name}_VAR_INIT#{type0.get_type_str_post} = "
           f.print "const #{type.get_type_str}\t#{@global_name}_#{v.get_name}_VAR_INIT#{type.get_type_str_post} = "
           if type.kind_of? StructType then
-            # celltype ã® default ã®åæå¤ãã
+            # celltype の default の初期値あり
             str = gen_cell_cb_init( f, c, name_array, type, init, v.get_identifier, 1, true )
           elsif( type.kind_of?( PtrType ) || type.kind_of?( ArrayType ) ) then
             str = "{ "
             type = type.get_type
-            # mikan ãã¤ã³ã¿ã§ã¯ãªããé
-ååã¨ããªãã¨ããã¤ã³ã¿å¤æ°ã®é åã®åãæãã
+            # mikan ポインタではなく、配列型としないと、ポインタ変数の領域の分、損する
             init.each { |i|
               str += gen_cell_cb_init( f, c, name_array, type, i, v.get_identifier, 1, true )
@@ -3117,5 +3045,5 @@
 
         unless @singleton then
-          # 1 ã¤ã® cell INIB ã®çµãã
+          # 1 つの cell INIB の終わり
           if @idx_is_id_act then
             f.print( "};\n\n" )
@@ -3135,5 +3063,5 @@
       end
 
-      # RAM initializer ãä½¿ç¨ããªããã¾ãã¯ ROM åããªã
+      # RAM initializer を使用しない、または ROM 化しない
       if $ram_initializer == false || $rom == false then
         if @singleton then
@@ -3177,5 +3105,5 @@
 
           unless @singleton then
-            # 1 ã¤ã® cell CB ã®çµãã
+            # 1 つの cell CB の終わり
             if @idx_is_id_act then
               f.print( "};\n\n" )
@@ -3215,5 +3143,5 @@
         f.print "/* ID to INIB table #_INTAB_# */\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # çæå¯¾è±¡ãã¤ãã«ã¼ãä»¥å¤ã
+          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3224,5 +3152,5 @@
         f.print "#{@global_name}_INIB *#{@global_name}_INIB_tab[] ={\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+          if c.is_generate? then                           # 生成対象か？
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3235,5 +3163,5 @@
         f.print "/* ID to CB table #_CBTAB_# */\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # çæå¯¾è±¡ãã¤ãã«ã¼ãä»¥å¤ã
+          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3244,5 +3172,5 @@
         f.print "#{@global_name}_CB *#{@global_name}_CB_tab[] ={\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+          if c.is_generate? then                           # 生成対象か？
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3256,15 +3184,12 @@
 
 
-  #=== name_array ãçæ
+  #=== name_array を生成
   # IN:   cell  : Cell
-  #       index : CB, INIB é
-åã®æ·»æ°
+  #       index : CB, INIB 配列の添数
   # RETURN: name_array
   #   name_array[0] = @name           # celltype name
   #   name_array[1] = cell.get_name   # cell name
   #   name_array[2] = cell_CB_name    # cell_CB_name
-  #   name_array[3] = cell_CB_INIT    # cell_CB_INIT # CB ã®å¤å´ã§åæåãå¿
-è¦ãªé
-åã®åå
+  #   name_array[3] = cell_CB_INIT    # cell_CB_INIT # CB の外側で初期化が必要な配列の名前
   #   name_array[4] = cell_CB_proto   # CB name for prototype
   #   name_array[5] = cell_INIB       # INIB name
@@ -3305,5 +3230,5 @@
 
     if ! has_CB? && ! has_INIB? then
-      cell_CBP = "NULL"    # CB ã INIB ããªããã° NULL ã«ç½®æ
+      cell_CBP = "NULL"    # CB も INIB もなければ NULL に置換
     else
       cell_CBP = "&#{cell_CB_name}"
@@ -3326,8 +3251,7 @@
   end
 
-  #=== attribute ã¨ size_is æå®ããã var (ãã¤ã³ã¿)ã®åæåãã¼ã¿ãåºå
+  #=== attribute と size_is 指定された var (ポインタ)の初期化データを出力
   #
-  # ROM åãµãã¼ãã®æç¡ãããã³åºåå¯¾è±¡ã CB ã INIB ãã«ããåºåãããå
-å®¹ãç°ãªã
+  # ROM 化サポートの有無、および出力対象が CB か INIB かにより出力される内容が異なる
   def gen_cell_cb_attribute( cell, indent, f, name_array, cb_inib )
     ct = self
@@ -3339,11 +3263,10 @@
       f.print "/* attribute(RO) */ \n"
     elsif $rom then  # && cb_inib == CB
-      # CB ã§ rw ã¨ var
+      # CB で rw と var
       return if @n_attribute_rw == 0
       print_indent( f, indent + 1 )
       f.print "/* attribute(RW) */ \n"
     else  # cb_inib == CB && $rom == false
-      # CB ã«å
-¨é¨
+      # CB に全部
       return if @n_attribute_rw == 0 && @n_attribute_ro == 0 && @n_var_size_is == 0
       print_indent( f, indent + 1 )
@@ -3355,5 +3278,5 @@
       next if a.is_omit?
       if cb_inib == :INIB && a.is_rw? == true then
-        # $rom == true ã§ãããããã¸æ¥ãªã
+        # $rom == true でしか、ここへ来ない
         next
       elsif cb_inib == :CB && $rom && ! a.is_rw? then
@@ -3363,11 +3286,11 @@
       j = jl.get_item( a.get_identifier )
       if j then
-        # cell ã®åæå¤æå®ãã
+        # cell の初期値指定あり
         gen_cell_cb_init( f, cell, name_array, a.get_type, j.get_rhs, a.get_identifier, indent + 1 )
       elsif a.get_initializer then
-        # celltype ã® default ã®åæå¤ãã
+        # celltype の default の初期値あり
         gen_cell_cb_init( f, cell, name_array, a.get_type, a.get_initializer, a.get_identifier, indent + 1 )
       else
-        # åæå¤æªæå®
+        # 初期値未指定
         gen_cell_cb_init( f, cell, name_array, a.get_type, nil, a.get_identifier, indent + 1 )
       end
@@ -3375,10 +3298,10 @@
     @var.each{ |v|
       next if v.is_omit?
-      next if v.get_size_is == nil   # size_is æå®ãããå ´å attribute ã®ä¸é¨ã¨ãã¦åºå
+      next if v.get_size_is == nil   # size_is 指定がある場合 attribute の一部として出力
 
       if v.get_initializer && $ram_initializer == false then
         gen_cell_cb_init( f, cell, name_array, v.get_type, v.get_initializer, v.get_identifier, indent + 1 )
       else
-        # åæå¤æªæå® ã¾ãã¯ RAM initializer ä½¿ç¨
+        # 初期値未指定 または RAM initializer 使用
         gen_cell_cb_init( f, cell, name_array, v.get_type, nil, v.get_identifier, indent + 1 )
       end
@@ -3386,5 +3309,5 @@
   end
 
-  #=== var ã®åæåãã¼ã¿ãåºå
+  #=== var の初期化データを出力
   def gen_cell_cb_var( cell, indent, f, name_array )
     jl = cell.get_join_list
@@ -3396,10 +3319,10 @@
 
         next if v.is_omit?
-        next if v.get_size_is      # size_is æå®ãããå ´å attribute ã®ä¸é¨ã¨ãã¦åºå
+        next if v.get_size_is      # size_is 指定がある場合 attribute の一部として出力
 
         if v.get_initializer && $ram_initializer == false then
           gen_cell_cb_init( f, cell, name_array, v.get_type, v.get_initializer, v.get_identifier, indent + 1 )
         else
-          # åæå¤æªæå® ã¾ãã¯ RAM initializer ä½¿ç¨
+          # 初期値未指定 または RAM initializer 使用
           gen_cell_cb_init( f, cell, name_array, v.get_type, nil, v.get_identifier, indent + 1 )
         end
@@ -3413,5 +3336,5 @@
   end
 
-  #=== å¼ã³å£ã®åæåã³ã¼ãã®çæ
+  #=== 呼び口の初期化コードの生成
   def gen_cell_cb_call_port( cell, indent, f, name_array )
     jl = cell.get_join_list
@@ -3424,5 +3347,5 @@
         next if p.get_port_type != :CALL
         next if p.is_omit?
-        next if p.is_cell_unique?        # æé©åï¼åä¸ã»ã«ã§å¼ã³å£ãã¯ã­ã«åãè¾¼ã¾ããï¼
+        next if p.is_cell_unique?        # 最適化（単一セルで呼び口マクロに埋め込まれる）
 
         j = jl.get_item( p.get_name )
@@ -3431,11 +3354,10 @@
         # debug
         if j == nil then
-          # optional å¼ã³å£
+          # optional 呼び口
           # cdl_error( "H1003 internal error: cell \'$1\' port \'$2\': initializer not found\n" , cell.get_name, p.get_name )
           # exit( 1 )
           f.printf( "%-40s /* #_CCP5_# */\n",  "0," )
           if p.get_array_size == "[]" then
-            # æ·»æ°çç¥ã®å¼ã³å£é
-å
+            # 添数省略の呼び口配列
             print_indent( f, indent + 1 )
             f.printf( "%-40s /* %s #_CCP6_# */\n", "0,", "length of #{p.get_name} (n_#{p.get_name})" )
@@ -3446,16 +3368,13 @@
         am = j.get_array_member2
         if am then
-          # å¼ã³å£é
-åã®å ´å
+          # 呼び口配列の場合
           f.printf( "%-40s /* #_CCP3_# */\n",  "#{cell.get_global_name}_#{j.get_name}," )
           if p.get_array_size == "[]" then
-            # æ·»æ°çç¥ã®å¼ã³å£é
-å
+            # 添数省略の呼び口配列
             print_indent( f, indent + 1 )
             f.printf( "%-40s /* %s #_CCP4_# */\n", "#{am.length},", "length of #{p.get_name} (n_#{p.get_name})" )
           end
         else
-          # åä¸ã»ã«ã¿ã¤ãã®çµåã®å ´åãVDES åã¸ã®ã­ã£ã¹ããå¿
-è¦
+          # 同一セルタイプの結合の場合、VDES 型へのキャストが必要
           #print "CCP0/CCP1 #{p.get_name}, #{j.get_rhs_cell.get_celltype.get_name}, #{@name}\n"
           if j.get_rhs_cell.get_celltype == self then
@@ -3467,6 +3386,5 @@
 
           if j.get_rhs_subscript then
-            # åãå£é
-åã®å ´å
+            # 受け口配列の場合
             subscript = j.get_rhs_subscript
             f.printf( "%-40s /* %s #_CCP0_# */\n",
@@ -3475,7 +3393,5 @@
                       p.get_name )
           else
-            # å¼ã³å£é
-åã§ããåãå£é
-åã§ããªã
+            # 呼び口配列でも、受け口配列でもない
             if ! p.is_skelton_useless? then
               f.printf( "%-40s /* %s #_CCP1_# */\n",
@@ -3483,16 +3399,12 @@
                         p.get_name )
             else
-              # ã¹ã±ã«ãã³ä¸è¦æé©åï¼CB (INIB) ã¸ã®ãã¤ã³ã¿ãåãè¾¼ãï¼
-              c = j.get_rhs_cell                    # å¼ã³å
-ã»ã«
-              ct = c.get_celltype                   # å¼ã³å
-ã»ã«ã¿ã¤ã
+              # スケルトン不要最適化（CB (INIB) へのポインタを埋め込む）
+              c = j.get_rhs_cell                    # 呼び先セル
+              ct = c.get_celltype                   # 呼び先セルタイプ
               if ct.has_INIB? || ct.has_CB? then
-                name_array = ct.get_name_array( c )   # å¼ã³å
-ã»ã«ã¿ã¤ãã§ name_array ãå¾ã
+                name_array = ct.get_name_array( c )   # 呼び先セルタイプで name_array を得る
                 f.printf( "%-40s /* %s #_CCP2_# */\n", "#{name_array[7]},", p.get_name )
               else
-                # å¼ã³å
-ã¯ CB ã INIB ãæããªãï¼NULL ã«åæåï¼
+                # 呼び先は CB も INIB も持たない（NULL に初期化）
                 f.printf( "%-40s /* %s #_CCP2_# */\n", "0,", p.get_name )
               end
@@ -3505,5 +3417,5 @@
   end
 
-  #=== åãå£ã®åæåã³ã¼ãã®çæ
+  #=== 受け口の初期化コードの生成
   def gen_cell_cb_entry_port( cell, indent, f, name_array )
     jl = cell.get_join_list
@@ -3514,6 +3426,5 @@
       f.print "/* entry port #_EP_# */ \n"
       @port.each{ |p|
-        # next if p.is_omit?  # åãå£é
-åã®åæ°ã¯çç¥ããªã
+        # next if p.is_omit?  # 受け口配列の個数は省略しない
         if p.get_port_type == :ENTRY && p.get_array_size == "[]"
           print_indent( f, indent + 1 )
@@ -3524,11 +3435,10 @@
   end
 
-  #=== ã»ã«ã® attribute ã®åæå¤ãåºå
+  #=== セルの attribute の初期値を出力
   #
-  #f_get_str:: true ã®å ´åãæå­åãè¿ããfalse ã®å ´åããã¡ã¤ã« f ã«åºåããï¼
-  # æå­åãè¿ãã¨ããæ«å°¾ã« ',' ã¯å«ã¾ããªãï¼
-  # ãã¡ã¤ã«ã¸åºåããã¨ããæ«å°¾ã« ',' ãåºåãããï¼æ§é ä½è¦ç´ ãé
-åè¦ç´ ã®åæå¤ãåºåããã¨ ',' ãäºéã«åºåãããï¼
-  # ãã ãç¾ç¶ã§ã¯ããã¡ã¤ã«ã¸åºåãããã¨ã¯ãªã
+  #f_get_str:: true の場合、文字列を返す、false の場合、ファイル f に出力する．
+  # 文字列を返すとき、末尾に ',' は含まれない．
+  # ファイルへ出力するとき、末尾に ',' が出力される．構造体要素、配列要素の初期値を出力すると ',' が二重に出力される．
+  # ただし現状では、ファイルへ出力することはない
   #
   def gen_cell_cb_init( f, cell, name_array, type, init, identifier, indent, f_get_str = false )
@@ -3544,5 +3454,5 @@
 
       if f_get_str then
-        # åæå¤æªæå®
+        # 初期値未指定
         if type.kind_of?( BoolType ) then
           str = "false"   # formerly tecs_false
@@ -3568,5 +3478,5 @@
         return str
       else
-        # åæå¤æªæå®
+        # 初期値未指定
         if type.kind_of?( BoolType ) then
           f.print "    " * indent
@@ -3602,7 +3512,6 @@
     end    
 
-    # ãã®ã¡ã½ããã¯ Celltype ã®ãã®ã§ããå¿
-è¦ã¯ç¡ãï¼ä¸ã«ç¶ãã®ã§ããã«ç½®ãï¼
-    # åæå¤æå®ãã
+    # このメソッドは Celltype のものである必要は無い（上に続くのでここに置く）
+    # 初期値指定あり
     if type.kind_of?( BoolType ) then
       if init.instance_of?( C_EXP ) then
@@ -3670,5 +3579,5 @@
 
       len.times {
-        next if ! init[i]        # mikan ãã®å¦ç½®ã¯é©åï¼
+        next if ! init[i]        # mikan この処置は適切？
         if f_get_str then
           str += gen_cell_cb_init( f, cell, name_array, at, init[i], "#{identifier}[#{i}]", indent + 1, f_get_str )
@@ -3752,6 +3661,5 @@
   end
 
-  #== é¢æ°ãã¼ãã«ã®å¤é¨åç
-§
+  #== 関数テーブルの外部参照
   def gen_cell_extern_mt fs
     fs.each{ |r, f|
@@ -3768,5 +3676,5 @@
   end
 
-  #=== åãå£ãã£ã¹ã¯ãªãã¿ã®å®ç¾©ãçæ
+  #=== 受け口ディスクリプタの定義を生成
   def gen_cell_ep_des fs
     if @n_cell_gen >0 then
@@ -3789,5 +3697,5 @@
           next if p.get_port_type != :ENTRY
           next if p.is_omit?
-          if p.is_skelton_useless?       # åãå£æé©ån ep_opt
+          if p.is_skelton_useless?       # 受け口最適化n ep_opt
             f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
             next
@@ -3800,6 +3708,5 @@
 
           if len != nil then
-            # åãå£é
-åã®å ´å
+            # 受け口配列の場合
             i = 0
             while i < len
@@ -3882,14 +3789,12 @@
     return if @b_reuse && ! $generate_all_template
     if ! ( @plugin && @plugin.gen_ep_func? ) then
-      return if $generate_no_template     # $generate_all_template ããåªå
-ããã
-
-      # åèã¨ãã¦åºåãããã³ãã¬ã¼ããã¡ã¤ã«ã§ãããã¨ãç¤ºãããã« "_templ" ãä»å ãã
+      return if $generate_no_template     # $generate_all_template より優先される
+
+      # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
       fname = "#{$gen}/#{@global_name}_templ.#{$c_suffix}"
     else
-      # Plugin ã«ããçæãããã»ã«ã¿ã¤ãã«ã¤ãã¦ã¯ãååçã«ãã³ãã¬ã¼ãã§ã¯ãªãã
-      # ä¿®æ­£ä¸è¦ãªã»ã«ã¿ã¤ãã®å®è£
-ã³ã¼ããçæããï¼
-      # ãã®ããããã¡ã¤ã«åã« _temp ãä»å ããªã
+      # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
+      # 修正不要なセルタイプの実装コードを生成する．
+      # このため、ファイル名に _temp を付加しない
       fname = "#{$gen}/#{@global_name}.#{$c_suffix}"
     end
@@ -3906,5 +3811,5 @@
     gen_template_attr_access f
     gen_template_cp_fun f
-    # gen_template_types f     # 0805503 è¿½å ãã¦ã¿ããããã£ã±ãããã
+    # gen_template_types f     # 0805503 追加してみたが、やっぱりやめる
     f.print( " *\n * #[</PREAMBLE>]# */\n\n" )
     f.printf TECSMsg.get( :PAC_comment ), "#_PAC_#"
@@ -3912,5 +3817,5 @@
     gen_template_private_header f
     if ( @plugin ) then
-      # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+      # このメソッドの引数は plugin.rb の説明を見よ
       @plugin.gen_preamble( f, @singleton, @name, @global_name )
     end
@@ -3921,5 +3826,5 @@
 
     if ( @plugin ) then
-      # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+      # このメソッドの引数は plugin.rb の説明を見よ
       @plugin.gen_postamble( f, @singleton, @name, @global_name )
     end
@@ -4075,6 +3980,6 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      next if b_inline && ! p.is_inline?  # inline ãã¼ã
-      next if ! b_inline && p.is_inline?  # é inline ãã¼ã
+      next if b_inline && ! p.is_inline?  # inline ポート
+      next if ! b_inline && p.is_inline?  # 非 inline ポート
 
       inline_prefix = ""
@@ -4133,5 +4038,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -4153,5 +4058,5 @@
 
         if ( @plugin && @plugin.gen_ep_func? ) then
-          # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+          # このメソッドの引数は plugin.rb の説明を見よ
           @plugin.gen_ep_func_body( f, @singleton, @name, @global_name, p.get_signature.get_global_name, p.get_name, fun.get_name, "#{@global_name}_#{p.get_name}_#{fun.get_name}", functype, items )
 
@@ -4200,14 +4105,12 @@
     if ! ( @plugin && @plugin.gen_ep_func? ) then
       return if @b_reuse && ! $generate_all_template
-      return if $generate_no_template     # $generate_all_template ããåªå
-ããã
-
-      # åèã¨ãã¦åºåãããã³ãã¬ã¼ããã¡ã¤ã«ã§ãããã¨ãç¤ºãããã« "_templ" ãä»å ãã
+      return if $generate_no_template     # $generate_all_template より優先される
+
+      # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
       fname = "#{$gen}/#{@global_name}_inline_templ.#{$h_suffix}"
     else
-      # Plugin ã«ããçæãããã»ã«ã¿ã¤ãã«ã¤ãã¦ã¯ãååçã«ãã³ãã¬ã¼ãã§ã¯ãªãã
-      # ä¿®æ­£ä¸è¦ãªã»ã«ã¿ã¤ãã®å®è£
-ã³ã¼ããçæããï¼
-      # ãã®ããããã¡ã¤ã«åã« _temp ãä»å ããªã
+      # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
+      # 修正不要なセルタイプの実装コードを生成する．
+      # このため、ファイル名に _temp を付加しない
       fname = "#{$gen}/#{@global_name}_inline.#{$h_suffix}"
     end
@@ -4232,5 +4135,5 @@
 
     if ( @plugin ) then
-      # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+      # このメソッドの引数は plugin.rb の説明を見よ
       @plugin.gen_postamble( f, @singleton, @name, @global_name )
     end
@@ -4249,19 +4152,19 @@
       if fa.get_name == :write then
 
-        # åå¾ã® " ãåãé¤ã
+        # 前後の " を取り除く
         # file_name = fa.get_file_name.sub( /^\"(.*)\"$/, "\\1" )
         file_name = CDLString.remove_dquote fa.get_file_name
         format = CDLString.remove_dquote fa.get_format
-        # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # åã® " ãåãé¤ã
-        # format    = format.sub( /(.*)\"\z/, "\\1" )              # å¾ã® " ãåãé¤ã
+        # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
+        # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
         format    = format.gsub( /\\\n/, "\n" )                  # \\\n => \n
 
 
-        # mikan ä»¥ä¸ã¯ subst_name ã§ç½®æããããã«å¤æ´ãã¹ã
-        file_name = file_name.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        file_name = file_name.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        format    = format.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        format    = format.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        format    = format.gsub( /\$\$/, "\$" )                # $$ ã $ ã«ç½®æ
+        # mikan 以下は subst_name で置換するように変更すべき
+        file_name = file_name.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
+        file_name = file_name.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
+        format    = format.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
+        format    = format.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
+        format    = format.gsub( /\$\$/, "\$" )                # $$ を $ に置換
 
         if file_name[0] != ?/ then
@@ -4275,5 +4178,5 @@
             puts( format )
           end
-          # format ä¸­ã® \n, \r, \t, \f ã¨ \" ãªã©ãç½®æ
+          # format 中の \n, \r, \t, \f と \" などを置換
           fmt = CDLString.escape format
           cfg_file.print( fmt )
@@ -4292,5 +4195,5 @@
     @ordered_cell_list.each{ |c|
 
-      # cell ã®ãã­ãã¿ã¤ãå®£è¨ãªãç¡è¦
+      # cell のプロトタイプ宣言なら無視
       next if ! c.is_generate?
 
@@ -4301,12 +4204,12 @@
         if fa.get_name == :write then
 
-          # åå¾ã® " ãåãé¤ã
+          # 前後の " を取り除く
           # file_name = fa.get_file_name.sub( /^\"(.*)\"$/, "\\1" )
           file_name = CDLString.remove_dquote fa.get_file_name
           file_name = subst_name( file_name, name_array )
-          # format    = fa.get_format.sub( /^\"(.*)\"$/, "\\1" )        # åå¾ã® "" ãåãé¤ã
+          # format    = fa.get_format.sub( /^\"(.*)\"$/, "\\1" )        # 前後の "" を取り除く
           format    = CDLString.remove_dquote fa.get_format
-          # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # åã® " ãåãé¤ã
-          # format    = format.sub( /(.*)\"\z/, "\\1" )              # å¾ã® " ãåãé¤ã
+          # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
+          # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
           format    = format.gsub( /\\\n/, "\n" )                  # \\\n => \n
 
@@ -4319,10 +4222,10 @@
           end
 
-          na = []     # ã·ã³ãã«ã attribute ã®å¤ã«ç½®ãæããå¾ã®å¼æ°
+          na = []     # シンボルを attribute の値に置き換えた後の引数
           if arg_list then
             arg_list.each { |a|
               case a[0]
-              when :STRING_LITERAL   # æå­åå®æ°
-                # s = a[1].sub( /^\"(.*)\"$/, "\\1" )            # åå¾ã® "" ãåãé¤ã
+              when :STRING_LITERAL   # 文字列定数
+                # s = a[1].sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く
                 s = CDLString.remove_dquote a[1]
                 s = subst_name( s, name_array )
@@ -4331,13 +4234,12 @@
                 na << s
               when :IDENTIFIER
-                param_name = a[1]    # è­å¥å­ï¼å±æ§ã®ååï¼
+                param_name = a[1]    # 識別子（属性の名前）
                 attr = self.find( param_name )
-                init = attr.get_initializer      # celltype ã§æå®ãããåæå¤
-
-                # cell ã® join ã®ãªã¹ãããååãæ¢ã
+                init = attr.get_initializer      # celltype で指定された初期値
+
+                # cell の join のリストから名前を探す
                 j = c.get_join_list.get_item( param_name )
-                if j then    # param_name ã® cell ã®ã¸ã§ã¤ã³ãããã
-                  init = j.get_rhs                    # cell ã§æå®ãããåæå¤ãåªå
-
+                if j then    # param_name の cell のジョインがあるか
+                  init = j.get_rhs                    # cell で指定された初期値を優先
                 end
 
@@ -4345,5 +4247,5 @@
                                       # file,cell, name_array, type,          init, identifier,       indent, f_get_str
 
-                # str = str.sub( /^\"(.*)\"$/, "\\1" )            # åå¾ã® "" ãåãé¤ã mikan ããã§ç½®æã§ããï¼
+                # str = str.sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く mikan ここで置換でよい？
                 str = CDLString.remove_dquote str
                 na << str
@@ -4363,5 +4265,5 @@
             end
 
-            # format ä¸­ã® \n, \r, \t, \f ã¨ \" ãªã©ãç½®æ
+            # format 中の \n, \r, \t, \f と \" などを置換
             fmt = CDLString.escape format
             cfg_file.printf( fmt, *na )
@@ -4387,5 +4289,5 @@
     return if $generate_no_template
 
-    # Makefile.templ ã®çæï¼è¿½è¨ï¼
+    # Makefile.templ の生成（追記）
 
     f = AppFile.open( "#{$gen}/Makefile.templ" )
@@ -4395,7 +4297,7 @@
  
 EOT
-# ãã®çæè¦åã¯2ç¹ã§æå³ããªã
-#  ã»$(GEN_DIR) ã« .o ãçæããã«ã¼ã«ããªã
-#  ã»ãã³ãã¬ã¼ãã³ã¼ãããã®ã¾ã¾ãã«ãããã®ã¯ç´ãããã
+# この生成規則は2点で意味がない
+#  ・$(GEN_DIR) に .o を生成するルールがない
+#  ・テンプレートコードをそのままビルドするのは紛らわしい
 # # Celltype: #{@name}
 # $(GEN_DIR)/#{@global_name}_tecsgen.o : $(GEN_DIR)/#{@global_name}_tecsgen.#{$c_suffix}
@@ -4414,10 +4316,10 @@
     headers = [ "$(GEN_DIR)/#{@global_name}_tecsgen.#{$h_suffix}", "$(GEN_DIR)/#{@global_name}_factory.#{$h_suffix}", "$(GEN_DIR)/global_tecsgen.#{$h_suffix}" ]
 
-    # inline åãå£ãæã¤ãï¼
+    # inline 受け口を持つか？
     if @n_entry_port_inline > 0 then
       headers << "#{@global_name}_inline.#{$h_suffix}"
     end
 
-    # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®ããã
+    # 呼び口または受け口のシグニチャのヘッダ
     @port.each { |p|
       next if p.is_omit?
@@ -4444,9 +4346,8 @@
   end
 
-  #=== decl ç¨ã® dealloc ã³ã¼ããçæ
-  #b_reset:: Bool:  ãªã»ããç¨ã® dealloc ã³ã¼ãã®çæ (NULL ãã¤ã³ã¿ã®å ´å dealloc ããªã)
-  # mikan string ä¿®é£¾ããããã¤ã³ã¿ã®å
-ã«ãã¤ã³ã¿ãæ¥ãªãã¨ä»®å®ããã¤ã³ã¿åãæã¤æ§é ä½ã®å¯è½æ§ãæé¤ãã¦ããªã
-  # ãã®ã¡ã½ããã§ã¯ãè¡ãåºåããç´åã« " \\\n" ãåºåããè¡æ«ã§æ¹è¡æå­ãåºåããªã
+  #=== decl 用の dealloc コードを生成
+  #b_reset:: Bool:  リセット用の dealloc コードの生成 (NULL ポインタの場合 dealloc しない)
+  # mikan string 修飾されたポインタの先にポインタが来ないと仮定。ポインタ型を持つ構造体の可能性を排除していない
+  # このメソッドでは、行を出力する直前に " \\\n" を出力し、行末で改行文字を出力しない
   def gen_dealloc_code_for_type( f, type, dealloc_func_name, pre, name, post, level, b_reset, count_str = nil )
     type = type.get_original_type
@@ -4477,5 +4378,5 @@
         post2 = ""
         type2 = md.get_type.get_original_type
-        if type2.kind_of? PtrType then   # mikan typedef ãããå
+        if type2.kind_of? PtrType then   # mikan typedef された型
           if type2.get_count then
             count_str = type2.get_count.to_str( members_decl, pre2, post2 )
@@ -4550,8 +4451,6 @@
     end
 
-    # å¼ã³å£ã®çµåå
-ã®ã»ã«ã¿ã¤ãã®ãããï¼æé©åã®å ´åã®ã¿ï¼
-    # çµåå
-ã®åãå£ã inline ã®å ´åãinline ãããã
+    # 呼び口の結合先のセルタイプのヘッダ（最適化の場合のみ）
+    # 結合先の受け口が inline の場合、inline ヘッダも
     @port.each { |p|
       next if p.get_port_type != :CALL
@@ -4559,5 +4458,5 @@
 
       if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
-        # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦ãªã©
+        # 最適化コード (optimize) # スケルトン不要など
         p2 = p.get_real_callee_port
         if p2 then
@@ -4569,5 +4468,5 @@
           headers += ct.get_depend_header_list_( celltype_list )
         #else
-        #  optional ã§æªçµå  
+        #  optional で未結合  
         end
       end
@@ -4577,23 +4476,23 @@
 
 
-  #=== $id$, $ct$, $cb$, $idx$ ç½®æ
+  #=== $id$, $ct$, $cb$, $idx$ 置換
   #
-  #  str ã«ä»¥ä¸ã®ç½®æãè¡ã
-  #-   $ct$ â ã»ã«ã¿ã¤ãå(ct)
-  #-   $cell$ â ã»ã«å(cell)   cell ã nil ãªãã°3ã¤ã®ç½®æã¯è¡ãããªã
-  #-   $cb$ â CB ã® C è¨èªå(cb)
-  #-   $cbp$ â CB ã¸ã®ãã¤ã³ã¿(cbp)
-  #-   $cb_proto$ â CB ã® C è¨èªåãã­ãã¿ã¤ãå®£è¨ç¨(cb_proto)
-  #-   $id$ â ct_cell
-  #-   $idx$ â idx
-  #-   $ID$ â id (æ´æ°ã®çªå·)
-  #-   $ct_global$ â ã»ã«ã¿ã¤ãå(ct)
-  #-   $cell_global$ â ã»ã«å(cell)   cell ã nil ãªãã°3ã¤ã®ç½®æã¯è¡ãããªã
-  #-   $$   â $
+  #  str に以下の置換を行う
+  #-   $ct$ ⇒ セルタイプ名(ct)
+  #-   $cell$ ⇒ セル名(cell)   cell が nil ならば3つの置換は行われない
+  #-   $cb$ ⇒ CB の C 言語名(cb)
+  #-   $cbp$ ⇒ CB へのポインタ(cbp)
+  #-   $cb_proto$ ⇒ CB の C 言語名プロトタイプ宣言用(cb_proto)
+  #-   $id$ ⇒ ct_cell
+  #-   $idx$ ⇒ idx
+  #-   $ID$ ⇒ id (整数の番号)
+  #-   $ct_global$ ⇒ セルタイプ名(ct)
+  #-   $cell_global$ ⇒ セル名(cell)   cell が nil ならば3つの置換は行われない
+  #-   $$   ⇒ $
   def subst_name( str, name_array )
     ct   = name_array[0]    # celltype name
     cell = name_array[1]    # cell name
     cb   = name_array[2]    # cell CB name
-    cb_init = name_array[3] # cell CB INIT, ããã¯ç½®æã«ä½¿ãããªã
+    cb_init = name_array[3] # cell CB INIT, これは置換に使われない
     cb_proto = name_array[4] # cell CB name for prototype
     id   = name_array[6]    # cell ID
@@ -4615,5 +4514,5 @@
       str = str.gsub( /(^|[^\$])\$cell_global\$/, "\\1#{cell_global}" )
     end
-    str = str.gsub( /\$\$/, "\$" )                       # $$ ã $ ã«ç½®æ
+    str = str.gsub( /\$\$/, "\$" )                       # $$ を $ に置換
 
     return str
@@ -4622,7 +4521,7 @@
 end
 
-# Appendable Fileï¼è¿½è¨å¯è½ãã¡ã¤ã«ï¼
+# Appendable File（追記可能ファイル）
 class AppFile
-  # éãããã¡ã¤ã«ã®ãªã¹ã
+  # 開いたファイルのリスト
   @@file_name_list = {}
 
@@ -4641,18 +4540,18 @@
     end
 
-    # æ¢ã«éãã¦ãããï¼
+    # 既に開いているか？
     if @@file_name_list[ name ] then
 #2.0
       mode = "a" + mode
-      # è¿½è¨ã¢ã¼ãã§éã
+      # 追記モードで開く
       file = File.open( real_name, mode )
     else
 #2.0
       mode = "w" + mode
-      # æ°è¦ã¢ã¼ãã§éãï¼æ¢ã«ããã°ããµã¤ãºãï¼ã«ããï¼
+      # 新規モードで開く（既にあれば、サイズを０にする）
       file = File.open( real_name, mode )
       @@file_name_list[ name ] = true
     end
-    # File ã¯ã©ã¹ã®ãªãã¸ã§ã¯ããè¿ã
+    # File クラスのオブジェクトを返す
     return file
   end
