Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/componentobj.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/componentobj.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/componentobj.rb	(revision 321)
@@ -6,64 +6,46 @@
 #   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: componentobj.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
 # STAGE:
-# ãã®ã¡ã³ããã³ã¹ç¶æ³ã¯ãããããªã
-#  B    bnf.y.rb ããå¼åºããã
-#  P    parse æ®µéã§å¼åºãããï¼bnf.y.rb ããç´æ¥å¼åºãããããã§ã¯ãªãããæ§ææ¨çæãè¡ãï¼
-#  S    P ã®ä¸­ããå¼åºãããããæ§ææ¨çæããããã§ã¯ãªãæå³ãã§ãã¯ãã
-#  G    ã³ã¼ãçæï¼ãã®æ®µéã§ãæ§ææ¨ã¯å®å
-¨ã§ããï¼ä¸å®å
-¨ãªãã¨ã©ã¼ã§æã¡ãããã¦ããï¼
-#                                                   factory ã®ç¬¬ä¸å¼æ° "format" ã®å¾ãã®å¼æ°
-
-# mikan ä»¥ä¸ã¯ ruby ã® mix in ã§å®ç¾ã§ãããããããªã
-# Nestable ãç¶æ¿ããå ´åãã¯ã©ã¹å¤æ°ã¯ Nestable ã®ãã®ãå
-±æãããï¼å¥ã«ãããã£ãï¼
+# このメンテナンス状況はよろしくない
+#  B    bnf.y.rb から呼出される
+#  P    parse 段階で呼出される（bnf.y.rb から直接呼出されるわけではないが、構文木生成を行う）
+#  S    P の中から呼出されるが、構文木生成するわけではなく意味チェックする
+#  G    コード生成（この段階で、構文木は完全である．不完全ならエラーで打ちきられている）
+#                                                   factory の第一引数 "format" の後ろの引数
+
+# mikan 以下は ruby の mix in で実現できるかもしれない
+# Nestable を継承した場合、クラス変数は Nestable のものが共有される（別にしたかった）
 # class Nestable
 #   @@nest_stack_index = -1
@@ -90,13 +72,11 @@
 #  @name:: Symbol
 #  @global_name:: Symbol
-#  @function_head_list:: NamedList : FuncHead ã®ã¤ã³ã¹ã¿ã³ã¹ãè¦ç´ 
-#  @func_name_to_id::  {String}  :  é¢æ°åãæ·»å­ã¨ããé
-åã§ id ãè¨æ¶ããï¼id ã¯ signature ã®åºç¾é çª (1ããå§ã¾ã)
-#  @context:: string : ã³ã³ãã­ã¹ãå
-#  @b_callback:: bool: callback : ã³ã¼ã«ããã¯ç¨ã®ã·ã°ããã£
-#  @b_deviate:: bool: deviate : é¸è±ï¼pointer level mismatch ãåºããªãï¼
-#  @b_checked_as_allocator_signature:: bool:  ã¢ã­ã±ã¼ã¿ã·ã°ããã£ã¨ãã¦ãã§ãã¯æ¸ã¿
-#  @b_empty:: Bool: ç©º(é¢æ°ãä¸ã¤ããªãç¶æ
-)
+#  @function_head_list:: NamedList : FuncHead のインスタンスが要素
+#  @func_name_to_id::  {String}  :  関数名を添字とする配列で id を記憶する．id は signature の出現順番 (1から始まる)
+#  @context:: string : コンテキスト名
+#  @b_callback:: bool: callback : コールバック用のシグニチャ
+#  @b_deviate:: bool: deviate : 逸脱（pointer level mismatch を出さない）
+#  @b_checked_as_allocator_signature:: bool:  アロケータシグニチャとしてチェック済み
+#  @b_empty:: Bool: 空(関数が一つもない状態)
 
   @@nest_stack_index = -1
@@ -119,5 +99,5 @@
 
   # STAGE: P
-  # ãã®ã¡ã½ããã¯ parse ä¸­ã®ã¿å¼ã³åºããã
+  # このメソッドは parse 中のみ呼び出される
   def self.get_current
     @@current_object
@@ -130,5 +110,5 @@
     @name = name
     Namespace.new_signature( self )
-    set_namespace_path # @NamespacePath ã®è¨­å®
+    set_namespace_path # @NamespacePath の設定
     if "#{Namespace.get_global_name}" == "" then
       @global_name = @name
@@ -152,5 +132,5 @@
     @function_head_list = function_head_list
 
-    # id ãå²ä»ãã
+    # id を割付ける
     id = 1
     function_head_list.get_items.each{ |f|
@@ -166,10 +146,10 @@
   end
 
-  #=== Signature# signature ã®æå®å­ãè¨­å®
+  #=== Signature# signature の指定子を設定
   # STAGE: B
   #spec_list::      [ [ :CONTEXT,  String ], ... ]
   #                     s[0]        s[1]
   def set_specifier_list( spec_list )
-    return if spec_list == nil  # ç©ºãªãã°ä½ãããªã
+    return if spec_list == nil  # 空ならば何もしない
 
     spec_list.each { |s|
@@ -216,13 +196,12 @@
   end
 
-  #=== Signature# é¢æ°åãã signature å
-ã® id ãå¾ã
+  #=== Signature# 関数名から signature 内の id を得る
   def get_id_from_func_name func_name
     @func_name_to_id[ func_name ]
   end
 
-  #=== Signature# context ãå¾ã
-  # context æå­åãè¿ã "task", "non-task", "any"
-  # æªæå®æã®ããã©ã«ãã¨ãã¦ task ãè¿ã
+  #=== Signature# context を得る
+  # context 文字列を返す "task", "non-task", "any"
+  # 未指定時のデフォルトとして task を返す
   def get_context
     if @context then
@@ -233,20 +212,17 @@
   end
 
-  #=== Signature# signaure ã®ãã¹ã¦ã®é¢æ°ã®ãã¹ã¦ã®ãã©ã¡ã¼ã¿ããã©ã
-  #block:: ãã­ãã¯ãå¼æ°ã«åã
-  # ãã­ãã¯ã¯2ã¤ã®å¼æ°ãåãåã  Decl, ParamDecl     ( Decl: é¢æ°ããã )
-  # Port ã¯ã©ã¹ã«ã each_param ãããï¼åãåãï¼
-  def each_param # ãã­ãã¯å¼æ° { |func_decl, param_decl| }
-    fha = get_function_head_array                       # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
-    return if fha == nil                                # nil ãªãææ³ã¨ã©ã¼ã§æå¹å¤ãè¨­å®ãããªãã£ã
-
-    pr = Proc.new   # ãã®ã¡ã½ããã®ãã­ãã¯å¼æ°ã pr ã«ä»£å
-¥
-    fha.each{ |fh|  # fh: FuncHead                      # é¢æ°é
-åä¸­ã®åé¢æ°é ­é¨
-      fd = fh.get_declarator                            # fd: Decl  (é¢æ°é ­é¨ããDeclarotorãå¾ã)
-      if fd.is_function? then                           # fd ãé¢æ°ã§ãªããã°ããã§ã«ã¨ã©ã¼
-        fd.get_type.get_paramlist.get_items.each{ |par| # ãã¹ã¦ã®ãã©ã¡ã¼ã¿ã«ã¤ãã¦
+  #=== Signature# signaure のすべての関数のすべてのパラメータをたどる
+  #block:: ブロックを引数に取る
+  # ブロックは2つの引数を受け取る  Decl, ParamDecl     ( Decl: 関数ヘッダ )
+  # Port クラスにも each_param がある（同じ働き）
+  def each_param # ブロック引数 { |func_decl, param_decl| }
+    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
+    return if fha == nil                                # nil なら文法エラーで有効値が設定されなかった
+
+    pr = Proc.new   # このメソッドのブロック引数を pr に代入
+    fha.each{ |fh|  # fh: FuncHead                      # 関数配列中の各関数頭部
+      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
+      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
+        fd.get_type.get_paramlist.get_items.each{ |par| # すべてのパラメータについて
           pr.call( fd, par )
         }
@@ -255,9 +231,9 @@
   end
 
-  #=== Signature# æ­£å½ãªã¢ã­ã±ã¼ã¿ ã·ã°ããã£ããã¹ããã
-  # alloc, dealloc é¢æ°ãæã¤ãã©ãããç¬¬ä¸å¼ãæ°ããããããæ´æ°ããã¤ã³ã¿ãç¬¬äºå¼ãæ°ãããã¤ã³ã¿ã¸ã®ãã¤ã³ã¿ããªã
+  #=== Signature# 正当なアロケータ シグニチャかテストする
+  # alloc, dealloc 関数を持つかどうか、第一引き数がそれぞれ、整数、ポインタ、第二引き数が、ポインタへのポインタ、なし
   def is_allocator?
 
-    # ä¸åã ããã§ãã¯ãã
+    # 一回だけチェックする
     if @b_checked_as_allocator_signature == true then
       return true
@@ -265,15 +241,13 @@
     @b_checked_as_allocator_signature = true
 
-    fha = get_function_head_array                       # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
-    if fha == nil then                                  # nil ãªãææ³ã¨ã©ã¼ã§æå¹å¤ãè¨­å®ãããªãã£ã
+    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
+    if fha == nil then                                  # nil なら文法エラーで有効値が設定されなかった
       return false
     end
 
     found_alloc = false; found_dealloc = false
-    fha.each{ |fh|  # fh: FuncHead                      # é¢æ°é
-åä¸­ã®åé¢æ°é ­é¨
-      fd = fh.get_declarator                            # fd: Decl  (é¢æ°é ­é¨ããDeclarotorãå¾ã)
-      if fd.is_function? then                           # fd ãé¢æ°ã§ãªããã°ããã§ã«ã¨ã©ã¼
+    fha.each{ |fh|  # fh: FuncHead                      # 関数配列中の各関数頭部
+      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
+      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
         func_name = fd.get_name.to_sym 
         if func_name == :alloc then
@@ -284,5 +258,5 @@
                 ! params[0].get_type.get_original_type.kind_of?( IntType ) ||
                 params[0].get_direction != :IN then
-              # ç¬¬ä¸å¼æ°ã int åã§ãªã
+              # 第一引数が int 型でない
               if ! params[0].instance_of?( ParamDecl ) ||
                   ! params[0].get_type.kind_of?( PtrType ) ||
@@ -290,5 +264,5 @@
                   params[0].get_type.get_type.get_type.kind_of?( PtrType ) ||
                   params[0].get_direction != :OUT then
-                # ç¬¬ä¸å¼æ°ããã¤ã³ã¿åã§ããªã
+                # 第一引数がポインタ型でもない
                 cdl_error3( @locale, "S1003 $1: \'alloc\' 1st parameter neither [in] integer type nor [out] double pointer type", @name )
               end
@@ -298,5 +272,5 @@
                 params[1].get_type.get_type.get_type.kind_of?( PtrType ) ||
                 params[0].get_direction != :IN then
-              # (ç¬¬ä¸å¼æ°ãæ´æ°ã§) ç¬¬äºå¼æ°ããã¤ã³ã¿ã§ãªã
+              # (第一引数が整数で) 第二引数がポインタでない
               cdl_error3( @locale, "S1004 $1: \'alloc\' 2nd parameter not [in] double pointer" , @name )
             end
@@ -313,5 +287,5 @@
                 params[0].get_direction != :IN then
               cdl_error3( @locale, "S1006 $1: \'dealloc\' 1st parameter not [in] pointer type" , @name )
-#            elsif params[1] != nil then    # ç¬¬äºå¼ãæ°ã¯ãã§ãã¯ããªã
+#            elsif params[1] != nil then    # 第二引き数はチェックしない
 #              cdl_error3( @locale, "S1007 Error message is changed to empty" )
 #                 cdl_error3( @locale, "S1007 $1: \'dealloc\' cannot has 2nd parameter" , @name )
@@ -335,20 +309,16 @@
   end
 
-  #== Signature# å¼æ°ã§åç
-§ããã¦ãã Descriptor åã®ãªã¹ããä½æãã
-  #RETURN:: Hash { Signature => ParamDecl }:  è¤æ°ã® ParamDecl ããåç
-§ããã¦ããå ´åãæå¾ã®ãã®ããè¿ããªã
+  #== Signature# 引数で参照されている Descriptor 型のリストを作成する
+  #RETURN:: Hash { Signature => ParamDecl }:  複数の ParamDecl から参照されている場合、最後のものしか返さない
   def get_descriptor_list
     desc_list = { }
     # p "has_desc #{@name}"
-    fha = get_function_head_array                       # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
-    if fha == nil then                                  # nil ã®å ´åãèªå·±åç
-§ã«ããã±ã¼ã¹ã¨ä»®å®
+    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
+    if fha == nil then                                  # nil の場合、自己参照によるケースと仮定
       return desc_list
     end
     fha.each{ |fh|
-      fd = fh.get_declarator                            # fd: Decl  (é¢æ°é ­é¨ããDeclarotorãå¾ã)
-      if fd.is_function? then                           # fd ãé¢æ°ã§ãªããã°ããã§ã«ã¨ã©ã¼
+      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
+      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
         params = fd.get_type.get_paramlist.get_items
         if params then
@@ -369,16 +339,14 @@
   end
 
-  #=== Signature# å¼æ°ã« Descriptor ããããï¼
+  #=== Signature# 引数に Descriptor があるか？
   def has_descriptor?
     # p "has_desc #{@name}"
-    fha = get_function_head_array                       # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
-    if fha == nil then                                  # nil ã®å ´åãèªå·±åç
-§ã«ããã±ã¼ã¹ã¨ä»®å®
+    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
+    if fha == nil then                                  # nil の場合、自己参照によるケースと仮定
       return true
     end
     fha.each{ |fh|
-      fd = fh.get_declarator                            # fd: Decl  (é¢æ°é ­é¨ããDeclarotorãå¾ã)
-      if fd.is_function? then                           # fd ãé¢æ°ã§ãªããã°ããã§ã«ã¨ã©ã¼
+      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
+      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
         params = fd.get_type.get_paramlist.get_items
         if params then
@@ -399,28 +367,25 @@
   end
 
-  #=== Signature# ã³ã¼ã«ããã¯ãï¼
-  # æå®å­ callback ãæå®ããã¦ããã° true 
+  #=== Signature# コールバックか？
+  # 指定子 callback が指定されていれば true 
   def is_callback?
     @b_callback
   end
 
-  #=== Signature# é¸è±ãï¼
-  # æå®å­ deviate ãæå®ããã¦ããã° true 
+  #=== Signature# 逸脱か？
+  # 指定子 deviate が指定されていれば true 
   def is_deviate?
     @b_deviate
   end
 
-  #=== Signature# ç©ºãï¼
+  #=== Signature# 空か？
   def is_empty?
     @b_empty
   end
 
-  #=== Signature# Push Pop Allocator ãå¿
-è¦ãï¼
-  # Transparent RPC ã®å ´å oneway ãã¤ in ã®é
-å(size_is, count_is, string ã®ããããã§ä¿®é£¾ï¼ããã
+  #=== Signature# Push Pop Allocator が必要か？
+  # Transparent RPC の場合 oneway かつ in の配列(size_is, count_is, string のいずれかで修飾）がある
   def need_PPAllocator?( b_opaque = false )
-    fha = get_function_head_array                       # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
+    fha = get_function_head_array                       # 呼び口または受け口のシグニチャの関数配列
     fha.each{ |fh|
       fd = fh.get_declarator
@@ -457,11 +422,11 @@
 # @factory_list::   Factory[]
 # @ct_factory_list::    Factory[] :    celltype factory
-# @cell_list:: Cell[] : å®ç¾©ã®ã¿ (V1.0.0.2 ä»¥é)
+# @cell_list:: Cell[] : 定義のみ (V1.0.0.2 以降)
 # @singleton:: bool
 # @idx_is_id:: bool
 # @idx_is_id_act:: bool: actual value
 # @active:: bool
-# @b_reuse:: bool :  reuse æå®ããã¦ import ããã(template ä¸è¦)
-# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin ã¯çæå¾ã«è¿½å ããã
+# @b_reuse:: bool :  reuse 指定されて import された(template 不要)
+# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
 #
 # @n_attribute_ro:: int >= 0    none specified
@@ -470,24 +435,22 @@
 # @n_var:: int >= 0
 # @n_var_size_is:: int >= 0     # of [size_is] specified vars # mikan count_is
-# @n_var_omit:: int >= 0        # of [omit] specified vars # mikan var ã® omit ã¯æï¼
+# @n_var_omit:: int >= 0        # of [omit] specified vars # mikan var の omit は有？
 # @n_var_init:: int >= 0        # of vars with initializer
 # @n_call_port:: int >= 0
 # @n_call_port_array:: int >= 0
-# @n_call_port_omitted_in_CB:: int >= 0   æé©åã§çç¥ãããå¼ã³å£
+# @n_call_port_omitted_in_CB:: int >= 0   最適化で省略される呼び口
 # @n_entry_port:: int >= 0
 # @n_entry_port_array:: int >= 0
 # @n_entry_port_inline:: int >= 0
-# @n_cell_gen:: int >= 0  çæããã»ã«ã®æ°ï¼ã³ã¼ãçæã®é ­ã§ç®åºããï¼æå³è§£ææ®µéã§ã¯åç
-§ä¸å¯
-# @id_base:: Integer : cell ã® ID ã®æå°å¤(æå¤§å¤ã¯ @id_base + @n_cell)
+# @n_cell_gen:: int >= 0  生成するセルの数．コード生成の頭で算出する．意味解析段階では参照不可
+# @id_base:: Integer : cell の ID の最小値(最大値は @id_base + @n_cell)
 #
-# @b_cp_optimized:: bool : å¼ã³å£æé©åå®æ½
-# @plugin:: PluginObject      ãã®ã»ã«ã¿ã¤ãããã©ã°ã¤ã³ã«ããçæããã CDL ããçæãããå ´åã«æå¹ã
-#                              generate ã®æå®ã¯ @generate ã«ãã©ã°ã¤ã³ãä¿æããã
+# @b_cp_optimized:: bool : 呼び口最適化実施
+# @plugin:: PluginObject      このセルタイプがプラグインにより生成された CDL から生成された場合に有効。
+#                              generate の指定は @generate にプラグインが保持される
 #
-# @included_header:: Hash :  include ãããããããã¡ã¤ã«
-# @domain_roots::Hash { DomainTypeName(Symbol) => [ Region ] }  ãã¡ã¤ã³ã¿ã¤ãåã¨ Region ã®é
-å (optimize.rb ã§è¨­å®)
-#                                               ã«ã¼ããªã¼ã¸ã§ã³ã¯ãã¡ã¤ã³åããnil
+# @included_header:: Hash :  include されたヘッダファイル
+# @domain_roots::Hash { DomainTypeName(Symbol) => [ Region ] }  ドメインタイプ名と Region の配列 (optimize.rb で設定)
+#                                               ルートリージョンはドメイン名が　nil
 
   include PluginModule
@@ -553,11 +516,9 @@
 
     @plugin = Generator.get_plugin
-      # plugin ã®å ´å PluginObject ãè¿ããã
-    # å
-ã® Generator ããå¼åºããã Generator ã®ä¸­ã§ãã¼ã¹ããã³æå³ãã§ãã¯ããã¦ãã
+      # plugin の場合 PluginObject が返される
+    # 元の Generator から呼出された Generator の中でパースおよび意味チェックされている
 
     # if @plugin then
-    #  # plugin çæãããã»ã«ã¿ã¤ãã¯åå©ç¨ã§ã¯ãªã   #833 ä¸å
-·åä¿®æ­£
+    #  # plugin 生成されるセルタイプは再利用ではない   #833 不具合修正
     #  @b_reuse = false
     # else
@@ -573,5 +534,5 @@
 
     Namespace.new_celltype( self )
-    set_namespace_path # @NamespacePath ã®è¨­å®
+    set_namespace_path # @NamespacePath の設定
     set_specifier_list( Generator.get_statement_specifier )
 
@@ -589,7 +550,6 @@
   end
 
-  #== Celltype#ãã¡ã¤ã³ã«ã¼ããè¿ã
-  # @domain_roots ã®èª¬æãåç
-§
+  #== Celltype#ドメインルートを返す
+  # @domain_roots の説明を参照
   def get_domain_roots
     @domain_roots
@@ -598,13 +558,11 @@
   # Celltype# end_of_parse
   def end_of_parse
-    # å±æ§ã»å¤æ°ã®ãã§ãã¯
+    # 属性・変数のチェック
     check_attribute
 
-    # ã¢ã­ã±ã¼ã¿å¼ã³å£ãå
-é¨çæ
+    # アロケータ呼び口を内部生成
     generate_allocator_port
 
-    # ãªã¬ã¼ã¢ã­ã±ã¼ã¿ãå
-é¨ã¢ã­ã±ã¼ã¿ã®è¨­å®
+    # リレーアロケータ、内部アロケータの設定
     @port.each { |p|
       p.set_allocator_instance
@@ -666,7 +624,5 @@
       end
       if a.get_initializer then
-        # ç»é²å¾ã«ãã§ãã¯ãã¦ãåé¡ãªãï¼attr ãåç
-§ã§ããªãã®ã§ãèªå·±åç
-§ããªãï¼
+        # 登録後にチェックしても問題ない（attr を参照できないので、自己参照しない）
         a.get_type.check_init( @locale, a.get_identifier, a.get_initializer, :ATTRIBUTE )
       end
@@ -674,31 +630,28 @@
   end
 
-  #=== Celltype# celltype ã® attribute/var ã®ãã§ãã¯
+  #=== Celltype# celltype の attribute/var のチェック
   # STAGE:  S
   #
-  # ãã®ã¡ã½ããã¯ celltype ã®ãã¼ã¹ãå®äºããæç¹ã§å¼åºãããï¼
+  # このメソッドは celltype のパースが完了した時点で呼出される．
   def check_attribute
-    # attribute ã® size_is æå®ãå¦¥å½ããã§ãã¯
+    # attribute の size_is 指定が妥当かチェック
     (@attribute+@var).each{ |a|
       if a.get_size_is then
         if ! a.get_type.kind_of?( PtrType ) then
-          # size_is ããã¤ã³ã¿åä»¥å¤ã«æå®ããã
+          # size_is がポインタ型以外に指定された
           cdl_error( "S1011 $1: size_is specified for non-pointer type" , a.get_identifier )
         else
 
-          # åç
-§ããå¤æ°ãå­å¨ããè¨ç®å¯è½ãªåããã§ãã¯ãã
-          size = a.get_size_is.eval_const( @name_list )  # C_EXP ã®å¯è½æ§ãã
+          # 参照する変数が存在し、計算可能な型かチェックする
+          size = a.get_size_is.eval_const( @name_list )  # C_EXP の可能性あり
           init = a.get_initializer
           if init then
             if ! init.instance_of?( Array ) then
-              # åæåå­ãé
-åã§ã¯ãªã
+              # 初期化子が配列ではない
               cdl_error( "S1012 $1: unsuitable initializer, need array initializer" , a.get_identifier )
             elsif size.kind_of?( Integer ) && size < init.length then
-              # size_is æå®ãããåæ°ãããåæåå­ã®é
-åè¦ç´ ãå¤ã
+              # size_is 指定された個数よりも初期化子の配列要素が多い
               cdl_error( "S1013 $1: too many initializer, $2 for $3" , a.get_identifier, init.length, size )
-            # elsif a.get_size_is.eval_const( nil ) == nil  # C_EXP ã®å¯è½æ§ãã
+            # elsif a.get_size_is.eval_const( nil ) == nil  # C_EXP の可能性あり
             end
 
@@ -710,5 +663,5 @@
               ( a.get_initializer.instance_of?( Expression ) &&
                 a.get_initializer.eval_const2(@name_list).instance_of?( Array ) ) then
-            # size_is æå®ããã¦ããªããã¤ã³ã¿ã Array ã§åæåããã¦ããããã¨ã©ã¼
+            # size_is 指定されていないポインタが Array で初期化されていたら、エラー
             cdl_error( "S1159 $1: non-size_is pointer cannot be initialized with array initializer" , a.get_identifier )
           end
@@ -722,20 +675,19 @@
   end
 
-  #=== Celltype# ã¢ã­ã±ã¼ã¿å¼ã³å£ãçæ
-  #    send, receive å¼æ°ã®ã¢ã­ã±ã¼ã¿ãå¼åºãããã®å¼ã³å£ãçæ
+  #=== Celltype# アロケータ呼び口を生成
+  #    send, receive 引数のアロケータを呼出すための呼び口を生成
   def generate_allocator_port
     @port.each { |port|
-      # ãã¼ãã®ãã¹ã¦ã®ãã©ã¡ã¼ã¿ãè¾¿ã
+      # ポートのすべてのパラメータを辿る
       port.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, :RECEIVE
           if par.get_allocator then
-            cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®åå
-            #           ãã¼ãå          é¢æ°å         ãã©ã¡ã¼ã¿å
-            # alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace ã¢ã­ã±ã¼ã¿å¼ã³å£ã®ã·ã°ããã£ #1
+            cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
+            #           ポート名          関数名         パラメータ名
+            # alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace アロケータ呼び口のシグニチャ #1
             alloc_sig_path = par.get_allocator.get_namespace_path
-            array_size = port.get_array_size            # å¼ã³å£ã¾ãã¯åãå£é
-åã®ãµã¤ãº
-            created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # å¼ã³å£ãçæ
+            array_size = port.get_array_size            # 呼び口または受け口配列のサイズ
+            created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # 呼び口を生成
             created_port.set_allocator_port( port, fd, par )
             if port.is_optional? then
@@ -745,5 +697,5 @@
               created_port.set_omit
             end
-            new_port( created_port )                    # ã»ã«ã¿ã¤ãã«æ°ããå¼ã³å£ãè¿½å 
+            new_port( created_port )                    # セルタイプに新しい呼び口を追加
           # else
           #  already error "not found or not signature" in class ParamDecl
@@ -762,6 +714,5 @@
   end
 
-  #=== Celltype# æ°ããå
-é¨å¤æ°
+  #=== Celltype# 新しい内部変数
   #var:: [Decl]
   def new_var( var )
@@ -776,6 +727,5 @@
       @name_list.add_item( i )
 
-      # size_is æå®ãããé
-å? mikan  count_is
+      # size_is 指定された配列? mikan  count_is
       if i.get_size_is then
         @n_var_size_is += 1
@@ -793,5 +743,5 @@
   end
 
-  #=== Celltype# celltype ã®æå®å­ãè¨­å®
+  #=== Celltype# celltype の指定子を設定
   def set_specifier_list( spec_list )
     return if spec_list == nil
@@ -822,11 +772,11 @@
 
   def new_require( ct_or_cell_nsp, ep_name, cp_name )
-    # Require: set_owner ãããã®ããªã
+    # Require: set_owner するものがない
     obj = Namespace.find( ct_or_cell_nsp )    #1
     if obj.instance_of? Celltype then
-      # Celltype åã§æå®
+      # Celltype 名で指定
       ct = obj
     elsif obj.instance_of? Cell then
-      # Cell åã§æå®
+      # Cell 名で指定
       ct = obj.get_celltype
     elsif obj == nil then
@@ -839,9 +789,9 @@
 
     if( ! ct.is_singleton? ) then
-      # ã·ã³ã°ã«ãã³ã§ã¯ãªã
+      # シングルトンではない
       cdl_error( "S1018 $1 : not singleton cell" , obj.get_name )
     end
 
-    # åãå£ãæ¢ã
+    # 受け口を探す
     obj2 = ct.find( ep_name )
     if( ( ! obj2.instance_of? Port ) || obj2.get_port_type != :ENTRY ) then
@@ -854,5 +804,5 @@
 
     if obj2.get_signature == nil then
-      # signature ãæªå®ç¾©ï¼æ¢ã«ã¨ã©ã¼
+      # signature が未定義：既にエラー
       return
     end
@@ -860,17 +810,17 @@
     require_call_port_prefix = :_require_call_port
     if cp_name == nil then
-      # é¢æ°åéè¤ãã§ãã¯
+      # 関数名重複チェック
       @require.each{ |req|
         unless req[0].to_s =~ /^#{require_call_port_prefix}/ then
-          next     # ååããã® require ã¯é¢æ°åéè¤ãã§ãã¯ããªã
+          next     # 名前ありの require は関数名重複チェックしない
         end
         port = req[2]
         if port.get_signature == obj2.get_signature then
-          # åã signature ï¼ãã¹ã¦åãé¢æ°åãæã¤ï¼åå¥ã«åºãã®ã§ã¯ãªããã¾ã¨ãã¦ã¨ã©ã¼ã¨ãã
+          # 同じ signature （すべて同じ関数名を持つ）個別に出すのではなく、まとめてエラーとする
           cdl_error( "S1021 $1 : require cannot have same signature with \'$2\'" , obj2.get_name, port.get_name )
           next
         end
         port.get_signature.get_function_head_array.each{ |f|
-          # mikan ããã¯ãnamedList ããã®æ¤ç´¢ã«ãªããªãã®ï¼ï¼å¹çãæªãï¼
+          # mikan ここは、namedList からの検索にならないの？（効率が悪い）
           obj2.get_signature.get_function_head_array.each{ |f2|
             if( f.get_name == f2.get_name ) then
@@ -888,8 +838,8 @@
       b_has_name = true
     end
-    # require ãè¿½å 
+    # require を追加
     @require << [ cp_name, obj, obj2 ]  # [ lhs:cp_name, rhs:Celltype, rhs:Port ]
 
-    # require port ãè¿½å  (å¼ã³å£ã¨ãã¦è¿½å ããããã ã require ãã»ãããã¦ãã)
+    # require port を追加 (呼び口として追加する。ただし require をセットしておく)
     port = Port.new( cp_name, obj2.get_signature.get_namespace_path, :CALL )
     port.set_require( b_has_name )
@@ -913,5 +863,5 @@
   end
 
-  #=== Celltype# ã»ã«ã¿ã¤ããã©ã°ã¤ã³ (generate æå®å­)
+  #=== Celltype# セルタイププラグイン (generate 指定子)
   def celltype_plugin
 
@@ -927,5 +877,5 @@
 
     begin
-      eval( eval_str )     # plugin ãçæ
+      eval( eval_str )     # plugin を生成
       plugin_object.set_locale @locale
       @generate[ 2 ] = plugin_object
@@ -939,12 +889,12 @@
   end
 
-  #=== Celltype# celltype ã«æ°ãã cell ãè¿½å 
+  #=== Celltype# celltype に新しい cell を追加
   #cell:: Cell
-  # æ°ããã»ã«ãã»ã«ã¿ã¤ãã«è¿½å ï¼
-  # ã»ã«ã®æ§æè§£éã®æå¾ã§ãã®ã¡ã½ããå¼åºãããï¼
-  # ã·ã³ã°ã«ãã³ã»ã«ãåã linkunit ã«è¤æ°ãªãããã§ãã¯
+  # 新しいセルをセルタイプに追加．
+  # セルの構文解釈の最後でこのメソドを呼出される．
+  # シングルトンセルが同じ linkunit に複数ないかチェック
   def new_cell( cell )
-    # Celltype ã§ã¯ Cell ã® set_owner ããªã
-    # ã·ã³ã°ã«ãã³ã§ããã­ãã¿ã¤ãå®£è¨ã§ãªãå ´åãã³ã¼ãçæå¯¾è±¡ãªã¼ã¸ã§ã³ã®å ´å
+    # Celltype では Cell の set_owner しない
+    # シングルトンで、プロトタイプ宣言でない場合、コード生成対象リージョンの場合
     if @singleton  then
       @cell_list.each{ |c|
@@ -960,12 +910,12 @@
   end
 
-  #=== Celltype# ã»ã«ã¿ã¤ãã¯ INIB ãæã¤ãï¼
-  # ã»ã«ã¿ã¤ãã INIB ãæã¤ãã©ãããå¤å®ãã
-  # $rom == false ã®ã¨ã:  INIB ãæããªãï¼ ï¼ãã¹ã¦ã¯ CB ã«ç½®ãããï¼
-  # $rom == true ã®ã¨ããINIB ã«ç½®ããããã®ãä¸ã¤ã§ãå­å¨ããã° INIB ãæã¤
-  #   INIB ã«ç½®ããããã®ã¯
-  #     attribute (omit ã®ãã®ã¯é¤ãï¼ç¾ä»æ§ã§ã¯ rw ã®ãã®ã¯ãªã)
-  #     size_is ãä¼´ã var
-  #     å¼ã³å£ï¼ãã ããæé©åã§ä¸è¦ã¨ãªããã®ã¯é¤ãï¼
+  #=== Celltype# セルタイプは INIB を持つか？
+  # セルタイプが INIB を持つかどうかを判定する
+  # $rom == false のとき:  INIB を持たない． （すべては CB に置かれる）
+  # $rom == true のとき、INIB に置かれるものが一つでも存在すれば INIB を持つ
+  #   INIB に置かれるものは
+  #     attribute (omit のものは除く．現仕様では rw のものはない)
+  #     size_is を伴う var
+  #     呼び口（ただし、最適化で不要となるものは除く）
   def has_INIB?
 #    print "name=#{@name} @n_attribute_ro=#{@n_attribute_ro}  @n_var_size_is=#{@n_var_size_is} @n_call_port=#{@n_call_port} @n_call_port_omitted_in_CB=#{@n_call_port_omitted_in_CB} @n_entry_port_array_ns=#{@n_entry_port_array_ns}\n"
@@ -974,12 +924,12 @@
   end
 
-  #=== Celltype# ã»ã«ã¿ã¤ãã¯ CB ãæã¤ãï¼
-  # $rom == true ã®ã¨ããããã®ãã®ãç½®ãããï¼ãããã®ä¸ã¤ã§ãå­å¨ããã° CB ãæã¤
-  #   size_is ãæå®ããã¦ããªã var
-  #   rw æå®ããã attribute (ç¾ä»æ§ã§ã¯å­å¨ããªã)
-  # $rom == false ã®ã¨ããããã®ãã®ãç½®ãããï¼ãããã®ä¸ã¤ã§ãå­å¨ããã° CB ãæã¤
+  #=== Celltype# セルタイプは CB を持つか？
+  # $rom == true のとき、いかのものが置かれる．それらの一つでも存在すれば CB を持つ
+  #   size_is が指定されていない var
+  #   rw 指定された attribute (現仕様では存在しない)
+  # $rom == false のとき、いかのものが置かれる．それらの一つでも存在すれば CB を持つ
   #   attribute
   #   var
-  #   å¼ã³å£ï¼ãã ããæé©åã§ä¸è¦ã¨ãªããã®ã¯é¤ãï¼
+  #   呼び口（ただし、最適化で不要となるものは除く）
   def has_CB?
     if $rom then
@@ -991,11 +941,10 @@
   end
 
-  #=== Celltype# SET_CB_INIB_POINTER, INITIALIZE_CB ãå¿
-è¦ã
+  #=== Celltype# SET_CB_INIB_POINTER, INITIALIZE_CB が必要か
   def need_CB_initializer?
     @n_var_init > 0 || has_CB?
   end
 
-  #=== Celltype# érequire ã®çµåãçæãã
+  #=== Celltype# 逆require の結合を生成する
   def create_reverse_require_join cell
     @port.each{ |p|
@@ -1004,15 +953,14 @@
   end
 
-  #=== Celltype# singleton ã»ã«ãå¾ã
-  #region:: Region   : singleton ãæ¢ã Region
-  # è·é¢ãæãè¿ããã®ãè¿ã
-  # mikan æ¬å½ã¯ region ã®ç¯å²ã® singleton ãæ¢ãå¿
-è¦ããã
+  #=== Celltype# singleton セルを得る
+  #region:: Region   : singleton を探す Region
+  # 距離が最も近いものを返す
+  # mikan 本当は region の範囲の singleton を探す必要がある
   def get_singleton_cell region
     cell = nil
-    dist = 999999999 # mikan å¶éå¤ï¼ããã¯ååãããã»ã©ãã«ã¤ãï¼
-    # require: celltype ã§æå®
+    dist = 999999999 # mikan 制限値（これは十分すぎるほどデカイが）
+    # require: celltype で指定
     @cell_list.each{ |c|
-      # å°éå¯è½ã§æãè¿ãã»ã«ãæ¢ãï¼è¤æ°ã® singleton ããããããããªãï¼
+      # 到達可能で最も近いセルを探す（複数の singleton があるかもしれない）
       d = region.distance( c.get_region )
       #debug
@@ -1033,5 +981,5 @@
   end
 
-  #=== Celltype# ã»ã«ã¿ã¤ããã©ã°ã¤ã³ãå¾ã
+  #=== Celltype# セルタイププラグインを得る
   def get_celltype_plugin
     if @generate then
@@ -1052,6 +1000,6 @@
   end
 
-  #=== Celltype# ã¢ã¯ãã£ãã§ã¯ãªãã
-  # ãã®ã¡ã½ããã§ã¯ active ã®ä»ã« factory (singleton ã«ããã¦ã¯ FACTORYãå«ã)ããªããã° inactive ã¨ãã
+  #=== Celltype# アクティブではないか
+  # このメソッドでは active の他に factory (singleton においては FACTORYを含む)がなければ inactive とする
   def is_inactive?
     if @active == false && @factory_list.length == 0 &&
@@ -1074,15 +1022,14 @@
   end
 
-  #=== Celltype# ã³ã¼ãçæããå¿
-è¦ããããå¤å®
-  # ã»ã«ã®åæ°ã 0 ãªãã»ã«ã¿ã¤ãã³ã¼ãã¯çæä¸è¦
+  #=== Celltype# コード生成する必要があるか判定
+  # セルの個数が 0 ならセルタイプコードは生成不要
   def need_generate?
     @n_cell_gen > 0
   end
 
-  #=== Celltype# require å¼ã³å£ã®çµåãè¡ã
+  #=== Celltype# require 呼び口の結合を行う
   # STAGE: S
-  # ã»ã«ã¿ã¤ãã® require å¼ã³å£ã«ã¤ãã¦ãçµåãè¡ã
-  # ã»ã«ãçæãããªãããã§ãã¯ãè¡ã
+  # セルタイプの require 呼び口について、結合を行う
+  # セルが生成されないかチェックを行う
   def set_require_join
     @require.each{ |req|
@@ -1100,6 +1047,6 @@
   end
 
-  #=== Celltype# inline åãå£ãããªããï¼
-  # åãå£ãç¡ãå ´åããã¹ã¦ã®åãå£ã inline ã¨ã¯ããªã
+  #=== Celltype# inline 受け口しかないか？
+  # 受け口が無い場合、すべての受け口が inline とはしない
   def is_all_entry_inline?
     @n_entry_port == @n_entry_port_inline && @n_entry_port > 0
@@ -1140,15 +1087,14 @@
 # @n_var:: int >= 0
 # @n_var_size_is:: int >= 0     # of [size_is] specified cells # mikan count_is
-# @n_var_omit:: int >= 0        # of [omit] specified  cells # mikan var ã® omit ã¯æï¼
+# @n_var_omit:: int >= 0        # of [omit] specified  cells # mikan var の omit は有？
 # @n_call_port:: int >= 0
 # @n_call_port_array:: int >= 0
-# @n_call_port_omitted_in_CB:: int >= 0   æé©åã§çç¥ãããå¼ã³å£
+# @n_call_port_omitted_in_CB:: int >= 0   最適化で省略される呼び口
 # @n_entry_port:: int >= 0
 # @n_entry_port_array:: int >= 0
     (indent+1).times { print "  " }
     puts "@n_entry_port_inline #{@n_entry_port_inline}"
-# @n_cell:: int >= 0  ã³ã¼ãçæã®é ­ã§ç®åºããï¼æå³è§£ææ®µéã§ã¯åç
-§ä¸å¯
-# @id_base:: Integer : cell ã® ID ã®æå°å¤(æå¤§å¤ã¯ @id_base + @n_cell)
+# @n_cell:: int >= 0  コード生成の頭で算出する．意味解析段階では参照不可
+# @id_base:: Integer : cell の ID の最小値(最大値は @id_base + @n_cell)
 
   end
@@ -1156,8 +1102,7 @@
 
 class Cell < NSBDNode # < Nestable
-# @name:: Symbol : composite celltype ã®å
-å´ã®ã¤ã³ã¹ã¿ã³ã¹ã§ã¯å¤ã®ã»ã«
-# @global_name:: Symbol : C ã§ä½¿ããååï¼namespace ãå«ãï¼
-# @local_name:: str : cell celltype name { ... } ã® name
+# @name:: Symbol : composite celltype の内側のインスタンスでは外のセル
+# @global_name:: Symbol : C で使える名前（namespace を含む）
+# @local_name:: str : cell celltype name { ... } の name
 # @celltype:: Celltype | CompositeCelltype
 # @join_list:: NamedList
@@ -1166,64 +1111,52 @@
 # @b_prototype:: bool:  prototype specified in current parsing cell. (@b_defined is used to determine whether definition done)
 # @b_duplicate:: bool:  definition duplicate
-# @b_checked::   bool:  set_definition_join ãæ¸ãã§ããå ´å true
-# @require_joined_list:: {cp_name=>true}:  set_require_join ãæ¸ãã§ããå¼ã³å£ã¯ true
+# @b_checked::   bool:  set_definition_join が済んでいる場合 true
+# @require_joined_list:: {cp_name=>true}:  set_require_join が済んでいる呼び口は true
 # @f_ref:: refercenced from others
-# @entry_array_max_subscript:: { @port=>Integer } : åãå£é
-åã®é
-åæ·»æ°ã®æå¤§å¤ï¼æ·»æ°ç¡ãåãå£é
-åå¯¾å¿ï¼
+# @entry_array_max_subscript:: { @port=>Integer } : 受け口配列の配列添数の最大値（添数無し受け口配列対応）
 # @plugin::     Plugin: avialble if cell is generated by plugin generated cdl code.
-# @referenced_port_list:: { Port => Integer } : åãå£ã®åç
-§æ°
-#                                               ãã¹ã¦ã®æå³è§£æ(through, compositeå±é)ãçµãã£ãå¾ã«è¨­å®ãã
-#                                               érequire ãã¼ãã«å¯¾ãã¦è¤æ°ã®çµåããªãããã§ãã¯ãã
-# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin ã¯çæå¾ã«è¿½å ããã
+# @referenced_port_list:: { Port => Integer } : 受け口の参照数
+#                                               すべての意味解析(through, composite展開)が終わった後に設定する
+#                                               逆require ポートに対して複数の結合がないかチェックする
+# @generate:: [ Symbol, String, Plugin ]  = [ PluginName, option, Plugin ] Plugin は生成後に追加される
 #
-# composite ã®ããã¤ã³ã¹ã¿ã³ã¹å¤æ°
+# composite のためインスタンス変数
 # @in_composite:: bool : true if in composite celltype
 # @compositecelltypejoin_list:: NamedList : item= CompositeCelltypeJoin ( if @in_composite )
 # @f_cloned:: bool : true if cloned (instantiate of composite consist cell)
-# @my_clone:: Cell : Composite cell ã§ in_composite = true ã®å ´åã®ã¿æå¹ï¼ç´åã® clone ãä¸æè¨æ¶ï¼
-# @cell_list:: Cell[local_name] : Composite cell ã§ clone ããå¾ã®ãªã¹ã cell_list
-# @cell_list2:: [ Cell ] : Composite cell ã§ clone ããå¾ã®ãªã¹ã cell_list
-#                          @cell_list2 ã¯ composite å
-ã§ã®åºç¾é   
+# @my_clone:: Cell : Composite cell で in_composite = true の場合のみ有効（直前の clone を一時記憶）
+# @cell_list:: Cell[local_name] : Composite cell で clone した後のリスト cell_list
+# @cell_list2:: [ Cell ] : Composite cell で clone した後のリスト cell_list
+#                          @cell_list2 は composite 内での出現順  
 #
-# region ã®ããã®ã¤ã³ã¹ã¿ã³ã¹å¤æ°
-# @region:: Region (å±ããregion)
+# region のためのインスタンス変数
+# @region:: Region (属するregion)
 #
-# allocator ã®ããã®ã¤ã³ã¹ã¿ã³ã¹å¤æ°
+# allocator のためのインスタンス変数
 # @alloc_list::  [ [ NORMAL_ALLOC, ep_name, func_name, param_name, expr ], ... ]
-#   åãå£å´ã®ã¢ã­ã±ã¼ã¿ã¸ã®çµåãè¨æ¶ãä»¥ä¸ã®ã¡ã½ããã§è¿½å ããã
-#      set_specifier â¦ cell å®ç¾©æã«ã¢ã­ã±ã¼ã¿æå®ããã¦ããå ´å
-#      create_relay_allocator_join â¦ ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã®å ´å
+#   受け口側のアロケータへの結合を記憶。以下のメソッドで追加される
+#      set_specifier … cell 定義時にアロケータ指定されている場合
+#      create_relay_allocator_join … リレーアロケータの場合
 #
-# ID ã®ããã®ã¤ã³ã¹ã¿ã³ã¹å¤æ°ï¼optimize.rb ã«ã¦è¨­å®ï¼
-# @id:: Integer : ã³ã¼ãçæç´åã«è¨­å®  (ãã­ãã¿ã¤ãå®£è¨ã®å ´åã¯ -1 ã®ã¾ã¾æ¾ç½®)
-# @id_specified::Integer : æå®ããã id
+# ID のためのインスタンス変数（optimize.rb にて設定）
+# @id:: Integer : コード生成直前に設定  (プロトタイプ宣言の場合は -1 のまま放置)
+# @id_specified::Integer : 指定された id
 # @restrict_list::{ entry_name => { func_name, [ region_name, ... ] } }
 
 =begin
-# Cell ã¯ã©ã¹ã¯ãä»¥ä¸ã®ãã®ãæ±ã
-# 1)æ®éã®ã»ã«
-# 2)composite ã»ã«ã¿ã¤ãã®ã»ã«
-# 3)composite ã»ã«ã¿ã¤ãã®å
-å´ã®ã»ã« (@in_composite)   # composite ã®å
-å´ã® composite ã»ã«ã¿ã¤ãã®ã»ã«ããã
+# Cell クラスは、以下のものを扱う
+# 1)普通のセル
+# 2)composite セルタイプのセル
+# 3)composite セルタイプの内側のセル (@in_composite)   # composite の内側の composite セルタイプのセルもある
 #
-# 2) ã¯ CellOfComposite ã¯ã©ã¹ã¨ãã¦åããã»ãããããããããªã
-#    expand (composite ã»ã«ã®å±é) ã¯ CellOfComposite ã«ã®ã¿å¿
-è¦ãªã¡ã½ããã§ãã
-#    get_real_cell, get_real_port ãªã© @celltype.instance_of?( CompositeCelltype ) ã®å¤å®ããªããã£ãããã
-#    ãã ãåé¢ãã¦ããã¡ã³ããã³ã¹ãã¹ãç¯å²ãåãé¢ããã¦ãã¾ããå¿ãããããªãåé¡ã¨ã®ãã¬ã¼ããªããã
+# 2) は CellOfComposite クラスとして分けたほうがよいかもしれない
+#    expand (composite セルの展開) は CellOfComposite にのみ必要なメソッドである
+#    get_real_cell, get_real_port など @celltype.instance_of?( CompositeCelltype ) の判定がなくすっきりする
+#    ただ、分離しても、メンテナンスすべき範囲が切り離されてしまい、忘れやすくなる問題とのトレードオフかも
 #
-# 3) ã¯ CellInCompoiste ã¯ã©ã¹ã¨ãã¦åããã»ãããããããããªã
-#    @in_composite ã§å¤å®ãã¦ããå¦çãåãé¢ãã (ä¸è¨ 2) ãããåé¢ã¯å®¹æã§ã¯ãªã)
-#    clone_for_composite ã¯ CellInCompoiste ã«ã®ã¿å¿
-è¦ãªã¡ã½ããã§ãã
-#    ãã ããclone å¾ã« Cell, CellOfComposite ã«å¤åããå¿
-è¦ãããã®ã§ãclone ã§ã¯ãªã new ããå®è£
-ã«å¤æ´ããå¿
-è¦ããã
+# 3) は CellInCompoiste クラスとして分けたほうがよいかもしれない
+#    @in_composite で判定している処理を切り離せる (上記 2) よりも分離は容易ではない)
+#    clone_for_composite は CellInCompoiste にのみ必要なメソッドである
+#    ただし、clone 後に Cell, CellOfComposite に変化する必要があるので、clone ではなく new する実装に変更する必要がある
 #
 =end
@@ -1235,11 +1168,8 @@
   @@current_object = nil
 
-  # å®ç¾©ããããã¹ã¦ã®ã»ã«ï¼åºç¾é . namespace ã«å½±é¿ãããªãï¼
-  @@cell_list = []     # composite ã®å
-é¨ã®ã»ã«ãå«ã¾ãªã
-  @@cell_list2 = []    # composite ã®å
-é¨ã®ã»ã«ãå«ã (å
-ã®ã»ã«ãå«ã)
-                       # æå³è§£æå¾ make_cell_list2 ã«ã¦è¨­å®ããã
+  # 定義されたすべてのセル（出現順. namespace に影響されない）
+  @@cell_list = []     # composite の内部のセルを含まない
+  @@cell_list2 = []    # composite の内部のセルを含む (元のセルを含む)
+                       # 意味解析後 make_cell_list2 にて設定される
 
   def self.push
@@ -1258,14 +1188,9 @@
 
 
-  # composite ã§ clone ããããã®ï¼å­å­«ã¾ã§å«ãï¼
-  # Join.change_rhs_port ã«ã¦ CompoisteCelltype å
-ã® Join ã®çµåå
-ãå¤æ´ããéã«ä½¿ç¨
+  # composite で clone されたもの（子孫まで含む）
+  # Join.change_rhs_port にて CompoisteCelltype 内の Join の結合先を変更する際に使用
   @@cloned_cell_list = {}
-  ### mikan BUG @@cloned_cell_list ã¯ composite ã®éå±¤ãã¨ã«è¨æ¶ãã¦ããªããããåãååãå
-é¨ã«ç¾ããã¨ããã¾ãåä½ããªã
-  # change_rhs_port ã®å®è£
-ã¯ããããªåããã©ããã¨ãããå¿
-è¦ã¯ãªãã£ããå³è¾ºã«ç¾ããã»ã«åã«ã¯ãcomposite ã®ã»ã«åãåã«ã¤ãªããã ãã§ããã£ã
+  ### mikan BUG @@cloned_cell_list は composite の階層ごとに記憶していないため、同じ名前が内部に現れると、うまく動作しない
+  # change_rhs_port の実装は、こんな回りくどいことをする必要はなかった。右辺に現れるセル名には、composite のセル名を前につなげるだけでよかった
 
   def initialize( ct_path, in_composite = false )
@@ -1273,13 +1198,11 @@
     @region = Region.get_current
 
-    # celltype ã®plugin/å­å¨ããã§ãã¯
+    # celltype のplugin/存在をチェック
     object = Namespace.find( ct_path )    #1
     if object == nil then
-      # mikan celltype ã®ååãä¸å®å
-¨ "::ct1ct2" ã«ãªã
+      # mikan celltype の名前が不完全 "::ct1ct2" になる
       cdl_error( "S1027 \'$1\' celltype not found" , ct_path.get_path_str )
     elsif ! object.instance_of?( Celltype ) && ! object.instance_of?( CompositeCelltype ) then
-      # mikan celltype ã®ååãä¸å®å
-¨
+      # mikan celltype の名前が不完全
       cdl_error( "S1028 \'$1\' not celltype" , ct_path.get_path_str )
     else
@@ -1329,8 +1252,7 @@
     end
 
-    # ãã®æç¹ã§ã¯ãã­ãã¿ã¤ãããå®ç¾©ãåããªãããèªå·±åç
-§ã®ããã«ç»é²
-    # set_f_def ã§ååº¦ç»é²ããªãã
-    # Celltype ã¸ã®ç»é²ã¯ãend_of_parse ã§è¡ã
+    # この時点ではプロトタイプか、定義か分らないが、自己参照のために登録
+    # set_f_def で再度登録しなおす
+    # Celltype への登録は、end_of_parse で行う
     if @in_composite then
       cell_prev = CompositeCelltype.find( name )
@@ -1339,9 +1261,9 @@
       end
     else
-      # cell_prev = Namespace.find( [ name ] )   # è¦ªã¾ã§æãã«ãã
+      # cell_prev = Namespace.find( [ name ] )   # 親まで捜しにいく
       cell_prev = Namespace.get_current.find( name )
       if cell_prev == nil then
         Namespace.new_cell( self )
-        set_namespace_path # @NamespacePath ã®è¨­å®
+        set_namespace_path # @NamespacePath の設定
       end
     end
@@ -1350,9 +1272,9 @@
       if ! cell_prev.instance_of?( Cell ) then
         cdl_error( "S1029 $1 mismatch with previous one" , name )
-        # celltype ãä¸è´ãã¦ããã ?
+        # celltype が一致しているか ?
       elsif get_celltype != cell_prev.get_celltype then
         cdl_error( "S1030 $1: celltype mismatch with previous one" , name )
       else
-        # region ãä¸è´ãã¦ããã?
+        # region が一致しているか?
         if ! cell_prev.get_region.equal? get_region then
           cdl_error( "S1031 $1 region \'$2\' mismatch  with previous one \'$3\'" , name, @region.get_name, cell_prev.get_region.get_name )
@@ -1360,6 +1282,6 @@
 
         @@current_object = cell_prev
-        # ãã®æç¹ã§ã¯ãã¾ã ãã­ãã¿ã¤ãå®£è¨ãå®ç¾©ãåããªã
-        # ä»¥åãå®ç¾©ã§ãã£ã¦ãä»åãå®ç¾©ã®å ´åãéè¤ã¨ã©ã¼ã§ãã
+        # この時点では、まだプロトタイプ宣言か定義か分らない
+        # 以前が定義であって、今回も定義の場合、重複エラーである
       end
     end
@@ -1371,10 +1293,9 @@
     dbgPrint "Cell new_cell: #{@global_name} #{@in_composite} #{self}\n"
 
-    # å
-é¨ã¢ã­ã±ã¼ã¿ã @alloc_list ã«è¿½å 
+    # 内部アロケータを @alloc_list に追加
     if @celltype.instance_of? CompositeCelltype then
       @celltype.get_internal_allocator_list.each{ |cell, cp_internal_name, port_name, fd_name, par_name, ext_alloc_ent|
         nsp = NamespacePath.new( @name, false )
-        rhs = Expression.new( [:OP_DOT, [:IDENTIFIER, nsp], Token.new( ext_alloc_ent.to_s.to_sym, nil, nil, nil ) ] )  #1 æ§æè§£ææ®µéãªã®ã§ locale ä¸è¦
+        rhs = Expression.new( [:OP_DOT, [:IDENTIFIER, nsp], Token.new( ext_alloc_ent.to_s.to_sym, nil, nil, nil ) ] )  #1 構文解析段階なので locale 不要
 
         @alloc_list << [:NORMAL_ALLOC,port_name,nil,fd_name,par_name,rhs]
@@ -1384,25 +1305,25 @@
   end
 
-  #=== Cell# cell ã®å®ç¾©
-  # æ¬ä½(join)ã®å®ç¾©ã®ç´åã«å¼ã³åºããã
+  #=== Cell# cell の定義
+  # 本体(join)の定義の直前に呼び出される
   def self.new_def
     @@current_object.new_def
   end
 
-  #=== Cell# cell ã®å®ç¾©
-  # æ¬ä½(join)ã®å®ç¾©ã®ç´åã«å¼ã³åºããã
-  # ãã®ã¡ã½ããã¯ cell tCelltype Cell { };  '{', '}' ã®é¨åãããå ´åã«å¼åºããã
+  #=== Cell# cell の定義
+  # 本体(join)の定義の直前に呼び出される
+  # このメソッドは cell tCelltype Cell { };  '{', '}' の部分がある場合に呼出される
   def new_def
     set_specifier_list( Generator.get_statement_specifier )
 
-    # prototype æå®å­ãªãã
+    # prototype 指定子ないか
     if ! @b_prototype then
-      # äºéå®ç¾©ã®ãã§ãã¯
+      # 二重定義のチェック
       if @b_defined == true then
         cdl_error( "S1032 $1: duplicate cell" , @name )
         dbgPrint "previous: #{@prev_locale[0]}: line #{@prev_locale[1]} '#{@name}' defined here\n"
 
-        # ã»ã«ã®éè¤å®ç¾©ã¨ã©ã¼ã®å¦ç½®
-        # åã®å®ç¾©ã¯æ¨ã¦ã
+        # セルの重複定義エラーの処置
+        # 前の定義は捨てる
         @join_list = NamedList.new( nil, "in cell '#{@name}'" )
       end
@@ -1417,38 +1338,36 @@
   end
 
-  #===  Cell# æ°ããçµåããã§ãã¯
+  #===  Cell# 新しい結合をチェック
   # STAGE:   P
   #
-  #join::  Join : æ°ããçµå
-  #b_regular:: bool : éå¸¸ã®å ´æ (bnf.y.rb)ãããªãã° true, ããä»¥å¤(allocator, require) ã§ã¯ false
+  #join::  Join : 新しい結合
+  #b_regular:: bool : 通常の場所 (bnf.y.rb)からならば true, それ以外(allocator, require) では false
   def new_join( join, b_regular = false )
     join.set_owner self
 
-    # composite ã®æ°ææ³å¯¾å¿ï¼
-    # composite ã®ä¸­ã®ã»ã«ã§ãattribute ã®å®ç¾©ã§ããå ´å
-    # cell å
-ã® attr_ext = composite.attr; æ§æãå¦ç
+    # composite の新文法対応．
+    # composite の中のセルで、attribute の定義である場合
+    # cell 内の attr_ext = composite.attr; 構文を処理
     if @in_composite then
       if @celltype then
-        if @celltype.find(join.get_name).instance_of?( Decl ) then # mikan a::b ã§æå®ããã¦ãããã®ãã¨ã©ã¼ã«ãªããªããã
+        if @celltype.find(join.get_name).instance_of?( Decl ) then # mikan a::b で指定されていたものがエラーにならないかも
           rhs = join.get_rhs
           if rhs.instance_of? Expression then
             ele = rhs.get_elements
-            if( ele[0]==:IDENTIFIER )then    #  attr = attr_ext ï¼å³è¾ºåé 
-ï¼ãï¼ #1
-              if( CompositeCelltype.has_attribute?(ele[1].get_name ) )then    # mikan a::b.ePort ãã¨ã©ã¼ã«ãªããªããã
-                ident = ele[1].get_name   # å³è¾ºã¯ attributeï¼
+            if( ele[0]==:IDENTIFIER )then    #  attr = attr_ext （右辺単項）か？ #1
+              if( CompositeCelltype.has_attribute?(ele[1].get_name ) )then    # mikan a::b.ePort がエラーにならないかも
+                ident = ele[1].get_name   # 右辺は attribute．
               else
-                # å³è¾ºã¯ attribute ã«ãªãã®ã§ããã°ãå®æ°ã®ã¯ã
-                # å®æ°ã¯ä¸ã¸æ¸¡ã (cell ã® join ã«ãã)
+                # 右辺は attribute にないのであれば、定数のはず
+                # 定数は下へ渡す (cell の join にする)
                 ident = nil
               end
             else
-              if join.get_rhs.eval_const2(nil) == nil then   # å®æ°å¼ã§ã¯ãªããï¼
-                # å³è¾ºããåä¸ã®ã·ã³ãã«ã§ãªãå ´åãç¾ç¶ã¯æ±ããªã
+              if join.get_rhs.eval_const2(nil) == nil then   # 定数式ではないか？
+                # 右辺が、単一のシンボルでない場合、現状は扱えない
                 cdl_error( "S1033 rhs expression is not supported. Only attribute is permitted on current version."  )
                 return
               else
-                # å®æ°ã¯ä¸ã¸æ¸¡ã (cell ã® join ã«ãã)
+                # 定数は下へ渡す (cell の join にする)
                 ident = nil
               end
@@ -1456,7 +1375,5 @@
 
             if ident then
-              # attr = attr; ã®ãããªåç
-§ã¯ã¨ã©ã¼ (a = composite.a ã¨ããå¿
-è¦ããã)
+              # attr = attr; のような参照はエラー (a = composite.a とする必要がある)
               if @celltype.find( ident ) then
                 cdl_error( "S1034 $1 : cannot refer to $2\'s attribute here. Use \'composite.$3\' to refer to composite celltype\'s" , ident, @celltype.get_name, ident )
@@ -1464,18 +1381,18 @@
             end
           elsif rhs.instance_of? Array then
-            if rhs[0] == :COMPOSITE then   # å³è¾ºã¯ composite.attr ã®å½¢å¼
+            if rhs[0] == :COMPOSITE then   # 右辺は composite.attr の形式
               ident = rhs[1].to_sym
             else
-              ident = nil    # å³è¾ºã¯ { 10, -10 } ã®å½¢å¼
+              ident = nil    # 右辺は { 10, -10 } の形式
             end
           else
-            ident = nil      # å³è¾ºã¯ C_EXP ã®å½¢å¼
+            ident = nil      # 右辺は C_EXP の形式
           end
 
-          # ident ãè¦ã¤ãã£ãï¼å³è¾ºã¯åä¸ã® identï¼
+          # ident が見つかった（右辺は単一の ident）
           if ident then
-            # composite ã®æ§ææ³ã®æ§æå¦çã¸æ¸¡ãï¼ã»ã«å¤ã® attr_ext = Cell.attr; æ§æã®å¦çã«æ¸¡ã
+            # composite の旧文法の構文処理へ渡す．セル外の attr_ext = Cell.attr; 構文の処理に渡す
             #                        export_name, internal_cell_name, internal_cell_elem_name
-            decl = CompositeCelltype.new_join( ident, @name, join.get_name, :ATTRIBUTE )  # mikan a::b.ePort ãã¨ã©ã¼ã«ãªããªããã
+            decl = CompositeCelltype.new_join( ident, @name, join.get_name, :ATTRIBUTE )  # mikan a::b.ePort がエラーにならないかも
             if ! decl.instance_of? Decl then
               return
@@ -1485,23 +1402,22 @@
               return
             end
-            # ä»¥ä¸ã®æ§ææ³å®è£
-ã«æ¸¡ãï¼
-            # æ§ææ³ã§ã¯ cell ã«åæå¤ãä¸ãããã¨ã§ãcomposite ã§å±æ§ã®åæå¤ãæå®ãããã¨ãã§ãã
-            # attribute ã§æå®ãããåæå¤ã cell ã®å±æ§ã¨ãã¦å¦çããã
+            # 以下の旧文法実装に渡す．
+            # 旧文法では cell に初期値を与えることで、composite で属性の初期値を指定することができた
+            # attribute で指定された初期値を cell の属性として処理させる
             join.change_rhs( ini )
           else
-            # ident ããªãï¼å®æ°å¼
+            # ident がない．定数式
           end
         else
-          # celltype ã®å±æ§ã¨ãã¦ããã® join ã®ååããªã
-          # ä»¥ä¸ã® join.set_definition ã®ä¸­ã§ã¨ã©ã¼ã¨ãªã
+          # celltype の属性として、この join の名前がない
+          # 以下の join.set_definition の中でエラーとなる
         end
       else
-        return    # celltype ããªãï¼ãã§ã«ã¨ã©ã¼
+        return    # celltype がない．すでにエラー
       end
     elsif join.get_rhs.instance_of? Array then
       rhs = join.get_rhs
       if rhs[0] == :COMPOSITE then
-        # composite ã®ä¸­ã§ãªãã®ã« attr = composite.attr ãä½¿ããã
+        # composite の中でないのに attr = composite.attr が使われた
         cdl_error( "S1035 composite : cannot specify out of composite celltype definition"  )
         return
@@ -1509,14 +1425,13 @@
     end
 
-    # ä»¥ä¸ composite ææ³å¤æ´åããããå¦ç
-
-    # æ¢ã«å·¦è¾ºãåãååã®åæåãå­å¨ãããï¼
-    j = @join_list.get_item( join.get_name )   # mikan NamespacePath ããã¹ãæã£ã¦ãã
-    if j.instance_of? Join then    # mikan ããã§ã¯ j ã Join or Nil ä»¥å¤ã¯ããªãã¯ã
+    # 以下 composite 文法変更前からある処理
+
+    # 既に左辺が同じ名前の初期化が存在するか？
+    j = @join_list.get_item( join.get_name )   # mikan NamespacePath がパスを持っている
+    if j.instance_of? Join then    # mikan ここでは j が Join or Nil 以外は、ないはず
 
       # debug
       dbgPrint "add_array_member: #{@name} port: #{j.get_port_name} rhs: #{j.get_rhs}, #{join.get_port_name} #{join.get_rhs}\n"
-      # å¼ã³å£é
-åï¼ã§ããã¨ä»®å®ãã¦ï¼è¦ç´ ãè¿½å 
+      # 呼び口配列（であると仮定して）要素を追加
       j.add_array_member join
 
@@ -1526,5 +1441,5 @@
     end
 
-    # if get_owner then   # error S1030 çºçæ get_owner ãè¦ã¤ãããªãã¦ä¾å¤ã«ãªã
+    # if get_owner then   # error S1030 発生時 get_owner が見つからなくて例外になる
     #   dbgPrint "Cell#new_join: #{get_owner.get_name}.#{@name}\n"
     # else
@@ -1540,10 +1455,10 @@
   end
 
-  #=== Cell.æ°ããéçµå
+  #=== Cell.新しい逆結合
   def self.new_reverse_join( reverse_join )
     @@current_object.new_reverse_join( reverse_join )
   end
 
-  #=== Cell#æ°ããéçµå
+  #=== Cell#新しい逆結合
   def new_reverse_join( reverse_join )
     dbgPrint( "new_reverse_join name=#{reverse_join.get_name}\n")
@@ -1570,5 +1485,5 @@
   end
 
-  #=== Cell#éçµåããçµåãçæ
+  #=== Cell#逆結合から結合を生成
   # STAGE: S
   def create_reverse_join
@@ -1580,10 +1495,9 @@
 #      @reverse_join_list.get_items.each{ |rj|
       @reverse_join_list.each{ |rj|
-        # éçµåã®æ
-å ±ãå¾ã
+        # 逆結合の情報を得る
         ep_name = rj.get_name
         ep_subscript, cp_cell_nsp, cp_name, cp_subscript = rj.get_rhs_cell_and_port
 
-        # å¼ã³å£å´ã®ã»ã«ã¨ããã®ã»ã«ã¿ã¤ã
+        # 呼び口側のセルと、そのセルタイプ
         cell = Namespace.find cp_cell_nsp
         if ! cell.instance_of? Cell then
@@ -1616,21 +1530,19 @@
   end
 
-  #=== Cell# cell å
-ã«è¨è¿°ããå¼ã³å£ã®å¤é¨çµå
-  # internal_cell_elem_name:: string : å¼ã³å£å
-  # export_name:: string: composite ã®å¤é¨ã«å
-¬éããå¼ã³å£å
-  #  å¼ã³å£ãå¤é¨çµåããï¼
-  #  ãã®ã¡ã½ããã¯ãcomposite ã®ä¸­ã® cell ã§ããå¼ã°ããªãï¼
+  #=== Cell# cell 内に記述する呼び口の外部結合
+  # internal_cell_elem_name:: string : 呼び口名
+  # export_name:: string: composite の外部に公開する呼び口名
+  #  呼び口を外部結合する．
+  #  このメソッドは、composite の中の cell でしか呼ばれない．
   def external_join( internal_cell_elem_name, export_name, b_composite )
 
-    # cCall => composite.cCall; ã§ã¯ãªããï¼
+    # cCall => composite.cCall; ではないか？
     if( b_composite == false )then
-      # cCall => cCall; ã®ãããªå ´å
+      # cCall => cCall; のような場合
       if @celltype.find( export_name ) then
         cdl_error( "S1036 $1 : cannot refer to $2\'s here. Use \'composite.$3\' to refer to composite celltype\'s" , export_name, @celltype.get_name, export_name )
       end
     end
-    # composite ã®æ§ææ³ã«ããããcell å¤ã® cCall = Cell.cCall; ã®æ§æå¦çã«æ¸¡ã
+    # composite の旧文法における、cell 外の cCall = Cell.cCall; の構文処理に渡す
     CompositeCelltype.new_join( export_name, @name,  internal_cell_elem_name, :CALL )
   end
@@ -1644,11 +1556,11 @@
 
   def end_of_parse f_def
-    if @b_prototype then  # prototype æå®å­ãã£ãã?
-      f_def = false       # ãã­ãã¿ã¤ãå®£è¨ã¨ãã
+    if @b_prototype then  # prototype 指定子あったか?
+      f_def = false       # プロトタイプ宣言とする
       @b_prototype = false
     end
     if f_def == false then
-      # cell tCelltype Cell; ã®å½¢å¼ã®å ´å
-      # f_def == true ã®å ´å new_def ã§ãå¼åºããã
+      # cell tCelltype Cell; の形式の場合
+      # f_def == true の場合 new_def で、呼出される
       set_specifier_list( Generator.get_statement_specifier )
     end
@@ -1660,6 +1572,6 @@
   end
 
-  #=== Cell# ãã­ãã¿ã¤ãå®£è¨(false)ãå®ç¾©(true)ããè¨­å®
-  #    ãã®ã¡ã½ããã¯æ§æè§£éã®æå¾ã«å¼åºããã
+  #=== Cell# プロトタイプ宣言(false)か定義(true)かを設定
+  #    このメソッドは構文解釈の最後に呼出される
   #f_def::     bool     false if prototype, true if definition
   def set_f_def f_def
@@ -1680,10 +1592,6 @@
     @f_ref = true
 
-    # composite ã®å
-é¨ã»ã«ãåç
-§ããããã¨ã«ãã
-    # ä»ã®ã¨ããåé¡ãªãããæªåç
-§ã§ããã¹ããã®ã¾ã§åç
-§ããããã¨ã«ãªã
+    # composite の内部セルを参照されたことにする
+    # 今のところ問題ないが、未参照であるべきものまで参照されたことになる
     if @cell_list then
       @cell_list.each{ |cn,cell|
@@ -1693,29 +1601,26 @@
   end
 
-  #=== Cell# cell ã®æå®å­ãè¨­å®
+  #=== Cell# cell の指定子を設定
   # STAGE:  B
   #
-  #    bnf.y.rb ã® statement_specifiler_list
+  #    bnf.y.rb の statement_specifiler_list
   #spec_list::      [ :ALLOCATOR, [ [ :NORMAL_ALLOC, ep_name, subscript, func_name, param_name, expr ], ... ] ]
   #                     s[0]      s[1]   a[0]        a[1]       a[2]        a[3]     a[4]       a[5]
-  #    ã»ã«ã«æå®ãããã¢ã­ã±ã¼ã¿æå®å­
-  #    a[1] ã® subscript ã¯ãã®ã¡ã½ããã®ä¸­ã§ Expression ãã Integer ã«è©ä¾¡ããã
-  #    åãå£å´ã«çæãããã¢ã­ã±ã¼ã¿å¼ã³å£ã®çµåãå
-é¨çæãã
-  #    å¼ã³å£å´ã¯ Port ã® create_allocator_join ã«ã¦çæ
-  #    ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã®å ´å create_relay_allocator_join ã«ã¦çæã
+  #    セルに指定されたアロケータ指定子
+  #    a[1] の subscript はこのメソッドの中で Expression から Integer に評価される
+  #    受け口側に生成されるアロケータ呼び口の結合を内部生成する
+  #    呼び口側は Port の create_allocator_join にて生成
+  #    リレーアロケータの場合 create_relay_allocator_join にて生成す
   def set_specifier_list( spec_list )
-    return if spec_list == nil  # ç©ºãªãã°ä½ãããªã
+    return if spec_list == nil  # 空ならば何もしない
 
     dbgPrint( "set_spec_list: #{@name}\n" )
-    b_generate = false   # generate ãæå®ããã
+    b_generate = false   # generate が指定された
 
     spec_list.each{ |s|
       case s[0]             # statement_specifier
       when :ALLOCATOR       # [allocator(ePort.func.param=allocCell.eA,ePort.func2.param=allocCell.eA)]
-        s[1].each { |a|     # alloc_list : allocator ã®å
-é¨ã® ',' ã§åºåãããé¨åã®é
-å
-          cp_name = :"#{a[0+1]}_#{a[2+1]}_#{a[3+1]}"    # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®ååï¼'=' ã®å·¦è¾ºã '.' ã«å¤ãã¦ '_' ã§é£çµ
+        s[1].each { |a|     # alloc_list : allocator の内部の ',' で区切られた部分の配列
+          cp_name = :"#{a[0+1]}_#{a[2+1]}_#{a[3+1]}"    # アロケータ呼び口の名前：'=' の左辺を '.' に変えて '_' で連結
           # p "#{a[0]} #{a[0+1]} #{a[2+1]} #{a[3+1]} #{cp_name}"
           if a[1+1] then
@@ -1725,6 +1630,6 @@
             subscript = nil
           end
-          # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®çµåãçæ
-          join = Join.new( cp_name, subscript, a[4+1] )   # æ§æè§£ææ®µéãªã®ã§ locale ä¸è¦
+          # アロケータ呼び口の結合を生成
+          join = Join.new( cp_name, subscript, a[4+1] )   # 構文解析段階なので locale 不要
           dbgPrint( "new allocator join #{cp_name} #{subscript} #{a[4+1]}\n" )
           Cell.new_join( join )
@@ -1772,6 +1677,6 @@
   def get_allocator_list
 
-    # æå³ãã§ãã¯(set_definition)ããã¦ããªãï¼
-    # relay ã¢ã­ã±ã¼ã¿ã®å ´åãã»ã«ã®æå³ãã§ãã¯ãè¡ããã¦ããªãã¨ã@alloc_list ãå®æããªã
+    # 意味チェック(set_definition)されていない？
+    # relay アロケータの場合、セルの意味チェックが行われていないと、@alloc_list が完成しない
     if @b_checked == false then
       set_definition_join
@@ -1784,7 +1689,7 @@
   end
 
-  #=== id æå®å­ã®å¤ãè¨­å®
-  # ãã®ã¡ã½ããã¯ããã©ã°ã¤ã³ã§ cell ã®çæé åºãå¶å¾¡ãããå ´åã®ããã«è¨­ãã
-  # éå¸¸ã® id æå®å­ã§ã¯ä½¿ã£ã¦ããªã
+  #=== id 指定子の値を設定
+  # このメソッドは、プラグインで cell の生成順序を制御したい場合のために設けた
+  # 通常の id 指定子では使っていない
   def set_specified_id id
     if Integer( id ) != id || id <= 0 then
@@ -1797,5 +1702,5 @@
   end
 
-  #=== Cell# ã»ã«ã¿ã¤ããã©ã°ã¤ã³ (generate æå®å­)
+  #=== Cell# セルタイププラグイン (generate 指定子)
   def cell_plugin
 
@@ -1811,5 +1716,5 @@
 
     begin
-      eval( eval_str )     # plugin ãçæ
+      eval( eval_str )     # plugin を生成
       plugin_object.set_locale @locale
       @generate[ 2 ] = plugin_object
@@ -1827,12 +1732,11 @@
   end
 
-  #=== Cell# cell ã composite ã»ã«ã¿ã¤ãã®ã»ã«ç¨ã« clone ãã
-  #name::        string : è¦ª cell ã®åå  (cell tComposite cell1 ã§ã® cell1)
-  #global_name:: string : è¦ª cell ã® global_name 
-  #join_array::  Join[] : composite ã® cell ã® join ã§ããã® cell ã«å¯¾å¿ãããã®
-  #ct_name::     string : è¦ªã»ã«ã®ã»ã«ã¿ã¤ãå
-  #region::      Region : å
-ã®ã»ã«ãå±ãã region
-  #ãã®ã¡ã½ããã¯ CompositeCelltype ã® expand ããå¼åºããã
+  #=== Cell# cell を composite セルタイプのセル用に clone する
+  #name::        string : 親 cell の名前  (cell tComposite cell1 での cell1)
+  #global_name:: string : 親 cell の global_name 
+  #join_array::  Join[] : composite の cell の join で、この cell に対応するもの
+  #ct_name::     string : 親セルのセルタイプ名
+  #region::      Region : 元のセルが属する region
+  #このメソッドは CompositeCelltype の expand から呼出される
   def clone_for_composite( name, global_name, namespacePath, join_array, ct_name, region, plugin, locale )
 
@@ -1843,14 +1747,12 @@
     @@cloned_cell_list[ self ] = @my_clone
 
-    # clone ããã»ã«ã®å
-é¨ã«æã¤ååæ
-å ±ãèª¿æ´ãã
+    # clone したセルの内部に持つ名前情報を調整する
 
     @my_clone.set_cloned( name, global_name, namespacePath, join_array, ct_name, region, plugin, locale )
 
-    # @celltype == nil ã¯ä»¥åã«ã»ã«ã¿ã¤ãæªå®ç¾©ã¨ã©ã¼
+    # @celltype == nil は以前にセルタイプ未定義エラー
     if @b_defined == true && @celltype != nil then
       if @celltype.instance_of?( Celltype ) then
-        # celltype ã«ç»é²ï¼ã³ã¼ãçæã®å¯¾è±¡ã¨ãªãï¼
+        # celltype に登録（コード生成の対象となる）
         @celltype.new_cell( @my_clone )
       end
@@ -1860,12 +1762,10 @@
   end
 
-  #=== Cell# clone ãããã»ã«ã®å
-é¨ã«æã¤ååæ
-å ±ãèª¿æ´ãã
-  #name::        string : è¦ª cell ã®åå  (cell tComposite cell1 ã§ã® cell1)
-  #global_name:: string : è¦ª cell ã® global_name
-  #join_array::  Join[] : composite ã® cell ã® join ã§ããã® cell ã«å¯¾å¿ãããã®
-  #parent_ct_name:: string : è¦ªã»ã«ã®ã»ã«ã¿ã¤ãåï¼composite ã»ã«ã¿ã¤ãï¼
-  #  ãã®ã¡ã½ããã¯ããä¸ã® clone_for_composite ããå¼åºãããclone ãããã»ã«ãæ´ãã
+  #=== Cell# clone されたセルの内部に持つ名前情報を調整する
+  #name::        string : 親 cell の名前  (cell tComposite cell1 での cell1)
+  #global_name:: string : 親 cell の global_name
+  #join_array::  Join[] : composite の cell の join で、この cell に対応するもの
+  #parent_ct_name:: string : 親セルのセルタイプ名（composite セルタイプ）
+  #  このメソッドはすぐ上の clone_for_composite から呼出され、clone されたセルを整える
   def set_cloned( name, global_name, namespacePath, join_array, parent_ct_name, region, plugin, locale )
 
@@ -1884,8 +1784,8 @@
     @f_cloned = true
 
-    # Namespace.new_cell( self )  # mikan namespace å¯¾å¿
-    region.new_cell( self )  # mikan  namespace ã« cell ãç½®ããªããã¨ãä»®å®
-
-    # join_list : NamedList ã® clone ãä½ã
+    # Namespace.new_cell( self )  # mikan namespace 対応
+    region.new_cell( self )  # mikan  namespace に cell を置けないことを仮定
+
+    # join_list : NamedList の clone を作る
     if @celltype then
       dbgPrint "set_cloned: #{@celltype.get_name} #{@name} #{region.get_name}\n"
@@ -1900,13 +1800,13 @@
     @cell_list2 = []
 
-    # ãã®ã»ã«ã®ã°ã­ã¼ãã«åãä¸ãã
-    # C_EXP ã®$id$ ç½®æã¯ãã®ã»ã«ã®ååã«ãªã
+    # このセルのグローバル名を与える
+    # C_EXP の$id$ 置換はこのセルの名前になる
     join_array.each { |j|
       @join_list.change_item j
     }
 
-    # clone ãããã¨ããã»ã«ã composit ã»ã«ã¿ã¤ãï¼
+    # clone しようとするセルが composit セルタイプ？
     if @celltype.instance_of?( CompositeCelltype ) then
-      # composite cell ãåå¸°çã«å±é
+      # composite cell を再帰的に展開
       @cell_list, @cell_list2 = @celltype.expand( @name, @global_name, @NamespacePath, @join_list, @region, @plugin, @locale )
     end
@@ -1914,6 +1814,6 @@
   end
 
-  #=== Cell# clone ããã cell ã® join_list ã®å³è¾ºã®å¤æ´
-  #  å¼ã³å£ã®å³è¾ºã® cell ãä»ã® clone ããã cell ã«ç½®æã
+  #=== Cell# clone された cell の join_list の右辺の変更
+  #  呼び口の右辺の cell を他の clone された cell に置換え
   def change_rhs_port
 
@@ -1927,6 +1827,5 @@
     if @celltype.instance_of?( CompositeCelltype ) then
 
-      # å
-¥ãå­ã®ã»ã«ã«ã¤ãã¦ãå¤æ´
+      # 入れ子のセルについても変更
       @cell_list.each{ |name,c|
         c.change_rhs_port
@@ -1967,9 +1866,9 @@
   end
 
-  #=== Cell# çæãããã»ã«ãï¼
-  # æé©åãã³ã¼ãçæä¸­ã«ãå¯¾è±¡ã¨ãªã region ã«å±ããå ´å true ãè¿ã
+  #=== Cell# 生成されるセルか？
+  # 最適化、コード生成中に、対象となる region に属する場合 true を返す
   def is_generate?
     if $generating_region == nil then
-      # æ§æè§£éãæå³è§£ææ®µéã§å¼ã°ããã¨ä¾å¤çºç
+      # 構文解釈、意味解析段階で呼ばれると例外発生
       raise "is_generate? called before optimizing"
     end
@@ -1983,21 +1882,16 @@
   end
 
-  #=== Cell# composite å
-é¨ã®è¤è£½ãããã»ã«ãï¼
-  # composite å®ç¾©ã®å
-é¨ã®ã»ã« (@in_composite = true) ã§ã¯ãªã
+  #=== Cell# composite 内部の複製されたセルか？
+  # composite 定義の内部のセル (@in_composite = true) ではない
   def is_cloned?
     @f_cloned
   end
 
-  #=== Cell# composite å
-é¨ã®ã»ã«ãï¼
+  #=== Cell# composite 内部のセルか？
   def is_in_composite?
     @in_composite
   end
 
-  # composite cell ã® port ã«å¯¾å¿ããå
-é¨ã® cell ã® port ã®ååï¼ãªã³ã¯æã«å¿
-è¦ãªååï¼
+  # composite cell の port に対応する内部の cell の port の名前（リンク時に必要な名前）
   def get_real_global_name port_name
     if @celltype.instance_of?( CompositeCelltype ) then
@@ -2027,9 +1921,9 @@
   end
 
-  #=== Cell# ã»ã«ã®åãå£ port_name ã«å¯¾ããå®éã®ã»ã«åãåãå£åã '_' ã§é£çµ
-  #    namespace å + '_' + ã»ã«å + '_' + åãå£å   ï¼ãã®ã»ã«ã composite ãªãã°å±éå¾ã®ã»ã«åãåãå£åï¼
+  #=== Cell# セルの受け口 port_name に対する実際のセル名、受け口名を '_' で連結
+  #    namespace 名 + '_' + セル名 + '_' + 受け口名   （このセルが composite ならば展開後のセル名、受け口名）
   def get_real_global_port_name port_name
 
-    # composite ãï¼
+    # composite か？
     if @celltype.instance_of?( CompositeCelltype ) then
 
@@ -2042,7 +1936,5 @@
       }
 
-      # ã»ã«ã¿ã¤ãå
-ã§ port_name ã® CompositeCelltypeJoin ãæ¢ãï¼ã³ã¼ãçææ®µéã§ã¯å¿
-ãè¦ã¤ããï¼
+      # セルタイプ内で port_name の CompositeCelltypeJoin を探す（コード生成段階では必ず見つかる）
       cj = @celltype.find_export( port_name )
 
@@ -2050,6 +1942,5 @@
       dbgPrint "   composite join name: #{cj.get_name}  cell: #{cj.get_cell_name}  cell elem: #{cj.get_cell_elem_name}\n"
 
-      # composite ã®å
-é¨ã®ã»ã«ã«å¯¾ãåå¸°çã« get_real_global_port_name ãé©ç¨
+      # composite の内部のセルに対し再帰的に get_real_global_port_name を適用
       name = @cell_list[ "#{cj.get_cell_name}" ].get_real_global_port_name( cj.get_cell_elem_name )
       return name
@@ -2063,17 +1954,14 @@
   end
 
-  #=== Cell# PORT (celltype ã®å®ç¾©) ãå¾ã
+  #=== Cell# PORT (celltype の定義) を得る
   def get_real_port( port_name )
 
-    # composite ãï¼
+    # composite か？
     if @celltype.instance_of?( CompositeCelltype ) then
 
-      # ã»ã«ã¿ã¤ãå
-ã§ port_name ã® CompositeCelltypeJoin ãæ¢ãï¼ã³ã¼ãçææ®µéã§ã¯å¿
-ãè¦ã¤ããï¼
+      # セルタイプ内で port_name の CompositeCelltypeJoin を探す（コード生成段階では必ず見つかる）
       cj = @celltype.find_export( port_name )
 
-      # composite ã®å
-é¨ã®ã»ã«ã«å¯¾ãåå¸°çã« get_real_port ãé©ç¨
+      # composite の内部のセルに対し再帰的に get_real_port を適用
       port = @cell_list[ "#{cj.get_cell_name}" ].get_real_port( cj.get_cell_elem_name )
       return port
@@ -2084,18 +1972,15 @@
   end
 
-  #=== Cell# cell ãå¾ã
-  #    composite ã§ãªããã°èªåèªèº«ãè¿ã
+  #=== Cell# cell を得る
+  #    composite でなければ自分自身を返す
   def get_real_cell( port_name )
 
-    # composite ãï¼
+    # composite か？
     if @celltype.instance_of?( CompositeCelltype ) then
 
-      # ã»ã«ã¿ã¤ãå
-ã§ port_name ã® CompositeCelltypeJoin ãæ¢ãï¼ã³ã¼ãçææ®µéã§ã¯å¿
-ãè¦ã¤ããï¼
+      # セルタイプ内で port_name の CompositeCelltypeJoin を探す（コード生成段階では必ず見つかる）
       cj = @celltype.find_export( port_name )
 
-      # composite ã®å
-é¨ã®ã»ã«ã«å¯¾ãåå¸°çã« get_real_port ãé©ç¨
+      # composite の内部のセルに対し再帰的に get_real_port を適用
       cell = @cell_list[ "#{cj.get_cell_name}" ].get_real_cell( cj.get_cell_elem_name )
       return cell
@@ -2107,7 +1992,6 @@
 
 
-  #=== Cell# åãå£ã®port ã®åç
-§ã«ã¦ã³ããã¢ãããã
-  #port_name:: Symbol  : ãã¼ãå
+  #=== Cell# 受け口のport の参照カウントをアップする
+  #port_name:: Symbol  : ポート名
   def port_referenced port
     if @referenced_port_list[ port ] then
@@ -2117,17 +2001,14 @@
     end
 
-    # composite ãï¼
+    # composite か？
     if @celltype.instance_of?( CompositeCelltype ) then
 
-      # ã»ã«ã¿ã¤ãå
-ã§ port_name ã® CompositeCelltypeJoin ãæ¢ãï¼ã³ã¼ãçææ®µéã§ã¯å¿
-ãè¦ã¤ããï¼
+      # セルタイプ内で port_name の CompositeCelltypeJoin を探す（コード生成段階では必ず見つかる）
       cj = @celltype.find_export( port.get_name )
 
       dbgPrint " port_referenced: #{@celltype.get_name} #{@name} cj=#{cj&&(cj.get_name)||"nil"}\n"
 
-      if cj then  # æ¢ã«ã¨ã©ã¼
-        # composite ã®å
-é¨ã®ã»ã«ã«å¯¾ãåå¸°çã« get_real_port ãé©ç¨
+      if cj then  # 既にエラー
+        # composite の内部のセルに対し再帰的に get_real_port を適用
         cell = @cell_list[ "#{cj.get_cell_name}" ]
         if cell && cell.get_celltype then
@@ -2181,6 +2062,5 @@
   end
 
-  #=== Cell# åãå£é
-åã®æ·»æ°ã®æå¤§å¤ãè¨­å®
+  #=== Cell# 受け口配列の添数の最大値を設定
   def set_entry_port_max_subscript( port, num )
     dbgPrint( "set_entry_port_max_subscript: #{@name}.#{port.get_name}: #{num}\n" )
@@ -2193,15 +2073,11 @@
   end
 
-  #=== Cell# composite ã®å
-å´ã»ã«ã®åãå£é
-åã®æ·»æ°ã®æå¤§å¤ãè¨­å®
+  #=== Cell# composite の内側セルの受け口配列の添数の最大値を設定
   def set_entry_inner_port_max_subscript( port, num )
-    if @cell_list == nil then   # mikan ããã£ã¦åé¡ãªãï¼
-      return    # ãã­ãã¿ã¤ãå®£è¨ããããã¦ããªãã¦ãå
-å´ã»ã«ãå±éããã¦ããªã
-    end
-
-    # composite ã®å
-å´ã®ã»ã«ã«ä¼æ­
+    if @cell_list == nil then   # mikan これって問題ない？
+      return    # プロトタイプ宣言しかされていなくて、内側セルが展開されていない
+    end
+
+    # composite の内側のセルに伝播
     if @celltype.instance_of? CompositeCelltype then
       cj = @celltype.find_export port.get_name
@@ -2217,8 +2093,7 @@
   end
 
-  #=== Cell# åãå£é
-åã®æ·»æ°ã®æå¤§å¤ãè¿ã
-  # é·ãã¯ +1 ãã
-  # 1ã¤ããªãå ´åã¯ -1 ãè¿ã
+  #=== Cell# 受け口配列の添数の最大値を返す
+  # 長さは +1 する
+  # 1つもない場合は -1 を返す
   def get_entry_port_max_subscript( port )
     subscript = @entry_array_max_subscript[port]
@@ -2229,14 +2104,13 @@
   end
 
-  #=== Cell# ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã®çµåãçæ
+  #=== Cell# リレーアロケータの結合を生成
   # STAGE: S
-  # å¼ã³å£å´ã®çµåãå
-ã«åãå£å´ã®çµåãçæ
+  # 呼び口側の結合を元に受け口側の結合を生成
   def create_relay_allocator_join
 
-    # celltype ããªããã°ãã§ãã¯ããªãï¼æ¢ã«ã¨ã©ã¼ï¼
+    # celltype がなければチェックしない（既にエラー）
     return if @celltype == nil
 
-    # relay allocator ãçæ
+    # relay allocator を生成
     @celltype.get_port_list.each { |p|
       ail = p.get_allocator_instance
@@ -2244,5 +2118,5 @@
         dbgPrint "create_relay_allocator_join: #{@name}, #{p.get_name}\n"
         if p.get_array_size then
-          # mikan relay allocator ã array ã«å¯¾å¿ã§ãã¦ãããã®ã§ã¯ï¼
+          # mikan relay allocator が array に対応できてもよいのでは？
           cdl_error( "S1040 array not supported for relay allocator"  )
           next
@@ -2252,12 +2126,11 @@
           if ai2[0] == :RELAY_ALLOC then
             dbgPrint "create_relay_allocator_join: #{@name}, #{name}\n"
-            # å¼ã³å£å´ã®çµåãåãåºã
+            # 呼び口側の結合を取り出す
             ja = @join_list.get_item( :"#{ai2[3]}_#{ai2[4]}_#{ai2[5]}" )
             if ja == nil then
-              # è¦ã¤ãããªãå ´å
+              # 見つからない場合
               found = false
               
-              # composite å
-ã§å¤é¨ã«çµåããã¦ããã
+              # composite 内で外部に結合されているか
               if @in_composite then
                 @compositecelltypejoin_list.get_items.each { |cj|
@@ -2276,22 +2149,19 @@
                 cdl_error( "S1041 \'$1_$2_$3\': not joined. cannot create internal join for relay allocator" , ai2[3], ai2[4], ai2[5] )
                 print( "      In cell #{get_name}\n" )
-                # join ãæªçµåã§ãããã¨ã®ã¨ã©ã¼ã¯äºåº¦ã§ã (S1043)
+                # join が未結合であることのエラーは二度でる (S1043)
               end
-              next    # æã¡åã
+              next    # 打ち切る
             end
 
             b_export = false
-            # composite å
-ã®ã»ã«ã§ã¨ã¯ã¹ãã¼ãããã¦ããããã§ãã¯
-            #  mikan ã¨ã¯ã¹ãã¼ãå´ã¨ããã¡ãå´ã§ããªã¬ã¼å
-ãä¸è´ããããã§ãã¯ãå¿
-è¦
+            # composite 内のセルでエクスポートされているかチェック
+            #  mikan エクスポート側と、こちら側で、リレー先が一致するかチェックが必要
             if @compositecelltypejoin_list then
-              # export ããã¦ãããèª¿ã¹ã
+              # export されているか調べる
               @compositecelltypejoin_list.get_items.each{ |cj|
-                # å±æ§åã¨ composite ã® export ããååã¯ä¸è´ããã
+                # 属性名と composite の export する名前は一致するか
                 if p.get_name == cj.get_cell_elem_name then
                   print "export : #{p.get_name}\n"
-                  b_export = true    # å±æ§ã¯ export ããã¦ããã®ã§ãã¨ããããæªåæåã¨ã¯ããªã
+                  b_export = true    # 属性は export されているので、とりあえず未初期化とはしない
                   break
                 end
@@ -2300,6 +2170,5 @@
             end
 
-            # mikan é
-å
+            # mikan 配列
             am = nil
             if am then
@@ -2308,12 +2177,10 @@
                 subscript = ja2.get_subscript
                 if b_export == false then
-                  # CompositeCelltype ã®å ´åãå
-å´ã®ã»ã«ã§çæããã
+                  # CompositeCelltype の場合、内側のセルで生成させる
                   join = Join.new( :"#{p.get_name}_#{ai2[1]}_#{ai2[2]}", subscript, rhs, @loacle )
                   # p ( "#{p.get_name}_#{ai2[1]}_#{ai2[2]}", subscript, rhs )
                   new_join( join )
                   join.set_definition( @celltype.find(join.get_name) )
-                  # mikan relay mismatch ãã§ãã¯ãã§ãã¦ããªãï¼ä¸æ¹ãåç
-§ï¼
+                  # mikan relay mismatch チェックができていない（下方を参照）
                 end
                 @alloc_list << [ :NORMAL_ALLOC, p.get_name, subscript, ai2[1], ai2[2], rhs ]
@@ -2321,6 +2188,5 @@
             else
               if b_export == false then
-                # CompositeCelltype ã®å ´åãå
-å´ã®ã»ã«ã§çæããã
+                # CompositeCelltype の場合、内側のセルで生成させる
                 join = Join.new( :"#{p.get_name}_#{ai2[1]}_#{ai2[2]}", nil, ja.get_rhs, @locale )
                 new_join( join )
@@ -2332,6 +2198,5 @@
                                       "#{p.get_name}_#{ai2[1]}_#{ai2[2]}",
                                       "#{ai2[3]}_#{ai2[4]}_#{ai2[5]}" )
-                    # æ¬å½ã¯ composite ã®å¼ã³å£ã¨åãå£ã®éã§è¡ãã¹ãã ããå
-é¨ã§å¤æ®µæ¥ç¶ããã¦ããå ´å
+                    # 本当は composite の呼び口と受け口の間で行うべきだが、内部で多段接続されている場合
                   else
                     dbgPrint "relay success:  #{p.get_name}_#{ai2[1]}_#{ai2[2]}=>#{ai2[3]}_#{ai2[4]}_#{ai2[5]} #{jr.get_rhs_cell2.get_name}.#{jr.get_rhs_port2} \n"
@@ -2348,7 +2213,6 @@
   end
 
-  #=== Cell# @@cell_list2 ãä½ã
-  # @@cell_list2 ã¯ãåºç¾é ã« composite å
-ãå«ãã»ã«ã®ãªã¹ã
+  #=== Cell# @@cell_list2 を作る
+  # @@cell_list2 は、出現順に composite 内を含むセルのリスト
   def self.make_cell_list2
     @@cell_list.each{ |c|
@@ -2358,19 +2222,18 @@
   end
 
-  #=== Cell# @@cell_list2 ãå¾ã
-  # composite å
-ãå«ã (compositeãå«ã)
-  # æå³è§£æå¾ã«ä½æããã
+  #=== Cell# @@cell_list2 を得る
+  # composite 内を含む (compositeも含む)
+  # 意味解析後に作成される
   def self.get_cell_list2
     @@cell_list2
   end
 
-  #=== Cell# @@cell_list ãå¾ã
-  #composite ã®ä¸­ãå«ã¾ãªã
+  #=== Cell# @@cell_list を得る
+  #composite の中を含まない
   def self.get_cell_list
     @@cell_list
   end
 
-  #=== Cell# reverse_join ãçæãã
+  #=== Cell# reverse_join を生成する
   def self.create_reverse_join
     @@cell_list.each{ |c|
@@ -2384,5 +2247,5 @@
   end
 
-  #=== Cell# reverse_require_join ãçæãã
+  #=== Cell# reverse_require_join を生成する
   def self.create_reverse_require_join
     @@cell_list2.each{ |c|
@@ -2390,5 +2253,5 @@
       # if c.is_generate? then
         if ct then
-          # self ã¸ã®å¼ã³å£å´ã®çµåãçæ
+          # self への呼び口側の結合を生成
           ct.create_reverse_require_join c
         end
@@ -2397,21 +2260,16 @@
   end
 
-  #=== Cell# åãå£ã®port ã®åç
-§ã«ã¦ã³ããè¨­å®ãã
-  # self ã¯å¼ã³å
-ã®ã»ã«
-  # å¼ã³å
-ã»ã«ã®åãå£ã®åç
-§ã«ã¦ã³ããã¢ãããã
+  #=== Cell# 受け口のport の参照カウントを設定する
+  # self は呼び元のセル
+  # 呼び先セルの受け口の参照カウントをアップする
   def set_port_reference_count
     @join_list.get_items.each { |j|
       if j.get_definition.instance_of? Port then
         am = j.get_array_member2
-        if am then             # å¼ã³å£é
-å
+        if am then             # 呼び口配列
           am.each { |j2|
-            next if j2 == nil    # optional ã§ä¸é¨ãæ¬ è½ãã¦ããã±ã¼ã¹
+            next if j2 == nil    # optional で一部が欠落しているケース
             cell = j2.get_rhs_cell2
-            next if cell == nil     # å³è¾ºãè¦ã¤ãããªãã£ãï¼æ¢ã«ã¨ã©ã¼
+            next if cell == nil     # 右辺が見つからなかった．既にエラー
             port = cell.get_celltype.find( j2.get_rhs_port2 )
             dbgPrint( "set_port_reference_count: #{@name}.#{j2.get_name} => #{cell.get_name}.#{port.get_name}\n")
@@ -2420,5 +2278,5 @@
         else
           cell = j.get_rhs_cell2
-          next if cell == nil     # å³è¾ºãè¦ã¤ãããªãã£ãï¼æ¢ã«ã¨ã©ã¼
+          next if cell == nil     # 右辺が見つからなかった．既にエラー
           port = cell.get_celltype.find( j.get_rhs_port2 )
           dbgPrint( "set_port_reference_count: #{@name}.#{j.get_name} => #{cell.get_name}.#{port.get_name}\n")
@@ -2429,20 +2287,18 @@
   end
 
-  #=== Cell# çµå(Join)ã®ãã§ãã¯
-  #     Join ã¯å¼ã³å£ã®çµåã¾ãã¯ attribute ã®åæå
+  #=== Cell# 結合(Join)のチェック
+  #     Join は呼び口の結合または attribute の初期化
   #
-  #  mikan ãã®ã¡ã½ããã¯ãä»¥ä¸ã®ï¼ã¤ã®ãã§ãã¯ãããªãããåå²ããã»ããããé©åãªé·ãã®ã¡ã½ããã«ãªã
-  #  ã»ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã®çæ => create_relay_allocator_join
-  #  ã»æªçµåã®å¼ã³å£ã®ãã§ãã¯
-  #  ã»ãã¤ã³ã¿åãé
-åã§åæåãããå ´åã®ãã§ãã¯
-  #  ã»æªåæåã®å±æ§ã®ãã§ãã¯
+  #  mikan このメソッドは、以下の４つのチェックからなるが、分割したほうがより適切な長さのメソッドになる
+  #  ・リレーアロケータの生成 => create_relay_allocator_join
+  #  ・未結合の呼び口のチェック
+  #  ・ポインタ型が配列で初期化される場合のチェック
+  #  ・未初期化の属性のチェック
   def check_join
 
-    # celltype ããªããã°ãã§ãã¯ããªãï¼æ¢ã«ã¨ã©ã¼ï¼
+    # celltype がなければチェックしない（既にエラー）
     return if @celltype == nil
     return if @b_defined == false
-    return if @f_cloned == true    # å
-é¨ã»ã«ã«ã¤ãã¦ã¯ãcomposite ã®å®ç¾©æã«ãã§ãã¯ããã¦ãã
+    return if @f_cloned == true    # 内部セルについては、composite の定義時にチェックされている
 
     # debug
@@ -2452,8 +2308,8 @@
     # end
 
-    # æªçµåã®å¼ã³å£ã®ãã§ãã¯
+    # 未結合の呼び口のチェック
     @celltype.get_port_list.each { |p|
 
-      # å¼ã³å£ã§ãªããã°ããã§ãã¯ããªã
+      # 呼び口でなければ、チェックしない
       next if p.get_port_type != :CALL
 
@@ -2461,18 +2317,17 @@
       dbgPrint "check_join: #{@name} #{get_celltype.get_name} #{p.get_name}\n"
 
-      # çµåãªã¹ãã®ä¸­ããå¼ã³å£åã«ä¸è´ãããã®ãåãã ã
+      # 結合リストの中から呼び口名に一致するものを取りだす
       j = @join_list.get_item( p.get_name )
 
       if j == nil then
-        # æªçµåã®å¼ã³å£
-
-        # composite celltype ã®å
-é¨ã®å ´åãcomposite celltype ã export ããå¼ã³å£ã«çµåããã¦ãããæ¢ã
+        # 未結合の呼び口
+
+        # composite celltype の内部の場合、composite celltype が export する呼び口に結合されているか探す
         found = false
         if @in_composite then
-          # composite celltype ã® export ãããã®ãã¹ã¦ããæ¢ã
-          # ï¼export ãããã®ã®å³è¾ºå¤ããæ¢ãããã« get_item ã§ã¯ãã¡ï¼
+          # composite celltype の export するものすべてから探す
+          # （export するものの右辺値から探すために get_item ではダメ）
           @compositecelltypejoin_list.get_items.each{ |cj|
-            # å¼ã³å£åã¨ composite ã® export ããååã¯ä¸è´ããã
+            # 呼び口名と composite の export する名前は一致するか
             if p.get_name == cj.get_cell_elem_name then
               found = true
@@ -2481,7 +2336,5 @@
         end
 
-        # å¼ã³å£é
-åã®å ´å optional ã§å
-¨ã¦ã®è¦ç´ ãåæåãããªãå ´åã«ãããã¸æ¥ã
+        # 呼び口配列の場合 optional で全ての要素が初期化されない場合に、ここへ来る
         if ! found && ! p.is_require? && ! p.is_optional? then
           if ! p.is_allocator_port? then
@@ -2492,28 +2345,21 @@
         end
       elsif p.get_array_size.kind_of? Integer then
-        # æ·»æ°ããå¼ã³å£é
-åã®å ´åããã¹ã¦ã®æ·»æ°è¦ç´ ãåæåããã¦ããããã§ãã¯ãã
+        # 添数あり呼び口配列の場合、すべての添数要素が初期化されているかチェックする
 
         am = j.get_array_member2
         if( am )then
-          # join ã¯é
-å
-
-          # å¼ã³å£é
-åå®ç¾©ã§ã®é
-åã®å¤§ãã
+          # join は配列
+
+          # 呼び口配列定義での配列の大きさ
           length = p.get_array_size
 
-          # é
-åã®å¤§ãããå¼ã³å£é
-åå®ç¾©ã¨çµåå®ç¾©ã§ä¸è´ãããï¼
+          # 配列の大きさが呼び口配列定義と結合定義で一致するか？
           if am.length != length then
             if ! p.is_optional? || am.length >= length then
-              # optional ã®å ´åãè¦ç´ æ°ãå°ãªãããã®ã¯ OK
+              # optional の場合、要素数が少なすぎるのは OK
               cdl_error( "S1044 $1: array initializer too many or few, $2 for $3" , p.get_name, am.length, length )
             end
 
-            # am ã®è¦ç´ ã« nil ãè¿½å ãã¦ãã (#_CPA_# ã®ã³ã¼ãçææããã®é
-åè¦ç´ æ°åçæ)
+            # am の要素に nil を追加しておく (#_CPA_# のコード生成時、この配列要素数分生成)
             i = am.length
             while i < length
@@ -2523,7 +2369,6 @@
           end
 
-#          # é
-åè¦ç´ ã®æãããªãããã§ãã¯
-#          if am.length < length then  # æºããªãå ´åæ¢ã«ã¨ã©ã¼ã ãè¦ç´ ã®ããç¯å²ã§ãã§ãã¯
+#          # 配列要素の抜けがないかチェック
+#          if am.length < length then  # 満たない場合既にエラーだが要素のある範囲でチェック
 #            length = am.length
 #          end
@@ -2535,5 +2380,5 @@
               end
             else
-              # çæãããªããªã¼ã¸ã§ã³ã¸ã®çµåããã§ãã¯
+              # 生成されないリージョンへの結合かチェック
               if ! @in_composite then
                 am[i].check_region2
@@ -2544,10 +2389,8 @@
 
         # else
-        # join ãéé
-åã§ããã°ãæ¢ã«ã¨ã©ã¼
+        # join が非配列であれば、既にエラー
         end
       elsif j.get_array_member then
-        # æ·»æ°ãªãå¼ã³å£é
-åã®å ´å
+        # 添数なし呼び口配列の場合
         am = j.get_array_member2
         length = am.length
@@ -2562,5 +2405,5 @@
         end
 
-        # çæãããªããªã¼ã¸ã§ã³ã¸ã®çµåããã§ãã¯
+        # 生成されないリージョンへの結合かチェック
         if ! @in_composite then
           am.each { |join|
@@ -2571,8 +2414,7 @@
         end
       else
-        # å¼ã³å£ï¼»é
-åãã§ãªãå ´å
-
-        # çæãããªããªã¼ã¸ã§ã³ã¸ã®çµåããã§ãã¯
+        # 呼び口［配列」でない場合
+
+        # 生成されないリージョンへの結合かチェック
         if ! @in_composite then
           j.check_region2
@@ -2582,11 +2424,10 @@
     }
 
-    # ãã¤ã³ã¿åãé
-åã§åæåãããå ´åã®ãã§ãã¯
+    # ポインタ型が配列で初期化される場合のチェック
     (@celltype.get_attribute_list+@celltype.get_var_list).each { |a|
       if a.get_size_is then
 
         if a.instance_of? CompositeCelltypeJoin then
-          # æ¢ã«ã¨ã©ã¼ã«ãªã£ã¦ãã
+          # 既にエラーになっている
           # cdl_error( "S1047 size_is pointer cannot be exposed for composite attribute"  )
           next
@@ -2598,6 +2439,6 @@
           size = a.get_size_is.eval_const( @join_list, @celltype.get_name_list )
           a.get_type.set_scs( a.get_size_is, nil, nil, nil, false )
-          if( ! size.kind_of? Integer )then               # C_EXP ã®å¯è½æ§ãã
-            # mikan å¤åããã§ã®ã¨ã©ã¼çºçã¯ä¸è¦ãeval_const ã®ä¸­ã§å¤æ°ãå­å¨ããªããåãä¸é©åãªã©ã®ã¨ã©ã¼ã«ãªãã¯ã
+          if( ! size.kind_of? Integer )then               # C_EXP の可能性あり
+            # mikan 多分ここでのエラー発生は不要、eval_const の中で変数が存在しない、型が不適切などのエラーになるはず
             cdl_error( "S1049 $1: size_is arg not constant" , a.get_name )
           else
@@ -2615,5 +2456,5 @@
               end
             else
-              # size_is å¼æ°ãã»ã«ã§æå®ããã¦ãã¦ãåæåå­ãã»ã«ã¿ã¤ãã§æå®ããã¦ããã±ã¼ã¹ã®ãã§ãã¯
+              # size_is 引数がセルで指定されていて、初期化子がセルタイプで指定されているケースのチェック
               ini = a.get_initializer
               if ini.instance_of? Expression
@@ -2630,9 +2471,9 @@
       else
         if ! a.instance_of? CompositeCelltypeJoin then
-          # composite ã¯ size_is æå®ã§ããªã
+          # composite は size_is 指定できない
           if a.get_type.kind_of?( PtrType ) then
             j = @join_list.get_item( a.get_identifier )
             if j && j.get_rhs.instance_of?( Array ) then
-              ## size_is æå®ããã¦ããªããã¤ã³ã¿ã Array ã§åæåããã¦ããããã¨ã©ã¼ã¨ãã
+              ## size_is 指定されていないポインタが Array で初期化されていたら、エラーとする
               cdl_error( "S1169 $1: non-size_is pointer cannot be initialized with array initializer" , a.get_identifier )
             end
@@ -2642,30 +2483,27 @@
     }
 
-    # æªåæåã®å±æ§ããã§ãã¯
+    # 未初期化の属性をチェック
     @celltype.get_attribute_list.each { |a|
       b_init = false
       # self.show_tree 1
-      if a.get_initializer then                               # ã»ã«ã¿ã¤ãã§åæåããã¦ãã
+      if a.get_initializer then                               # セルタイプで初期化されている
         b_init = true
-        # @in_composite ã§ export ããã¦ããå ´åã«ã¯ããã®åæå¤ã¯ä½¿ãããªã
-        # export ããã¦ãããããªãã«é¢ããããåæåããã¦ãããã¨ãä¿è¨¼ããã
-      elsif @join_list.get_item( a.get_name ) then            # ã»ã«ã§åæåããã¦ãã
+        # @in_composite で export されている場合には、この初期値は使われない
+        # export されている、いないに関わらず、初期化されていることが保証される
+      elsif @join_list.get_item( a.get_name ) then            # セルで初期化されている
         b_init = true
       elsif @in_composite && @compositecelltypejoin_list then
-        # å±æ§ã export ããã¦ãããèª¿ã¹ããexport ããã¦ããã°æªåæåã¨ã¯ããªã
-        # mikan ãªãã¢ãµã¼ã
+        # 属性が export されているか調べる。export されていれば未初期化とはしない
+        # mikan リニアサーチ
         @compositecelltypejoin_list.get_items.each{ |cj|
-          # å±æ§åã¨ composite ã® export ããååã¯ä¸è´ããã
+          # 属性名と composite の export する名前は一致するか
           if a.get_name.to_sym == cj.get_cell_elem_name.to_sym then
-            b_init = true    # å±æ§ã¯ export ããã¦ããã®ã§ãã¨ããããæªåæåã¨ã¯ããªã
+            b_init = true    # 属性は export されているので、とりあえず未初期化とはしない
           end
         }
         if b_init then
-          # size_is ã®å¼æ°ããããããããã§ãã¯ãã
-          # å
-é¨ã»ã«ã® size_is ãã¨ã¯ã¹ãã¼ããã size_is ã¨ãããããããã§ãã¯ãã
-          # å
-é¨ã»ã«ã¨ã¨ã¯ã¹ãã¼ãã§ååãå¤ãã¦ããå¯è½æ§ãããã®ã§ãå
-é¨ã»ã«ã® size_is ã®ååãå¤æããä¸ã§ãã§ãã¯ãã
+          # size_is の引数がマッチするかチェックする
+          # 内部セルの size_is をエクスポートする size_is とマッチするかチェックする
+          # 内部セルとエクスポートで名前を変えている可能性があるので、内部セルの size_is の名前を変換した上でチェックする
           if a.get_size_is then
             ### p "attr: get_size_is"
@@ -2673,6 +2511,5 @@
             if cj.get_port_decl.instance_of? Decl then
               ### p "attr: get_size_is 2"
-              # cj_size_is ã¯ãå¤é¨å
-¬éããã attr ã® size_is
+              # cj_size_is は、外部公開される attr の size_is
               cj_size_is = cj.get_port_decl.get_size_is
               if cj_size_is == nil then
@@ -2683,8 +2520,8 @@
               remain = exprs
               inner_to_export = {}
-			  ### exprs ã«å«ã¾ããè­å¥å­ãæãåºããå¯¾å¿ãã export ãããååãæ¢ã
+			  ### exprs に含まれる識別子を抜き出し、対応する export される名前を探す
               while remain != "" && remain != nil
                 ### p "remain ", remain
-                remain =~ /([^\w]*)([_A-Za-z][\w\d]*)/   # å¤æ°åæå­åãåãåºã 
+                remain =~ /([^\w]*)([_A-Za-z][\w\d]*)/   # 変数名文字列を取り出す 
 				if $2 == nil then
 						break
@@ -2693,5 +2530,5 @@
                 remain = $'
                 ### p exprs, $1, $2, $'
-                # size_is ã«å«ã¾ããå¤æ°ã¯ãcomposite ã§ export ããã¦ããã
+                # size_is に含まれる変数は、composite で export されているか
                 cj2 = nil
                 @compositecelltypejoin_list.get_items.each{ |cj2t|
@@ -2706,17 +2543,15 @@
                 if cj2.get_port_decl.instance_of? Decl then
                    decl2 = cj2.get_port_decl
-                   # å
-é¨ã®ååã¨å¤é¨ã®ååã®å¯¾å¿é¢ä¿ãè¨æ¶
+                   # 内部の名前と外部の名前の対応関係を記憶
                    inner_to_export[arg_name] = decl2.get_name
-                # else cj2 ã¯ Port (æ¢ã«ã¨ã©ã¼)
+                # else cj2 は Port (既にエラー)
                 end
               end
-              # å
-é¨ã®ååãå¤é¨ã®ååã§ç½®æ
+              # 内部の名前を外部の名前で置換
               inner_to_export.each{ |arg_name, exp_name|
                 ### p "changing #{arg_name}=>#{exp_name}"
                 # exprs.gsub!( Regexp.new("#{arg_name}[^0-9A-Za-z_]"), exp_name.to_s )
-                exprs.gsub!( Regexp.new("#{arg_name}(\\W)"), exp_name.to_s+"\\1" )  # æå­åæ«å°¾ã«ãªãã±ã¼ã¹
-                exprs.gsub!( Regexp.new("#{arg_name}\\Z"), exp_name.to_s )          # æå­åæ«å°¾ã«ããã±ã¼ã¹
+                exprs.gsub!( Regexp.new("#{arg_name}(\\W)"), exp_name.to_s+"\\1" )  # 文字列末尾にないケース
+                exprs.gsub!( Regexp.new("#{arg_name}\\Z"), exp_name.to_s )          # 文字列末尾にあるケース
               }
               ### p "changed: #{exprs} #{cj_size_is.to_s}"
@@ -2724,5 +2559,5 @@
                 cdl_error( "S1172 \'$1\' size_is argument mismatch with exporting one \'$2\'", a.get_name, cj.get_name )
               end
-            # else cj ã¯ Port (æ¢ã«ã¨ã©ã¼)
+            # else cj は Port (既にエラー)
             end
           end
@@ -2737,15 +2572,14 @@
   end
 
-  #=== Cell# é require ããã§ãã¯ãã
-  # é require æå®ãããåãå£ã«è¤æ°ã®çµåããªãããã§ãã¯ãã
-  # composite ã®å
-é¨ã»ã« (f_cloned=true) ããã§ãã¯ãã
+  #=== Cell# 逆 require をチェックする
+  # 逆 require 指定された受け口に複数の結合がないかチェックする
+  # composite の内部セル (f_cloned=true) もチェックする
   def check_reverse_require
-    # celltype ããªããã°ãã§ãã¯ããªãï¼æ¢ã«ã¨ã©ã¼ï¼
+    # celltype がなければチェックしない（既にエラー）
     return if @celltype == nil
     return if @b_defined == false
 
     # p "check reverse require   #{@name}"
-    # érequire æå®ãããåãå£ã«è¤æ°ã®çµåããªãããã§ãã¯
+    # 逆require 指定された受け口に複数の結合がないかチェック
     @referenced_port_list.each{ |port,count|
       # p port.class, count
@@ -2757,13 +2591,13 @@
   end
 
-  #=== Cell# require å¼ã³å£ã®çµåãè¡ã
+  #=== Cell# require 呼び口の結合を行う
   # STAGE: S
-  #cp_name:: Symbol           : å¼ã³å£å
-  #cell_or_t:: Celltype|Cell  : celltype ã® require ã®å³è¾ºã§æå®ãããã»ã«ã¿ã¤ãã¾ãã¯ã»ã«
-  #port::  Port               : celltype ã® Port ãªãã¸ã§ã¯ã
+  #cp_name:: Symbol           : 呼び口名
+  #cell_or_t:: Celltype|Cell  : celltype の require の右辺で指定されたセルタイプまたはセル
+  #port::  Port               : celltype の Port オブジェクト
   def set_require_join( cp_name, cell_or_ct, port )
 
-    # set_require_join ã¯2åº¦å¼ã³åºããã
-    # 2åº¦ç®ã¯ post ã³ã¼ããçæããå¾       #####  ãã£ããè¦åããï¼éè¤ã¨ã©ã¼ãè¦éãï¼
+    # set_require_join は2度呼び出される
+    # 2度目は post コードを生成した後       #####  いったん見合わせ（重複エラーを見逃す）
     # if @require_joined_list[ cp_name ] then
     #   return
@@ -2782,5 +2616,5 @@
       end
     else
-      # require: cell ã§æå®
+      # require: cell で指定
       cell = cell_or_ct
       if @region.distance( cell.get_region ) == nil then
@@ -2792,5 +2626,5 @@
       cdl_warning( "W1003 $1 : require call port overridden in $2" , cp_name, @name )
     else
-      # require ã® join ãçæ(å¼ã³å£ã®çµå)
+      # require の join を生成(呼び口の結合)
 #      rhs = Expression.new( [ :OP_DOT, [ :IDENTIFIER, Token.new( cell.get_name, nil, nil, nil ) ],
       nsp = NamespacePath.new( cell.get_name, false, cell.get_namespace )
@@ -2805,16 +2639,14 @@
   end
 
-  #=== Cell# Join ã® definition ã®è¨­å®ã¨ãã§ãã¯
+  #=== Cell# Join の definition の設定とチェック
   # STAGE: S
   def set_definition_join
-    return if @celltype == nil    # æ¢ã«ã¨ã©ã¼ï¼æã¡åã
-    return if @b_defined == false # ãã­ãã¿ã¤ãå®£è¨ã®ã¿
-    return if @b_checked == true  # æ¢ã«è¨­å®ï¼ãã§ãã¯ï¼æ¸ã¿
+    return if @celltype == nil    # 既にエラー：打ち切る
+    return if @b_defined == false # プロトタイプ宣言のみ
+    return if @b_checked == true  # 既に設定（チェック）済み
 
     dbgPrint "set_definition_join in #{@name}\n"
 
-    # relay allocator ããã©ã£ã¦åå
-¥ããªããããå
-é ­ã§ @b_checked ã true ã«ãã
+    # relay allocator をたどって再入しないよう、先頭で @b_checked を true にする
     @b_checked = true
 
@@ -2822,10 +2654,7 @@
       check_restrict_list
       
-      # compoiste ã»ã«ã®ã¯ã­ã¼ã³ããããã®ã¯ãset_definition ä¸è¦
-      # å
-ã® join ã¯æ¢ã« definition ããã¦ãã
-      # å
-ã®ã»ã«ã«ããã¦ãä»£å
-¥ãã§ãã¯ããã¦ããã®ã§ãäºéã«ãã§ãã¯(throughé©ç¨)ããã¦ãã¾ã
+      # compoiste セルのクローンされたものは、set_definition 不要
+      # 元の join は既に definition されている
+      # 元のセルにおいて、代入チェックされているので、二重にチェック(through適用)されてしまう
       @join_list.get_items.each{ |join|
         dbgPrint " set_definition_join: checking #{@name}.#{join.get_name}\n"
@@ -2833,7 +2662,7 @@
           port = @celltype.find(join.get_name)
           join.get_array_member2.each { |am|
-            if am == nil then   # æªçµåã®å ´åãã¨ã©ã¼ãã§ãã¯ã¯ check_join
+            if am == nil then   # 未結合の場合、エラーチェックは check_join
               if port && ! port.is_optional? then
-                # ãã¹ãç¨ã«ã¨ã©ã¼ã¡ãã»ã¼ã¸åºå
+                # テスト用にエラーメッセージ出力
                 # cdl_error( "TEMPORAL set_definition_join: uninitialized array member"  )
               end
@@ -2848,20 +2677,16 @@
     end
 
-    # ãªã¬ã¼ join ã¯ through ãã©ã°ã¤ã³çæå¾ã«ããã§ããªã
-    # through å¾ã«çµåå
-ãå
-¥ãæ¿ãããã 
+    # リレー join は through プラグイン生成後にしかできない
+    # through 後に結合先が入れ替えられる 
     create_relay_allocator_join
 
-    # composite ã»ã«ã®å±é
+    # composite セルの展開
     if ! @in_composite && ! @f_cloned && @celltype.instance_of?( CompositeCelltype ) then
-      # composite ã»ã«ã¿ã¤ãå
-ã® composite ã¯å±éããªã
-      # compoiste ã»ã«å±éä¸­ã® composite ã¯å±éããªã (CompositeCelltype::expand å
-ã§åå¸°çã« expnad)
+      # composite セルタイプ内の composite は展開しない
+      # compoiste セル展開中の composite は展開しない (CompositeCelltype::expand 内で再帰的に expnad)
       expand
     end
 
-    # celltype ã« generate ãæå®ããããã¦ããã
+    # celltype に generate が指定されされているか
     celltype_plugin = @celltype.get_celltype_plugin
     if celltype_plugin then
@@ -2875,6 +2700,6 @@
   end
 
-  #=== Cell# composite ã»ã«ã®å±é
-  # ãã®ã»ã«ã composite ã»ã«ã¿ã¤ã
+  #=== Cell# composite セルの展開
+  # このセルが composite セルタイプ
   def expand
 
@@ -2882,13 +2707,11 @@
     dbgPrint "expanding #{@name} #{@celltype.get_name}\n"
 
-    # å±éãããã»ã«ã®ãªã¹ã
+    # 展開されたセルのリスト
     @@cloned_cell_list = {}
 
-    # composite celltype ã® cell ãå±é
+    # composite celltype の cell を展開
     @cell_list, @cell_list2 = @celltype.expand( @name, @global_name, @NamespacePath, @join_list, @region, @plugin, @locale )
 
-    # ãã­ãã¿ã¤ããåç
-§ããã¦ããå ´åãå­ãåç
-§ããã¦ãããã¨ã«ãã
+    # プロトタイプが参照されている場合、子も参照されていることにする
     if @f_ref then
       dbgPrint "expand: set_f_ref\n"
@@ -2896,8 +2719,8 @@
     end
 
-    # å¼ã³å£ã®å³è¾ºã®ã»ã«ã clone ãããã®ã«å¤æ´
+    # 呼び口の右辺のセルを clone したものに変更
     self.change_rhs_port
 
-    # ãã­ãã¿ã¤ãå®£è¨ã§è¨­å®ããã¦ãããã®ãåæ ãã
+    # プロトタイプ宣言で設定されていたものを反映する
     @entry_array_max_subscript.each{ |port,name|
       set_entry_inner_port_max_subscript( port, name )
@@ -2905,5 +2728,5 @@
   end
 
-  #=== Cell#restrict ãè¿½å 
+  #=== Cell#restrict を追加
   def add_restrict( entry_name, func_name, region_name_list )
     if @restrict_list[ entry_name ] then
@@ -2994,5 +2817,5 @@
       puts "entry array #{port.get_name}: max subscript=#{num}"
     }
-    if @cell_list then   # ããã§ @cell_list ã nil ãªã®ã¯ Bug
+    if @cell_list then   # ここで @cell_list が nil なのは Bug
       (indent+1).times { print "  " }
       puts "cloned cell list:"
@@ -3018,5 +2841,5 @@
           subscript = ""
         end
-        # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®çµåãçæ
+        # アロケータ呼び口の結合を生成
         (indent+2).times { print "  " }
         puts "#{cp_name}#{subscript} = #{a[4+1]}"
@@ -3042,5 +2865,5 @@
 # @real_singleton:: bool : has singleton cell in this composite celltype
 # @real_active:: bool : has active cell in this composite celltype
-# @name_list:: NamedList item: Decl (attribute), Port ã¨ã¯ã¹ãã¼ãå®ç¾©
+# @name_list:: NamedList item: Decl (attribute), Port エクスポート定義
 # @internal_allocator_list:: [ [cell, internal_cp_name, port_name, func_name, param_name, ext_alloc_ent], ... ]
 
@@ -3082,5 +2905,5 @@
 
     Namespace.new_compositecelltype( self )
-    set_namespace_path # @NamespacePath ã®è¨­å®
+    set_namespace_path # @NamespacePath の設定
 
     @port_list = []
@@ -3098,5 +2921,5 @@
   def end_of_parse
 
-    # singleton ã«é¢ãããã§ãã¯
+    # singleton に関するチェック
     if @b_singleton && @real_singleton == nil then
       cdl_warning( "W1004 $1 : specified singleton but has no singleton in this celltype" , @name )
@@ -3107,5 +2930,5 @@
     end
 
-    # active ã«é¢ãããã§ãã¯
+    # active に関するチェック
     if @b_active && @real_active == nil then
       cdl_error( "S1054 $1 : specified active but has no active in this celltype" , @name )
@@ -3114,5 +2937,5 @@
     end
 
-    # @allocator_instance ãè¨­å®ãã
+    # @allocator_instance を設定する
     @name_list.get_items.each{ |n|
       if n.instance_of? Port then
@@ -3121,5 +2944,5 @@
     }
 
-    # ãªã¬ã¼ã¢ã­ã±ã¼ã¿ã® entry å´
+    # リレーアロケータの entry 側
     @port_list.each{ |p|
       if p.get_port_type == :ENTRY then
@@ -3135,12 +2958,12 @@
       end
     }
-    # mikan relay ãæ­£ããæãã¦ããããã§ãã¯ããã¦ããªã
-
-    # æå³è§£æ
+    # mikan relay が正しく抜けているかチェックされていない
+
+    # 意味解析
     @cell_list.get_items.each{ |c|
       c.set_definition_join
     }
 
-    # cell ã®æªçµåã®å¼ã³å£ããªãããã§ãã¯
+    # cell の未結合の呼び口がないかチェック
     @cell_list.get_items.each{ |c|
       c.check_join
@@ -3148,13 +2971,11 @@
     }
 
-    # å¼ã³å£ã®çµåã«ã¤ãã¦ãexport ã¨å
-é¨çµåã®ä¸¡æ¹ããªãããã§ãã¯
-    # ãªã¬ã¼ã¢ã­ã±ã¼ã¿ãå
-é¨ã¢ã­ã±ã¼ã¿ã®è¨­å®
+    # 呼び口の結合について、export と内部結合の両方がないかチェック
+    # リレーアロケータ、内部アロケータの設定
     @port_list.each{ |p|
       p.check_dup_init
     }
 
-    # ãã¹ã¦ã®ã¨ã¯ã¹ãã¼ãå®ç¾©ã«å¯¾å¿ããå¼ã³å£ãåãå£ãå±æ§ãå­å¨ããããã§ãã¯
+    # すべてのエクスポート定義に対応した呼び口、受け口、属性が存在するかチェック
     @name_list.get_items.each{ |n|
       if( @export_name_list.get_item( n.get_name ) == nil )then
@@ -3163,6 +2984,5 @@
     }
 
-    # å
-é¨ã¢ã­ã±ã¼ã¿ãè¨­å®ãã
+    # 内部アロケータを設定する
     @internal_allocator_list.each{ |cell, cp_internal_name, port_name, fd_name, par_name, ext_alloc_ent|
       res = ext_alloc_ent.get_allocator_rhs_elements( :INTERNAL_ALLOC )
@@ -3195,5 +3015,5 @@
     cell.set_owner self  # Cell (in_omposite)
     @cell_list.add_item( cell )
-    if cell.get_celltype then    # nil ãªãã°ããã§ã«ã»ã«ã¿ã¤ããªãã¨ã©ã¼
+    if cell.get_celltype then    # nil ならば、すでにセルタイプなしエラー
       if cell.get_celltype.is_singleton? then
         @real_singleton = cell
@@ -3213,21 +3033,16 @@
   end
 
-  #=== CompositeCelltype# CompositeCelltypeJoin ãä½æ
+  #=== CompositeCelltype# CompositeCelltypeJoin を作成
   # STAGE: B
-  #export_name:: Symbol : å¤é¨ã«å
-¬éããåå
-  #internal_cell_name:: Symbol : å
-é¨ã»ã«å
-  #internal_cell_elem_name:: Symbol : å
-é¨ã»ã«ã®è¦ç´ åï¼å¼ã³å£åãåãå£åãå±æ§åã®ããããï¼
-  #type::  :CALL, :ENTRY, :ATTRIBUTE ã®ããããï¼æ§æè¦ç´ ã¨ãã¦ããã¹ããã®ï¼
-  #RETURN:: Decl | Port : ã¨ã¯ã¹ãã¼ãå®ç¾©
-  # new_join ã¯
-  #   cCall => composite.cCall;     (ã»ã«å
-)
-  #   attr = composite.attr;        (ã»ã«å
-)
-  #   composite.eEnt => cell2.eEnt; (ã»ã«å¤)
-  # ã®æ§æè¦ç´ ã®åºç¾ã«å¯¾ãã¦å¼ã³åºããã
+  #export_name:: Symbol : 外部に公開する名前
+  #internal_cell_name:: Symbol : 内部セル名
+  #internal_cell_elem_name:: Symbol : 内部セルの要素名（呼び口名、受け口名、属性名のいずれか）
+  #type::  :CALL, :ENTRY, :ATTRIBUTE のいずれか（構文要素としてあるべきもの）
+  #RETURN:: Decl | Port : エクスポート定義
+  # new_join は
+  #   cCall => composite.cCall;     (セル内)
+  #   attr = composite.attr;        (セル内)
+  #   composite.eEnt => cell2.eEnt; (セル外)
+  # の構文要素の出現に対して呼び出される
   def new_join( export_name, internal_cell_name,
 		 internal_cell_elem_name, type )
@@ -3242,10 +3057,9 @@
 
     celltype = cell.get_celltype
-    return if celltype == nil	# celltype == nil ãªããã§ã«ã¨ã©ã¼
-
-    # å
-é¨ã»ã«ã®ã»ã«ã¿ã¤ãããå¯¾å¿è¦ç´ ãæ¢ã
-    # ãã®ã¡ã½ããã¯ãæ§æä¸ãå¼ã³å£ãåãå£ãå±æ§ãè¨è¿°ã§ããç®æããå¼åºããã
-    # æ§æä¸ã®å¼åºãä½ç½®ï¼è¨è¿°ä½ç½®ï¼ã¨ãè¦ç´ ãå¯¾å¿ãããã®ããã§ãã¯
+    return if celltype == nil	# celltype == nil ならすでにエラー
+
+    # 内部セルのセルタイプから対応要素を探す
+    # このメソッドは、構文上、呼び口、受け口、属性が記述できる箇所から呼出される
+    # 構文上の呼出し位置（記述位置）と、要素が対応したものかチェック
     obj = celltype.find( internal_cell_elem_name )
     if obj.instance_of?( Decl ) then
@@ -3255,10 +3069,10 @@
       elsif type != :ATTRIBUTE then
         cdl_error( "S1059 \'$1\' : exporting attribute. write in cell or use \'=\' to export attribute" , export_name )
-        # return æ¬¡ã®ã¨ã©ã¼ãé¿ããããã«å¦çç¶è¡ããä»ãå ãã¦ã¿ã
+        # return 次のエラーを避けるために処理続行し、付け加えてみる
       end
     elsif obj.instance_of?( Port ) then
       if obj.get_port_type != type then
         cdl_error( "S1060 \'$1\' : port type mismatch. $2 type is allowed here." , export_name, type )
-        # return æ¬¡ã®ã¨ã©ã¼ãé¿ããããã«å¦çç¶è¡ããä»ãå ãã¦ã¿ã
+        # return 次のエラーを避けるために処理続行し、付け加えてみる
       end
     else
@@ -3268,5 +3082,5 @@
     end
 
-    # ã¨ã¯ã¹ãã¼ãå®ç¾©ã¨ä¸è´ãããã©ãããã§ãã¯
+    # エクスポート定義と一致するかどうかチェック
     obj2 = @name_list.get_item( export_name )
     if( obj2 == nil )then
@@ -3284,5 +3098,5 @@
         elsif obj.get_signature != obj2.get_signature then
           if obj.get_signature != nil && obj2.get_signature != nil then
-            # nil ãªãã°æ¢ã«ã¨ã©ã¼ãªã®ã§å ±åããªã
+            # nil ならば既にエラーなので報告しない
             cdl_error( "S1066 $1 : signature \'$2\' mismatch with previous definition \'$3\'" , export_name, obj.get_signature.get_name, obj2.get_signature.get_name )
           end
@@ -3309,6 +3123,5 @@
     if obj.instance_of?( Decl ) then
       # attribute
-#      # å
-é¨ããå¤é¨ã¸è¤æ°ã®çµåããªãããã§ãã¯
+#      # 内部から外部へ複数の結合がないかチェック
 #      found = false
 #      @attr_list.each{ |a|
@@ -3323,6 +3136,5 @@
     else
       # call/entry port
-#      # å
-é¨ããå¤é¨ã¸è¤æ°ã®çµåããªãããã§ãã¯
+#      # 内部から外部へ複数の結合がないかチェック
 #      found = false
 #      @port_list.each{ |port|
@@ -3337,25 +3149,24 @@
     end
 
-    # join ã @export_name_list ã«ç»é²ï¼éè¤ãã§ãã¯ã¨ã¨ãã«ï¼å¾ã§è¡ããã CompositeCelltypeJoin ã® clone ã«åããï¼
+    # join を @export_name_list に登録（重複チェックとともに，後で行われる CompositeCelltypeJoin の clone に備える）
     if obj.instance_of?( Decl ) && @export_name_list.get_item( export_name ) then
-      # æ¢ã«å­å¨ãããè¿½å ããªããæ°ä»æ§ã§ã¯ã@export_name_list ã«åãååãå«ã¾ãããã¨ãããã
+      # 既に存在する。追加しない。新仕様では、@export_name_list に同じ名前が含まれることがある。
     elsif obj.instance_of?( Port ) && obj.get_port_type == :CALL && @export_name_list.get_item( export_name ) then
-      # æ¢ã«å­å¨ãããè¿½å ããªããæ°ä»æ§ã§ã¯ã@export_name_list ã«åãååãå«ã¾ãããã¨ãããã
+      # 既に存在する。追加しない。新仕様では、@export_name_list に同じ名前が含まれることがある。
     else
       @export_name_list.add_item( join )
     end
 
-    # export ãããã¼ãã«å«ã¾ãã send/receive ãã©ã¡ã¼ã¿ã®ã¢ã­ã±ã¼ã¿(allocator)å¼ã³å£ãã»ã«ã¨çµå
+    # export するポートに含まれる send/receive パラメータのアロケータ(allocator)呼び口をセルと結合
     if obj2.instance_of? Port then
       obj2.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, :RECEIVE
-          cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®åå
-          #            ãã¼ãå         é¢æ°å         ãã©ã¡ã¼ã¿å
+          cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
+          #            ポート名         関数名         パラメータ名
           cp_internal_name = :"#{internal_cell_elem_name}_#{fd.get_name}_#{par.get_name}"
 
-          # ãªã¬ã¼ã¢ã­ã±ã¼ã¿ or å
-é¨ã¢ã­ã±ã¼ã¿æå®ããªããã¦ããå ´åãã¢ã­ã±ã¼ã¿å¼ã³å£ãè¿½å ããªã
-          # ãã®æç¹ã§ã¯ get_allocator_instance ã§ã¯å¾ãããªããã tmp ãå¾ã
+          # リレーアロケータ or 内部アロケータ指定がなされている場合、アロケータ呼び口を追加しない
+          # この時点では get_allocator_instance では得られないため tmp を得る
           if port.get_allocator_instance_tmp then
             found = false
@@ -3365,7 +3176,5 @@
 
                 if s[0] == :INTERNAL_ALLOC then
-                  # å
-é¨ã¢ã­ã±ã¼ã¿ã®å ´å    # mikan ããã¯å
-é¨ã®ã»ã«ã«ç´çµãããå¤é¨ã®ãã¼ãã«æ¹ããã¹ã
+                  # 内部アロケータの場合    # mikan これは内部のセルに直結する。外部のポートに改めるべき
                   @internal_allocator_list << [ cell, cp_internal_name, port.get_name, fd.get_name, par.get_name, s[3] ]
                 end
@@ -3377,5 +3186,5 @@
           end
 
-          # å¤é¨ã¢ã­ã±ã¼ã¿ã®å ´å
+          # 外部アロケータの場合
           new_join( cp_name, internal_cell_name, cp_internal_name, :CALL )
         end
@@ -3383,5 +3192,5 @@
     end
 
-    # ã¨ã¯ã¹ãã¼ãå®ç¾©ãè¿ã
+    # エクスポート定義を返す
     return obj2
   end
@@ -3405,15 +3214,12 @@
     @name_list.add_item port
 
-    # export ãããã¼ãã«å«ã¾ãã send/receive ãã©ã¡ã¼ã¿ã®ã¢ã­ã±ã¼ã¿å¼ã³å£ã® export ãçæãã¦ãã¼ãã«è¿½å 
-    # ãã®æç¹ã§ã¯å
-é¨ã¢ã­ã±ã¼ã¿ãã©ããå¤æ­ã§ããªãã®ã§ãã¨ããããçæãã¦ãã
+    # export するポートに含まれる send/receive パラメータのアロケータ呼び口の export を生成してポートに追加
+    # この時点では内部アロケータかどうか判断できないので、とりあえず生成しておく
     port.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, :RECEIVE
-        #### ãªã¬ã¼ã¢ã­ã±ã¼ã¿ or å
-é¨ã¢ã­ã±ã¼ã¿æå®ããªããã¦ããå ´åãã¢ã­ã±ã¼ã¿å¼ã³å£ãè¿½å ããªã
-        # å
-é¨ã¢ã­ã±ã¼ã¿æå®ããªããã¦ããå ´åãã¢ã­ã±ã¼ã¿å¼ã³å£ãè¿½å ããªã
-        # ãã®æç¹ã§ã¯ get_allocator_instance ã§ã¯å¾ãããªããã tmp ãå¾ã
+        #### リレーアロケータ or 内部アロケータ指定がなされている場合、アロケータ呼び口を追加しない
+        # 内部アロケータ指定がなされている場合、アロケータ呼び口を追加しない
+        # この時点では get_allocator_instance では得られないため tmp を得る
         if port.get_allocator_instance_tmp then
           found = false
@@ -3430,15 +3236,14 @@
 
         if par.get_allocator then
-          cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # ã¢ã­ã±ã¼ã¿å¼ã³å£ã®åå
-          #           ãã¼ãå          é¢æ°å         ãã©ã¡ã¼ã¿å
-          alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace ã¢ã­ã±ã¼ã¿å¼ã³å£ã®ã·ã°ããã£
-          array_size = port.get_array_size            # å¼ã³å£ã¾ãã¯åãå£é
-åã®ãµã¤ãº
-          created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # å¼ã³å£ãçæ
+          cp_name = :"#{port.get_name}_#{fd.get_name}_#{par.get_name}"     # アロケータ呼び口の名前
+          #           ポート名          関数名         パラメータ名
+          alloc_sig_path = [ par.get_allocator.get_name ]  # mikan Namespace アロケータ呼び口のシグニチャ
+          array_size = port.get_array_size            # 呼び口または受け口配列のサイズ
+          created_port = Port.new( cp_name, alloc_sig_path, :CALL, array_size ) # 呼び口を生成
           created_port.set_allocator_port( port, fd, par )
           if port.is_omit? then
             created_port.set_omit
           end
-          new_port( created_port )           # ã»ã«ã¿ã¤ãã«æ°ããå¼ã³å£ãè¿½å 
+          new_port( created_port )           # セルタイプに新しい呼び口を追加
         # else
         #   already error
@@ -3457,5 +3262,5 @@
     attribute.each { |a|
       a.set_owner self   # Decl (CompositeCelltype)
-      # V1.1.0.10 composite ã® attr ã® size_is ã¯å¯ã¨ãªã£ã
+      # V1.1.0.10 composite の attr の size_is は可となった
       # if a.get_size_is then
       #  cdl_error( "S1070 $1: size_is pointer cannot be exposed for composite attribute" , a.get_name )
@@ -3468,5 +3273,5 @@
   end
 
-  #=== CompositeCelltype# érequire ã®çµåãçæãã
+  #=== CompositeCelltype# 逆require の結合を生成する
   def create_reverse_require_join cell
     @name_list.get_items.each{ |n|
@@ -3493,5 +3298,5 @@
     return @name_list.get_item( name )
 
-    # å¾æ¥ä»æ§
+    # 従来仕様
 #    cj = @export_name_list.get_item( name )
 #p "#{name}, #{cj.get_port_decl}"
@@ -3503,19 +3308,18 @@
   end
 
-  #=== CompositeCelltype# export ãã CompositeCelltypeJoin ãå¾ã
+  #=== CompositeCelltype# export する CompositeCelltypeJoin を得る
   #name:: string:
-  # attribute ã®å ´åãåãååã«å¯¾ãè¤æ°å­å¨ããå¯è½æ§ãããããæåã®ãã®ããè¿ããªã
+  # attribute の場合、同じ名前に対し複数存在する可能性があるが、最初のものしか返さない
   def find_export name
     return @export_name_list.get_item( name )
   end
 
-  #=== CompositeCelltype# composite celltype ã® cell ãå±é
-  #name:: string: Composite cell ã®åå
-  #global_name:: string: Composite cell ã® global name (C è¨èªå)
-  #join_list:: NamedList : Composite cell ã«å¯¾ãã Join ã® NamedList
+  #=== CompositeCelltype# composite celltype の cell を展開
+  #name:: string: Composite cell の名前
+  #global_name:: string: Composite cell の global name (C 言語名)
+  #join_list:: NamedList : Composite cell に対する Join の NamedList
   #RETURN:
   # [ { name => cell }, [ cell, ... ] ]
-  #  æ»ãå¤ åã¯ ååâcloneãããå
-é¨ã»ã«ãå¾ãã¯ composite ã®åºç¾é ã®ãªã¹ã
+  #  戻り値 前は 名前⇒cloneされた内部セル、後ろは composite の出現順のリスト
   def expand( name, global_name, namespacePath, join_list, region, plugin, locale )
 
@@ -3526,10 +3330,9 @@
     }
   
-    # å±éã§ clone ãããã»ã«ã®ãªã¹ããå³è¾ºã¯ Cell (composite ã®å ´å composite ãª cell ã® clone)
+    # 展開で clone されたセルのリスト、右辺は Cell (composite の場合 composite な cell の clone)
     clone_cell_list = {}
     clone_cell_list2 = []
 
-    #  composite å
-é¨ã®ãã¹ã¦ã® cell ã«ã¤ãã¦
+    #  composite 内部のすべての cell について
     @cell_list.get_items.each { |c|
 
@@ -3537,12 +3340,10 @@
       dbgPrint "expand : cell #{c.get_name}\n"
 
-      # Join ã®é
-å
+      # Join の配列
       ja = []
 
-      # CompositeCelltype ã export ããå¼ã³å£ãåãå£ãå±æ§ã®ãªã¹ãã«ã¤ãã¦
+      # CompositeCelltype が export する呼び口、受け口、属性のリストについて
       # @export_name_list.get_items.each{ |cj|	# cj: CompositeCelltypeJoin
-      # æ°ä»æ§ã§ã¯ã@export_name_list ã«å
-¥ã£ã¦ããªã attr ããããã
+      # 新仕様では、@export_name_list に入っていない attr がありうる
       (@port_list+@attr_list).each{ |cj|	# cj: CompositeCelltypeJoin
 
@@ -3550,9 +3351,8 @@
         dbgPrint "        cj : #{cj.get_name}\n"
 
-        # CompositeCelltypeJoin (export) ã®å¯¾è±¡ã»ã«ãï¼
+        # CompositeCelltypeJoin (export) の対象セルか？
         if cj.match?( c ) then
 
-          # å¯¾è±¡ã»ã«å
-ã® CompositeCelltype ã® export ãã Join (attribute ã¾ãã¯ call port)
+          # 対象セル内の CompositeCelltype の export する Join (attribute または call port)
           j = join_list.get_item( cj.get_name )
 
@@ -3565,6 +3365,6 @@
 
           if j then
-            # å¼ã³å£ãå±æ§ã®å ´å
-            #  ComositeCell ç¨ã®ãã®(j) ãå¯¾è±¡ã»ã«ç¨ã« clone (@through_list ãã³ãã¼ããã)
+            # 呼び口、属性の場合
+            #  ComositeCell 用のもの(j) を対象セル用に clone (@through_list もコピーされる)
             # p "expand: cloning Join #{j.get_name} #{@name} #{name}"
             jc = j.clone_for_composite( @name, name, locale )
@@ -3574,9 +3374,8 @@
             # p "cn #{jc.get_name} #{cj.get_cell_elem_name}"
 
-            # å¯¾è±¡ã»ã«ã®å¼ã³å£ã¾ãã¯å±æ§ã®ååã«å¤æ´
+            # 対象セルの呼び口または属性の名前に変更
             jc.change_name( cj.get_cell_elem_name )
 
-            # å¯¾è±¡ã»ã«ã«å¯¾ãã Join ã®é
-å
+            # 対象セルに対する Join の配列
             ja << jc
           end
@@ -3590,5 +3389,5 @@
       dbgPrint "expand : clone #{name}_#{c.get_name}\n"
 
-      # ã»ã«ã® clone ãçæ
+      # セルの clone を生成
 #      clone_cell_list[ "#{name}_#{c.get_name}" ] =  c.clone_for_composite( name, global_name, ja )
       c2 =  c.clone_for_composite( name, global_name, namespacePath, ja, @name, region, plugin, locale )
@@ -3600,5 +3399,5 @@
     clone_cell_list.each { |nm,c|
       dbgPrint "  cloned: #{nm} = #{c.get_global_name}\n"
-      # join ã® owner ã clone ãããã»ã«ã«å¤æ´ãã V1.1.0.25
+      # join の owner を clone されたセルに変更する V1.1.0.25
       c.get_join_list.get_items.each{ |j|
         j.set_cloned( clone_cell_list[ "#{c.get_local_name}" ] )
@@ -3608,5 +3407,5 @@
   end
 
-  #=== CompositeCelltype æå®å­ãªã¹ãã®è¨­å®
+  #=== CompositeCelltype 指定子リストの設定
   def set_specifier_list( spec_list )
     return if spec_list == nil
@@ -3639,6 +3438,5 @@
 
   def get_var_list
-    []   # ç©ºã®é
-åãè¿ã
+    []   # 空の配列を返す
   end
 
@@ -3647,9 +3445,7 @@
   end
 
-  #== CompositeCelltype# generate æå®å­ã®æ
-å ±
-  # CompositeCelltype ã«ã¯ generate ãæå®ã§ããªãã®ã§ nil ãè¿ã
-  # Celltype::@generate ãåç
-§ã®ãã¨
+  #== CompositeCelltype# generate 指定子の情報
+  # CompositeCelltype には generate が指定できないので nil を返す
+  # Celltype::@generate を参照のこと
   def get_celltype_plugin
     nil
@@ -3664,15 +3460,12 @@
   end
 
-  #=== CompositeCelltype# ã¢ã¯ãã£ãã§ã¯ãªã
-  # active ã§ã¯ãªãã«å ããå
-¨ã¦ã®å
-é¨ã»ã«ã®ã»ã«ã¿ã¤ãã inactive ã®å ´åã« inactive
-  # ï¼å
-é¨ã®ã»ã«ã active ã¾ãã¯ factory ãæã£ã¦ããï¼
+  #=== CompositeCelltype# アクティブではない
+  # active ではないに加え、全ての内部セルのセルタイプが inactive の場合に inactive
+  # （内部のセルが active または factory を持っている）
   def is_inactive?
     if @b_active == false then
       @cell_list.get_items.each{ |c|
         if c.get_celltype && c.get_celltype.is_inactive? == false then
-          # c.get_celltype == nil ã®å ´åã¯ã»ã«ã¿ã¤ãæªå®ç¾©ã§ãã§ã«ã¨ã©ã¼
+          # c.get_celltype == nil の場合はセルタイプ未定義ですでにエラー
           return false
         end
@@ -3714,5 +3507,5 @@
 
 
-#== æ§æè¦ç´ ï¼å£ãè¡¨ãã¯ã©ã¹ï¼ã»ã«ã¿ã¤ãã®å¼ã³å£ãåãå£ï¼
+#== 構文要素：口を表すクラス（セルタイプの呼び口、受け口）
 class Port < BDNode
 # @name::  str
@@ -3720,18 +3513,13 @@
 # @port_type::  :CALL, :ENTRY
 # @array_size:: nil: not array, "[]": sizeless, Integer: sized array
-# @reverse_require_cell_path:: NamespacePath :     érequireå¼ã³å
-ã»ã«  mikan namespace (å¼ã³å£ã®ã¿æå®å¯è½)
-# @reverse_require_callport_name:: Symbol:  érequireå¼ã³å
-ã»ã«ã®å¼ã³å£å
+# @reverse_require_cell_path:: NamespacePath :     逆require呼び元セル  mikan namespace (呼び口のみ指定可能)
+# @reverse_require_callport_name:: Symbol:  逆require呼び元セルの呼び口名
 #
-# set_allocator_port ã«ãã£ã¦è¨­å®ãããï¼è¨­å®ãããå ´åããã®ãã¼ãã¯ã¢ã­ã±ã¼ã¿ãã¼ãã§ããã
-# @allocator_port:: Port : ãã®å¼ã³å£ãã§ããå
-ã¨ãªã£ãå¼ã³å£ã¾ãã¯åãå£
-# @allocator_func_decl:: Decl : ãã®å¼ã³å£ãã§ããå
-ã¨ãªã£ãå¼ã³å£ã¾ãã¯åãå£ã®é¢æ°
-# @allocator_param_decl:: ParamDecl : ãã®å¼ã³å£ãã§ããå
-ã¨ãªã£ãå¼ã³å£ã¾ãã¯åãå£ã®ãã©ã¡ã¼ã¿
+# set_allocator_port によって設定される．設定された場合、このポートはアロケータポートである。
+# @allocator_port:: Port : この呼び口ができる元となった呼び口または受け口
+# @allocator_func_decl:: Decl : この呼び口ができる元となった呼び口または受け口の関数
+# @allocator_param_decl:: ParamDecl : この呼び口ができる元となった呼び口または受け口のパラメータ
 #
-# set_specifier ã«ãã£ã¦è¨­å®ããã(
+# set_specifier によって設定される(
 # @allocator_instance:: Hash : {"func_param" => [ :RELAY_ALLOC, func_name, param_name, rhs_cp_name, rhs_func_name, rhs_param_name ]}
 #                                               [:INTERNAL_ALLOC, func_name, param_name, rhs_ep_name ]
@@ -3739,28 +3527,25 @@
 #                                                                                    function    parameter   rhs
 #
-# @b_require:: bool : require ã«ããçæããã call port ã®å ´å true
-# @b_has_name:: bool : require : ååããã®ãªã¯ã¯ã¤ã¢å¼ã³å£
-# @b_inline:: bool : entry port ã®ã¿
-# @b_omit:: bool : omit æå®å­ãæå®ããã (call port ã®ã¿)
-# @b_optional:: bool : call port ã®ã¿
-# @b_ref_des:: bool :  ref_desc ã­ã¼ã¯ã¼ããæå®ããã
-# @b_dynamic:: bool :  dynamic ã­ã¼ã¯ã¼ããæå®ããã (å¼ã³å£ã®ã¿)
+# @b_require:: bool : require により生成された call port の場合 true
+# @b_has_name:: bool : require : 名前ありのリクワイア呼び口
+# @b_inline:: bool : entry port のみ
+# @b_omit:: bool : omit 指定子が指定された (call port のみ)
+# @b_optional:: bool : call port のみ
+# @b_ref_des:: bool :  ref_desc キーワードが指定された
+# @b_dynamic:: bool :  dynamic キーワードが指定された (呼び口のみ)
 #
 # optimize::
-# @celltype:: å±ããã»ã«ã¿ã¤ã
+# @celltype:: 属するセルタイプ
 #
-# :CALL ã®å ´åã®æé©å
-# @b_VMT_useless:: bool                     # VMT é¢æ°ãã¼ãã«ãä½¿ç¨ããªã
-# @b_skelton_useless:: bool                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
-# @b_cell_unique:: bool                     # å¼ã³å
-ã¯å¯ä¸ã®ã»ã«
-# @only_callee_port:: Port                  # å¯ä¸ã®å¼ã³å
-ãã¼ã
-# @only_callee_cell:: Cell                  # å¯ä¸ã®å¼ã³å
-ã»ã« (@b_PEPDES_in_CB_useless = true ã®ææå¹)
+# :CALL の場合の最適化
+# @b_VMT_useless:: bool                     # VMT 関数テーブルを使用しない
+# @b_skelton_useless:: bool                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
+# @b_cell_unique:: bool                     # 呼び先は唯一のセル
+# @only_callee_port:: Port                  # 唯一の呼び先ポート
+# @only_callee_cell:: Cell                  # 唯一の呼び先セル (@b_PEPDES_in_CB_useless = true の時有効)
 #
-# :ENTRY ã®å ´åã®æé©åï¼å¼ã³å£æé©åã¨åãå¤æ°åãä½¿ç¨ï¼
-# @b_VMT_useless:: bool                     # VMT é¢æ°ãã¼ãã«ãä¸è¦
-# @b_skelton_useless:: bool                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦
+# :ENTRY の場合の最適化（呼び口最適化と同じ変数名を使用）
+# @b_VMT_useless:: bool                     # VMT 関数テーブルが不要
+# @b_skelton_useless:: bool                 # スケルトン関数不要
 
   def initialize( name, sig_path, port_type, array_size = nil, reverse_require_cell_path = nil, reverse_require_entry_port_name = nil )
@@ -3778,6 +3563,5 @@
         @array_size = array_size.eval_const(nil)
       else
-        @array_size = array_size   # ããã¯ã¢ã­ã±ã¼ã¿å¼ã³å£ã®å ´åï¼å
-ã®å¼ã³å£ã§æ¢ã«è©ä¾¡æ¸ã¿ï¼
+        @array_size = array_size   # これはアロケータ呼び口の場合（元の呼び口で既に評価済み）
       end
       if @array_size == nil then
@@ -3794,10 +3578,8 @@
     object = Namespace.find( sig_path )    #1
     if object == nil then
-      # mikan signature ã®ååãä¸å®å
-¨
+      # mikan signature の名前が不完全
       cdl_error( "S1075 \'$1\' signature not found" , sig_path )
     elsif ! object.instance_of?( Signature ) then
-      # mikan signature ã®ååãä¸å®å
-¨
+      # mikan signature の名前が不完全
       cdl_error( "S1076 \'$1\' not signature" , sig_path )
     else
@@ -3806,5 +3588,5 @@
     end
 
-    # érequire
+    # 逆require
     @reverse_require_cell_path       = nil
     @reverse_require_entry_port_name = nil
@@ -3816,11 +3598,10 @@
         @reverse_require_entry_port_name = reverse_require_entry_port_name
 
-        # åãå£é
-åãï¼
+        # 受け口配列か？
         if array_size then
           cdl_error( "S1153 $1: cannot be entry port array for fixed join port", @name )
         end
 
-        # å¼ã³å£ã®ã»ã«ã¿ã¤ããæ¢ã
+        # 呼び口のセルタイプを探す
         ct_or_cell = Namespace.find( @reverse_require_cell_path )  #1
         if ct_or_cell.instance_of? Cell then
@@ -3837,9 +3618,8 @@
 
         if ct == nil then
-          return    # æ¢ã«ã¨ã©ã¼
-        end
-
-        # æ·»ãå­ãªãã®å¼ã³å£é
-åãï¼
+          return    # 既にエラー
+        end
+
+        # 添え字なしの呼び口配列か？
         port = ct.find( @reverse_require_entry_port_name )
         if port == nil || port.get_port_type != :CALL
@@ -3863,27 +3643,24 @@
   end
 
-  #=== Port#æé©åã«é¢ããå¤æ°ããªã»ãããã
-  # Region ãã¨ã«æé©åã®ãããªãããããããããªã»ãããã
+  #=== Port#最適化に関する変数をリセットする
+  # Region ごとに最適化のやりなおしをするため、リセットする
   def reset_optimize
     if @port_type == :CALL then
       # call port optimize
-      @b_VMT_useless = false                     # VMT ä¸è¦ (true ã®æ VMT ãä»ãããã¨ãªãå¼åºã)
-      @b_skelton_useless = false                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
-      @b_cell_unique = false                     # å¯ä¸ã®å¼ã³å
-ã»ã«
-      @only_callee_port = nil                    # å¯ä¸ã®å¼ã³å
-ãã¼ã
-      @only_callee_cell = nil                    # å¯ä¸ã®å¼ã³å
-ã»ã«
+      @b_VMT_useless = false                     # VMT 不要 (true の時 VMT を介することなく呼出す)
+      @b_skelton_useless = false                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
+      @b_cell_unique = false                     # 唯一の呼び先セル
+      @only_callee_port = nil                    # 唯一の呼び先ポート
+      @only_callee_cell = nil                    # 唯一の呼び先セル
     else
       # entry port optimize
       if $unopt then
-        # æé©åãªã
-        @b_VMT_useless = false                     # VMT ä¸è¦ (true ã®æ VMT ãä»ãããã¨ãªãå¼åºã)
-        @b_skelton_useless = false                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
+        # 最適化なし
+        @b_VMT_useless = false                     # VMT 不要 (true の時 VMT を介することなく呼出す)
+        @b_skelton_useless = false                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
       else
-        # æé©åãã
-        @b_VMT_useless = true                      # VMT ä¸è¦ (true ã®æ VMT ãä»ãããã¨ãªãå¼åºã)
-        @b_skelton_useless = true                  # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
+        # 最適化あり
+        @b_VMT_useless = true                      # VMT 不要 (true の時 VMT を介することなく呼出す)
+        @b_skelton_useless = true                  # スケルトン関数不要   (true の時、受け口関数を呼出す)
       end
     end
@@ -3914,10 +3691,9 @@
   end
 
-  #=== Port# ã¢ã­ã±ã¼ã¿ãã¼ãã®è¨­å®
-  #port:: Port : send/receive ã®ãã£ãå¼ã³å£ã¾ãã¯åãå£
-  #fd:: Decl : é¢æ°ã® declarator
-  #par:: ParamDecl : send/receive ã®ãã£ãå¼æ°
-  # ãã®å¼ã³å£ãçæããããã¨ã«ãªã£ãå¼ã³å£ã¾ãã¯åãå£ã®æ
-å ±ãè¨­å®
+  #=== Port# アロケータポートの設定
+  #port:: Port : send/receive のあった呼び口または受け口
+  #fd:: Decl : 関数の declarator
+  #par:: ParamDecl : send/receive のあった引数
+  # この呼び口が生成されるもとになった呼び口または受け口の情報を設定
   def set_allocator_port( port, fd, par )
     @allocator_port = port
@@ -3951,6 +3727,6 @@
   end
 
-  #=== Port# require å¼ã³å£ãååãæã¤ï¼
-  # require éå®
+  #=== Port# require 呼び口が名前を持つ？
+  # require 限定
   def has_name?
     @b_has_name
@@ -3965,5 +3741,5 @@
   end
 
-  #=== Port# omit æå®ããã¦ãã?
+  #=== Port# omit 指定されている?
   def is_omit?
     @b_omit || ( @signature && @signature.is_empty? )
@@ -3974,19 +3750,18 @@
   end
 
-  def set_VMT_useless                     # VMT é¢æ°ãã¼ãã«ãä½¿ç¨ããªã
+  def set_VMT_useless                     # VMT 関数テーブルを使用しない
    @b_VMT_useless = true
   end
 
-  def set_skelton_useless                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
+  def set_skelton_useless                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
     @b_skelton_useless = true
   end
 
-  def set_cell_unique                     # å¼ã³å
-ã»ã«ã¯ä¸ã¤ã ã
+  def set_cell_unique                     # 呼び先セルは一つだけ
     @b_cell_unique = true
   end
 
-  #=== Port# å¼ã³å£/åãå£ã®æå®å­ã®è¨­å®
-  # inline, allocator ã®æå®
+  #=== Port# 呼び口/受け口の指定子の設定
+  # inline, allocator の指定
   def set_specifier spec_list
     spec_list.each { |s|
@@ -4033,8 +3808,6 @@
   end
 
-  #=== Port# ãªã¬ã¼ã¢ã­ã±ã¼ã¿ãå
-é¨ã¢ã­ã±ã¼ã¿ã®ã¤ã³ã¹ã¿ã³ã¹ãè¨­å®
-  # å¼ã³å£ã®åæ¹åç
-§å¯è½ãªããã«ãã»ã«ã¿ã¤ãã®è§£éã®æå¾ã§è¡ã
+  #=== Port# リレーアロケータ、内部アロケータのインスタンスを設定
+  # 呼び口の前方参照可能なように、セルタイプの解釈の最後で行う
   def set_allocator_instance
     if @allocator_instance_tmp == nil then
@@ -4049,6 +3822,6 @@
       case alloc_type
       when :INTERNAL_ALLOC
-        if ! @owner.instance_of? CompositeCelltype then # ãã¹ãé²ãããã« composite ã§ãªããã°ã¨ãã
-          cdl_error( "S1081 self allocator not supported yet"  )   # mikan ããã¯ãµãã¼ãããã¦ããã¯ããè¦èª¿æ» 12/1/15
+        if ! @owner.instance_of? CompositeCelltype then # ミスを防ぐために composite でなければとした
+          cdl_error( "S1081 self allocator not supported yet"  )   # mikan これはサポートされているはず。要調査 12/1/15
           next
         end
@@ -4057,5 +3830,5 @@
         # OK
       when :NORMAL_ALLOC
-        # ããã¸æ¥ãã®ã¯ composite ã®åãå£ã§å³è¾ºã "eEnt.func.param" å½¢å¼ã§æå®ããã¦ããå ´å
+        # ここへ来るのは composite の受け口で右辺が "eEnt.func.param" 形式で指定されていた場合
         cdl_error( "S1174 $1 not suitable for lhs, suitable lhs: 'func.param'", "#{ai[1]}.#{ai[3]}.#{ai[4]}" )
         next
@@ -4064,6 +3837,6 @@
       end
 
-      # '=' å·¦è¾º(func_name,param_name)ã¯å®å¨ããã?
-      if @signature then       # signature = nil ãªãæ¢ã«ã¨ã©ã¼
+      # '=' 左辺(func_name,param_name)は実在するか?
+      if @signature then       # signature = nil なら既にエラー
         fh = @signature.get_function_head( ai[1] )
         if fh == nil then
@@ -4073,5 +3846,5 @@
         decl = fh.get_declarator
         if ! decl.is_function? then
-          next   # æ¢ã«ã¨ã©ã¼
+          next   # 既にエラー
         end
         paramdecl = decl.get_type.get_paramlist.find( ai[2] )
@@ -4090,10 +3863,10 @@
       end
 
-      # éè¤æå®ããªãã?
+      # 重複指定がないか?
       if @allocator_instance[ "#{@name}_#{ai[1]}_#{ai[2]}" ] then
         cdl_error( "S1085 duplicate allocator specifier for \'$1_$2\'" , ai[1], ai[2] )
       end
 
-      # å³è¾ºã®ãã§ãã¯
+      # 右辺のチェック
       case alloc_type
       when :INTERNAL_ALLOC
@@ -4105,10 +3878,10 @@
         end
 
-        ep_name = ele[1]   # ã¢ã­ã±ã¼ã¿åãå£å
+        ep_name = ele[1]   # アロケータ受け口名
         ep = @owner.find ep_name.get_path[0]  # mikan "a::b"
         if ep == nil || ! ep.instance_of?( Port ) || ep.get_port_type != :ENTRY || ! ep.get_signature.is_allocator? then
           cdl_error( "S1175 $1 not found or not allocator entry port for $2" , ep_name, ai[1] )
         end
-        # å³è¾ºãã§ãã¯çµãã
+        # 右辺チェック終わり
         # ai2 = [ :INTERNAL_ALLOC, func_name, param_name, rhs_ep_name ]
         ai2 = [ ai[0], ai[1], ai[2], ep_name ]
@@ -4122,5 +3895,5 @@
           #    ele[0]    ele[1][0]  ele[1][1][0]  ele[1][1][1]        ele[1][2]    ele[2]
           #      name_space_path.Token(1).Token(2) === call_port.func.param
-          #  mikan Expression#analyze_cell_join_expression ã®å¤ç¨®ãä½æãã¦ç½®ãæããã¹ã
+          #  mikan Expression#analyze_cell_join_expression の変種を作成して置き換えるべき
 
           cdl_error( "S1176 rhs not in 'call_port.func.param' form for for $1_$2" , ai[1], ai[2] )   # S1086
@@ -4128,10 +3901,8 @@
         end
         func_name = ele[1][2]; cp_name = ele[1][1][1].get_name; param_name = ele[2].to_sym
-        cp = @owner.find cp_name    # ãªã¬ã¼ããå
-ã®å¼ã³å£
+        cp = @owner.find cp_name    # リレーする先の呼び口
         if cp then
-# mikan cp ãå¼ã³å£ã§ãããã¨ã®ãã§ãã¯ï¼å±æ§ã®å ´åãããï¼
-# mikan åãå£ããåãå£ã¸ã®ãªã¬ã¼ã¸ã®å¯¾å¿ (å¼ã³å£ããå¼ã³å£ã¸ã®ãªã¬ã¼ã¯ããããªã)  <=== ææ³ã«ããããäºé 
-ï¼å¼ã³å£å´ã§ã¢ã­ã±ã¼ã¿ãæ±ºå®ãããï¼
+# mikan cp が呼び口であることのチェック（属性の場合もある）
+# mikan 受け口から受け口へのリレーへの対応 (呼び口から呼び口へのリレーはありえない)  <=== 文法にかかわる事項（呼び口側でアロケータが決定される）
           sig = cp.get_signature
           if sig && @signature then
@@ -4143,5 +3914,5 @@
             decl = fh.get_declarator
             if ! decl.is_function? then
-              next   # æ¢ã«ã¨ã©ã¼
+              next   # 既にエラー
             end
             paramdecl = decl.get_type.get_paramlist.find( param_name )
@@ -4162,5 +3933,5 @@
 
             # else
-            # sig == nil ãªãã°æ¢ã«ã¨ã©ã¼
+            # sig == nil ならば既にエラー
           end
         else
@@ -4173,5 +3944,5 @@
           next
         end
-        # å³è¾ºãã§ãã¯çµãã
+        # 右辺チェック終わり
         # ai2 = [ :RELAY_ALLOC, func_name, param_name, rhs_cp_name, rhs_func_name, rhs_param_name ]
         ai2 = [ ai[0], ai[1], ai[2], cp_name, func_name, param_name ]
@@ -4186,24 +3957,20 @@
   end
 
-  def is_VMT_useless?                     # VMT é¢æ°ãã¼ãã«ãä½¿ç¨ããªã
+  def is_VMT_useless?                     # VMT 関数テーブルを使用しない
    @b_VMT_useless
   end
 
-  def is_skelton_useless?                 # ã¹ã±ã«ãã³é¢æ°ä¸è¦   (true ã®æãåãå£é¢æ°ãå¼åºã)
+  def is_skelton_useless?                 # スケルトン関数不要   (true の時、受け口関数を呼出す)
     @b_skelton_useless
   end
 
-  def is_cell_unique?                     # å¼ã³å
-ã®ã»ã«ã¯ä¸ã¤ï¼
+  def is_cell_unique?                     # 呼び先のセルは一つ？
     @b_cell_unique
   end
 
-  #=== Port# åãå£æé©åã®è¨­å®
-  # ãã®åãå£ãåç
-§ããå¼ã³å£ã VMT, skelton ãå¿
-è¦ã¨ãã¦ãããã©ãããè¨­å®
-  # ä¸ã¤ã§ãå¼ã³å£ãå¿
-è¦ã¨ãã¦ããï¼ããªãã¡ b_*_useless ã falseï¼å ´åã¯ã
-  # ãã®åãå£ã®æé©åã false ã¨ãã
+  #=== Port# 受け口最適化の設定
+  # この受け口を参照する呼び口が VMT, skelton を必要としているかどうかを設定
+  # 一つでも呼び口が必要としている（すなわち b_*_useless が false）場合は、
+  # この受け口の最適化を false とする
   def set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
     if ! b_VMT_useless then
@@ -4215,9 +3982,8 @@
   end
 
-  #=== Port# å¯ä¸ã®çµåå
-ãè¨­å®
-  # æé©åã§ä½¿ç¨
-  #  b_VMT_useless == true || b_skelton_useless == true ã®æã«è¨­å®ããã
-  #  optional ã®å ´å callee_cell, callee_port ã nil ã¨ãªã
+  #=== Port# 唯一の結合先を設定
+  # 最適化で使用
+  #  b_VMT_useless == true || b_skelton_useless == true の時に設定される
+  #  optional の場合 callee_cell, callee_port が nil となる
   def set_only_callee( callee_port, callee_cell )
     @only_callee_port = callee_port
@@ -4225,7 +3991,6 @@
   end
 
-  #=== Port# å¯ä¸ã®çµåå
-ãã¼ããè¿ã(compositeã®å ´åå®ã»ã«)
-  # optional å¼ã³å£ã§æªçµåã®å ´å nil ãè¿ã
+  #=== Port# 唯一の結合先ポートを返す(compositeの場合実セル)
+  # optional 呼び口で未結合の場合 nil を返す
   def get_real_callee_port
     if @only_callee_cell then
@@ -4234,7 +3999,6 @@
   end
 
-  #=== Port# å¯ä¸ã®çµåå
-ã»ã«ãè¿ã(compositeã®å ´åå®ã»ã«)
-  # optional å¼ã³å£ã§æªçµåã®å ´å nil ãè¿ã
+  #=== Port# 唯一の結合先セルを返す(compositeの場合実セル)
+  # optional 呼び口で未結合の場合 nil を返す
   def get_real_callee_cell
     if @only_callee_cell then
@@ -4251,5 +4015,5 @@
   end
 
-  #=== Port# érequire ã®çµåãçæãã
+  #=== Port# 逆require の結合を生成する
   # STAGE: S
   def create_reverse_require_join cell
@@ -4258,6 +4022,5 @@
     end
 
-    # å¼ã³å
-ã»ã«ãæ¢ã
+    # 呼び元セルを探す
     ct_or_cell = Namespace.find( @reverse_require_cell_path )   # mikan namespace    #1
     if ct_or_cell.instance_of? Cell then
@@ -4265,5 +4028,5 @@
       ct = cell2.get_celltype
       if ct == nil then
-        return    # æ¢ã«ã¨ã©ã¼
+        return    # 既にエラー
       end
     elsif ct_or_cell.instance_of? Celltype then
@@ -4275,9 +4038,9 @@
       ct = ct_or_cell
     else
-      # æ¢ã«ã¨ã©ã¼ï¼ç¡è¦
+      # 既にエラー：無視
       return
     end
 
-    # çµåãçæãã
+    # 結合を生成する
     dbgPrint "create_reverse_require_join #{cell2.get_name}.#{@reverse_require_entry_port_name}[] = #{cell.get_name}.#{@name}"
     nsp = NamespacePath.new( cell.get_name, false, cell.get_namespace )
@@ -4291,22 +4054,19 @@
   end
 
-  #=== Port# signature ã®ãã¹ã¦ã®é¢æ°ã®ãã¹ã¦ã®ãã©ã¡ã¼ã¿ããã©ã
-  #block:: ãã­ãã¯ãå¼æ°ã¨ãã¦åã(ruby ã®ææ³ã§æ¸ããªã)
-  #  ãã­ãã¯ã¯3ã¤ã®å¼æ°ãåãåã(Port, Decl,      ParamDecl)    Decl: é¢æ°ããã
-  # Signature ã¯ã©ã¹ã«ã each_param ãããï¼åãåãï¼
-  def each_param # ãã­ãã¯å¼æ°{  |port, func_decl, param_decl| }
-    return if @signature == nil                         # signature æªå®ç¾©ï¼æ¢ã«ã¨ã©ã¼ï¼
-    fha = @signature.get_function_head_array            # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®é¢æ°é
-å
-    return if fha == nil                                # nil ãªãææ³ã¨ã©ã¼ã§æå¹å¤ãè¨­å®ãããªãã£ã
-
-    pr = Proc.new   # ãã®ã¡ã½ããã®ãã­ãã¯å¼æ°ã pr ã«ä»£å
-¥
+  #=== Port# signature のすべての関数のすべてのパラメータをたどる
+  #block:: ブロックを引数として取る(ruby の文法で書かない)
+  #  ブロックは3つの引数を受け取る(Port, Decl,      ParamDecl)    Decl: 関数ヘッダ
+  # Signature クラスにも each_param がある（同じ働き）
+  def each_param # ブロック引数{  |port, func_decl, param_decl| }
+    return if @signature == nil                         # signature 未定義（既にエラー）
+    fha = @signature.get_function_head_array            # 呼び口または受け口のシグニチャの関数配列
+    return if fha == nil                                # nil なら文法エラーで有効値が設定されなかった
+
+    pr = Proc.new   # このメソッドのブロック引数を pr に代入
     port = self
-    fha.each{ |fh|  # fh: FuncHead                      # é¢æ°é
-åä¸­ã®åé¢æ°é ­é¨
-      fd = fh.get_declarator                            # fd: Decl  (é¢æ°é ­é¨ããDeclarotorãå¾ã)
-      if fd.is_function? then                           # fd ãé¢æ°ã§ãªããã°ããã§ã«ã¨ã©ã¼
-        fd.get_type.get_paramlist.get_items.each{ |par| # ãã¹ã¦ã®ãã©ã¡ã¼ã¿ã«ã¤ãã¦
+    fha.each{ |fh|  # fh: FuncHead                      # 関数配列中の各関数頭部
+      fd = fh.get_declarator                            # fd: Decl  (関数頭部からDeclarotorを得る)
+      if fd.is_function? then                           # fd が関数でなければ、すでにエラー
+        fd.get_type.get_paramlist.get_items.each{ |par| # すべてのパラメータについて
           pr.call( port, fd, par )
         }
@@ -4315,5 +4075,5 @@
   end
 
-  #=== Port# érequireæå®ããã¦ããï¼
+  #=== Port# 逆require指定されている？
   def is_reverse_required?
     @reverse_require_cell_path != nil
@@ -4357,16 +4117,15 @@
 #== Namespace
 #
-# root namespace ã ããRegion ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¨ãã¦çæããã
-# root namespace ã¯ãroot region ãå
-¼ã­ããã
+# root namespace だけ、Region クラスのインスタンスとして生成される
+# root namespace は、root region を兼ねるため
 #
-# @cell_list ã¯ Region ã®å ´åã«ã®ã¿æã¤ (mikan @cell_list é¢é£ã¯ Region ã«ç§»ãã¹ã)
+# @cell_list は Region の場合にのみ持つ (mikan @cell_list 関連は Region に移すべき)
 #
 class Namespace < NSBDNode
-# @name::  Symbol     # root ã®å ´å "::" (String)
+# @name::  Symbol     # root の場合 "::" (String)
 # @global_name:: str
 # @name_list:: NamedList   Signature,Celltype,CompositeCelltype,Cell,Typedef,Namespace
 # @struct_tag_list:: NamedList : StructType
-# @namespace_list:: Namespace[] : Region ã¯ Namespace ã®å­ã¯ã©ã¹ã§ãããå«ã¾ãã
+# @namespace_list:: Namespace[] : Region は Namespace の子クラスであり、含まれる
 # @signature_list:: Sginature[]
 # @celltype_list:: Celltype[]
@@ -4374,17 +4133,16 @@
 # @cell_list:: Cell[]
 # @typedef_list:: Typedef[]
-# @decl_list:: ( Typedef | StructType | EnumType )[]   ä¾å­é¢ä¿ãããå ´åã«åãã¦ãé çªã©ããã«é
-åã«æ ¼ç´ mikan enum
+# @decl_list:: ( Typedef | StructType | EnumType )[]   依存関係がある場合に備えて、順番どおりに配列に格納 mikan enum
 # @const_decl_list:: Decl[]
-# @cache_n_cells:: Integer :  get_n_cells ã®çµæãã­ã£ãã·ã¥ãã
-# @cache_generating_region:: Region :  get_n_cells ã®çµæãã­ã£ãã·ã¥ãããã¦ãããªã¼ã¸ã§ã³
-
-  # mikan namespace ã® push, pop
-
-  # namespace éå±¤ç¨ã®ã¹ã¿ãã¯
+# @cache_n_cells:: Integer :  get_n_cells の結果をキャッシュする
+# @cache_generating_region:: Region :  get_n_cells の結果をキャッシュするしているリージョン
+
+  # mikan namespace の push, pop
+
+  # namespace 階層用のスタック
   @@namespace_stack = []      # @@namespace_stack[0] = "::" (generator.rb)
   @@namespace_sp = -1
 
-  # Generator ãã¹ãç¨ã®ã¹ã¿ãã¯ (namespace éå±¤ç¨ã®ã¹ã¿ãã¯ãå¯¾æ¯ãã)
+  # Generator ネスト用のスタック (namespace 階層用のスタックを対比する)
   @@nest_stack_index = -1
   @@nest_stack = []
@@ -4392,5 +4150,5 @@
   @@root_namespace = nil
 
-  # Generator ãã¹ãç¨ã¹ã¿ãã¯ã® push, pop (ã¯ã©ã¹ã¡ã½ãã)
+  # Generator ネスト用スタックの push, pop (クラスメソッド)
   def self.push
     dbgPrint "push Namespace\n"
@@ -4412,5 +4170,5 @@
   end
 
-  # namespace éå±¤ç¨ã¹ã¿ãã¯ã® push, pop (ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã)
+  # namespace 階層用スタックの push, pop (インスタンスメソッド)
   def push ns
     @@namespace_sp += 1
@@ -4434,5 +4192,5 @@
     if( name == "::" )then
       if( @@root_namespace != nil )then
-        # root ã¯ä¸åã®ã¿çæã§ãã
+        # root は一回のみ生成できる
         raise "try to re-create root namespace"
       end
@@ -4443,5 +4201,5 @@
       if ns.kind_of? Namespace then
         dbgPrint "namespace: re-appear #{@name}\n"
-        # ç»é²æ¸ã¿ namespace ã®åç»é²
+        # 登録済み namespace の再登録
         ns.push ns
         return
@@ -4454,10 +4212,10 @@
     end
 
-    if @@namespace_sp >= 0 then   # root ã¯é¤å¤
+    if @@namespace_sp >= 0 then   # root は除外
       @@namespace_stack[@@namespace_sp].new_namespace( self )
     end
     push self
 
-    @global_name = Namespace.get_global_name    # stack ç»é²å¾åã
+    @global_name = Namespace.get_global_name    # stack 登録後取る
     @name_list = NamedList.new( nil, "symbol in namespace '#{@name}'" )
     @struct_tag_list = NamedList.new( nil, "struct tag" )
@@ -4474,6 +4232,6 @@
     @cache_generating_region = nil
     if @NamespacePath == nil then
-      # root namespace ã®å ´åã¯è¨­å®æ¸ (è¦ª namespace ãè¦ã¤ãããä¾å¤ã«ãªã)
-      set_namespace_path # @NamespacePath ã®è¨­å®
+      # root namespace の場合は設定済 (親 namespace が見つからず例外になる)
+      set_namespace_path # @NamespacePath の設定
     end
   end
@@ -4487,8 +4245,8 @@
   end
 
-  #=== Namespace:: global_name ãå¾ã
-  # parse ä¸­ã®ã¿ãã®ã¡ã½ããã¯ä½¿ãã
+  #=== Namespace:: global_name を得る
+  # parse 中のみこのメソッドは使える
   # STAGE: P
-  def self.get_global_name    # parse ä¸­æå¹
+  def self.get_global_name    # parse 中有効
     if @@namespace_sp <= 0 then
       return ""
@@ -4509,12 +4267,12 @@
   end
 
-  #=== Namespace#ã»ã«ã®åæ°ãå¾ã
-  # å­ region ã linkunit, node æå®ããã¦ããã°ãå«ããªãï¼å¥ã®ãªã³ã¯åä½ï¼
-  # ãã­ãã¿ã¤ãå®£è¨ã®ãã®ã®ã¿ã®åæ°ãå«ããªã
-  # mikan namespace ä¸ã« cell ãç½®ããªãä»æ§ã«ãªãã¨ããã®ã¡ã½ããã¯ Region ã®ãã®ã§ãã
-  # mikan ä¸è¨ã®å ´å instance_of? Namespace ã®æ¡ä»¶å¤å®ã¯ä¸è¦ã¨ãªã
+  #=== Namespace#セルの個数を得る
+  # 子 region が linkunit, node 指定されていれば、含めない（別のリンク単位）
+  # プロトタイプ宣言のもののみの個数を含めない
+  # mikan namespace 下に cell を置けない仕様になると、このメソッドは Region のものでよい
+  # mikan 上記の場合 instance_of? Namespace の条件判定は不要となる
   def get_n_cells
     if @cache_generating_region == $generating_region then
-      # ãã®ã¡ã½ããã¯ç¹°ãè¿ãå¼ã³åºããããããçµæãã­ã£ãã·ã¥ãã
+      # このメソッドは繰り返し呼び出されるため、結果をキャッシュする
       return @cache_n_cells
     end
@@ -4522,5 +4280,5 @@
     count = 0
     @cell_list.each{ |c|
-      # å®ç¾©ããã­ãã¿ã¤ãå®£è¨ã ããã¯ãnew_cell ã®æ®µéã§å¤æ­ã§ããªããããã«ã¦ã³ãããªãã
+      # 定義かプロトタイプ宣言だけかは、new_cell の段階で判断できないため、カウントしなおす
       if c.get_f_def == true then
         # print "get_n_cells: cell: #{c.get_name}\n"
@@ -4533,9 +4291,9 @@
         count += ns.get_n_cells
       else
-        # ns ã¯ Region ã§ãã
+        # ns は Region である
         rt = ns.get_region_type
         # print "get_n_cells: region: #{ns.get_name}: #{rt}\n"
         if rt == :NODE || rt == :LINKUNIT then
-          # å¥ã® linkunit ãªã®ã§å ç®ããªã
+          # 別の linkunit なので加算しない
         else
           count += ns.get_n_cells
@@ -4549,7 +4307,7 @@
   end
 
-  #=== Namespace.find : in_path ã§ç¤ºããããªãã¸ã§ã¯ããæ¢ã
+  #=== Namespace.find : in_path で示されるオブジェクトを探す
   #in_path:: NamespacePath
-  #in_path:: Array : å¤ãå½¢å¼
+  #in_path:: Array : 古い形式
   #  path [ "::", "ns1", "ns2" ]   absolute
   #  path [ "ns1", "ns2" ]         relative
@@ -4566,9 +4324,8 @@
       if name == "::" then
         i = 1
-        name = path[i]   # æ§æçã«å¿
-ãå­å¨
+        name = path[i]   # 構文的に必ず存在
         object = @@root_namespace.find( name )  # root
       else
-        # ç¸å¯¾ãã¹
+        # 相対パス
         i = 0
         object = @@namespace_stack[@@namespace_sp].find_one( name ) # crrent
@@ -4603,10 +4360,8 @@
 
       unless object.kind_of?( Namespace ) then
-        # ã¯ã©ã¹ã¡ã½ããå
-ã§ cdl_error ãå¼ã³åºããã¨ã¯ã§ããªã
-        # ã¾ããåæ¹åç
-§å¯¾å¿å¾ãæ­£ç¢ºãªè¡çªå·ãåºãªãåé¡ãçãã
+        # クラスメソッド内で cdl_error を呼び出すことはできない
+        # また、前方参照対応後、正確な行番号が出ない問題も生じる
         # cdl_error( "S1092 \'$1\' not namespace" , name )
-        # ãã®ã¡ã½ãããã nil ãå¸°ã£ãå ´å "not found" ãåºãã®ã§ãããã§ã¯åºããªã
+        # このメソッドから nil が帰った場合 "not found" が出るので、ここでは出さない
         return nil
       end
@@ -4624,5 +4379,5 @@
   end
 
-  #=== Namespace# namespace ããæ¢ããè¦ã¤ãããªããã°è¦ª namespace ããæ¢ã
+  #=== Namespace# namespace から探す。見つからなければ親 namespace から探す
   def self.find_one( name )
     return @@namespace_stack[@@namespace_sp].find_one( name )
@@ -4632,5 +4387,5 @@
 
     object = find( name )
-    # ããã¯åºãã
+    # これは出すぎ
     # dbgPrint "in '#{@name}' find '#{name}' object #{object ? object.class : "Not found"}\n"
 
@@ -4649,7 +4404,7 @@
 
   def self.find_tag( name )
-    # mikan tag : namespace ã® path ã«å¯¾å¿ããªã
-    # namespace ã®ä¸­ã«ãã£ã¦ããroot namespace ã«ãããã®ã¨è¦ãªããã
-    # ãã£ã¦ ã«ã¬ã³ã namespace ããæ ¹ã«åãã£ã¦æ¢ã
+    # mikan tag : namespace の path に対応しない
+    # namespace の中にあっても、root namespace にあるものと見なされる
+    # よって カレント namespace から根に向かって探す
     i = @@namespace_sp
     while i >= 0
@@ -4727,11 +4482,10 @@
   end
 
-  #=== Namespace# åç
-§ããã¦ããããæªå®ç¾©ã®ã»ã«ãæ¢ã
-  # ãã­ãã¿ã¤ãå®£è¨ã ãã§å®ç¾©ããã¦ããªãã±ã¼ã¹ãã¨ã©ã¼ã¨ãã
-  # ååã®æªçµåã»ã«ã«ã¤ãã¦è­¦åãã
+  #=== Namespace# 参照されているが、未定義のセルを探す
+  # プロトタイプ宣言だけで定義されていないケースをエラーとする
+  # 受動の未結合セルについて警告する
   def check_ref_but_undef
     @cell_list.each { |c|
-      if ! c.get_f_def then   # Namespace ã® @cell_list ã«ã¯ãã­ãã¿ã¤ããå«ã¾ããã±ã¼ã¹ãã
+      if ! c.get_f_def then   # Namespace の @cell_list にはプロトタイプが含まれるケースあり
         if c.get_f_ref then
           cdl_error( "S1093 $1 : undefined cell" , c.get_namespace_path.get_path_str )
@@ -4753,6 +4507,5 @@
   end
 
-  #=== Namespace# ã»ã«ã®åãå£ã®åç
-§ã«ã¦ã³ããè¨­å®ãã
+  #=== Namespace# セルの受け口の参照カウントを設定する
   def set_port_reference_count
     @cell_list.each { |c|
@@ -4770,9 +4523,9 @@
 
   def new_structtype( struct )
-    # struct.set_owner self   # StructType (Namespace) # StructType ã¯ BDNode ã§ã¯ãªã
+    # struct.set_owner self   # StructType (Namespace) # StructType は BDNode ではない
     dup = @struct_tag_list.get_item(struct.get_name)
     if dup != nil then
       if struct.same? dup then
-        # åããã®ã typedef ããã
+        # 同じものが typedef された
         # p "#{struct.get_name}"
         return
@@ -4798,10 +4551,10 @@
       if typedef_type.get_type_str == dup_type.get_type_str &&
           typedef_type.get_type_str_post == dup_type.get_type_str_post then
-        # åããã®ã typedef ããã
-        # ããã¸æ¥ãã®ã¯ C ã§é¢æ°ãã¤ã³ã¿ã typedef ãã¦ããã±ã¼ã¹
-        # ä»¥ä¸ã®ããã«äºéã«å®ç¾©ããã¦ããå ´åã¯ type_specifier_qualifier_list ã¨ãã¦æ±ããã
+        # 同じものが typedef された
+        # ここへ来るのは C で関数ポインタを typedef しているケース
+        # 以下のように二重に定義されている場合は type_specifier_qualifier_list として扱われる
         #    typedef long LONG; 
         #    typedef long LONG;
-        # bnf.y.rb ã§ã¯ declarator ã« TYPE_NAME ãè¨±ããªãã®ã§ãããã¸æ¥ããã¨ã¯ãªã
+        # bnf.y.rb では declarator に TYPE_NAME を許さないので、ここへ来ることはない
         # p "#{typedef.get_declarator.get_type.get_type_str} #{typedef.get_name} #{typedef.get_declarator.get_type.get_type_str_post}"
         return
@@ -4844,5 +4597,5 @@
   def new_const_decl( decl )
     decl.set_owner self   # Decl (Namespace:const)
-    if ! decl.is_const? then			# const ä¿®é£¾ãã¦ãããã¨
+    if ! decl.is_const? then			# const 修飾さていること
       if decl.is_type?( PtrType ) then
         cdl_error( "S1094 $1: pointer is not constant. check \'const\'" , decl.get_name )
@@ -4852,10 +4605,10 @@
     elsif ! decl.is_type?( IntType ) && ! decl.is_type?( FloatType ) &&
         ! decl.is_type?( BoolType ) && ! decl.is_type?( PtrType ) then
-                                            # IntType, FloatType ã§ãããã¨
+                                            # IntType, FloatType であること
       cdl_error( "S1096 $1: should be int, float, bool or pointer type" , decl.get_name )
-    elsif decl.get_initializer == nil then   # åæå¤ãæã¤ãã¨
+    elsif decl.get_initializer == nil then   # 初期値を持つこと
       cdl_error( "S1097 $1: has no initializer" , decl.get_name )
-#    elsif decl.get_initializer.eval_const(nil) == nil then  #eval_const ã¯ check_init ã§å¼åºãããã®ã§äºéãã§ãã¯
-#                                            # mikan åæå¤ãåã«å¯¾ãé©åã§ãããã¨
+#    elsif decl.get_initializer.eval_const(nil) == nil then  #eval_const は check_init で呼出されるので二重チェック
+#                                            # mikan 初期値が型に対し適切であること
 #      cdl_error( "S1098 $1: has unsuitable initializer" , decl.get_name )
     else
@@ -4879,5 +4632,5 @@
  ###
 
-  #=== Namespace# ãã¹ã¦ã®ã»ã«ã® require ãã¼ããè¨­å®
+  #=== Namespace# すべてのセルの require ポートを設定
   # STAGE: S
   def set_require_join
@@ -4885,5 +4638,5 @@
       ct.set_require_join
     }
-    # ãã¹ã¦ã® namespace ã«ã¤ãã¦ require ãã¼ããã»ãã
+    # すべての namespace について require ポートをセット
     @namespace_list.each{ |ns|
       ns.set_require_join
@@ -4891,8 +4644,8 @@
   end
 
-  #=== Namespace# Join ã¸ã® definition ã®è¨­å®ã¨ãã§ãã¯
-  # ã»ã«ã¿ã¤ãã«å±ãããã¹ã¦ã®ã»ã«ã«å¯¾ãã¦å®æ½
+  #=== Namespace# Join への definition の設定とチェック
+  # セルタイプに属するすべてのセルに対して実施
   def set_definition_join
-    # celltype ã®ã³ã¼ããçæ
+    # celltype のコードを生成
     @cell_list.each { |c|
       dbgPrint "set_definition_join #{c.get_name}\n"
@@ -4904,5 +4657,5 @@
   end
 
-  #=== Namespace# ã»ã«ã®çµåããã§ãã¯ãã
+  #=== Namespace# セルの結合をチェックする
   def check_join
     @cell_list.each { |c|
@@ -4916,12 +4669,12 @@
   end
 
-  #== Namespace# ã«ã¼ãã?
-  # ã«ã¼ããã¼ã ã¹ãã¼ã¹ ã¨ ã«ã¼ããªã¼ã¸ã§ã³ã¯åã
+  #== Namespace# ルートか?
+  # ルートネームスペース と ルートリージョンは同じ
   def is_root?
     @name == "::"
   end
 
-  #== Namespace# ã«ã¼ããå¾ã
-  # ã«ã¼ããªã¼ã¸ã§ã³ã¨ã«ã¼ããã¼ã ã¹ãã¼ã¹ã¯åããªãã¸ã§ã¯ã
+  #== Namespace# ルートを得る
+  # ルートリージョンとルートネームスペースは同じオブジェクト
   def self.get_root
     @@root_namespace
@@ -4945,33 +4698,31 @@
 #
 # available if definition is Port
-# @cell_name:: string : å³è¾ºã®ã»ã«ã®åå
-# @cell:: Cell  : å³è¾ºã®ã»ã«
-# @celltype:: Celltype : å³è¾ºã®ã»ã«ã¿ã¤ã
-# @port_name:: string : å³è¾ºã®åãå£å
-# @port:: Port : å³è¾ºã®åãå£
+# @cell_name:: string : 右辺のセルの名前
+# @cell:: Cell  : 右辺のセル
+# @celltype:: Celltype : 右辺のセルタイプ
+# @port_name:: string : 右辺の受け口名
+# @port:: Port : 右辺の受け口
 # @array_member:: rhs array : available only for first appear in the same name
 # @array_member2:: Join array : available only for first appear in the same name
-# @rhs_subscript:: nil : not array, >=0: å³è¾ºã®æ·»æ°
+# @rhs_subscript:: nil : not array, >=0: 右辺の添数
 #
 
 # @through_list::  @cp_through_list + @region_through_list
-#  ä»¥ä¸ã®æ§é ãæã¤ï¼@cp_through_list ã®æ§é ã¯å
-±éï¼
-# @cp_through_list::  å¼ã³å£ã«æå®ããã through
+#  以下の構造を持つ（@cp_through_list の構造は共通）
+# @cp_through_list::  呼び口に指定された through
 #   [ [plugin_name, cell_name, plugin_arg], [plugin_name2, cell_name2, plugin_arg], ... ]
-# @region_through_list::  region ã«æå®ããã through
+# @region_through_list::  region に指定された through
 #   [ [plugin_name, cell_name, plugin_arg, region], [plugin_name2, cell_name2, plugin_arg, region2], ... ]
 #
-# @through_generated_list:: [Plugin_class object, ...]: @through_list ã«å¯¾å¿
-# @region_through_generated_list:: [Plugin_class object, ...]: @region_through_list ã«å¯¾å¿
+# @through_generated_list:: [Plugin_class object, ...]: @through_list に対応
+# @region_through_generated_list:: [Plugin_class object, ...]: @region_through_list に対応
 #
 
   include PluginModule
 
-  #=== Join# åæå
-  #name:: string: ååï¼å±æ§åãå¼ã³å£åï¼
-  #subscript:: Nil=éé
-å, -1="[]", N="[N]"
-  #rhs:: Expression: å³è¾ºã®å¼
+  #=== Join# 初期化
+  #name:: string: 名前（属性名、呼び口名）
+  #subscript:: Nil=非配列, -1="[]", N="[N]"
+  #rhs:: Expression: 右辺の式
   def initialize( name, subscript, rhs, locale = nil )
     # dbgPrint "Join#new: #{name}, #{subscript} #{rhs.eval_const(nil)}\n"
@@ -4985,6 +4736,5 @@
     @name = name
     if subscript.instance_of?( Expression ) then
-       #mikan é
-åæ·»æ°ãæ´æ°ã§ãããã¨ãæªãã§ãã¯
+       #mikan 配列添数が整数であることを未チェック
        @subscript = subscript.eval_const(nil)
        if @subscript == nil then
@@ -4998,8 +4748,7 @@
     @definition = nil
 
-    # é
-åè¦ç´ ãè¨­å®
-    # æ¬å½ã¯ãååºã®è¦ç´ ã®ã¿è¨­å®ããã®ãé©å½
-    # new_join ã§ add_array_member ã®ä¸­ã§ååºè¦ç´ ã® array_member ã«å¯¾ãè¨­å®ãã
+    # 配列要素を設定
+    # 本当は、初出の要素のみ設定するのが適当
+    # new_join で add_array_member の中で初出要素の array_member に対し設定する
     if @subscript == -1 then
       @array_member  = [self]
@@ -5019,10 +4768,9 @@
   end
 
-  #===  Join# å·¦è¾ºã«å¯¾å¿ãã celltype ã®å®ç¾©ãè¨­å®ããã¨ã¨ãã«ãã§ãã¯ãã
+  #===  Join# 左辺に対応する celltype の定義を設定するとともにチェックする
   # STAGE:   S
   #
-  #     ä»£å
-¥å¯è½ããã§ãã¯ãã
-  #definition:: Decl (attribute,varã®æ) ã¾ãã¯ Port (callã®æ) ã¾ãã¯ nil (definition ãè¦ã¤ãããªãã£ãæ)
+  #     代入可能かチェックする
+  #definition:: Decl (attribute,varの時) または Port (callの時) または nil (definition が見つからなかった時)
 
   def set_definition( definition )
@@ -5030,8 +4778,8 @@
     dbgPrint "set_definition: #{@owner.get_name}.#{@name} = #{definition.class}\n"
 
-    # äºéãã§ãã¯ã®é²æ­¢
+    # 二重チェックの防止
     if @definition then
-      # set_definition ãåå¥ã«è¡ãã±ã¼ã¹ã§ãäºéã«è¡ãããå¯è½æ§ãããï¼ç°å¸¸ã§ã¯ãªãï¼
-      # äºéã« set_definition ãå®è¡ãããã¨ through ãäºéã«é©ç¨ããã¦ãã¾ã
+      # set_definition を個別に行うケースで、二重に行われる可能性がある（異常ではない）
+      # 二重に set_definition が実行されると through が二重に適用されてしまう
       # cdl_warning( "W9999 $1, internal error: set_definition duplicate", @name )
       return
@@ -5040,13 +4788,12 @@
     @definition = definition
 
-    # mikan å·¦è¾ºå¤ãå³è¾ºå¤ã®åãã§ãã¯ãªã©
+    # mikan 左辺値、右辺値の型チェックなど
     if @definition.instance_of?( Decl ) then
       check_var_init
     elsif @definition.instance_of?( Port ) then
       check_call_port_init
-      if @definition.get_port_type == :CALL then   # :ENTRY ãªãã¨ã©ã¼ãç¡è¦ããªã
+      if @definition.get_port_type == :CALL then   # :ENTRY ならエラー。無視しない
         check_and_gen_through
-        create_allocator_join  # through ãã©ã°ã¤ã³çæããå¾ã§ãªãã¨ãæ¿å
-¥åã®ã»ã«ã®ã¢ã­ã±ã¼ã¿ãçµåãã¦ãã¾ã
+        create_allocator_join  # through プラグイン生成した後でないと、挿入前のセルのアロケータを結合してしまう
       end
     elsif @definition == nil then
@@ -5057,13 +4804,13 @@
   end
 
-  #=== Join# å¤æ°ã®åæåãã§ãã¯
+  #=== Join# 変数の初期化チェック
   def check_var_init
-    # attribute, var ã®å ´å
+    # attribute, var の場合
     if @definition.get_kind == :ATTRIBUTE then
 #        check_cell_cb_init( definition.get_type, @rhs )
-      # å³è¾ºã§åæåå¯è½ããã§ãã¯
+      # 右辺で初期化可能かチェック
       @definition.get_type.check_init( @locale, @definition.get_identifier, @rhs, :ATTRIBUTE )
     elsif @definition.get_kind == :VAR then
-      # var ã¯åæåã§ããªã
+      # var は初期化できない
       cdl_error( "S1100 $1: cannot initialize var" , @name )
     else
@@ -5073,9 +4820,9 @@
   end
 
-  #=== Join# å¼ã³å£ã®åæåãã§ãã¯
+  #=== Join# 呼び口の初期化チェック
   def check_call_port_init
     ### Port
 
-    # å·¦è¾ºã¯åãå£ãï¼åãå£ãåæåãããã¨ãã¦ããï¼ï¼
+    # 左辺は受け口か（受け口を初期化しようとしている）？
     if @definition.get_port_type == :ENTRY then
       cdl_error( "S1101 \'$1\' cannot initialize entry port" , @name )
@@ -5083,10 +4830,6 @@
     end
 
-#      # é
-åæ·»æ°ã®æ´åæ§ãã§ãã¯
-#      # å¼ã³å£ã®å®ç¾©ã§ãéé
-åãªãæ·»æ°ãªããæ·»æ°ãªãé
-åãªãæ·»æ°ãªããæ·»æ°ããé
-åãªãæ·»æ°ãã
+#      # 配列添数の整合性チェック
+#      # 呼び口の定義で、非配列なら添数なし、添数なし配列なら添数なし、添数あり配列なら添数あり
     as = @definition.get_array_size
     if ( @subscript == nil && as != nil ) then
@@ -5111,23 +4854,21 @@
 #    end
 
-    # mikan Expression ã® get_type ã§åå°åºãããæ¹ãã¹ãã¼ã
-    # mikan '=' ã®å·¦è¾ºãé
-åãã©ããæªãã§ãã¯
-    #(1) '=' ã®å³è¾ºã¯ "Cell.ePort" ã®å½¢å¼ãï¼
-    #     æ¼ç®å­ã¯ "."  ãã¤ "." ã®å·¦è¾ºã :IDENTIFIER
-    #     "." ã®å³è¾ºã¯ãã§ãã¯ä¸è¦ (synatax çã« :IDENTIFIER)
-    #(2) "Cell" ã¯å­å¨ãããï¼ï¼ååãä¸è´ãããã®ã¯ãããï¼
-    #(3) "Cell" ã¯ cell ãï¼
-    #(4) "Cell" ã® celltype ã¯æå¹ãï¼ (ç¡å¹ãªãæ¢ã«ã¨ã©ã¼ï¼
-    #(5) "ePort" ã¯ "Cell" ã® celltype å
-ã«å­å¨ãããï¼
-    #(6) "ePort" ã¯ entry port ãï¼
-    #(7) signature ã¯ä¸è´ããã
-
-    # å³è¾ºããªãï¼ä»¥åã®æ®µéã§ã¨ã©ã¼ï¼
+    # mikan Expression の get_type で型導出させる方がスマート
+    # mikan '=' の左辺が配列かどうか未チェック
+    #(1) '=' の右辺は "Cell.ePort" の形式か？
+    #     演算子は "."  かつ "." の左辺が :IDENTIFIER
+    #     "." の右辺はチェック不要 (synatax 的に :IDENTIFIER)
+    #(2) "Cell" は存在するか？（名前が一致するものはあるか）
+    #(3) "Cell" は cell か？
+    #(4) "Cell" の celltype は有効か？ (無効なら既にエラー）
+    #(5) "ePort" は "Cell" の celltype 内に存在するか？
+    #(6) "ePort" は entry port か？
+    #(7) signature は一致するか
+
+    # 右辺がない（以前の段階でエラー）
     return unless @rhs
 
-    # cCall = composite.cCall; ã®ãã§ãã¯ï¼ãã®å½¢å¼ã¯å±æ§ç¨
-    # å¼ã³å£ã export ããã«ã¯ cCall => composite.cCall; ã®å½¢å¼ãç¨ãã
+    # cCall = composite.cCall; のチェック．この形式は属性用
+    # 呼び口を export するには cCall => composite.cCall; の形式を用いる
     if @rhs.instance_of?( Array ) == true && @rhs[0] == :COMPOSITE then
       cdl_error( "S1107 to export port, use \'cCall => composite.cCall\'"  )
@@ -5137,5 +4878,5 @@
     end
 
-    # å³è¾ºã® Expression ã®è¦ç´ ãåãåºã
+    # 右辺の Expression の要素を取り出す
     ret = @rhs.analyze_cell_join_expression
     if ret == nil then   #1
@@ -5145,13 +4886,11 @@
 
     nsp, @rhs_subscript, @port_name = ret[0], ret[1], ret[2]
-    @cell_name = nsp.get_name     # mikan ns::cellname ã®å½¢å¼ã®èæ
-®
-
-    # composite ã®å®ç¾©ã®ä¸­ãªã object ã¯çµåå
- cell ããè¦ã¤ãããªããã° nil ãè¿ã
-    # composite ã®å®ç¾©å¤ãªã false ãè¿ã
+    @cell_name = nsp.get_name     # mikan ns::cellname の形式の考慮
+
+    # composite の定義の中なら object は結合先 cell か、見つからなければ nil が返る
+    # composite の定義外なら false が返る
     object = CompositeCelltype.find( @cell_name )
     if object == false then
-#     mikan å·¦è¾ºã namespace ã«å¯¾å¿ãã¦ããªãããã path ã«ãã¦ find
+#     mikan 左辺が namespace に対応していないため。 path にして find
       # p nsp.get_path_str, nsp.get_path
       object = Namespace.find( nsp )    #1
@@ -5172,5 +4911,5 @@
       object.set_f_ref
 
-      # å³è¾ºã®ã»ã«ã®ã»ã«ã¿ã¤ã
+      # 右辺のセルのセルタイプ
       celltype = object.get_celltype
 
@@ -5185,9 +4924,8 @@
           cdl_error( "S1113 \'$1\' signature mismatch" , @port_name )
         elsif object2.get_array_size then
-          # åãå£é
-å
+          # 受け口配列
 
           unless @rhs_subscript then
-            # å³è¾ºã«æ·»æ°æå®ããªãã£ã
+            # 右辺に添数指定がなかった
             cdl_error( "S1114 \'$1\' should be array" , @port_name )
           else
@@ -5195,6 +4933,5 @@
             as = object2.get_array_size
             if( as.kind_of?( Integer ) && as <= @rhs_subscript )then
-              # åãå£é
-åã®å¤§ããã«å¯¾ããå³è¾ºã®æ·»æ°ãåããå¤§ãã
+              # 受け口配列の大きさに対し、右辺の添数が同じか大きい
               cdl_error( "S1115 $1[$2]: subscript out of range (< $3)" , @port_name, @rhs_subscript, as )
             else
@@ -5203,6 +4940,5 @@
               @celltype = celltype
               @port = object2
-              # å³è¾ºã®ã»ã«ã®åãå£ object2 ãåç
-§æ¸ã¿ã«ãã
+              # 右辺のセルの受け口 object2 を参照済みにする
               # object2: Port, @definition: Port
               @cell.set_entry_port_max_subscript( @port, @rhs_subscript )
@@ -5214,6 +4950,5 @@
           end
         elsif @rhs_subscript then
-          # åãå£é
-åã§ãªãã®ã«å³è¾ºã§æ·»æ°æå®ããã¦ãã
+          # 受け口配列でないのに右辺で添数指定されている
           cdl_error( "S1116 \'$1\' entry port is not array" , @port_name )
         else
@@ -5223,39 +4958,35 @@
           @celltype = celltype
 
-          # å³è¾ºã®ã»ã« object ã®åãå£ object2 ãåç
-§æ¸ã¿ã«ãã
+          # 右辺のセル object の受け口 object2 を参照済みにする
           # object2: Port, @definition: Port
 
           # debug
           # p "rhs:  #{@cell}  #{@cell.get_name}"
-        end  # end of port (object2) ãã§ãã¯
+        end  # end of port (object2) チェック
 
         #else
-        #  celltype == nil (ãã§ã«ã¨ã©ã¼)
-      end  # end of celltyep ãã§ãã¯
+        #  celltype == nil (すでにエラー)
+      end  # end of celltyep チェック
 
 
       check_region( object )
 
-    end  # end of cell (object) ãã§ãã¯
-
-  end
-
-  #=== Join# ã¢ã­ã±ã¼ã¿ã®çµåãçæ
+    end  # end of cell (object) チェック
+
+  end
+
+  #=== Join# アロケータの結合を生成
   # STAGE: S
-  #cell::  å¼ã³å£ã®çµåå
-ã®ã»ã«
+  #cell::  呼び口の結合先のセル
   #
-  # ããã§ã¯å¼ã³å£å´ã«çæãããã¢ã­ã±ã¼ã¿å¼ã³å£ã®çµåãçæ
-  # åãå£å´ã¯ Cell ã® set_specifier_list ã§çæ
-  #  a[*] ã®å
-å®¹ã¯ Cell ã® set_specifier_list ãåç
-§
+  # ここでは呼び口側に生成されるアロケータ呼び口の結合を生成
+  # 受け口側は Cell の set_specifier_list で生成
+  #  a[*] の内容は Cell の set_specifier_list を参照
   def create_allocator_join
 
-    cell = get_rhs_cell2   # å³è¾ºã®ã»ã«ãå¾ã
+    cell = get_rhs_cell2   # 右辺のセルを得る
     port = get_rhs_port2
 
-    if( cell && cell.get_allocator_list ) then      # cell == nil ãªãæ¢ã«ã¨ã©ã¼
+    if( cell && cell.get_allocator_list ) then      # cell == nil なら既にエラー
 
       dbgPrint "create_allocator_join: #{@owner.get_name}.#{@name}=>#{cell ? cell.get_name : "nil"}\n"
@@ -5264,6 +4995,6 @@
 
         if( a[0+1] == port && a[1+1] == @rhs_subscript )then
-          # ååã®ä¸è´ãããã®ã®çµåãçæãã
-          # éä¸è¶³ã¯ãå¥éãã§ãã¯ããã
+          # 名前の一致するものの結合を生成する
+          # 過不足は、別途チェックされる
           cp_name = :"#{@name}_#{a[2+1]}_#{a[3+1]}"
           # p "creating allocator join #{cp_name} #{@subscript} #{a[1+1]}"
@@ -5280,9 +5011,8 @@
   end
 
-  #=== Join# ãªã¼ã¸ã§ã³éã®çµåããã§ãã¯
-  # ãªã¼ã¸ã§ã³éã® through ã«ãã @region_through_list ã®ä½æ
-  # å®éã®çæã¯ check_and_gen_through ã§è¡ã
-  # mikan Cell#distance ã¨Region ã¸ãã©ãçãã¾ã§ããã®å¦çã«å
-±éé¨åãå¤ã
+  #=== Join# リージョン間の結合をチェック
+  # リージョン間の through による @region_through_list の作成
+  # 実際の生成は check_and_gen_through で行う
+  # mikan Cell#distance とRegion へたどり着くまでための処理に共通部分が多い
   def check_region( object )
 
@@ -5291,19 +5021,18 @@
     # print "DOMAIN: check_region #{@owner.get_name}.#{@name} => #{object.get_name}\n"
 
-    # ãã©ã°ã¤ã³ã§çæããããªãã§ã¯çæããªã
-    # ãããªãã¨ãã©ã°ã¤ã³çæããããã®ã¨ã®éã§ãç¡éã«çæããã
+    # プラグインで生成されたなかでは生成しない
+    # さもないとプラグイン生成されたものとの間で、無限に生成される
 ##    if Generator.get_nest >= 1 then
-##    if Generator.get_plugin then     # mikan ããã¯å¿
-è¦ï¼ (æå³è§£ææ®µéã§ã®å®è¡ã«ãªãã®ã§ä¸é©å)
+##    if Generator.get_plugin then     # mikan これは必要？ (意味解析段階での実行になるので不適切)
     if @owner.get_plugin.kind_of?( ThroughPlugin ) then
-      # ãã©ã°ã¤ã³çæãããã»ã«ã®å ´åãçµåãã§ãã¯ã®ã¿
+      # プラグイン生成されたセルの場合、結合チェックのみ
       return
     end
 
-    # region ã®ãã§ãã¯
-    r1 = @owner.get_region      # å¼ã³å£ã»ã«ã® region
-    r2 = object.get_region      # åãå£ã»ã«ã® region
-
-    if ! r1.equal? r2 then      # åä¸ region ãªãå¼åºãå¯è½
+    # region のチェック
+    r1 = @owner.get_region      # 呼び口セルの region
+    r2 = object.get_region      # 受け口セルの region
+
+    if ! r1.equal? r2 then      # 同一 region なら呼出し可能
 
       f1 = r1.get_family_line
@@ -5312,8 +5041,6 @@
       len2 = f2.length
 
-      # ä¸ä¸è´ã«ãªãã¨ããï¼å
-å¼ï¼ãæ¢ã
-      i = 1  # i = 0 ã¯ :RootRegion ãªã®ã§å¿
-ãä¸è´
+      # 不一致になるところ（兄弟）を探す
+      i = 1  # i = 0 は :RootRegion なので必ず一致
       while( i < len1 && i < len2 )
         if( f1[i] != f2[i] )then
@@ -5323,6 +5050,5 @@
       end
 
-      sibling_level = i     # å
-å¼ã¨ãªãã¬ãã«ããããã¯ã©ã¡ããä¸æ¹ãçµãã£ãã¬ãã«
+      sibling_level = i     # 兄弟となるレベル、もしくはどちらか一方が終わったレベル
 
       dbgPrint "sibling_level: #{i}\n"
@@ -5337,8 +5063,5 @@
 
 
-      # å¼ã³å´ã«ã¤ãã¦å¼ã³å
-ã®ã¬ãã«ããå
-å¼ã¬ãã«ã¾ã§ï¼out_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 呼び側について呼び元のレベルから兄弟レベルまで（out_through をチェックおよび挿入）
       i = len1 -1
       if b_to_through then
@@ -5364,5 +5087,5 @@
 
         out_through_list.each { |ol|
-          if ol[0] then    # plugin_name ãæå®ããã¦ããªããã°ç»é²ããªã
+          if ol[0] then    # plugin_name が指定されていなければ登録しない
             plugin_arg = CDLString.remove_dquote ol[1]
             through = [ ol[0], :"Join_out_through_", plugin_arg, f1[i], f1[i-1], :OUT_THROUGH, region_count]
@@ -5377,14 +5100,12 @@
       end
 
-      # å
-å¼ã¬ãã«ã«ããã¦ï¼to_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 兄弟レベルにおいて（to_through をチェックおよび挿入）
       if f1[sibling_level] && f2[sibling_level] then
         dbgPrint "going from #{f1[sibling_level].get_name} to #{f2[sibling_level].get_name}\n"
         found = 0
-        region_count = f1[i].next_to_through_count( f2[sibling_level].get_name )   # to_through ã® region ã«ã¦ã³ã
+        region_count = f1[i].next_to_through_count( f2[sibling_level].get_name )   # to_through の region カウント
         f1[sibling_level].get_to_through_list.each { |t|
-          if t[0][0] == f2[sibling_level].get_name then   # region åãä¸è´ããã ?
-            if t[1] then    # plugin_name ãæå®ããã¦ããªããã°ç»é²ããªã
+          if t[0][0] == f2[sibling_level].get_name then   # region 名が一致するか ?
+            if t[1] then    # plugin_name が指定されていなければ登録しない
               plugin_arg = CDLString.remove_dquote t[2]
               through = [ t[1], :"Join_to_through__", plugin_arg, f1[sibling_level], f2[sibling_level], :TO_THROUGH, region_count ]
@@ -5409,9 +5130,7 @@
       end
 
-      # åãå´ã«ã¤ãã¦å
-å¼ã¬ãã«ããåãå´ã®ã¬ãã«ã¾ã§ï¼in_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 受け側について兄弟レベルから受け側のレベルまで（in_through をチェックおよび挿入）
       if b_to_through then
-        i = sibling_level + 1      # to_through ãçµãå ´åãæåã® in_through ã¯é©ç¨ããªã
+        i = sibling_level + 1      # to_through を経た場合、最初の in_through は適用しない
       else
         i = sibling_level
@@ -5436,5 +5155,5 @@
         end
         in_through_list.each { |il|
-          if il[0] then    # plugin_name ãæå®ããã¦ããªããã°ç»é²ããªã
+          if il[0] then    # plugin_name が指定されていなければ登録しない
             plugin_arg = CDLString.remove_dquote il[1]
             through = [ il[0], :"Join_in_through_", plugin_arg, f2[i-1], f2[i],:IN_THROUGH, region_count ]
@@ -5449,13 +5168,13 @@
 
 
-  #=== Join# çæããªããªã¼ã¸ã§ã³ã¸ã®çµåããã§ãã¯
-  # å³è¾ºã®ã»ã«ããçæãããªããªã¼ã¸ã§ã³ã«ããã°ã¨ã©ã¼
-  # å³è¾ºã¯ããã©ã°ã¤ã³çæãããã»ã«ãããã°ããããå¯¾è±¡ã¨ãã
+  #=== Join# 生成しないリージョンへの結合かチェック
+  # 右辺のセルが、生成されないリージョンにあればエラー
+  # 右辺は、プラグイン生成されたセルがあれば、それを対象とする
   def check_region2
     lhs_cell = @owner
 
-    # çæããªããªã¼ã¸ã§ã³ã®ã»ã«ã¸ã®çµåãï¼
+    # 生成しないリージョンのセルへの結合か？
     # if join.get_cell && ! join.get_cell.is_generate? then
-    # if get_rhs_cell && ! get_rhs_cell.is_generate? then # composite ã»ã«ããã­ã¿ã¤ãå®£è¨ã®å ´åä¾å¤
+    # if get_rhs_cell && ! get_rhs_cell.is_generate? then # composite セルがプロタイプ宣言の場合例外
     # print "Link root: (caller #{@owner.get_name}) '#{@owner.get_region.get_link_root.get_name}'"
     # print " #{@owner.get_region.get_link_root == get_rhs_region.get_link_root ? "==" : "!="} "
@@ -5470,5 +5189,5 @@
       end
     else
-      # rhs ã®ã»ã«ãå­å¨ããªãã£ã (æ¢ã«ã¨ã©ã¼)
+      # rhs のセルが存在しなかった (既にエラー)
     end
   end
@@ -5478,9 +5197,9 @@
   end
 
-  #=== Join# specifier ãè¨­å®
+  #=== Join# specifier を設定
   # STAGE: B
-  # set_specifier_list ã¯ãjoin ã®è§£æã®æå¾ã§å¼ã³åºããã
-  # through æå®å­ãè¨­å®
-  #  check_and_gen_through ãå¼åºãã¦ãthrough çæ
+  # set_specifier_list は、join の解析の最後で呼び出される
+  # through 指定子を設定
+  #  check_and_gen_through を呼出して、through 生成
   def set_specifier_list( specifier_list )
 
@@ -5490,6 +5209,5 @@
         # set plugin_name
         plugin_name = s[1].to_s
-        plugin_name[0] = "#{plugin_name[/^./].upcase}"     # å
-é ­æå­ãå¤§æå­ã« : ruby ã®ã¯ã©ã¹åã®å¶ç´
+        plugin_name[0] = "#{plugin_name[/^./].upcase}"     # 先頭文字を大文字に : ruby のクラス名の制約
 
         # set cell_name
@@ -5498,5 +5216,5 @@
         # set plugin_arg
         plugin_arg = CDLString.remove_dquote s[2].to_s
-        # plugin_arg = s[2].to_s.gsub( /\A"(.*)/, '\1' )   # åå¾ã® "" ãåãé¤ã
+        # plugin_arg = s[2].to_s.gsub( /\A"(.*)/, '\1' )   # 前後の "" を取り除く
         # plugin_arg.sub!( /(.*)"\z/, '\1' )
 
@@ -5507,8 +5225,8 @@
   end
 
-  #=== Join# through ã®ãã§ãã¯ã¨çæ
-  # new_join ã®ä¸­ã® check_region ã§ region éã® through ã @region_through ã«è¨­å®ããã
-  # set_specifier ã§å¼ã³å£ã®çµåã§æå®ããã through ã @cp_through è¨­å®ããã
-  # ãã®å¾ããã®ã¡ã½ãããå¼ã°ãã
+  #=== Join# through のチェックと生成
+  # new_join の中の check_region で region 間の through が @region_through に設定される
+  # set_specifier で呼び口の結合で指定された through が @cp_through 設定される
+  # その後、このメソッドが呼ばれる
   def check_and_gen_through
 
@@ -5531,9 +5249,8 @@
 
     @through_list = @cp_through_list + @region_through_list
-      # å¾ãã @cp_through_list ã¨ @region_through_list ã«åããããããã®ãããªå®è£
-ã«ãªã£ã
+      # 後から @cp_through_list と @region_through_list に分けたため、このような実装になった
 
     if @through_list then           # nil when the join is not Port
-      len = @through_list.length    # through ãé£æ¥ãã¦ããæ°
+      len = @through_list.length    # through が連接している数
     else
       len = 0
@@ -5546,5 +5263,5 @@
     end
 
-    # é£ç¶ãã through ã«ã¤ãã¦ãåãå£å´ããé ã«ã»ã«ãçæãè§£éãã
+    # 連続した through について、受け口側から順にセルを生成し解釈する
     i = len - 1
     while i >= 0
@@ -5575,11 +5292,10 @@
 
       else
-        # æå¾ã®ã»ã«ã®å ´åãæ¬¡ã®ã»ã«ã®ååããã¼ãå
+        # 最後のセルの場合、次のセルの名前、ポート名
         next_cell      = @cell
         next_port_name = @port_name
 
         if next_cell == nil then
-          # çµåå
-ããªã
+          # 結合先がない
           return
         end
@@ -5587,16 +5303,14 @@
 
       if i >= cp_len then
-        # region_through_list é¨å
-        # region ãã @cell_name.@port_name ã¸ã® through ããªããæ¢ã
+        # region_through_list 部分
+        # region から @cell_name.@port_name への through がないか探す
         # rp = @through_list[i][3].find_cell_port_through_plugin( @cell_name, @port_name ) #762
         rp = @through_list[i][3].find_cell_port_through_plugin( @cell.get_global_name, @port_name )
-           # @through_list[i] ã¨ @region_through_list[i-cp_len] ã¯åã
-        # å
-±ç¨ããªãããã«ããã«ã¯ãè¦ã¤ãããªãã£ããã¨ã«ããã°ãã
+           # @through_list[i] と @region_through_list[i-cp_len] は同じ
+        # 共用しないようにするには、見つからなかったことにすればよい
         # rp = nil
       else
-        # region ä»¥å¤ã®ãã®ã¯å
-±æããªã
-        # å¼ã³å£å´ã«æå®ããã¦ããããplugin_arg ãç°ãªããããããªã
+        # region 以外のものは共有しない
+        # 呼び口側に指定されているし、plugin_arg が異なるかもしれない
         rp = nil
       end
@@ -5607,14 +5321,13 @@
         end
       else
-        # è¦ã¤ãã£ããã®ãå
-±ç¨ãã
+        # 見つかったものを共用する
         @through_generated_list[ i ] = rp
       end
 
       if i >= cp_len then
-        # @through_generated_list ã®ãã¡ @region_through_listã«å¯¾å¿ããé¨å
+        # @through_generated_list のうち @region_through_listに対応する部分
         @region_through_generated_list[ i - cp_len ] = @through_generated_list[ i ]
         if rp == nil then
-          # çæãããã®ã region(@through_list[i][3]) ã®ãªã¹ãã«è¿½å 
+          # 生成したものを region(@through_list[i][3]) のリストに追加
           # @through_list[i][3].add_cell_port_through_plugin( @cell_name, @port_name, @through_generated_list[i] ) #762
           @through_list[i][3].add_cell_port_through_plugin( @cell.get_global_name, @port_name, @through_generated_list[i] )
@@ -5623,10 +5336,9 @@
 
       if i == 0 then
-        # æãå¼ã³å£å´ã®ã»ã«ã¯ãCDL ä¸ã®çµåããªããããåç
-§ããããã¨ã«ãªããªã
-        # mikan namespace å¯¾å¿
+        # 最も呼び口側のセルは、CDL 上の結合がないため、参照されたことにならない
+        # mikan namespace 対応
         # cell = Namespace.find( [ @through_generated_list[0].get_cell_name] )    #1
         if @through_generated_list[0] == nil then
-          return  # plugin_object ã®çæã«å¤±æãã¦ãã
+          return  # plugin_object の生成に失敗している
         end
         cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
@@ -5652,5 +5364,5 @@
   end
 
-  #=== Join# through ãã©ã°ã¤ã³ãå¼ã³åºãã¦ CDL çæãããã¨ã¨ãã«ãimport ãã
+  #=== Join# through プラグインを呼び出して CDL 生成させるとともに、import する
   def gen_through_cell_code_and_parse( plugin_name, i, next_cell, next_port_name )
 
@@ -5660,5 +5372,5 @@
     plugin_arg            = through[ 2 ]
     if through[ 3 ] then
-      # region éã® through ã®å ´å
+      # region 間の through の場合
       @@start_region      = through[ 3 ]
       if next_cell.get_region.equal? @@start_region then
@@ -5670,8 +5382,8 @@
       @@region_count      = through[ 6 ]
     else
-      # å¼ã³å£ã® through ã®å ´å
-      @@start_region      = @owner.get_region    # å¼ã³å£å´ã»ã«ã® region
-      @@end_region        = next_cell.get_region # æ¬¡ã®ã»ã«ã® region
-      @@through_type      = :THROUGH             # å¼ã³å£ã® through æå®
+      # 呼び口の through の場合
+      @@start_region      = @owner.get_region    # 呼び口側セルの region
+      @@end_region        = next_cell.get_region # 次のセルの region
+      @@through_type      = :THROUGH             # 呼び口の through 指定
       @@region_count      = 0
     end
@@ -5687,5 +5399,5 @@
 
     begin
-      eval( eval_str )     # plugin ãçæ
+      eval( eval_str )     # plugin を生成
       plugin_object.set_locale @locale
     rescue Exception => evar
@@ -5702,7 +5414,6 @@
     @through_generated_list[ i ] = plugin_object
 
-    # Region ã«é¢ããæ
-å ±ãè¨­å®
-    # å¾ããè¿½å ããã®ã§ãnew ã®å¼æ°å¤ã§è¨­å®
+    # Region に関する情報を設定
+    # 後から追加したので、new の引数外で設定
     # plugin_object.set_through_info( start_region, end_region, through_type )
 
@@ -5710,6 +5421,6 @@
   end
 
-  #ãã©ã°ã¤ã³ã¸ã®å¼æ°ã§æ¸¡ããªããã®ããä¸æçã«è¨æ¶ãã¦ãã
-  # ãã©ã°ã¤ã³ã® initialize ã®ä¸­ã§ã³ã¼ã«ããã¯ãã¦è¨­å®ãã
+  #プラグインへの引数で渡さないものを、一時的に記憶しておく
+  # プラグインの initialize の中でコールバックして設定する
   @@plugin_creating_join = nil
   @@start_region = nil
@@ -5718,9 +5429,7 @@
   @@region_count = nil
 
-  #=== Join# ThroughPlugin ã®è¿½å æ
-å ±ãè¨­å®ãã
-  # ãã®ã¡ã½ããã¯ ThroughPlugin#initialize ããå¼ã³åºããã
-  # plugin_object ãçæããéã®å¼æ°ã§ã¯ä¸è¶³ããæ
-å ±ãè¿½å ãã
+  #=== Join# ThroughPlugin の追加情報を設定する
+  # このメソッドは ThroughPlugin#initialize から呼び出される
+  # plugin_object を生成する際の引数では不足する情報を追加する
   def self.set_through_info plugin_object
     plugin_object.set_through_info( @@start_region, @@end_region, @@through_type,
@@ -5734,13 +5443,11 @@
   end
 
-  #=== Join#é
-åæ·»æ°ãå¾ã
-  # @subscript ã®èª¬æãåç
-§ã®ãã¨
+  #=== Join#配列添数を得る
+  # @subscript の説明を参照のこと
   def get_subscript
     @subscript
   end
 
-  def get_cell_name         # åãå£ã»ã«å
+  def get_cell_name         # 受け口セル名
     @cell_name
   end
@@ -5754,42 +5461,39 @@
   end
 
-  #=== Join# å³è¾ºã®å®ã»ã«ãå¾ã
-  #    å®ã»ã«ã¨ã¯ through ã§æ¿å
-¥ããããã®ãcomposite ã®å
-é¨ãªã©å®éã«çµåãããå
-
-  #    ãã®ã¡ã½ããã¯ãget_rhs_port ã¨å¯¾ã«ãªã£ã¦ãã
-  #    ãã®ã¡ã½ããã¯ãæå³è§£ææ®µéã§ã¯å¼ã³åºãã¦ã¯ãªããªã (å¯¾è±¡ã»ã«ã®æå³è§£æãæ¸ãåã«ã¯æ­£ããçµæãè¿ããªã)
+  #=== Join# 右辺の実セルを得る
+  #    実セルとは through で挿入されたもの、composite の内部など実際に結合される先
+  #    このメソッドは　get_rhs_port と対になっている
+  #    このメソッドは、意味解析段階では呼び出してはならない (対象セルの意味解析が済む前には正しい結果を返さない)
   def get_rhs_cell
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
-      # mikan through ã§çæãããã®ã root namespace éå®
+      # mikan through で生成したものが root namespace 限定
       if @through_generated_list[0] then
         # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
         cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
-        # cell ã nil ã«ãªãã®ã¯ãã©ã°ã¤ã³ã® get_cell_namespace_path ãæ­£ãããªããã
-        # ãã©ã°ã¤ã³çæã³ã¼ããã¨ã©ã¼ã«ãªã£ã¦ããã
-        # ã§ãã®æªããã©ã°ã¤ã³ãå¤ããã°ãcell == nil ãã¯ãããæ¹ãããã
+        # cell が nil になるのはプラグインの get_cell_namespace_path が正しくないか、
+        # プラグイン生成コードがエラーになっている。
+        # できの悪いプラグインが多ければ、cell == nil をはじいた方がよい。
         return cell.get_real_cell( @through_generated_list[0].get_through_entry_port_name )
       else
-        return nil            # generate ã«å¤±æãã¦ãã
+        return nil            # generate に失敗している
       end
     elsif @cell then
       return @cell.get_real_cell( @port_name )
     else
-      # å³è¾ºãæªå®ç¾©ã®å ´å @cell ã¯ nil (æ¢ã«ã¨ã©ã¼)
+      # 右辺が未定義の場合 @cell は nil (既にエラー)
       return nil
     end
   end
 
-  #=== Join# å³è¾ºã®ã»ã«ãå¾ã
-  # å³è¾ºã®ã»ã«ãå¾ãããã ããcomposite å±éããã¦ããªã
-  # composite å±éããããã®ãå¾ãã«ã¯ get_rhs_cell ãä½¿ã
-  # ãã­ãã¿ã¤ãå®£è¨ããããã¦ããªãå ´åã«ã¯ããã¡ãããä½¿ããªã
-  # ãã®ã¡ã½ããã¯ get_rhs_port2 ã¨å¯¾ã«ãªã£ã¦ãã
+  #=== Join# 右辺のセルを得る
+  # 右辺のセルを得る。ただし、composite 展開されていない
+  # composite 展開されたものを得るには get_rhs_cell を使う
+  # プロトタイプ宣言しかされていない場合には、こちらしか使えない
+  # このメソッドは get_rhs_port2 と対になっている
   def get_rhs_cell2
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
-      # mikan through ã§çæãããã®ã root namespace éå®
+      # mikan through で生成したものが root namespace 限定
       # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name ] )
       if @through_generated_list[0] then
@@ -5797,5 +5501,5 @@
         cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
       else
-        cell = @cell            # generate ã«å¤±æãã¦ãã
+        cell = @cell            # generate に失敗している
       end
     else
@@ -5806,8 +5510,8 @@
   end
 
-  #=== Join# å³è¾ºã®ã»ã«ãå¾ã
-  # through ã¯é©ç¨ããªãããcomposite ã¯å±éããå¾ã®ã»ã«
-  # (æå³è§£æãçµãã£ã¦ããªãã¨ãcomposite å±éãçµãã£ã¦ããªã)
-  # ãã®ã¡ã½ããã¯ get_rhs_port3 ã¨å¯¾ã«ãªã£ã¦ãã
+  #=== Join# 右辺のセルを得る
+  # through は適用しないが、composite は展開した後のセル
+  # (意味解析が終わっていないと、composite 展開が終わっていない)
+  # このメソッドは get_rhs_port3 と対になっている
   def get_rhs_cell3
     if @cell then
@@ -5816,13 +5520,13 @@
   end
 
-  #=== Join# å³è¾ºã®ã»ã«ã®ãªã¼ã¸ã§ã³ãå¾ã
-  # å³è¾ºãæªå®ç¾©ã®å ´åãnil ãè¿ã
-  # composite ã®å ´åãå®ã»ã«ã§ã¯ãªã composite cell ã® region ãè¿ã(composite ã¯ãã¹ã¦åã region ã«å±ãã)
-  # composite ã® cell ããã­ãã¿ã¤ãå®£è¨ããã¦ããã¨ã get_rhs_cell/get_real_cell ã¯ ruby ã®ä¾å¤ã¨ãªã
+  #=== Join# 右辺のセルのリージョンを得る
+  # 右辺が未定義の場合、nil を返す
+  # composite の場合、実セルではなく composite cell の region を返す(composite はすべて同じ region に属する)
+  # composite の cell がプロトタイプ宣言されているとき get_rhs_cell/get_real_cell は ruby の例外となる
   def get_rhs_region
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
       if @through_generated_list[0] then
-        # mikan through ã§çæãããã®ã root namespace éå®
+        # mikan through で生成したものが root namespace 限定
         # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
         cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
@@ -5831,15 +5535,14 @@
         end
       else
-        return nil       # generate ã«å¤±æãã¦ãã
+        return nil       # generate に失敗している
       end
     elsif @cell then
       return @cell.get_region
     end
-    # å³è¾ºãæªå®ç¾©ã®å ´å @cell ã¯ nil (æ¢ã«ã¨ã©ã¼)
+    # 右辺が未定義の場合 @cell は nil (既にエラー)
     return nil
   end
 
-  def get_cell_global_name  # åãå£ã»ã«åï¼ã³ã³ãã¸ãããªãå±éããå
-å´ã®ã»ã«ï¼
+  def get_cell_global_name  # 受け口セル名（コンポジットなら展開した内側のセル）
 
     # debug
@@ -5855,29 +5558,24 @@
   end
 
-  #===  Join# çµåã®å³è¾ºã®åãå£ã®åå
-  #     namespace å + '_' + ã»ã«å + '_' + åãå£å   ï¼ãã®ã»ã«ã composite ãªãã°å±éå¾ã®ã»ã«åãåãå£åï¼
-  #subscript:: Integer  å¼ã³å£é
-åã®ææ·»æ° ã¾ãã¯ nil å¼ã³å£é
-åã§ãªãæ
-  def get_port_global_name( subscript = nil )  # åãå£åï¼ã³ã³ãã¸ãããªãå±éããå
-å´ã®ã»ã«ï¼
+  #===  Join# 結合の右辺の受け口の名前
+  #     namespace 名 + '_' + セル名 + '_' + 受け口名   （このセルが composite ならば展開後のセル名、受け口名）
+  #subscript:: Integer  呼び口配列の時添数 または nil 呼び口配列でない時
+  def get_port_global_name( subscript = nil )  # 受け口名（コンポジットなら展開した内側のセル）
 
     # debug
     dbgPrint "Cell get_port_global_name:  #{@cell_name}\n"
 
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
 
-      # mikan through ã§çæãããã®ã root namespace éå®
+      # mikan through で生成したものが root namespace 限定
       # cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
       cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
 
-      # through ã§æ¿å
-¥ãããã»ã«ã§ãå®éã«æ¥ç¶ãããã»ã«ï¼compositeã®å ´åå
-é¨ã®)ã®åãå£ã® C è¨èªåå
+      # through で挿入されたセルで、実際に接続されるセル（compositeの場合内部の)の受け口の C 言語名前
       return cell.get_real_global_port_name( @through_generated_list[0].get_through_entry_port_name )
     else
 
-      # å®éã«æ¥ç¶ãããã»ã«ã®åãå£ã® C è¨èªåå
+      # 実際に接続されるセルの受け口の C 言語名前
       if @cell then
         return @cell.get_real_global_port_name( @port_name )
@@ -5902,36 +5600,32 @@
   end
 
-  #=== Join# å³è¾ºã®ãã¼ããå¾ã
-  #    å³è¾ºã composite ã®å ´åã¯ãå
-é¨ã®ç¹ããã»ã«ã®ãã¼ã, through ã®å ´åã¯æ¿å
-¥ãããã»ã«ã®ãã¼ã
-  #    ãã®ã¡ã½ããã¯ get_rhs_cell ã¨å¯¾ã«ãªã£ã¦ãã
+  #=== Join# 右辺のポートを得る
+  #    右辺が composite の場合は、内部の繋がるセルのポート, through の場合は挿入されたセルのポート
+  #    このメソッドは get_rhs_cell と対になっている
   def get_rhs_port
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
-      # mikan through ã§çæãããã®ã root namespace éå®
-      # through ã§çæãããã»ã«ãæ¢ã
+      # mikan through で生成したものが root namespace 限定
+      # through で生成されたセルを探す
 #      cell = Namespace.find( [ "::", @through_generated_list[0].get_cell_name.to_sym ] )    #1
       cell = Namespace.find( @through_generated_list[0].get_cell_namespace_path )    #1
-      # cell ã®ãã©ã°ã¤ã³ã§çæããããã¼ãåã®ãã¼ããæ¢ã (composite ãªãå
-é¨ã®ç¹ãããã¼ã)
+      # cell のプラグインで生成されたポート名のポートを探す (composite なら内部の繋がるポート)
       return cell.get_real_port( @through_generated_list[0].get_through_entry_port_name )
     else
-      # ãã¼ããè¿ã(composite ãªãå
-é¨ã®ç¹ãããã¼ããè¿ã)
+      # ポートを返す(composite なら内部の繋がるポートを返す)
       return @cell.get_real_port( @port_name )
     end
   end
 
-  #=== Join# å³è¾ºã®ãã¼ããå¾ã
-  # å³è¾ºã®ãã¼ããå¾ãã
-  # ããã¯ãã­ãã¿ã¤ãå®£è¨ããããã¦ããªãå ´åã«ã¯ããã¡ãããä½¿ããªã
+  #=== Join# 右辺のポートを得る
+  # 右辺のポートを得る。
+  # これはプロトタイプ宣言しかされていない場合には、こちらしか使えない
   def get_rhs_port2
-    # through æå®ããï¼
+    # through 指定あり？
     if @through_list[0] then
       if @through_generated_list[0] then
         port = @through_generated_list[0].get_through_entry_port_name.to_sym
       else
-        port = @port_name    # generate ã«å¤±æãã¦ãã
+        port = @port_name    # generate に失敗している
       end
     else
@@ -5942,6 +5636,6 @@
   end
 
-  #=== Join# å³è¾ºã®ãã¼ããå¾ã
-  # through ã¯é©ç¨ããªãããcomposite ã¯å±éããå¾ã®ã»ã«ã®å¯¾å¿ãããã¼ã
+  #=== Join# 右辺のポートを得る
+  # through は適用しないが、composite は展開した後のセルの対応するポート
   def get_rhs_port3
     if @cell then
@@ -5950,38 +5644,29 @@
   end
 
-  #=== Join# å¼ã³å£é
-åã®2çªç®ä»¥éã®è¦ç´ ãè¿½å ãã
-  #     ä¸çªæåã«å®ç¾©ãããé
-åè¦ç´ ãå
-¨è¦ç´ ã®åæå¤ã®é
-åãæã¤
-  #     ãã®ã¡ã½ããã¯éé
-åã®å ´åãå¼åºãããï¼join éè¤ã¨ã©ã¼ã®å ´åï¼
-  #join2:: Join  å¼ã³å£é
-åè¦ç´ ã® Join
+  #=== Join# 呼び口配列の2番目以降の要素を追加する
+  #     一番最初に定義された配列要素が全要素の初期値の配列を持つ
+  #     このメソッドは非配列の場合も呼出される（join 重複エラーの場合）
+  #join2:: Join  呼び口配列要素の Join
   def add_array_member join2
 
-    # subscript2: join2 ã®å·¦è¾ºæ·»æ°
+    # subscript2: join2 の左辺添数
     subscript2 = join2.get_subscript
 
     if @subscript == nil then		# not array : initialize duplicate
-      # éé
-åã®å ´åãjoin ãéè¤ãã¦ãã
+      # 非配列の場合、join が重複している
       cdl_error( "S1127 \'$1\' duplicate", @name )
       # print "add_array_member2: #{@owner.get_name}\n"
 
     elsif @subscript >= 0 then
-      # æ·»æ°æå®ããã®å ´å
+      # 添数指定ありの場合
       if( subscript2 == nil || subscript2 < 0 ) then
-        # join2 å·¦è¾ºã¯éé
-åã¾ãã¯æ·»æ°ãªã
-        # é
-åãä¸ä¸è´
+        # join2 左辺は非配列または添数なし
+        # 配列が不一致
         cdl_error( "S1128 \'$1\' inconsistent array definition", @name )
       elsif @array_member[subscript2] != nil then
-        # åãæ·»æ°ãæ¢ã«å®ç¾©æ¸ã¿
+        # 同じ添数が既に定義済み
         cdl_error( "S1129 \'$1\' redefinition of subscript $2" ,@name, subscript2 )
       else
-        # æ·»æ°ã®ä½ç½®ã«è¦ç´ ãè¿½å 
+        # 添数の位置に要素を追加
         @array_member[subscript2] = join2.get_rhs
         @array_member2[subscript2] = join2
@@ -5990,16 +5675,12 @@
 
     else
-      # æ·»æ°æå®ãªãã®å ´å
+      # 添数指定なしの場合
       if( subscript2 == nil || subscript2 >= 0 ) then
-        # join2 å·¦è¾ºã¯éé
-åã¾ãã¯æ·»æ°æ
-        # é
-åãä¸ä¸è´
+        # join2 左辺は非配列または添数有
+        # 配列が不一致
         cdl_error( "S1130 \'R1\' inconsistent array definition", @name )
       end
 
-      # æ·»æ°ãªãé
-åã®å ´åãé
-åè¦ç´ ãè¿½å 
+      # 添数なし配列の場合、配列要素を追加
       @array_member  << join2.get_rhs
       @array_member2 << join2
@@ -6025,8 +5706,7 @@
       while i < @array_member2.length
         if @array_member2[i] != self && @array_member[i] != nil then
-          # @array_member2[i] ã nil ã«ãªãã®ã¯ optional ã®æã¨ã
-          # Join ã® initialize ã§ç¡é§ã« @array_member2 ãè¨­å®ããã¦ããå ´å
-          # ç¡é§ã«è¨­å®ããã¦ãããã®ã«ã¤ãã¦ã¯ãåå¸°çã«å¼ã³åºãå¿
-è¦ã¯ãªãï¼clone_for_composite ã§ã¯å¯¾ç­ãã¦ããï¼
+          # @array_member2[i] が nil になるのは optional の時と、
+          # Join の initialize で無駄に @array_member2 が設定されている場合
+          # 無駄に設定されているものについては、再帰的に呼び出す必要はない（clone_for_composite では対策している）
           @array_member2[i].change_name( name )
         end
@@ -6036,5 +5716,5 @@
   end
 
-  # composite cell ãå±éããã»ã«ã®çµåã clone ããã»ã«ã®ååã«å¤æ´
+  # composite cell を展開したセルの結合を clone したセルの名前に変更
   def change_rhs_port( clone_cell_list, celltype )
 
@@ -6054,20 +5734,15 @@
     dbgPrint "  cell_name:   #{@cell_name} => #{c.get_global_name}, #{c.get_name}\n"
 
-    # @rhs ã®å
-å®¹ãèª¿æ´ãã¦ããï¼ãã®å
-å®¹ã¯ãsubscript ãé¤ãã¦ãå¾ããä½¿ããã¦ããªãï¼
+    # @rhs の内容を調整しておく（この内容は、subscript を除いて、後から使われていない）
     elements = @rhs.get_elements
-    if elements[0] == :OP_SUBSC then  # å³è¾ºï¼åãå£é
-åï¼
+    if elements[0] == :OP_SUBSC then  # 右辺：受け口配列？
       elements  = elements[1]
     end
 
-    # å³è¾ºããcell.ePort ã®å½¢å¼ã§ãªã
+    # 右辺が　cell.ePort の形式でない
     if elements[0] != :OP_DOT || elements[1][0] != :IDENTIFIER then   #1
       return
     else
-      # ã»ã«åã composite å
-é¨ã®ååãããå¤é¨ã®ååã«å
-¥ãæ¿ãã
+      # セル名を composite 内部の名前から、外部の名前に入れ替える
       # elements[1][1] = Token.new( c.get_name, nil, nil, nil )
       elements[1][1] = NamespacePath.new( c.get_name, false, c.get_namespace )
@@ -6076,5 +5751,5 @@
     @cell_name = c.get_name
     @cell = c
-    # @definition = nil          # @definition ãæå¹ï¼ ãã§ãã¯æ¸ã¿ï¼ã¨ã¯ãããªãï¼
+    # @definition = nil          # @definition が有効： チェック済み（とは、しない）
 
     if @array_member2 then
@@ -6085,8 +5760,7 @@
       i = 0
       while i < @array_member2.length
-        # @array_member2[i] ã nil ã«ãªãã®ã¯ optional ã®æã¨ã
-        # Join ã® initialize ã§ç¡é§ã« @array_member2 ãè¨­å®ããã¦ããå ´å
-        # ç¡é§ã«è¨­å®ããã¦ãããã®ã«ã¤ãã¦ã¯ãåå¸°çã«å¼ã³åºãå¿
-è¦ã¯ãªãï¼clone_for_composite ã§ã¯å¯¾ç­ãã¦ããï¼
+        # @array_member2[i] が nil になるのは optional の時と、
+        # Join の initialize で無駄に @array_member2 が設定されている場合
+        # 無駄に設定されているものについては、再帰的に呼び出す必要はない（clone_for_composite では対策している）
         if @array_member2[i] != self && @array_member[i] != nil then
           @array_member2[i].change_rhs_port( clone_cell_list, celltype )
@@ -6098,12 +5772,10 @@
   end
 
-  #=== Join# composite ã»ã«ç¨ã«ã¯ã­ã¼ã³
-  #cell_global_name:: string : è¦ªã»ã«ã®ã°ã­ã¼ãã«å
-  # å³è¾ºã® C_EXP ã«å«ã¾ãã $id$, $cell$, $ct$ ãç½®æ
-  # ããã§ç½®æããã®ã¯ composite ã® attribute ã® C_EXP ã composite ã»ã«ã¿ã¤ãããã³ã»ã«åã«ç½®æãããã
-  # ï¼å
-é¨ã»ã«ã® C_EXP ãããã§ç½®æãããï¼
-  # @through_list ãªã©ãã³ãã¼ãããã®ã§ããããå¼ã³åºãããåã«ç¢ºå®ããå¿
-è¦ããã
+  #=== Join# composite セル用にクローン
+  #cell_global_name:: string : 親セルのグローバル名
+  # 右辺の C_EXP に含まれる $id$, $cell$, $ct$ を置換
+  # ここで置換するのは composite の attribute の C_EXP を composite セルタイプおよびセル名に置換するため
+  # （内部セルの C_EXP もここで置換される）
+  # @through_list などもコピーされるので、これが呼び出される前に確定する必要がある
   def clone_for_composite( ct_name, cell_name, locale, b_need_recursive = true )
 
@@ -6125,20 +5797,18 @@
 
   def clone_array_member( array_member, array_member2, ct_name, cell_name, prev, locale )
-    # é
-åã®ã³ãã¼ãä½ã
+    # 配列のコピーを作る
     am  = array_member.clone
     am2 = array_member2.clone
 
-    # é
-åè¦ç´ ã®ã³ãã¼ãä½ã
+    # 配列要素のコピーを作る
     i = 0
     while i < am2.length
       if array_member2[i] == prev then
-        # èªåèªèº«ã§ããï¼ã®ã§ãå¼åºãã¨ç¡éåå¸°å¼åºãã¨ãªãï¼
+        # 自分自身である（ので、呼出すと無限再帰呼出しとなる）
         am2[i] = self
       elsif array_member2[i] then
         am2[i] = array_member2[i].clone_for_composite( ct_name, cell_name, locale, false )
       else
-        # ä»¥åã®ã¨ã©ã¼ã§ array_member2[i] ã¯ nil ã«ãªã£ã¦ãã
+        # 以前のエラーで array_member2[i] は nil になっている
       end
 
@@ -6149,5 +5819,5 @@
     end
 
-    # i = 0 ã¯ãããã§èªåèªèº«ãè¨­å®
+    # i = 0 は、ここで自分自身を設定
     # am2[0] = self
 
@@ -6157,17 +5827,14 @@
   end
 
-  #=== Join# rhs ãå
-¥ãæãã
+  #=== Join# rhs を入れ換える
   #rhs:: Expression | initializer
-  # å³è¾ºãå
-¥ãæããï¼
-  # ãã®ã¡ã½ããã¯ãcomposite ã§ cell ã®å±æ§ã®åæå¤ã attribute ã®å¤ã§ç½®ãæããã®ã«ä½¿ããã
-  # ãã®ã¡ã½ããã¯ composite å
-ã® cell ã®å±æ§ã®åæå¤ãå®æ°ã§ã¯ãªãå¼ã«ãªã£ãå ´åãä¸è¦ã«ãªã
+  # 右辺を入れ換える．
+  # このメソッドは、composite で cell の属性の初期値を attribute の値で置き換えるのに使われる
+  # このメソッドは composite 内の cell の属性の初期値が定数ではなく式になった場合、不要になる
   def change_rhs rhs
     @rhs = rhs
   end
 
-  #=== Join# clone ããã join ã® owner ãå¤æ´
+  #=== Join# clone された join の owner を変更
   def set_cloned( owner )
     dbgPrint "Join#set_cloned: #{@name}  prev owner: #{@owner.get_name} new owner: #{owner.get_name}\n"
@@ -6255,5 +5922,5 @@
 end
 
-#== éçµå
+#== 逆結合
 class ReverseJoin < BDNode
 #@ep_name:: Symbol
@@ -6280,14 +5947,11 @@
 end
 
-# CLASS: CompositeCelltype ç¨ã® Join
-# REM:   CompositeCelltype ã export ãããã®
+# CLASS: CompositeCelltype 用の Join
+# REM:   CompositeCelltype が export するもの
 class CompositeCelltypeJoin < BDNode
-# @export_name:: string     :  CompositeCelltype ã export ããååï¼å¼ã³å£ãåãå£ãå±æ§ï¼
-# @internal_cell_name:: string : CompositeCelltype å
-é¨ã®ã»ã«ã®åå
-# @internal_cell_elem_name:: string : CompositeCelltype å
-é¨ã®ã»ã«ã®å¼ã³å£ãåãå£ãå±æ§ã®åå
-# @cell : Cell : Cell::  internal cell  : CompositeCelltyep å
-é¨ã®ã»ã«ï¼in_compositeã»ã«ï¼
+# @export_name:: string     :  CompositeCelltype が export する名前（呼び口、受け口、属性）
+# @internal_cell_name:: string : CompositeCelltype 内部のセルの名前
+# @internal_cell_elem_name:: string : CompositeCelltype 内部のセルの呼び口、受け口、属性の名前
+# @cell : Cell : Cell::  internal cell  : CompositeCelltyep 内部のセル（in_compositeセル）
 # @port_decl:: Port | Decl
 # @b_pseudo: bool : 
@@ -6304,9 +5968,9 @@
   end
 
-  #=== CompositeCelltypeJoin# CompositeCelltypeJoin ã®å¯¾è±¡ã»ã«ãï¼
-  #cell::  Cell å¯¾è±¡ãã©ãããã§ãã¯ããã»ã«
+  #=== CompositeCelltypeJoin# CompositeCelltypeJoin の対象セルか？
+  #cell::  Cell 対象かどうかチェックするセル
   #
-  #     CompositeCelltypeJoin ã¨ cell ã®ååãä¸è´ããããã§ãã¯ãã
-  #     port_decl ãæå®ãããå ´åã¯ãç¾ç¶ä½¿ããã¦ããªã
+  #     CompositeCelltypeJoin と cell の名前が一致するかチェックする
+  #     port_decl が指定された場合は、現状使われていない
   def match?( cell, port_decl = nil )
 
@@ -6324,6 +5988,6 @@
 
 #    if @cell.equal?( cell ) && ( port_decl == nil || @port_decl.equal?( port_decl ) ) then
-    # ãªã port_decl ãä¸è´ããªããã°ãªããªãã£ããå¿ããã
-    # recursive_composite ã§ååã®ä¸è´ã«å¤æ´   060917
+    # なぜ port_decl が一致しなければならなかったか忘れた。
+    # recursive_composite で名前の一致に変更   060917
     if((@cell.get_name == cell.get_name) && (port_decl == nil || @port_decl.get_name == port_decl.get_name))then
       true
@@ -6357,5 +6021,5 @@
   end
 
-  # @port_decl ã Port ã®å ´åã®ã¿å¼ã³åºãã¦ãã
+  # @port_decl が Port の場合のみ呼び出してよい
   def get_port_type
     if @port_decl then
@@ -6379,5 +6043,5 @@
   end
 
-  # @port_decl ã Port ã®å ´åã®ã¿å¼ã³åºãã¦ãã
+  # @port_decl が Port の場合のみ呼び出してよい
   def is_require?
     if @port_decl then
@@ -6386,5 +6050,5 @@
   end
 
-  # @port_decl ã Port ã®å ´åã®ã¿å¼ã³åºãã¦ãã
+  # @port_decl が Port の場合のみ呼び出してよい
   def is_allocator_port?
     if @port_decl then
@@ -6393,5 +6057,5 @@
   end
 
-  # @port_decl ã Port ã®å ´åã®ã¿å¼ã³åºãã¦ãã
+  # @port_decl が Port の場合のみ呼び出してよい
   def is_optional?
     if @port_decl then
@@ -6400,6 +6064,6 @@
   end
 
-  #=== CompositeCelltypeJoin# å³è¾ºã Decl ãªãã°åæåå­ï¼å¼ï¼ãè¿ã
-  # ãã®ã¡ã½ããã¯ Cell ã® check_join ããåæå¤ãã§ãã¯ã®ããã«å¼ã³åºããã
+  #=== CompositeCelltypeJoin# 右辺が Decl ならば初期化子（式）を返す
+  # このメソッドは Cell の check_join から初期値チェックのために呼び出される
   def get_initializer
     if @port_decl.instance_of? Decl then
@@ -6414,13 +6078,12 @@
   end
 
-  #=== CompositeCelltypeJoin# é
-åãµã¤ãºãå¾ã
-  #RETURN:: nil: not array, "[]": å¤§ããæå®ãªã, Integer: å¤§ããæå®ãã
+  #=== CompositeCelltypeJoin# 配列サイズを得る
+  #RETURN:: nil: not array, "[]": 大きさ指定なし, Integer: 大きさ指定あり
   def get_array_size
     @port_decl.get_array_size
   end
 
-  #=== CompositeCelltypeJoin# signature ãå¾ã
-  # @port_decl ã Port ã®æã®ã¿å¼ã³åºãã¦ããã
+  #=== CompositeCelltypeJoin# signature を得る
+  # @port_decl が Port の時のみ呼び出してもよい
   def get_signature
     @port_decl.get_signature
@@ -6465,5 +6128,5 @@
 # @file_name:: string
 # @format:: string
-# @arg_list:: Expression ã® elements ã¨åãå½¢å¼ [ [:IDENTIFIER, String], ... ]
+# @arg_list:: Expression の elements と同じ形式 [ [:IDENTIFIER, String], ... ]
 # @f_celltype:: bool : true: celltype factory, false: cell factory
 
@@ -6476,27 +6139,26 @@
     case name
     when :write
-      # write é¢æ°
+      # write 関数
       @name = name
 
-      # write é¢æ°ã®ç¬¬ä¸å¼æ°ï¼åºåå
-ãã¡ã¤ã«å
-        # å¼ãè©ä¾¡ããï¼éå¸¸åä¸ã®æå­åã§ãããããåä¸ã®æå­åãè¿ãããï¼
+      # write 関数の第一引数：出力先ファイル名
+        # 式を評価する（通常単一の文字列であるから、単一の文字列が返される）
       @file_name = file_name.eval_const(nil).val  # file_name : Expression
       if ! @file_name.instance_of?( String ) then
-        # æå­åå®æ°ã§ã¯ãªãã£ã
+        # 文字列定数ではなかった
         cdl_error( "S1132 $1: 1st parameter is not string(file name)" , @name )
         @file_name = nil
       end
 
-      # write é¢æ°ã®ç¬¬äºå¼æ°ï¼ãã©ã¼ãããæå­å
+      # write 関数の第二引数：フォーマット文字列
       @format    = format.eval_const(nil).val     # format : Expression
-        # å¼ãè©ä¾¡ããï¼éå¸¸åä¸ã®æå­åã§ãããããåä¸ã®æå­åãè¿ãããï¼
+        # 式を評価する（通常単一の文字列であるから、単一の文字列が返される）
       if ! @format.instance_of?( String ) then
-        # æå­åå®æ°ã§ã¯ãªãã£ã
+        # 文字列定数ではなかった
         cdl_error( "S1133 $1: 2nd parameter is not string(fromat)" , @name )
         @format = nil
       end
 
-      # ç¬¬ä¸å¼æ°ä»¥éãå¼æ°ãªã¹ãã¨ãã mikan å¼æ°ã®ãã§ãã¯
+      # 第三引数以降を引数リストとする mikan 引数のチェック
       @arg_list = arg_list
 
@@ -6575,17 +6237,17 @@
 #== Domain
 #
-# region ã® domain ãè¨æ¶ããã¯ã©ã¹
+# region の domain を記憶するクラス
 class DomainType < Node
-#@name::Symbol : ãã¡ã¤ã³ã¿ã¤ãã®åå ex) HRP2
+#@name::Symbol : ドメインタイプの名前 ex) HRP2
 #@region::Region
 #@plugin_name::Symbol : ex) HRP2Plugin
 #@option::String : ex) "trusted", "nontrusted"
-#@plugin::DomainPlugin ã®å­ã¯ã©ã¹
+#@plugin::DomainPlugin の子クラス
 
   include PluginModule
 
-  # ãã¡ã¤ã³ã«å±ãã region ã® Hash
-  # domain æå®ãä¸åº¦ãè¡ãããªãå ´åããã®ãªã¹ãã¯ç©ºã§ãã
-  # ã«ã¼ããªã¼ã¸ã§ã³ã¯ option = "OutOfDomain" ã§ç»é²ããã (domain æå®ãç¡ããã°ç»é²ãããªã)
+  # ドメインに属する region の Hash
+  # domain 指定が一度も行われない場合、このリストは空である
+  # ルートリージョンは option = "OutOfDomain" で登録される (domain 指定が無ければ登録されない)
   @@domain_regions = { }  # { :domain_type => [ region, ... ] }
 
@@ -6628,7 +6290,6 @@
   end
 
-  #== Domain ãªã¼ã¸ã§ã³ã® Hash ãå¾ã
-  # @@domain_regions ã®èª¬æåç
-§
+  #== Domain リージョンの Hash を得る
+  # @@domain_regions の説明参照
   def self.get_domain_regions
     return @@domain_regions
@@ -6649,28 +6310,28 @@
 end
 
-#== Region ã¯ã©ã¹
+#== Region クラス
 # 
-# Region ã¯ Namespace ãç¶æ¿ãã¦ãã
-# root region ã¯ç¹æ®ã§ãroot namespace ã¨åãã§ãã
+# Region は Namespace を継承している
+# root region は特殊で、root namespace と同じである
 #
-# cell ã¯ region ã«å±ãã
-# region ã«å±ãã cell ã®ãªã¹ãã¯ Namespace ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹å¤æ°ã¨ãã¦è¨æ¶ããã
+# cell は region に属する
+# region に属する cell のリストは Namespace クラスのインスタンス変数として記憶される
 #
 class Region < Namespace
 # @name:: string
-# @in_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil ã®æ in ç¦æ­¢
-# @out_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil ã®æ out ç¦æ­¢
+# @in_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil の時 in 禁止
+# @out_through_list:: [ [ plugin_name, plugin_arg ], ... ] : plungin_name = nil の時 out 禁止
 # @to_through_list:: [ [ dst_region, plugin_name, plugin_arg ], ... ]
-# @cell_port_throug_plugin_list:: { "#{cell_name}.#{port_name}" => through_generated_list ã®è¦ç´  }
-#    ãã® region ãã cell_name.port_name ã¸ã® through ãã©ã°ã¤ã³ã§çæããããªãã¸ã§ã¯ã
+# @cell_port_throug_plugin_list:: { "#{cell_name}.#{port_name}" => through_generated_list の要素 }
+#    この region から cell_name.port_name への through プラグインで生成されたオブジェクト
 # @region_type::Symbol : :NODE, :LINKUNIT, :DOMAIN, :CLASS
-# @region_type_param::Symbol : domain, class ã®åå. node, linkunit ã§ã¯ nil
-# @link_root:: Region : linkUnit ã®æ ¹ã£ãã¨ãªã region (node, linkunit ãæå®ããã region)
-# @family_line:: [ @region_root, ...,@region_me ]  å®¶ç³»
-# @in_through_count:: Integer :  n çªç®ã® in_through çµå (n>=0)
-# @out_through_count:: Integer : n çªç®ã® out_through çµå (n>=0)
-# @to_through_count:: { :RegionName => Integer }: RegionName ã¸ã® n çªç®ã® to_through çµå (n>=0)
-# @domain_type::DomainType : domain æå®ããã¦ããªãå ´åãnil
-# @domain_root::Region : domain æå®ããã¦ããªã Region (root ã®å ´å nil)
+# @region_type_param::Symbol : domain, class の名前. node, linkunit では nil
+# @link_root:: Region : linkUnit の根っことなる region (node, linkunit が指定された region)
+# @family_line:: [ @region_root, ...,@region_me ]  家系
+# @in_through_count:: Integer :  n 番目の in_through 結合 (n>=0)
+# @out_through_count:: Integer : n 番目の out_through 結合 (n>=0)
+# @to_through_count:: { :RegionName => Integer }: RegionName への n 番目の to_through 結合 (n>=0)
+# @domain_type::DomainType : domain 指定されていない場合、nil
+# @domain_root::Region : domain 指定されていなる Region (root の場合 nil)
 
   @@in_through_list  = []
@@ -6680,16 +6341,15 @@
   @@region_type_param = nil
   @@domain_name = nil
-  @@domain_option = nil    # Token ãå
-¥ã
+  @@domain_option = nil    # Token が入る
 
   @@link_roots = []
 
   def initialize( name )
-    # mikan name ã® Namespace ä¿®é£¾
-    # object = Namespace.find( [ name ] )   # è¦ªã¾ã§æãã«ãã
+    # mikan name の Namespace 修飾
+    # object = Namespace.find( [ name ] )   # 親まで捜しにいく
     if name != "::" then
       object = Namespace.get_current.find( name )    #1
     else
-      # root ãªã¼ã¸ã§ã³
+      # root リージョン
       object = nil
       @@region_type = :NODE
@@ -6727,5 +6387,5 @@
         dbgPrint "Region.new: re-appear #{@name}\n"
 
-        # # Region path ãåååºç¾ã¨ä¸è´ãããï¼
+        # # Region path が前回出現と一致するか？
         # if @@region_stack[ @@region_stack_sp - 1 ] then
         #   my_path = @@region_stack[ @@region_stack_sp - 1 ].get_path_string.to_s + "." + @name.to_s
@@ -6737,8 +6397,8 @@
         # end
 
-        # ååºç¾
+        # 再出現
         # @@region_stack[@@region_stack_sp] = object
 
-        # ååºç¾æã« specifier ãæå®ããã¦ãããï¼
+        # 再出現時に specifier が指定されているか？
         if( @in_through_list.length != 0 || @out_through_list.length != 0 || @to_through_list.length != 0 || @region_type != nil )then
           cdl_error( "S1140 $1: region specifier must place at first appearence" , name )
@@ -6747,12 +6407,12 @@
 
       else
-        # ã¨ã©ã¼ç¨ããã¼å®ç¾©
-
-        # ç°ãªãååã®ãªãã¸ã§ã¯ããå®ç¾©æ¸ã¿
+        # エラー用ダミー定義
+
+        # 異なる同名のオブジェクトが定義済み
         cdl_error( "S1141 $1 duplication, previous one : $2" , name, object.class )
-        # @@region_stack[@@region_stack_sp] = self    # ã¨ã©ã¼ææ«å® region
-      end
-    else
-      # ååºç¾
+        # @@region_stack[@@region_stack_sp] = self    # エラー時暫定 region
+      end
+    else
+      # 初出現
       dbgPrint "Region.new: #{@name}\n"
       set_region_family_line
@@ -6807,6 +6467,6 @@
   end
 
-  #== Region ã«ã¼ããªã¼ã¸ã§ã³ãå¾ã
-  # ã«ã¼ããªã¼ã¸ã§ã³ã¯ãã«ã¼ããã¼ã ã¹ãã¼ã¹ã¨åãã§ãã
+  #== Region ルートリージョンを得る
+  # ルートリージョンは、ルートネームスペースと同じである
   def self.get_root
     Namespace.get_root
@@ -6816,5 +6476,5 @@
 
     dbgPrint  "set_region_family_line: Region: #{@name}  \n"
-    # root namespace (root region) ã® region type ã¯ :NODE
+    # root namespace (root region) の region type は :NODE
     if @name == "::" then
       @region_type = :NODE
@@ -6834,7 +6494,6 @@
 
     if @domain_type then
-      # ã«ã¼ããªã¼ã¸ã§ã³ãæåãã @domain_type è¨­å®ããããã¨ã¯ãªãã®
-      # ã§ @owner == nil ãèª¿ã¹ãå¿
-è¦ã¯ãªã
+      # ルートリージョンが最初から @domain_type 設定されることはないの
+      # で @owner == nil を調べる必要はない
       @owner.set_domain_type @domain_type
     end
@@ -6850,12 +6509,9 @@
     @link_root = nil
 
-    # @family_line ãä½æãã
-    # @link_root ãã¿ã¤ãã
-    # (ä¸ä½ã«ãã©ã£ã¦ãã£ã¦ Region ã§ node ã¾ãã¯ linkunit ã®ããããå
-ã«è¦ã¤ãã£ããã®ã @link_root ã¨ãªã)
-    # root namespace ã¯ Region ãã¤ node ãªã®ã§å¿
-ã @link_root ã¯è¦ã¤ãã
-    # mikan: self ã node, linkUnit ã®å ´åãããã§æå¾
-ããã¨ããã«è¨­å®ãããªããããRegion#initialize ã§åè¨­å®
+    # @family_line を作成する
+    # @link_root もみつける
+    # (上位にたどっていって Region で node または linkunit のいずれか先に見つかったものが @link_root となる)
+    # root namespace は Region かつ node なので必ず @link_root は見つかる
+    # mikan: self が node, linkUnit の場合、ここで期待したとおりに設定されないため、Region#initialize で再設定
     obj = self
     while 1
@@ -6868,9 +6524,9 @@
         end
       else
-        # ãããªããã° Namespace
-        # namespace ã®ä¸ã« region ãããå ´å
-      end
-
-      # root namespace ã«ãã©ãçãã°çµã
+        # さもなければ Namespace
+        # namespace の下に region がある場合
+      end
+
+      # root namespace にたどり着けば終り
       break if obj.get_name == "::"
 
@@ -6883,5 +6539,5 @@
   end
 
-  #== Region#ãã¡ã¤ã³ãè¨­å®ãã
+  #== Region#ドメインを設定する
   def set_domain_type domain_type
     if @region_type == :NODE then
@@ -6927,8 +6583,8 @@
   end
 
-  #== Region# domain ã®æ ¹ã£ãã¨ãªã region ãå¾ã
-  # Region ã®ã¤ã³ã¹ã¿ã³ã¹ãè¿ã
-  # domain æå®å­ãããã°ããã®ãªã¼ã¸ã§ã³ããã¡ã¤ã³ã«ã¼ãã§ãã
-  # ãªããã°ãè¦ªãªã¼ã¸ã§ã³ã®ãã¡ã¤ã³ã«ã¼ãã¨ãã
+  #== Region# domain の根っことなる region を得る
+  # Region のインスタンスを返す
+  # domain 指定子があれば、そのリージョンがドメインルートである
+  # なければ、親リージョンのドメインルートとする
   def get_domain_root
     @domain_root
@@ -6970,8 +6626,7 @@
   end
 
-  #=== Region# æ§æè§£æä¸­ã® region ãå¾ã
-  # æ§æè§£æä¸­ Namespace (ãããã¯å­ã¯ã©ã¹ã® Region) ã®ä¸ä½ããã©ã£ã¦ Region ãè¦ã¤ãã
-  # cell ã namespace ä¸ã«ãããã¨ãã§ããªããã°ãã«ã¼ããã¾ããå¿
-è¦ã¯ãªã
+  #=== Region# 構文解析中の region を得る
+  # 構文解析中 Namespace (あるいは子クラスの Region) の上位をたどって Region を見つける
+  # cell が namespace 下におくことができなければ、ループをまわす必要はない
   def self.get_current
     # @@region_stack[@@region_stack_sp]
@@ -6986,6 +6641,6 @@
   end
 
-  #=== Region# through ãã©ã°ã¤ã³ã§ããã® region ãã cell_name.port_name ã¸ã®ãã©ã°ã¤ã³ãªãã¸ã§ã¯ããç»é²
-  # mikan namesppace å¯¾å¿ (cell_name)
+  #=== Region# through プラグインで、この region から cell_name.port_name へのプラグインオブジェクトを登録
+  # mikan namesppace 対応 (cell_name)
   def add_cell_port_through_plugin( cell_name, port_name, through_plugin_object )
     @cell_port_throug_plugin_list[ "#{cell_name}.#{port_name}" ] = through_plugin_object
@@ -7002,17 +6657,16 @@
   end
 
-  #=== Region# to_region ã¸ã®è·é¢ï¼unreachable ãªå ´å nil)
-  # mikan Cell#check_region ã¨Region ã¸ãã©ãçãã¾ã§ããã®å¦çã«å
-±éæ§ãé«ã
-  # region#distance ã¯ require ã§ç¨ãããã
+  #=== Region# to_region への距離（unreachable な場合 nil)
+  # mikan Cell#check_region とRegion へたどり着くまでための処理に共通性が高い
+  # region#distance は require で用いられる
   def distance( to_region )
 
-    r1 = self                   # åºçº region
-    r2 = to_region              # ç®ç region
+    r1 = self                   # 出発 region
+    r2 = to_region              # 目的 region
     dist = 0
 
-    if ! r1.equal? r2 then      # åä¸ region ãªãå¼åºãå¯è½
-
-      # mikan namespace å¯¾å¿
+    if ! r1.equal? r2 then      # 同一 region なら呼出し可能
+
+      # mikan namespace 対応
       f1 = r1.get_family_line
       len1 = f1.length
@@ -7020,8 +6674,6 @@
       len2 = f2.length
 
-      # ä¸ä¸è´ã«ãªãã¨ããï¼å
-å¼ï¼ãæ¢ã
-      i = 1  # i = 0 ã¯ :RootRegion ãªã®ã§å¿
-ãä¸è´
+      # 不一致になるところ（兄弟）を探す
+      i = 1  # i = 0 は :RootRegion なので必ず一致
       while( i < len1 && i < len2 )
         if( f1[i] != f2[i] )then
@@ -7031,6 +6683,5 @@
       end
 
-      sibling_level = i     # å
-å¼ã¨ãªãã¬ãã«ããããã¯ã©ã¡ããä¸æ¹ãçµãã£ãã¬ãã«
+      sibling_level = i     # 兄弟となるレベル、もしくはどちらか一方が終わったレベル
 
       # p "sibling_level: #{i}"
@@ -7038,8 +6689,5 @@
       # p "to: #{f2[i].get_name}" if f2[i]
 
-      # å¼ã³å´ã«ã¤ãã¦å¼ã³å
-ã®ã¬ãã«ããå
-å¼ã¬ãã«ã¾ã§ï¼out_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 呼び側について呼び元のレベルから兄弟レベルまで（out_through をチェックおよび挿入）
       i = len1 -1
       while i >= sibling_level
@@ -7064,7 +6712,5 @@
       end
 
-      # å
-å¼ã¬ãã«ã«ããã¦ï¼to_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 兄弟レベルにおいて（to_through をチェックおよび挿入）
       if f1[sibling_level] && f2[sibling_level] then
         dbgPrint "going from #{f1[sibling_level].get_name} to #{f2[sibling_level].get_name}\n"
@@ -7081,5 +6727,5 @@
           found = 0
           f1[sibling_level].get_to_through_list.each { |t|
-            if t[0][0] == f2[sibling_level].get_name then   # region åãä¸è´ããã ?
+            if t[0][0] == f2[sibling_level].get_name then   # region 名が一致するか ?
               found = 1
             end
@@ -7092,7 +6738,5 @@
       end
 
-      # åãå´ã«ã¤ãã¦å
-å¼ã¬ãã«ããåãå´ã®ã¬ãã«ã¾ã§ï¼in_through ããã§ãã¯ããã³æ¿å
-¥ï¼
+      # 受け側について兄弟レベルから受け側のレベルまで（in_through をチェックおよび挿入）
       i = sibling_level
       while i < len2
@@ -7137,36 +6781,33 @@
 class Import_C < Node
 
-  # ãããã®ååæå­åã®ãªã¹ã
+  # ヘッダの名前文字列のリスト
   @@header_list = {}
   @@header_list2 = []
   @@define_list = {}
 
-  #=== Import_C# import_C ã®çæï¼ããããã¡ã¤ã«ãåè¾¼ãï¼
-  #header:: Token : import_C ã®ç¬¬ä¸å¼æ°æå­åãªãã©ã«ãã¼ã¯ã³
-  #define:: Token : import_C ã®ç¬¬äºå¼æ°æå­åãªãã©ã«ãã¼ã¯ã³
+  #=== Import_C# import_C の生成（ヘッダファイルを取込む）
+  #header:: Token : import_C の第一引数文字列リテラルトークン
+  #define:: Token : import_C の第二引数文字列リテラルトークン
   def initialize( header, define = nil )
     super()
-    # ããããã¡ã¤ã«åæå­åããåå¾ã® "" ãåãé¤ã
+    # ヘッダファイル名文字列から前後の "" を取り除く
     # header = header.to_s.gsub( /\A"(.*)"\z/, '\1' )
     header = CDLString.remove_dquote header.to_s
 
     if define then
-      # åå¾ã® "" ãåãé¤ã
+      # 前後の "" を取り除く
       # def_opt = define.to_s.gsub( /\A"(.*)/, '\1' )
       # def_opt.sub!( /(.*)"\z/, '\1' )
       def_opt = CDLString.remove_dquote define.to_s
 
-      # "," ã -D ã«ç½®ãæã
+      # "," を -D に置き換え
       def_opt = def_opt.gsub( /,/, " -D " )
 
-      # å
-é ­ã« -D ãæ¿å
-¥ # mikan ä¸é©åãª define å
-¥åããã£ãå ´åãCPP æã«ã¨ã©ã¼
+      # 先頭に -D を挿入 # mikan 不適切な define 入力があった場合、CPP 時にエラー
       def_opt = def_opt.gsub( /^/, "-D " )
 
     end
 
-    # ã³ãã³ãã©ã¤ã³æå®ããã DEFINE 
+    # コマンドライン指定された DEFINE 
     $define.each{ |define|
       if $IN_EXERB then
@@ -7189,8 +6830,8 @@
       if found == false then
         begin
-          # ãã¡ã¤ã«ã® stat ãåã£ã¦ã¿ã(ãªããã°ä¾å¤çºç)
+          # ファイルの stat を取ってみる(なければ例外発生)
           File.stat( "#{path}/#{header}" )
 
-          # cdl ãè¦ã¤ãã£ããã¡ã¤ã«ãã¹ã«åè¨­å®
+          # cdl を見つかったファイルパスに再設定
           header_path = "#{path}/#{header}"
           found = true
@@ -7207,15 +6848,15 @@
     end
 
-    # èª­è¾¼ã¿æ¸ã¿ï¼
+    # 読込み済み？
     if( @@header_list[ header ] ) then
-      # ç¬¬äºå¼æ° define ãä»¥åã¨ç°ãªã
+      # 第二引数 define が以前と異なる
       if @@define_list[ header ].to_s != define.to_s then
         cdl_error( "S1143 import_C: arg2: mismatch with previous one"  )
       end
-      # ãããã«ããèª­ã¿è¾¼ã¾ãªã
+      # いずれにせよ読み込まない
       return
     end
 
-    # ãããã®ãªã¹ããè¨é²
+    # ヘッダのリストを記録
     @@header_list[ header ] = header_path
     @@header_list2 << header
@@ -7241,9 +6882,9 @@
     end
 
-    # CPP åºåç¨ tmp ãã¡ã¤ã«å
+    # CPP 出力用 tmp ファイル名
     tmp_header = header.gsub( /\//, "_" )
     tmp_header = "#{$gen}/tmp_#{tmp_header}"
 
-    # CPP ã³ãã³ãã©ã¤ã³ãä½æ
+    # CPP コマンドラインを作成
     cmd = "#{$cpp} #{def_opt} #{include_opt} #{tmp_C}"
 
@@ -7253,8 +6894,8 @@
       end
 
-      # ããªãã­ã»ããµã³ãã³ãã pipe ã¨ãã¦éã
-          # cmd ã¯ cygwin/Linux ã§ã¯ bash(sh) çµç±ã§å®è¡ããã
-          # Exerb çã§ã¯ cmd.exe çµç±ã§å®è¡ããã
-          # ãã®å·®ã¯å¼ãæ°ã® (), $, % ãªã©ã·ã§ã«ã®ç¹å¥ãªæå­ã®è©ä¾¡ã«ç¾ããã®ã§æ³¨æ
+      # プリプロセッサコマンドを pipe として開く
+          # cmd は cygwin/Linux では bash(sh) 経由で実行される
+          # Exerb 版では cmd.exe 経由で実行される
+          # この差は引き数の (), $, % などシェルの特別な文字の評価に現れるので注意
           cpp = IO.popen( cmd, "r:ASCII-8BIT" )
       begin
@@ -7269,5 +6910,5 @@
         print_exception( evar )
       ensure
-        tmp_file.close if tmp_file    # mikan File.open ã«å¤±æããæ tmp_file == nil ã¯ä¿è¨¼ããã¦ãã ?
+        tmp_file.close if tmp_file    # mikan File.open に失敗した時 tmp_file == nil は保証されている ?
         cpp.close
       end
@@ -7277,11 +6918,11 @@
     end
 
-    # C è¨èªã®ãã¼ãµã¤ã³ã¹ã¿ã³ã¹ãçæ
+    # C 言語のパーサインスタンスを生成
     c_parser = C_parser.new
 
-    # tmp_header ããã¼ã¹
+    # tmp_header をパース
     c_parser.parse( [tmp_header] )
 
-    # çµæåããã¼ãµã¹ã¿ãã¯ãæ»ã
+    # 終期化　パーサスタックを戻す
     c_parser.finalize
 
@@ -7337,11 +6978,11 @@
 
 class Import < Node
-# @b_reuse::bool:       åå©ç¨ï¼ã»ã«ã¿ã¤ãã® template çæä¸è¦
-# @b_reuse_real::bool:  å®éã«åå©ç¨
-# @cdl::      string:   import ãã CDL
-# @cdl_path:: string:   CDL ã®ãã¹
-# @b_imported:: bool:   import ããã(ã³ãã³ãã©ã¤ã³æå®ããã¦ããªã)
-
-  # ãããã®ååæå­åã®ãªã¹ã  æ·»å­ï¼expand ãããã¹ãå¤ï¼Import
+# @b_reuse::bool:       再利用．セルタイプの template 生成不要
+# @b_reuse_real::bool:  実際に再利用
+# @cdl::      string:   import する CDL
+# @cdl_path:: string:   CDL のパス
+# @b_imported:: bool:   import された(コマンドライン指定されていない)
+
+  # ヘッダの名前文字列のリスト  添字：expand したパス、値：Import
   @@import_list = {}
 
@@ -7364,7 +7005,7 @@
   end
 
-  #=== Import# import ãè¡ã
-  #cdl::      string   cdl ã¸ã®ãã¹ï¼"" ã§å²ã¾ãã¦ãããã¨ãä»®å®
-  #b_reuse::  bool     true: template ãçæããªã
+  #=== Import# import を行う
+  #cdl::      string   cdl へのパス．"" で囲まれていることを仮定
+  #b_reuse::  bool     true: template を生成しない
   def initialize( cdl, b_reuse = false, b_imported = true )
     Import.push self
@@ -7372,8 +7013,8 @@
     super()
     @@current_import = self
-    # ããããã¡ã¤ã«åæå­åããåå¾ã® "", <> ãåãé¤ãn
+    # ヘッダファイル名文字列から前後の "", <> を取り除くn
     @cdl = cdl.to_s.gsub( /\A["<](.*)[">]\z/, '\1' )
 
-    # ãµã¼ããã¹ããæ¢ã
+    # サーチパスから探す
     found = false
     @cdl_path = ""
@@ -7383,6 +7024,5 @@
 
     if Generator.get_plugin then
-      # plugin ãã import ããã¦ããå ´å gen ããµã¼ããã¹ã®å
-é ­ã«å ãã
+      # plugin から import されている場合 gen をサーチパスの先頭に加える
       search_path = [ $gen ] + $import_path
     else
@@ -7399,8 +7039,8 @@
         end
 
-        # ãã¡ã¤ã«ã® stat ãåã£ã¦ã¿ã(ãªããã°ä¾å¤çºç)
+        # ファイルの stat を取ってみる(なければ例外発生)
         File.stat( cdl_path )
 
-        # cdl ãè¦ã¤ãã£ããã¡ã¤ã«ãã¹ã«åè¨­å®
+        # cdl を見つかったファイルパスに再設定
         @cdl_path = cdl_path
         found = true
@@ -7419,5 +7059,5 @@
     end
 
-    # èª­è¾¼ã¿æ¸ã¿ãªããèª­è¾¼ã¾ãªã
+    # 読込み済みなら、読込まない
     prev = @@import_list[ File.expand_path( @cdl_path ) ]
     if( prev ) then
@@ -7428,23 +7068,23 @@
     end
 
-    # import ãªã¹ããè¨é²
+    # import リストを記録
     @@import_list[ File.expand_path( @cdl_path ) ] = self
 
-    # plugin ãã import ããã¦ããå ´å
+    # plugin から import されている場合
     plugin = Generator.get_plugin
 
-    # ãã¼ãµã¤ã³ã¹ã¿ã³ã¹ãçæ(å¥ãã¼ãµã§èª­ã¿è¾¼ã)
+    # パーサインスタンスを生成(別パーサで読み込む)
     parser = Generator.new
 
-    # plugin ãã import ããã¦ããå ´åã® plugin è¨­å®
+    # plugin から import されている場合の plugin 設定
     parser.set_plugin plugin
 
-    # reuse ãã©ã°ãè¨­å®
+    # reuse フラグを設定
     parser.set_reuse @b_reuse_real
 
-    # cdl ããã¼ã¹
+    # cdl をパース
     parser.parse( [@cdl_path] )
 
-    # çµæåããã¼ãµã¹ã¿ãã¯ãæ»ã
+    # 終期化　パーサスタックを戻す
     parser.finalize
     Import.pop
@@ -7471,6 +7111,6 @@
   end
 
-  #=== cdl ã®ååãè¿ã
-  # å¼æ°ã§æå®ããã¦ãã cdl åãä¸é¨ãã¹ãå«ãå¯è½æ§ããã
+  #=== cdl の名前を返す
+  # 引数で指定されている cdl 名。一部パスを含む可能性がある
   def get_cdl_name
     @cdl
@@ -7478,9 +7118,9 @@
 end
 
-#== generate: signature ãã©ã°ã¤ã³ã®ã­ã¼ãã¨å®è¡
+#== generate: signature プラグインのロードと実行
 class Generate < Node
 #@plugin_name:: Symbol
 #@signature_nsp:: NamespacePath
-#@option::         String '"', '"' ã§å²ã¾ãã¦ãã
+#@option::         String '"', '"' で囲まれている
 
   include PluginModule
@@ -7490,5 +7130,5 @@
     @plugin_name = plugin_name
     @signature_nsp = signature_nsp
-    option = option.to_s    # option ã¯ Token
+    option = option.to_s    # option は Token
     @option = option
 
@@ -7511,5 +7151,5 @@
 
     begin
-      eval( eval_str )     # plugin ãçæ
+      eval( eval_str )     # plugin を生成
       plugin_object.set_locale @locale
     rescue Exception => evar
@@ -7523,15 +7163,14 @@
 end
 
-#== ååç©ºéãã¹
+#== 名前空間パス
 class NamespacePath < Node
 #@b_absolute::Bool
 #@path::[ Symbol,... ]
-#@namespace::Namespace:  @b_absolute == false ã®ã¨ããåºç¹ã¨ãªã namespace
+#@namespace::Namespace:  @b_absolute == false のとき、基点となる namespace
 
   #=== NamespacePath# initialize
-  #ident::Symbol           æåã®åå, ãã ã "::" ã®ã¿ã®å ´åã¯ String
-  #b_absolute:Bool         "::" ã§å§ã¾ã£ã¦ããå ´å true
-  #namespace::Namespace    b_absolute = false ãã¤ãæ§æè§£éæ®µéä»¥å¤ã§å¼ã³åºãå ´åã¯ãå¿
-ãæå®ãããã¨ 
+  #ident::Symbol           最初の名前, ただし "::" のみの場合は String
+  #b_absolute:Bool         "::" で始まっている場合 true
+  #namespace::Namespace    b_absolute = false かつ、構文解釈段階以外で呼び出す場合は、必ず指定すること 
   def initialize( ident, b_absolute, namespace = nil )
     super()
@@ -7559,16 +7198,14 @@
   end
 
-  #=== NamespacePath# append ãã
+  #=== NamespacePath# append する
   #RETURN self
-  # ãã®ã¡ã½ããã¯ãå
-ã® NamespacePath ãªãã¸ã§ã¯ããå¤å½¢ãã¦è¿ã
+  # このメソッドは、元の NamespacePath オブジェクトを変形して返す
   def append!( ident )
     @path << ident
     return self
   end
-  #=== NamespacePath# append ãã
-  # ãã®ã¡ã½ããã¯ãå
-ã® NamespacePath ãªãã¸ã§ã¯ããå¤å½¢ããªã
-  #RETURN:: è¤è£½ãã NamespacePath
+  #=== NamespacePath# append する
+  # このメソッドは、元の NamespacePath オブジェクトを変形しない
+  #RETURN:: 複製した NamespacePath
   def append( ident )
     cl = self.clone
@@ -7586,5 +7223,5 @@
   end
 
-  #=== NamespacePath#ã¯ã­ã¼ã³ãä½æãã¦ååãå¤æ´ãã
+  #=== NamespacePath#クローンを作成して名前を変更する
   def change_name name
     cl = self.clone
@@ -7595,7 +7232,6 @@
   alias :change_name_clone :change_name
 
-  #=== NamespacePath#ååãå¤æ´ãã
-  # ãã®ã¤ã³ã¹ã¿ã³ã¹ãåç
-§ãããã¹ã¦ã«å½±é¿ãä¸ãããã¨ã«æ³¨æ
+  #=== NamespacePath#名前を変更する
+  # このインスタンスを参照するすべてに影響を与えることに注意
   def change_name_no_clone name
     @path[ @path.length - 1 ] = name
@@ -7603,6 +7239,6 @@
   end
 
-  #=== NamespacePath:: path æå­åãå¾ã
-  # CDL ç¨ã® path æå­åãçæ
+  #=== NamespacePath:: path 文字列を得る
+  # CDL 用の path 文字列を生成
   def to_s
     get_path_str
@@ -7633,10 +7269,8 @@
   end
 
-  #=== NamespacePath:: ãã¹ã®é
-åãè¿ã
-  # is_absolute? true ã®å ´åãã«ã¼ãããã®ãã¹
-  #              false ã®å ´åãbase_namespace ããã®ç¸å¯¾
-  # ã«ã¼ã namespace ã®å ´åãé·ãï¼ã®é
-åãè¿ã
+  #=== NamespacePath:: パスの配列を返す
+  # is_absolute? true の場合、ルートからのパス
+  #              false の場合、base_namespace からの相対
+  # ルート namespace の場合、長さ０の配列を返す
   #
   def get_path
@@ -7644,8 +7278,6 @@
   end
 
-  #=== NamespacePath#ãã«ãã¹ã®é
-åãè¿ã
-  # è¿ãããé
-åãæ¸ãæãã¦ã¯ãªããªã
+  #=== NamespacePath#フルパスの配列を返す
+  # 返された配列を書き換えてはならない
   def get_full_path
     if @b_absolute then
@@ -7656,11 +7288,11 @@
   end
 
-  #=== NamespacePath:: ç¸å¯¾ãã¹ã®ãã¼ã¹ã¨ãªã namespace
-  # is_absolute? == false ã®æã®ã¿æå¹ãªå¤ãè¿ã (true ãªã nil)
+  #=== NamespacePath:: 相対パスのベースとなる namespace
+  # is_absolute? == false の時のみ有効な値を返す (true なら nil)
   def get_base_namespace
     @namespace
   end
 
-  #=== NamespacePath:: C è¨èªã°ã­ã¼ãã«åãå¾ã
+  #=== NamespacePath:: C 言語グローバル名を得る
   def get_global_name
     if @b_absolute then
@@ -7680,11 +7312,11 @@
   end
 
-  #=== NamespacePath:: åè§£ãã¦ NamespacePath ã¤ã³ã¹ã¿ã³ã¹ãçæãã
-  #path_str:: String       : namespace ã¾ãã¯ region ã®ãã¹ ex) "::path::A" , "::", "ident"
-  #b_force_absolute:: Bool : "::" ã§å§ã¾ã£ã¦ããªãå ´åã§ãçµ¶å¯¾ãã¹ã«æ±ã
+  #=== NamespacePath:: 分解して NamespacePath インスタンスを生成する
+  #path_str:: String       : namespace または region のパス ex) "::path::A" , "::", "ident"
+  #b_force_absolute:: Bool : "::" で始まっていない場合でも絶対パスに扱う
   #
-  # NamespacePath ã¯éå¸¸æ§æè§£æããã¦ä½æããã
-  # ãã®ã¡ã½ããã¯ããªãã·ã§ã³ãªã©ã§æå®ãããæå­åãåè§£ãã¦ NamespacePath ãçæããã®ã«ç¨ãã
-  # ãã§ãã¯ã¯ããããä¸é©åãªãã¹æå®ã¯ãä¸é©åãª NamespacePath ãçæããã
+  # NamespacePath は通常構文解析されて作成される
+  # このメソッドは、オプションなどで指定される文字列を分解して NamespacePath を生成するのに用いる
+  # チェックはゆるい。不適切なパス指定は、不適切な NamespacePath が生成される
   def self.analyze( path_str, b_force_absolute = false )
 
@@ -7725,5 +7357,5 @@
 end
 
-# ä»¥ä¸åä½ãã¹ãã³ã¼ã
+# 以下単体テストコード
 if $unit_test then
   root_namespace = Namespace.new("::")
