Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.tab.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.tab.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.tab.rb	(revision 321)
@@ -102,9 +102,8 @@
     comment = false
 
-    # euc ã®ã³ã¡ã³ãã utf8 ã¨ãã¦æ±ãã¨ãã³ã¡ã³ãã®çµãããèª¤ãåé¡ã®å¯¾ç­
+    # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
     TECS_LANG::set_kcode_binary
 
-    # 800U, 0xffLL ãªã© (æ´æ°ãªãã©ã«ã«å
-±éã®ä¿®é£¾å­)
+    # 800U, 0xffLL など (整数リテラルに共通の修飾子)
     integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?"
 
@@ -121,5 +120,5 @@
           if comment
             case line
-            # ã³ã¡ã³ãçµäº
+            # コメント終了
             when /\A\*\//
               comment = false
@@ -129,36 +128,36 @@
           else
             case line
-            # ç©ºç½ãããªãã­ã»ã¹ãã£ã¬ã¯ãã£ã
+            # 空白、プリプロセスディレクティブ
             when /\A\s+/
               ;
-            # è­å¥å­
+            # 識別子
             when /\A[a-zA-Z_]\w*/
               word = $&
               @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
-            # 16 é²æ°å®æ°
+            # 16 進数定数
             when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/
               @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
-            # 8 é²æ°å®æ°
+            # 8 進数定数
             when /\A0[0-7]+#{integer_qualifier}/
               @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
-            # æµ®åå°æ°å®æ°
+            # 浮動小数定数
             when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
               @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
-            # æ´æ°å®æ°
+            # 整数定数
             when /\A\d+#{integer_qualifier}/
             # when /\A\d+/
               @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
-            # æå­
+            # 文字
             when /\A'(?:[^'\\]|\\.)'/
               @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
-            # æå­å
-#              "#include  #include #include \"../systask/logtask.cfg\"       æå¾ã® " å¿ã)ã§ç¡éã«ã¼ã
+            # 文字列
+#              "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
 #            when /\A"(?:[^"\\]+|\\.)*"/
-            when /\A"(?:[^"\\]|\\.)*"/   # ããã¯ãã¾ãè¡ãããã 
+            when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
               @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
-            # è¡ã³ã¡ã³ã
+            # 行コメント
             when /\A\/\/.*$/
-              # èª­ã¿é£ã°ãã ã
-            # ã³ã¡ã³ãéå§
+              # 読み飛ばすだけ
+            # コメント開始
             when /\A\/\*/
               comment = true
@@ -189,5 +188,5 @@
     }
 
-    # çµäºã®å°
+    # 終了の印
     @q << nil
 
@@ -216,5 +215,5 @@
       end
 
-      # TYPE_NAME ãã¼ã¯ã³ã¸ç½®ãæã
+      # TYPE_NAME トークンへ置き換え
       if @b_no_type_name == false
         if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then
@@ -223,5 +222,5 @@
       end
 
-      if $debug then     # 070107 token ç¡å¹æãããéããªããããã (through å¯¾å¿ -d ã®æã«ä¾å¤çºç) 
+      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
         locale = @@current_locale[@@generator_nest]
         if token then
@@ -252,5 +251,5 @@
   @@n_warning = 0
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¨ã©ã¼çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
   def self.error( msg )
     @@n_error += 1
@@ -264,5 +263,5 @@
   end
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¦ã©ã¼ãã³ã°çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
   def self.warning( msg )
     @@n_warning += 1
@@ -1676,5 +1675,5 @@
 module_eval(<<'.,.,', 'C_parser.y.rb', 237)
   def _reduce_70(val, _values, result)
-    			result = CIntType.new( -3 )    # storage class ã¯ç¡è¦
+    			result = CIntType.new( -3 )    # storage class は無視
 		
     result
@@ -1695,5 +1694,5 @@
 module_eval(<<'.,.,', 'C_parser.y.rb', 247)
   def _reduce_73(val, _values, result)
-    			result = val[1]                # storage class ã¯ç¡è¦
+    			result = val[1]                # storage class は無視
 		
     result
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/C_parser.y.rb	(revision 321)
@@ -6,68 +6,51 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: C_parser.y.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
 class C_parser
 rule
-# ãããã¬ãã«ã®æ§æè¦ç´ ã¯ C_parser
+# トップレベルの構文要素は C_parser
 all: C_parser
 
 # Expr
-##########################  å¼  ##########################
-# K&Rã®ææ³(ãã­ã°ã©ãã³ã°è¨èªC ç¬¬2ç ä»é²)ã¨ä¸é¨ç°ãªã
-# argument_expression_list(é¢æ°å¼æ°), assignment_expression(ä»£å
-¥)ããªã
-# å¼ã® result ã¯ããã¹ã¦é
-åã§ç¬¬ä¸è¦ç´ ãè­å¥ã·ã³ãã«ãç¬¬äºè¦ç´ ä»¥ä¸ãå¼æ°
+##########################  式  ##########################
+# K&Rの文法(プログラミング言語C 第2版 付録)と一部異なる
+# argument_expression_list(関数引数), assignment_expression(代入)がない
+# 式の result は、すべて配列で第一要素が識別シンボル、第二要素以下が引数
 
 primary_expression
         : namespace_identifier
 		{ result = [ :IDENTIFIER, val[0] ] }     #1ok
-#        : IDENTIFIER	# mikan namespace ã¸ã®å¯¾å¿
+#        : IDENTIFIER	# mikan namespace への対応
 #		{ result = [ :IDENTIFIER, val[0] ] }
 #        | TRUE
@@ -96,5 +79,5 @@
 		{ result << val[1] }
 
-# é¢æ°å¼ã³åºãã¨å¾ç½®ã¤ã³ã¯ãªã¡ã³ãããã¯ãªã¡ã³ãæ¼ç®å­ããªã
+# 関数呼び出しと後置インクリメント、デクリメント演算子がない
 postfix_expression
         : primary_expression
@@ -107,5 +90,5 @@
         | postfix_expression '->' IDENTIFIER
 		{ result = [ :OP_REF, val[0], val[2] ] }
-        | postfix_expression '++'	{ result = val[0] }   # ++, -- ã¯ç¡è¦ãã
+        | postfix_expression '++'	{ result = val[0] }   # ++, -- は無視する
         | postfix_expression '--'	{ result = val[0] }
 
@@ -116,5 +99,5 @@
 
 
-# åç½®ã¤ã³ã¯ãªã¡ã³ãããã¯ãªã¡ã³ãæ¼ç®å­ããªã
+# 前置インクリメント、デクリメント演算子がない
 unary_expression
         : postfix_expression
@@ -125,5 +108,5 @@
         | SIZEOF '(' type_name ')'
 		{ result = [ :OP_SIZEOF_TYPE, val[1] ] }
-		| '++' unary_expression			{ result = val[1] }   # ++, -- ã¯ç¡è¦ãã
+		| '++' unary_expression			{ result = val[1] }   # ++, -- は無視する
 		| '--' unary_expression			{ result = val[1] }
 
@@ -213,5 +196,5 @@
 
 
-# ã³ã³ãæ¼ç®å­ãä½¿ããªã
+# コンマ演算子が使えない
 expression
         : conditional_expression
@@ -238,20 +221,20 @@
 
 # Types
-##########################  å®£è¨  ##########################
-# å®£è¨ãK&Rã¨ä¸é¨ç°ãªã
-
-# declarationã¯ã»ã«ã®å±æ§ã§ä½¿ããã
-# K&Rã¨ã®éã: storage classãæå®ã§ããªããåãçç¥ã§ããªã
+##########################  宣言  ##########################
+# 宣言もK&Rと一部異なる
+
+# declarationはセルの属性で使われる
+# K&Rとの違い: storage classが指定できない、型が省略できない
 declaration
         : declaration_specifiers init_declarator_list ';'
 #        : type_specifier_qualifier_list init_declarator_list ';'
 
-# declaration_specifiersã¯é¢æ°ã®ãã©ã¡ã¼ã¿ã§ä½¿ããããã
-# type_specifier_qualifier_listã§ååãããããªã
+# declaration_specifiersは関数のパラメータで使われるが、
+# type_specifier_qualifier_listで十分かもしれない
 
 declaration_specifiers
         : storage_class
 		{
-			result = CIntType.new( -3 )    # storage class ã¯ç¡è¦
+			result = CIntType.new( -3 )    # storage class は無視
 		}
         | type_specifier
@@ -263,5 +246,5 @@
         | storage_class declaration_specifiers
 		{
-			result = val[1]                # storage class ã¯ç¡è¦
+			result = val[1]                # storage class は無視
 		}
         | type_specifier declaration_specifiers
@@ -292,7 +275,7 @@
         | DOUBLE	{ set_no_type_name true; result = CFloatType.new(-64) }
         | BOOL	{ set_no_type_name true; result = CBoolType.new }
-        | struct_specifier	{ set_no_type_name true; result = val[0] } # set_no_type_name true ã¯ struct_tag ã§ãå¼ã°ãã
-        | union_specifier	{ set_no_type_name true; result = CVoidType.new }  # void ãå®£è¨ãããã¨ãã
-        | enum_specifier	{ set_no_type_name true; result = CVoidType.new }  # void ãå®£è¨ãããã¨ãã
+        | struct_specifier	{ set_no_type_name true; result = val[0] } # set_no_type_name true は struct_tag でも呼ばれる
+        | union_specifier	{ set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
+        | enum_specifier	{ set_no_type_name true; result = CVoidType.new }  # void が宣言されたとする
         | TYPE_NAME	{ set_no_type_name true; result = CDefinedType.new( val[0].val ) }
 
@@ -314,5 +297,5 @@
 		}
 
-# mikan K&Rã®struct_or_union_specifierã«ç¸å½ããããunionã¯ä½¿ããªã, bit field ã«ãå¯¾å¿ããªã
+# mikan K&Rのstruct_or_union_specifierに相当するが、unionは使えない, bit field にも対応しない
 struct_specifier		# mikan
         : STRUCT struct_tag '{'
@@ -333,6 +316,5 @@
 			result = val[1]
 		}
-        | STRUCT struct_tag   # mikan struct_tag ã¯ namespace å¯¾å¿ãå¿
-è¦
+        | STRUCT struct_tag   # mikan struct_tag は namespace 対応が必要
 		{
 			StructType.set_define( false )
@@ -352,5 +334,5 @@
 		}
 
-# ãã¤ã³ã¿ä¿®é£¾å­ãè¿½å 
+# ポインタ修飾子を追加
 struct_declaration
         : declaration_specifiers struct_declarator_list ';'
@@ -365,11 +347,11 @@
 			result = val[1]
 		}
-        | union_specifier ';'                       # ç¡å
-        | struct_specifier ';'                       # ç¡å
-
-
-
-# K&Rã®specifier_qualifier_listã¨åã
-# ååãã¾ãããããã£ãã®ã§type_ãä»ãã
+        | union_specifier ';'                       # 無名
+        | struct_specifier ';'                       # 無名
+
+
+
+# K&Rのspecifier_qualifier_listと同じ
+# 名前がまぎらわしかったのでtype_を付けた
 type_specifier_qualifier_list
         : type_specifier
@@ -395,5 +377,5 @@
 		{ result << val[2] }
 
-# ããããã£ã¼ã«ãã¯ä½¿ããªã
+# ビットフィールドは使えない
 struct_declarator
         : declarator
@@ -404,6 +386,5 @@
         : UNION union_tag '{' union_declaration_list '}'
         | UNION '{' union_declaration_list '}'
-        | UNION union_tag   # mikan struct_tag ã¯ namespace å¯¾å¿ãå¿
-è¦
+        | UNION union_tag   # mikan struct_tag は namespace 対応が必要
 
 union_declaration_list
@@ -416,6 +397,6 @@
 union_declaration
         : declaration_specifiers union_declarator_list ';'
-		| union_specifier ';'                       # ç¡å
-		| struct_specifier ';'                      # ç¡å
+		| union_specifier ';'                       # 無名
+		| struct_specifier ';'                      # 無名
 
 union_declarator_list
@@ -423,5 +404,5 @@
         | union_declarator_list ',' union_declarator
 
-# ããããã£ã¼ã«ãã¯ä½¿ããªã
+# ビットフィールドは使えない
 union_declarator
         : declarator
@@ -429,5 +410,5 @@
 
 
-# enumã®ç¨®é¡ãè¿½å 
+# enumの種類を追加
 enum_specifier		# mikan
         : enum_type            '{' enumerator_list '}'
@@ -462,5 +443,5 @@
 		}
         | direct_declarator
-        | pointer TYPE_NAME     # é¢æ°ãã¤ã³ã¿ã® typedef ãäºéå®ç¾©ã®å ´å
+        | pointer TYPE_NAME     # 関数ポインタの typedef が二重定義の場合
 		{
 			result = Decl.new( val[1].val )
@@ -490,6 +471,5 @@
 		}
 
-#        | direct_declarator '(' identifier_list ')'  # ããã¯ä½ã®ããã«å¿
-è¦ï¼ 060211
+#        | direct_declarator '(' identifier_list ')'  # これは何のために必要？ 060211
         | direct_declarator '(' ')'
 		{
@@ -524,5 +504,5 @@
         : parameter_list
         | parameter_list ',' '.' '.' '.'
-		# mikan å¯å¤é·ãã©ã¡ã¼ã¿,  ... ã®éã®ã¹ãã¼ã¹ãè¨±ãããï¼ææãï¼
+		# mikan 可変長パラメータ,  ... の間のスペースが許される（手抜き）
 
 parameter_list
@@ -532,9 +512,9 @@
 #		{
 #			val[0].add_param( val[2] )
-#			# result = val[0] ä¸è¦
+#			# result = val[0] 不要
 #		}
 
 
-# ãã©ã¡ã¼ã¿ä¿®é£¾å­ãè¿½å 
+# パラメータ修飾子を追加
 parameter_declaration
         : declaration_specifiers declarator
@@ -545,6 +525,6 @@
 #		}
 
-	# ä»¥ä¸ã¯ã¨ã©ã¼ã¨ãã
-#        | declaration_specifiers	# ä»®å¼æ°ãªãã¯ãã¨ããããæ±ããªã 060210
+	# 以下はエラーとする
+#        | declaration_specifiers	# 仮引数なしは、とりあえず扱わない 060210
 #		{
 #			unless val[0].kind_of?( VoidType ) then
@@ -553,9 +533,9 @@
 #			result = nil
 #		}
-        | declaration_specifiers abstract_declarator	# ä»®å¼æ°ãªã
-        | declaration_specifiers						# ä»®å¼æ°ãªã
-
-
-#identifier_list       # 060211  ä¸ç¨ã«ãªã£ã
+        | declaration_specifiers abstract_declarator	# 仮引数なし
+        | declaration_specifiers						# 仮引数なし
+
+
+#identifier_list       # 060211  不用になった
 #        : IDENTIFIER
 #        | identifier_list ',' IDENTIFIER
@@ -587,5 +567,5 @@
         | direct_abstract_declarator '(' parameter_type_list ')'
 
-# assignment_expressionãconstant_expressionã«å¤æ´
+# assignment_expressionをconstant_expressionに変更
 initializer			# mikan
         : constant_expression
@@ -610,7 +590,7 @@
 
 
-##########################  ããããã¯CDLç¬èª  ##########################
-
-#ãããã¬ãã«ã®æ§æè¦å
+##########################  ここからはCDL独自  ##########################
+
+#トップレベルの構文規則
 C_parser
         :
@@ -628,5 +608,5 @@
         | declaration
         | ';'
-        | error   # ã¨ã©ã¼åå¾©ãã¤ã³ã
+        | error   # エラー回復ポイント
 
 typedef
@@ -826,9 +806,8 @@
     comment = false
 
-    # euc ã®ã³ã¡ã³ãã utf8 ã¨ãã¦æ±ãã¨ãã³ã¡ã³ãã®çµãããèª¤ãåé¡ã®å¯¾ç­
+    # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
     TECS_LANG::set_kcode_binary
 
-    # 800U, 0xffLL ãªã© (æ´æ°ãªãã©ã«ã«å
-±éã®ä¿®é£¾å­)
+    # 800U, 0xffLL など (整数リテラルに共通の修飾子)
     integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?"
 
@@ -845,5 +824,5 @@
           if comment
             case line
-            # ã³ã¡ã³ãçµäº
+            # コメント終了
             when /\A\*\//
               comment = false
@@ -853,36 +832,36 @@
           else
             case line
-            # ç©ºç½ãããªãã­ã»ã¹ãã£ã¬ã¯ãã£ã
+            # 空白、プリプロセスディレクティブ
             when /\A\s+/
               ;
-            # è­å¥å­
+            # 識別子
             when /\A[a-zA-Z_]\w*/
               word = $&
               @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
-            # 16 é²æ°å®æ°
+            # 16 進数定数
             when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/
               @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
-            # 8 é²æ°å®æ°
+            # 8 進数定数
             when /\A0[0-7]+#{integer_qualifier}/
               @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
-            # æµ®åå°æ°å®æ°
+            # 浮動小数定数
             when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
               @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
-            # æ´æ°å®æ°
+            # 整数定数
             when /\A\d+#{integer_qualifier}/
             # when /\A\d+/
               @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
-            # æå­
+            # 文字
             when /\A'(?:[^'\\]|\\.)'/
               @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
-            # æå­å
-#              "#include  #include #include \"../systask/logtask.cfg\"       æå¾ã® " å¿ã)ã§ç¡éã«ã¼ã
+            # 文字列
+#              "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
 #            when /\A"(?:[^"\\]+|\\.)*"/
-            when /\A"(?:[^"\\]|\\.)*"/   # ããã¯ãã¾ãè¡ãããã 
+            when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
               @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
-            # è¡ã³ã¡ã³ã
+            # 行コメント
             when /\A\/\/.*$/
-              # èª­ã¿é£ã°ãã ã
-            # ã³ã¡ã³ãéå§
+              # 読み飛ばすだけ
+            # コメント開始
             when /\A\/\*/
               comment = true
@@ -913,5 +892,5 @@
     }
 
-    # çµäºã®å°
+    # 終了の印
     @q << nil
 
@@ -940,5 +919,5 @@
       end
 
-      # TYPE_NAME ãã¼ã¯ã³ã¸ç½®ãæã
+      # TYPE_NAME トークンへ置き換え
       if @b_no_type_name == false
         if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then
@@ -947,5 +926,5 @@
       end
 
-      if $debug then     # 070107 token ç¡å¹æãããéããªããããã (through å¯¾å¿ -d ã®æã«ä¾å¤çºç) 
+      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
         locale = @@current_locale[@@generator_nest]
         if token then
@@ -976,5 +955,5 @@
   @@n_warning = 0
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¨ã©ã¼çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
   def self.error( msg )
     @@n_error += 1
@@ -988,5 +967,5 @@
   end
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¦ã©ã¼ãã³ã°çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
   def self.warning( msg )
     @@n_warning += 1
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.tab.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.tab.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.tab.rb	(revision 321)
@@ -94,6 +94,5 @@
   }
 
-  # æå®å­ '[]' å
-ã§ã®ã¿ä½¿ç¨ã§ããã­ã¼ã¯ã¼ã
+  # 指定子 '[]' 内でのみ使用できるキーワード
   RESERVED2 = {
     # specifier
@@ -112,5 +111,5 @@
     # port (entry)
     'inline' => :INLINE,
-    'ref_desc' => :REF_DESC,   # call ãå¯
+    'ref_desc' => :REF_DESC,   # call も可
 
     # port (call)
@@ -156,29 +155,29 @@
   }
 
-  # åå¸°çãªãã¼ãµã®ããã®ã¹ã¿ãã¯
+  # 再帰的なパーサのためのスタック
   @@generator_nest = -1
   @@generator_stack = []
   @@current_locale = []
 
-  # import_C ä¸­ã§ãã
+  # import_C 中である
   @@import_C = false
 
-  # ãã¹ã¦ã®æ§æè§£æãå®äºãã
+  # すべての構文解析が完了した
   @@b_end_all_parse = false
 
   def self.parse( file_name, plugin = nil, b_reuse = false )
-    # ãã¼ãµã¤ã³ã¹ã¿ã³ã¹ãçæ(å¥ãã¼ãµã§èª­ã¿è¾¼ã)
+    # パーサインスタンスを生成(別パーサで読み込む)
     parser = Generator.new
 
-    # plugin ãã import ããã¦ããå ´åã® plugin è¨­å®
+    # plugin から import されている場合の plugin 設定
     parser.set_plugin plugin
 
-    # reuse ãã©ã°ãè¨­å®
+    # reuse フラグを設定
     parser.set_reuse b_reuse
 
-    # cdl ããã¼ã¹
+    # cdl をパース
     parser.parse( [file_name] )
 
-    # çµæåããã¼ãµã¹ã¿ãã¯ãæ»ã
+    # 終期化　パーサスタックを戻す
     parser.finalize
   end
@@ -200,5 +199,5 @@
   def self.get_plugin
     if @@generator_stack[@@generator_nest] then
-      # tecsgen å¼æ°ã® cdl ã import ãããå ´åã¯ nil
+      # tecsgen 引数の cdl が import される場合は nil
       return @@generator_stack[@@generator_nest].get_plugin
     else
@@ -217,5 +216,5 @@
   def self.is_reuse?
     if @@generator_stack[@@generator_nest] then
-      # tecsgen å¼æ°ã® cdl ã import ãããå ´åã¯ nil
+      # tecsgen 引数の cdl が import される場合は nil
       return @@generator_stack[@@generator_nest].is_reuse?
     else
@@ -247,5 +246,5 @@
       b_in_string = false
 
-      # euc ã®ã³ã¡ã³ãã utf8 ã¨ãã¦æ±ãã¨ãã³ã¡ã³ãã®çµãããèª¤ãåé¡ã®å¯¾ç­
+      # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
       TECS_LANG::set_kcode_binary
 
@@ -257,5 +256,5 @@
           TECSIO.foreach(file) {|line|
             col = 1
-#            line.rstrip!         æ¹è¡å«ãæå­åãæ±ãããã«ãªã£ãã®ã§ãããã§ç©ºç½ãåãé¤ããªããªã£ã
+#            line.rstrip!         改行含む文字列を扱うようになったので、ここで空白を取り除けなくなった
 
             until line.empty?
@@ -263,11 +262,10 @@
               if b_in_comment
                 case line
-                  # ã³ã¡ã³ãçµäº
+                  # コメント終了
                 when /\A\*\//
                   b_in_comment = false
                 when /\A./
                   ;
-                when /\s+/     # line.rstrip! ãæ­¢ãããã \n ãªã©ã®ç©ºç½æå­ã¨ã¾ã£ã¡ããã«ã¼ã«ãå¿
-è¦ã«ãªã£ã
+                when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールが必要になった
                   ;
                 end
@@ -277,9 +275,9 @@
                   @q <<  [:STRING_LITERAL, Token.new(string, file, lineno, col)]
                   b_in_string = false
-                elsif line =~ /\A.*\\\n/     # æ¹è¡ \n ã¯ '.' ã«ãããããªã
+                elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
                   string += $&
-                elsif line =~ /\A.*\n/     # æ¹è¡ \n ã¯ '.' ã«ãããããªã
+                elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
                   string += line
-                  # ãã®ä½ç½®ã§ã¯ error ã¡ã½ããã¯ä½¿ããªã (token èª­åºãå)
+                  # この位置では error メソッドは使えない (token 読出し前)
                   puts "error: #{file} line #{lineno}: string literal has newline without escape"
                   @@n_error += 1
@@ -287,57 +285,57 @@
               else
                 case line
-                # ç©ºç½ãããªãã­ã»ã¹ãã£ã¬ã¯ãã£ã
+                # 空白、プリプロセスディレクティブ
                 when /\A\s+/
                   ;
-                # è­å¥å­
+                # 識別子
                 when /\A[a-zA-Z_]\w*/
                   word = $&
                   @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
-                # 16 é²æ°å®æ°
+                # 16 進数定数
                 when /\A0x[0-9A-Fa-f]+/
                   @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
-                # 8 é²æ°å®æ°
+                # 8 進数定数
                 when /\A0[0-7]+/
                   @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
-                # æµ®åå°æ°å®æ°
+                # 浮動小数定数
                 when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
                   @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
-                # æ´æ°å®æ°
+                # 整数定数
                 when /\A\d+/
                   @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
-                # æå­å®æ°
+                # 文字定数
                 when /\A'(?:[^'\\]|\\.)'/
                   @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
-                # æå­å
-#                "#include  #include #include \"../systask/logtask.cfg\"       æå¾ã® " å¿ã)ã§ç¡éã«ã¼ã
+                # 文字列
+#                "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
 #                when /\A"(?:[^"\\]+|\\.)*"/
-                when /\A"(?:[^"\\]|\\.)*"/   # ããã¯ãã¾ãè¡ãããã 
+                when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
                   @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
-                # æå­å (æ¹è¡ãã)
+                # 文字列 (改行あり)
                 when /\A"(?:[^"\\]|\\.)*\\\n$/
                   string = $&
                   b_in_string = true
-                # æå­å (æ¹è¡ãã, escape ãªã)
+                # 文字列 (改行あり, escape なし)
                 when /\A("(?:[^"\\]|\e\.)*)\n$/
                   string = $1 + "\\\n"
                   b_in_string = true
-                  # ãã®ä½ç½®ã§ã¯ error ã¡ã½ããã¯ä½¿ããªã (token èª­åºãå) # mikan cdl_error ã§ã¯ãªã
+                  # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
                   puts "error: #{file} line #{lineno}: string literal has newline without escape"
                   @@n_error += 1
-                # å±±æ¬å¼§ã§å²ã¾ããæå­å
+                # 山括弧で囲まれた文字列
                 when /\A<[0-9A-Za-z_\. \/]+>/   # AB: angle bracke
                   @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)]
-                # è¡ã³ã¡ã³ã
+                # 行コメント
                 when /\A\/\/.*$/
-                  # èª­ã¿é£ã°ãã ã
-                # ã³ã¡ã³ãéå§
+                  # 読み飛ばすだけ
+                # コメント開始
                 when /\A\/\*/
                   b_in_comment = true
-                # '>>', '<<' ãªã©
+                # '>>', '<<' など
                 when /\A>>/, /\A<</, /\A==/, /\A!=/, /\A\&\&/, /\A\|\|/
                   @q << [$&, Token.new($&, file, lineno, col)]
                 when /\A::/, /\A=>/, /\A<=/, /\A>=/
                   @q << [$&, Token.new($&, file, lineno, col)]
-                # '(', ')' ãªã©ä¸æå­ã®è¨å·ãã¾ãã¯æªç¥ã®è¨å·
+                # '(', ')' など一文字の記号、または未知の記号
                 when /\A./
                   @q << [$&, Token.new($&, file, lineno, col)]
@@ -363,5 +361,5 @@
       }
 
-      # çµäºã®å°
+      # 終了の印
       @q << nil
 
@@ -383,15 +381,14 @@
 
       if token[0] == :IDENTIFIER then
-        # TYPE_NAME ãã¼ã¯ã³ã¸ç½®æã
+        # TYPE_NAME トークンへ置換え
         if Namespace.is_typename?( token[1].val ) then
           token[0] = :TYPE_NAME
         elsif @in_specifier && RESERVED2[ token[1].val.to_s ] then
-          # æå®å­ã­ã¼ã¯ã¼ãï¼ '[', ']' å
-ã§ã®ã¿æå¹)
+          # 指定子キーワード（ '[', ']' 内でのみ有効)
           token[0] = RESERVED2[ token[1].val.to_s ]
         end
       end
 
-      if $debug then     # 070107 token ç¡å¹æãããéããªããããã (through å¯¾å¿ -d ã®æã«ä¾å¤çºç) 
+      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
         locale = @@current_locale[@@generator_nest]
         if token then
@@ -424,5 +421,5 @@
   @@n_warning = 0
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¨ã©ã¼çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
   def self.error( msg, *arg )
     locale = nil
@@ -434,5 +431,5 @@
 
     msg = TECSMsg.get_error_message( msg )
-    # $1, $2, ... ã arg ã§ç½®æ
+    # $1, $2, ... を arg で置換
     count = 1
     arg.each{ |a|
@@ -442,13 +439,13 @@
     }
 
-    # import_C ã®ä¸­ã§ã®ã¨ã©ã¼ï¼
+    # import_C の中でのエラー？
     if @@import_C then
       C_parser.error( msg )
     else
 
-      # Node ã®è¨æ¶ãã ä½ç½® (locale) ãä½¿ç¨ããå ´åãå¤æ´ä»¥åã«æ¯ã¹ã
-      # åé¡çºçç®æã¨ç°ãªãä½ç½®ã«ã¨ã©ã¼ãåºããããæ§æè§£æä¸­ã®ã¨ã©ã¼
-      # ã¯ãè§£æä¸­ã®ä½ç½®ãåºåããï¼(new_XXX ã§ owner ãå­è¦ç´ ã®ãã§ã
-      # ã¯ãããã¨ owner ã®è¡çªå·ãåºã¦ãã¾ãç¹ã§ããããçãã¦ãã)
+      # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
+      # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
+      # は、解析中の位置を出力する．(new_XXX で owner が子要素のチェッ
+      # クをすると owner の行番号が出てしまう点で、ずれが生じている)
 
       if @@b_end_all_parse == false || locale == nil then
@@ -463,5 +460,5 @@
   end
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¦ã©ã¼ãã³ã°çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
   def self.warning( msg, *arg )
     locale = nil
@@ -473,5 +470,5 @@
 
     msg = TECSMsg.get_warning_message( msg )
-    # $1, $2, ... ã arg ã§ç½®æ
+    # $1, $2, ... を arg で置換
     count = 1
     arg.each{ |a|
@@ -481,5 +478,5 @@
     }
 
-    # import_C ã®ä¸­ã§ã®ã¦ã©ã¼ãã³ã°ï¼
+    # import_C の中でのウォーニング？
     if @@import_C then
       C_parser.warning( msg )
@@ -508,5 +505,5 @@
   end
 
-  #===  '[' specifier å§ã
+  #===  '[' specifier 始め
   def set_in_specifier
     # p "set_in_specifier"
@@ -514,5 +511,5 @@
   end
 
-  #=== ']' specifier çµãã
+  #=== ']' specifier 終わり
   def unset_in_specifier
     # p "unset_in_specifier"
@@ -520,6 +517,5 @@
   end
 
-  # statement_specifier ã¯æ§æè§£ééä¸­ã§åç
-§ããããã
+  # statement_specifier は構文解釈途中で参照したいため
   @@statement_specifier_stack = []
   def self.add_statement_specifier( ss )
@@ -538,5 +534,5 @@
   end
 
-  #=== ãã¹ã¦ã®æ§æè§£æãå®äºãããã¨ãå ±å
+  #=== すべての構文解析が完了したことを報告
   def self.end_all_parse
     @@b_end_all_parse = true
@@ -2264,5 +2260,5 @@
 module_eval(<<'.,.,', 'bnf.y.rb', 76)
   def _reduce_13(val, _values, result)
-    			# é£æ¥ããæå­åã1ã¤ã®æå­åã«ã¾ã¨ãã
+    			# 連接した文字列を1つの文字列にまとめる
 			str = "\"" + val[0].val.gsub( /\"(.*)\"/, "\\1" ) + val[1].val.gsub( /\"(.*)\"/, "\\1" ) + "\""
 			result = Token.new( str, val[0].file, val[0].lineno, val[0].col )
@@ -3159,5 +3155,5 @@
   def _reduce_153(val, _values, result)
     			val[0].add_param( val[2] )
-			# result = val[0] ä¸è¦
+			# result = val[0] 不要
 		
     result
@@ -3314,5 +3310,5 @@
 				result = val[1]
 			else
-				# ã¨ã©ã¼ï¼ä»®ã§ val[0] ãè¿ã
+				# エラー：仮で val[0] を返す
 				result = val[0]
 			end
@@ -3458,7 +3454,7 @@
     			obj = val[3]
 			if obj.kind_of?( Cell ) || obj.kind_of?( Signature ) || obj.kind_of?( Celltype ) || obj.kind_of?( CompositeCelltype )then
-                                # cell, signature ä»¥å¤ã¯ãæå®å­ãç½®ããªã
+                                # cell, signature 以外は、指定子を置けない
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G1009 unexpected specifier"  )
 			end
@@ -3831,6 +3827,5 @@
 				val[1].check
 			else
-				# mikan é¢æ°ã®é
-åãä»¥ä¸ã®ã¡ãã»ã¼ã¸ã«ãªã
+				# mikan 関数の配列も以下のメッセージになる
 				Generator.error( "G1010 Not function"  )
 				result = nil
@@ -3887,8 +3882,8 @@
   def _reduce_264(val, _values, result)
     			if val[3].kind_of? Port then
-				val[3].set_specifier val[1]  # è¨­å®é åºãã
+				val[3].set_specifier val[1]  # 設定順序あり
 				Celltype.new_port( val[3] )
 			else
-				# Port ä»¥å¤ã§ã¯æå®å­ã¯ã¨ã©ã¼
+				# Port 以外では指定子はエラー
 				Generator.error( "G1012 $1 : cannot put specifier here" , val[1] )
 			end
@@ -4095,5 +4090,5 @@
   def _reduce_297(val, _values, result)
     			val[3].each{ |i|       # i:Decl
-				i.set_kind( :ATTRIBUTE )   # è¨­å®é åºãã
+				i.set_kind( :ATTRIBUTE )   # 設定順序あり
 				i.set_specifier_list( [val[1]] )
 				i.check
@@ -4177,5 +4172,5 @@
   def _reduce_308(val, _values, result)
     			val[3].each{ |i|       # i:Decl
-				i.set_kind( :VAR )   # è¨­å®é åºãã
+				i.set_kind( :VAR )   # 設定順序あり
 				i.set_specifier_list( [val[1]] )
 				i.check
@@ -4458,6 +4453,5 @@
   def _reduce_353(val, _values, result)
     			if val[0].kind_of?( Port ) then
-				CompositeCelltype.new_port( val[0] )   # é
-å»¶ãã¦ç»é²
+				CompositeCelltype.new_port( val[0] )   # 遅延して登録
 			end
 		
@@ -4469,15 +4463,13 @@
   def _reduce_354(val, _values, result)
     			if val[3].kind_of?( Port ) then
-				# port ä»¥å¤ val[3] ã«æå¹ãªå¤ãå
-¥ã£ã¦ããªãã®ã§ãä»¥ä¸ã®ã¡ã½ãããé©ç¨ã§ããªã
-				# ç¾ç¶ port, cell ä»¥å¤ã¯æå®å­ãåãä»ããªã
-				# ï¼ãããå°æ¥ä»ã®æãæå®å­ãåãä»ããå¯è½æ§ãããã®ã§ããã®ä½ç½®ã«è¨è¿°ããï¼
+				# port 以外 val[3] に有効な値が入っていないので、以下のメソッドを適用できない
+				# 現状 port, cell 以外は指定子を受け付けない
+				# （しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する）
 				val[3].set_specifier( Generator.get_statement_specifier )
-				CompositeCelltype.new_port( val[3] )   # é
-å»¶ãã¦ç»é² (set_specifier å¾)
+				CompositeCelltype.new_port( val[3] )   # 遅延して登録 (set_specifier 後)
 			elsif val[3].kind_of?( Cell ) then
-				# Cell.end_of_parse ã«ã¦è¨­å®
+				# Cell.end_of_parse にて設定
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G1013 unexpected specifier"  )
 			end
@@ -4756,5 +4748,5 @@
 			if obj.kind_of?( Cell ) then
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G9999 unexpected specifier"  )
 			end
@@ -4854,6 +4846,5 @@
 
 
-# ãã¡ã¤ã« => INCLUDE("header")ã®é
-å
+# ファイル => INCLUDE("header")の配列
 Include = Hash.new {|hash, key| hash[key] = []}
 
@@ -4909,21 +4900,18 @@
 
 #= TECSIO
-#  Ruby2.0(1.9) å¯¾å¿ã«ä¼´ãå°å
-¥ããã¯ã©ã¹
-#  SJIS ä»¥å¤ã§ã¯ãASCII-8BIT ã¨ãã¦å
-¥åãã
+#  Ruby2.0(1.9) 対応に伴い導入したクラス
+#  SJIS 以外では、ASCII-8BIT として入力する
 class TECSIO
-  def self.foreach(file) # ãã­ãã¯å¼æ° { |line| }
-    pr = Proc.new   # ãã®ã¡ã½ããã®ãã­ãã¯å¼æ°ã pr ã«ä»£å
-¥
+  def self.foreach(file) # ブロック引数 { |line| }
+    pr = Proc.new   # このメソッドのブロック引数を pr に代入
     if $b_no_kcode then
 	  msg = "E".encode $Ruby19_File_Encode
       if( $Ruby19_File_Encode == "Shift_JIS" )
 
-        # Shift JIS ã¯ããã£ãã Windows-31J ã¨ãã¦èª­ã¿è¾¼ã¾ããShift_JIS ã«å¤æãããï¼
-        # ã³ã¡ã³ãç­ã«å«ã¾ãã SJIS ã«ä¸é©åãªæå­ã³ã¼ãã¯ '?' ã¾ãã¯ REPLACEMENT CHARACTER ã«å¤æãããï¼
-        # EUC ã UTF-8 ã§è¨è¿°ããã CDL ãæ··å¨ãã¦ãã¦ããRuby ä¾å¤ãçºçãããã¨ãªãå¦çãé²ãããã¨ãã§ããï¼
-        # æå­ã³ã¼ãæå®ã SJIS ã§ãã£ã¦ãæå­åãªãã©ã«ã®ä¸­ã«ãæå­ã³ã¼ããSJIS ä»¥å¤ã®é ASCII ãå«ã¾ãã¦ããå ´åã
-        # Ruby 1.8 ã® tecsgen ã§ã¯æå­ã³ã¼ãæå®ã«å½±é¿ãªãå¦çããããã®ããRuby 1.9 ä»¥éã§ã¯ '?' ã«ç½®ãæããå¯è½æ§ãããï¼
+        # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる．
+        # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される．
+        # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる．
+        # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
+        # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある．
 
         mode = "r:Windows-31J"
@@ -4949,17 +4937,17 @@
   end
 
-  #=== æå­ã³ã¼ããç¸éããå ´åä¸è´ããã
-  # msg ã¨ str ã®æå­ã³ã¼ããç¸éããå ´åãstr ã msg ã®æå­ã³ã¼ãã«å¤æãã
-  # å¤æä¸å¯ã®æå­ã³ã¼ãã¯ '?' (utf-8 ã®å ´å U+FFFD (REPLACEMENT CHARACTER )) ã«å¤æ
+  #=== 文字コードが相違する場合一致させる
+  # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
+  # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
   #
-  # ãã®ã¡ã½ããã¯ãã¨ã©ã¼ã¡ãã»ã¼ã¸åºåã§ãä½¿ç¨ããã¦ãããã¨ã«æ³¨æï¼
+  # このメソッドは、エラーメッセージ出力でも使用されていることに注意．
   #
   #msg_enc::Encode | String
   def self.str_code_convert( msg, str )
     if $b_no_kcode == false then
-      return str                          # Ruby V1.8 ã¾ã§
+      return str                          # Ruby V1.8 まで
     end
     if msg.encoding != str.encoding then
-      option = { :invalid => :replace, :undef => :replace }   # ä¾å¤ãçºçãããã'?' ã«å¤æãã(utf-8 ã¯ 0xfffd)
+      option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
       # return str.encode( msg.encoding, option )
       str = str.encode( "utf-8", option )
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.y.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.y.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.y.rb	(revision 321)
@@ -6,63 +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: bnf.y.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
 class Generator
 rule
-# ãããã¬ãã«ã®æ§æè¦ç´ ã¯component_description
+# トップレベルの構文要素はcomponent_description
 all: component_description
 
 # Expr
-##########################  å¼  ##########################
-# K&Rã®ææ³(ãã­ã°ã©ãã³ã°è¨èªC ç¬¬2ç ä»é²)ã¨ä¸é¨ç°ãªã
-# argument_expression_list(é¢æ°å¼æ°), assignment_expression(ä»£å
-¥)ããªã
-# å¼ã® result ã¯ããã¹ã¦é
-åã§ç¬¬ä¸è¦ç´ ãè­å¥ã·ã³ãã«ãç¬¬äºè¦ç´ ä»¥ä¸ãå¼æ°
+##########################  式  ##########################
+# K&Rの文法(プログラミング言語C 第2版 付録)と一部異なる
+# argument_expression_list(関数引数), assignment_expression(代入)がない
+# 式の result は、すべて配列で第一要素が識別シンボル、第二要素以下が引数
 
 primary_expression
@@ -92,10 +75,10 @@
         | string_literal_list STRING_LITERAL
 		{
-			# é£æ¥ããæå­åã1ã¤ã®æå­åã«ã¾ã¨ãã
+			# 連接した文字列を1つの文字列にまとめる
 			str = "\"" + val[0].val.gsub( /\"(.*)\"/, "\\1" ) + val[1].val.gsub( /\"(.*)\"/, "\\1" ) + "\""
 			result = Token.new( str, val[0].file, val[0].lineno, val[0].col )
 		}
 
-# é¢æ°å¼ã³åºãã¨å¾ç½®ã¤ã³ã¯ãªã¡ã³ãããã¯ãªã¡ã³ãæ¼ç®å­ããªã
+# 関数呼び出しと後置インクリメント、デクリメント演算子がない
 postfix_expression
         : primary_expression
@@ -107,5 +90,5 @@
 		{ result = [ :OP_REF, val[0], val[2] ] }
 
-# åç½®ã¤ã³ã¯ãªã¡ã³ãããã¯ãªã¡ã³ãæ¼ç®å­ããªã
+# 前置インクリメント、デクリメント演算子がない
 unary_expression
         : postfix_expression
@@ -202,5 +185,5 @@
 
 
-# ã³ã³ãæ¼ç®å­ãä½¿ããªã
+# コンマ演算子が使えない
 expression
         : conditional_expression
@@ -227,9 +210,9 @@
 
 # Types
-##########################  å®£è¨  ##########################
-# å®£è¨ãK&Rã¨ä¸é¨ç°ãªã
-
-# declarationã¯ã»ã«ã®å±æ§ã§ä½¿ããã
-# K&Rã¨ã®éã: storage classãæå®ã§ããªããåãçç¥ã§ããªã
+##########################  宣言  ##########################
+# 宣言もK&Rと一部異なる
+
+# declarationはセルの属性で使われる
+# K&Rとの違い: storage classが指定できない、型が省略できない
 declaration
         : type_specifier_qualifier_list init_declarator_list ';'
@@ -241,12 +224,10 @@
 		}
 
-# declaration_specifiersã¯é¢æ°ã®ãã©ã¡ã¼ã¿ã§ä½¿ããããã
-# type_specifier_qualifier_listã§ååãããããªã
+# declaration_specifiersは関数のパラメータで使われるが、
+# type_specifier_qualifier_listで十分かもしれない
 # Oyama
-# const, volatile ã¯åç¬ã§åã«ãªããªãã®ã§å¤å½¢
-# const ã¨ volatile ãåå±
-ãããã¨ã¯ãªãã®ã§ãç¹°è¿ãæå®ã§ããªãããã«ãã
-# type_specifier ãç¹°è¿ãæå®ã§ããå¿
-è¦ã¯ãªã (singed ãªã©åç¬ã§åã«ã¯ãªããªã)
+# const, volatile は単独で型にならないので変形
+# const と volatile が同居することはないので、繰返し指定できないようにした
+# type_specifier も繰返し指定できる必要はない (singed など単独で型にはならない)
 declaration_specifiers
         : type_specifier
@@ -268,7 +249,7 @@
 		{ val[0].set_initializer( val[2] ) }
 
-# INT8ããä¸ã¯K&Rã«ãªã
+# INT8から下はK&Rにない
 # Oyama
-# signed, unsigned ã¯åç¬ã§åã«ãªããªãã®ã§ãæ§æè¦ç´ ã¨ãã¦åé¢
+# signed, unsigned は単独で型にならないので、構文要素として分離
 type_specifier
         : VOID	{ result = VoidType.new }
@@ -278,5 +259,5 @@
         | enum_specifier
         | TYPE_NAME	{ result = DefinedType.new( val[0].val ) }
-#        | IDENTIFIER	{ result = DefinedType.new( val[0].val ) }   # reduce/reduce conflict ãèµ·ãã£ã¦ãã¾ã
+#        | IDENTIFIER	{ result = DefinedType.new( val[0].val ) }   # reduce/reduce conflict が起こってしまう
         | sign_int_type
         | char_type
@@ -373,9 +354,9 @@
 		}
 
-sign    # TECS ã§ã¯ signed, unsigned åç¬ã§ã¯åã«ã§ããªã
+sign    # TECS では signed, unsigned 単独では型にできない
         : SIGNED	{ result = :SIGNED }
         | UNSIGNED	{ result = :UNSIGNED }
 
-# result[0] :CHAR ãªã©ã®ãã¼ã¯ã³ãresult[1] :CONST, :VOLATILE ãªã©
+# result[0] :CHAR などのトークン、result[1] :CONST, :VOLATILE など
 sign_int_type
         : sign int_type
@@ -386,5 +367,5 @@
         | int_type
 
-# K&Rã®struct_or_union_specifierã«ç¸å½ããããunionã¯ä½¿ããªã
+# K&Rのstruct_or_union_specifierに相当するが、unionは使えない
 struct_specifier		# mikan
         : STRUCT struct_tag '{'
@@ -405,6 +386,5 @@
 			result = val[1]
 		}
-        | STRUCT struct_tag   # mikan struct_tag ã¯ namespace å¯¾å¿ãå¿
-è¦
+        | STRUCT struct_tag   # mikan struct_tag は namespace 対応が必要
 		{
 			StructType.set_define( false )
@@ -421,5 +401,5 @@
 		{ result = StructType.new( val[0].val ) }
 
-# ãã¤ã³ã¿ä¿®é£¾å­ãè¿½å 
+# ポインタ修飾子を追加
 struct_declaration
         :                                type_specifier_qualifier_list struct_declarator_list ';'
@@ -456,8 +436,8 @@
 
 
-# K&Rã®specifier_qualifier_listã¨åã
-# ååãã¾ãããããã£ãã®ã§type_ãä»ãã
+# K&Rのspecifier_qualifier_listと同じ
+# 名前がまぎらわしかったのでtype_を付けた
 type_specifier_qualifier_list
-# Oyama type_specifier ãç¹°ãè¿ãã¦æå®ãããã¨ã¯ãªããªã£ã (sign_int_type ã¨ããããï¼
+# Oyama type_specifier を繰り返して指定することはなくなった (sign_int_type としたため）
 #        : type_specifier type_specifier_qualifier_list
         : type_specifier
@@ -467,5 +447,5 @@
 			result = val[1]
 		}
-# mikan Oyama type_qualifier ã ãã§ã¯åæå®ã«ãªããªã : æ§æã¨ã©ã¼ã¨ãããããæå³ã¨ã©ã¼ã¨ããæ¹ãè¦ªå
+# mikan Oyama type_qualifier だけでは型指定にならない : 構文エラーとするより、意味エラーとした方が親切
 #        | type_qualifier
 
@@ -477,9 +457,9 @@
 		{ result << val[2] }
 
-# ããããã£ã¼ã«ãã¯ä½¿ããªã
+# ビットフィールドは使えない
 struct_declarator
         : declarator
 
-# enumã®ç¨®é¡ãè¿½å 
+# enumの種類を追加
 enum_specifier		# mikan
         : enum_type            '{' enumerator_list '}'
@@ -535,6 +515,5 @@
 			result = val[0]
 		}
-#        | direct_declarator '(' identifier_list ')'  # ããã¯ä½ã®ããã«å¿
-è¦ï¼ 060211
+#        | direct_declarator '(' identifier_list ')'  # これは何のために必要？ 060211
         | direct_declarator '(' ')'
 		{
@@ -569,5 +548,5 @@
         : parameter_list
         | parameter_list ',' '...'
-		# mikan å¯å¤é·ãã©ã¡ã¼ã¿
+		# mikan 可変長パラメータ
 
 parameter_list
@@ -577,9 +556,9 @@
 		{
 			val[0].add_param( val[2] )
-			# result = val[0] ä¸è¦
-		}
-
-
-# ãã©ã¡ã¼ã¿ä¿®é£¾å­ãè¿½å 
+			# result = val[0] 不要
+		}
+
+
+# パラメータ修飾子を追加
 parameter_declaration
 #        : spec_L parameter_specifier_list spec_R declaration_specifiers declarator
@@ -592,11 +571,11 @@
 		}
 
-	# ä»¥ä¸ã¯ã¨ã©ã¼ã¨ãã
-        | declaration_specifiers declarator # parameter_specifier ãªãã¯æ±ããªã
+	# 以下はエラーとする
+        | declaration_specifiers declarator # parameter_specifier なしは扱わない
 		{
 			Generator.error( "G1001 need specifier for \'$1\'" , val[1].get_name )
 			result = nil
 		}
-        | declaration_specifiers	# ä»®å¼æ°ãªãã¯ãã¨ããããæ±ããªã 060210
+        | declaration_specifiers	# 仮引数なしは、とりあえず扱わない 060210
 		{
 			unless val[0].instance_of?( VoidType ) then
@@ -605,6 +584,6 @@
 			result = nil
 		}
-#        | '[' parameter_specifier_list ']' declaration_specifiers # å 060210
-        | parameter_specifier_list_bracket declaration_specifiers # å 060210
+#        | '[' parameter_specifier_list ']' declaration_specifiers # 同 060210
+        | parameter_specifier_list_bracket declaration_specifiers # 同 060210
 		{
 			unless val[1].instance_of?( VoidType ) then
@@ -647,9 +626,9 @@
 				result = val[1]
 			else
-				# ã¨ã©ã¼ï¼ä»®ã§ val[0] ãè¿ã
+				# エラー：仮で val[0] を返す
 				result = val[0]
 			end
 		}
-		# mikan abstract_declarator ã pointer ä»¥å¤ã§ã¯ãã¾ãåããªããã¨ãããã '*' CAST ã®ã¿æã£ã
+		# mikan abstract_declarator が pointer 以外ではうまく動かない、とりあえず '*' CAST のみ救った
 
 abstract_declarator		# mikan
@@ -660,5 +639,5 @@
 direct_abstract_declarator
         : '(' abstract_declarator ')'
-		{ result = val[1] }  # é¢æ°ãã¤ã³ã¿åãæã
+		{ result = val[1] }  # 関数ポインタ型を救う
         | '[' ']'
 		{
@@ -699,5 +678,5 @@
 		}
 
-# assignment_expressionãconstant_expressionã«å¤æ´
+# assignment_expressionをconstant_expressionに変更
 initializer			# mikan
         : constant_expression
@@ -723,8 +702,8 @@
 
 
-##########################  ããããã¯CDLç¬èª  ##########################
-
-#ãããã¬ãã«ã®æ§æè¦å
-#ã³ã³ãã¼ãã³ãè¨è¿°
+##########################  ここからはCDL独自  ##########################
+
+#トップレベルの構文規則
+#コンポーネント記述
 component_description
         : component_description specified_statement
@@ -738,11 +717,11 @@
 			obj = val[3]
 			if obj.kind_of?( Cell ) || obj.kind_of?( Signature ) || obj.kind_of?( Celltype ) || obj.kind_of?( CompositeCelltype )then
-                                # cell, signature ä»¥å¤ã¯ãæå®å­ãç½®ããªã
+                                # cell, signature 以外は、指定子を置けない
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G1009 unexpected specifier"  )
 			end
 		}
-		# ããã¨åãè¨è¿°ã composite_celltype ã«ããã
+		# これと同じ記述が composite_celltype にもある
 
 statement
@@ -760,5 +739,5 @@
         | import_C
         | signature_plugin
-        | error   # ã¨ã©ã¼åå¾©ãã¤ã³ã
+        | error   # エラー回復ポイント
 
 	
@@ -799,5 +778,5 @@
         | IDENTIFIER '[' constant_expression ']' '.' IDENTIFIER '.' IDENTIFIER '=' initializer
 		{  result = [ :NORMAL_ALLOC, val[0], val[2], val[5], val[7], val[9] ] }
-# mikan å°æ¥çãªæ¡å¼µ ('*' ã§ã¾ã¨ãã¦æå®å¯è½ã¨ãã)
+# mikan 将来的な拡張 ('*' でまとめて指定可能とする)
 #        | IDENTIFIER '.' IDENTIFIER '.' '*'        '=' initializer
 #		{  result = [ val[0], val[ ], val[ ], val[ ] ] }
@@ -824,5 +803,5 @@
 
 const_statement
-        : declaration   # å®æ°å®ç¾©
+        : declaration   # 定数定義
 		{
 			val[0].each { |decl|
@@ -879,5 +858,5 @@
 			}
 		}
-		# mikan   typedef_specifier æªå¦ç½®
+		# mikan   typedef_specifier 未処置
 
 
@@ -899,5 +878,5 @@
         : IDENTIFIER
 		{result = Namespace.new(val[0].val)}
-		# namespace ã¤ã³ã¹ã¿ã³ã¹ã« statement ãè¨æ¶ãããããããã§çæ
+		# namespace インスタンスに statement を記憶させるためここで生成
 
 statement_list
@@ -911,5 +890,5 @@
 		{ result = val[0].append!( val[2].val ) }
 
-#ã·ã°ããã£
+#シグニチャ
 signature
         : SIGNATURE signature_name '{' function_head_list '}' ';'
@@ -920,6 +899,5 @@
 		{result = Signature.new( val[0].val ) }
 
-function_head_list     # result:  function_head ã®é
-å
+function_head_list     # result:  function_head の配列
 #        : function_head
 #		{ result = NamedList.new( val[0], "function" ) }
@@ -938,6 +916,5 @@
 				val[1].check
 			else
-				# mikan é¢æ°ã®é
-åãä»¥ä¸ã®ã¡ãã»ã¼ã¸ã«ãªã
+				# mikan 関数の配列も以下のメッセージになる
 				Generator.error( "G1010 Not function"  )
 				result = nil
@@ -955,5 +932,5 @@
 
 
-#ã»ã«ã¿ã¤ã
+#セルタイプ
 celltype
         : CELLTYPE celltype_name '{' celltype_statement_list '}' ';'
@@ -981,8 +958,8 @@
 		{
 			if val[3].kind_of? Port then
-				val[3].set_specifier val[1]  # è¨­å®é åºãã
+				val[3].set_specifier val[1]  # 設定順序あり
 				Celltype.new_port( val[3] )
 			else
-				# Port ä»¥å¤ã§ã¯æå®å­ã¯ã¨ã©ã¼
+				# Port 以外では指定子はエラー
 				Generator.error( "G1012 $1 : cannot put specifier here" , val[1] )
 			end
@@ -995,5 +972,5 @@
         | require
         | factory
-#        | error       # ã¨ã©ã¼åå¾©ãã¤ã³ã  (#513 ç¡éã«ã¼ãã«é¥ãã±ã¼ã¹ãããã®ã§ãããã§ã®ã¨ã©ã¼åå¾©ã¯åããã)
+#        | error       # エラー回復ポイント  (#513 無限ループに陥るケースがあるので、ここでのエラー回復は取りやめ)
 
 celltype_statement_specifier_list
@@ -1012,19 +989,17 @@
 
 alloc_list2
-        : alloc2			{ result = [ val[0] ] }    # åãå£ã®ã¢ã­ã±ã¼ã¿æå®
-        | alloc				{ result = [ val[0] ] }    # å
-é¨ã»ã«ã®ã¢ã­ã±ã¼ã¿æå®
+        : alloc2			{ result = [ val[0] ] }    # 受け口のアロケータ指定
+        | alloc				{ result = [ val[0] ] }    # 内部セルのアロケータ指定
         | alloc_list2 ',' alloc2	{ result << val[2] }
         | alloc_list2 ',' alloc		{ result << val[2] }
 
 alloc2
-        : IDENTIFIER '.' IDENTIFIER '=' initializer    # å
-é¨ã¢ã­ã±ã¼ã¿ (ãããã©åãã¢ã­ã±ã¼ã¿)æå®
+        : IDENTIFIER '.' IDENTIFIER '=' initializer    # 内部アロケータ (デバドラ向きアロケータ)指定
 		{  result = [ :INTERNAL_ALLOC, val[0].val, val[2].val, val[4] ] }
-        | IDENTIFIER '.' IDENTIFIER '<=' initializer   # å¤æ®µãªã¬ã¼ã¢ãã«åãã¢ã­ã±ã¼ã¿æå®
+        | IDENTIFIER '.' IDENTIFIER '<=' initializer   # 多段リレーモデル向きアロケータ指定
 		{  result = [ :RELAY_ALLOC, val[0].val, val[2].val, val[4] ] }
 
 
-#å¼ã³å£ãåãå£
+#呼び口、受け口
 port
         : port_type namespace_signature_name port_name ';'
@@ -1052,5 +1027,5 @@
 
 
-#å±æ§
+#属性
 attribute
         : ATTRIBUTE '{' attribute_declaration_list '}' ';'
@@ -1076,5 +1051,5 @@
 		{
 			val[3].each{ |i|       # i:Decl
-				i.set_kind( :ATTRIBUTE )   # è¨­å®é åºãã
+				i.set_kind( :ATTRIBUTE )   # 設定順序あり
 				i.set_specifier_list( [val[1]] )
 				i.check
@@ -1095,6 +1070,5 @@
         : STRING_LITERAL
 
-#å
-é¨å¤æ°
+#内部変数
 var
         : VAR '{' var_declaration_list '}' ';'
@@ -1118,5 +1092,5 @@
 		{
 			val[3].each{ |i|       # i:Decl
-				i.set_kind( :VAR )   # è¨­å®é åºãã
+				i.set_kind( :VAR )   # 設定順序あり
 				i.set_specifier_list( [val[1]] )
 				i.check
@@ -1128,5 +1102,5 @@
         : SIZE_IS  '(' expression ')'	{ result = [:SIZE_IS,val[2]] }
 
-# ãªã¯ã¯ã¤ã¢
+# リクワイア
 require
         : REQUIRE namespace_identifier '.' IDENTIFIER';'                            # mikan namespace #1
@@ -1139,5 +1113,5 @@
 		}
 
-#ãã¡ã¯ããª
+#ファクトリ
 factory
         : factory_head '{' factory_function_list '}' ';'
@@ -1148,5 +1122,5 @@
 
 factory_function_list
-        :                                         # ç©º
+        :                                         # 空
         | factory_function_list factory_function
 
@@ -1160,5 +1134,5 @@
         : IDENTIFIER
 
-arg_list     # factory ã® write é¢æ°ã®ç¬¬ä¸å¼æ°ä»¥é
+arg_list     # factory の write 関数の第三引数以降
         : IDENTIFIER
 		{ result = [ [ :IDENTIFIER, val[0].val ] ] }
@@ -1170,5 +1144,5 @@
 		{ result << [ :STRING_LITERAL, val[2].val ] }
 
-#ã»ã«çæ
+#セル生成
 cell
         : CELL namespace_celltype_name cell_name '{'
@@ -1176,5 +1150,5 @@
           join_list '}' ';'
 		{ result = Cell.end_of_parse true }
-        | CELL namespace_celltype_name cell_name ';'   # oyama ãã­ãã¿ã¤ãå®£è¨
+        | CELL namespace_celltype_name cell_name ';'   # oyama プロトタイプ宣言
 			{ result = Cell.end_of_parse false }
 
@@ -1188,5 +1162,5 @@
 
 join_list
-        :   # ç©ºè¡  061007
+        :   # 空行  061007
         | join_list specified_join
         | join_list reverse_join
@@ -1231,5 +1205,5 @@
 			Cell.new_join( result, true )
 		}
-        | cae_name '=' initializer ';'     # åæåå­ï¼ '{', '}' ãå¯
+        | cae_name '=' initializer ';'     # 初期化子： '{', '}' も可
 		{
 			result = Join.new( val[0].val, nil, val[2] )
@@ -1275,5 +1249,5 @@
         : constant_expression
 
-#è¤åç¨®
+#複合種
 composite_celltype
         : COMPOSITE composite_celltype_name '{' composite_celltype_statement_list '}' ';'
@@ -1295,6 +1269,5 @@
 		{
 			if val[0].kind_of?( Port ) then
-				CompositeCelltype.new_port( val[0] )   # é
-å»¶ãã¦ç»é²
+				CompositeCelltype.new_port( val[0] )   # 遅延して登録
 			end
 		}
@@ -1302,15 +1275,13 @@
 		{
 			if val[3].kind_of?( Port ) then
-				# port ä»¥å¤ val[3] ã«æå¹ãªå¤ãå
-¥ã£ã¦ããªãã®ã§ãä»¥ä¸ã®ã¡ã½ãããé©ç¨ã§ããªã
-				# ç¾ç¶ port, cell ä»¥å¤ã¯æå®å­ãåãä»ããªã
-				# ï¼ãããå°æ¥ä»ã®æãæå®å­ãåãä»ããå¯è½æ§ãããã®ã§ããã®ä½ç½®ã«è¨è¿°ããï¼
+				# port 以外 val[3] に有効な値が入っていないので、以下のメソッドを適用できない
+				# 現状 port, cell 以外は指定子を受け付けない
+				# （しかし将来他の文も指定子を受け付ける可能性があるので、この位置に記述する）
 				val[3].set_specifier( Generator.get_statement_specifier )
-				CompositeCelltype.new_port( val[3] )   # é
-å»¶ãã¦ç»é² (set_specifier å¾)
+				CompositeCelltype.new_port( val[3] )   # 遅延して登録 (set_specifier 後)
 			elsif val[3].kind_of?( Cell ) then
-				# Cell.end_of_parse ã«ã¦è¨­å®
+				# Cell.end_of_parse にて設定
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G1013 unexpected specifier"  )
 			end
@@ -1322,5 +1293,5 @@
         | internal_cell
         | export_join
-#        | error       # ã¨ã©ã¼åå¾©ãã¤ã³ã  (#513 ç¡éã«ã¼ãã«é¥ãã±ã¼ã¹ãããã®ã§ãããã§ã®ã¨ã©ã¼åå¾©ã¯åããã)
+#        | error       # エラー回復ポイント  (#513 無限ループに陥るケースがあるので、ここでのエラー回復は取りやめ)
 
 composite_celltype_statement_specifier_list
@@ -1345,5 +1316,5 @@
 		}
 
-#å±æ§
+#属性
 composite_attribute
         : ATTRIBUTE '{' composite_attribute_declaration_list '}' ';'
@@ -1376,19 +1347,17 @@
 
 internal_join_list
-        :   # ç©ºè¡  061007
+        :   # 空行  061007
         | internal_join_list specified_join
         | internal_join_list external_join
 
-external_join  # cell å
-ã«è¨è¿°ããå¼ã³å£ã®å¤é¨çµå
+external_join  # cell 内に記述する呼び口の外部結合
         : internal_cell_elem_name '=>' COMPOSITE '.' export_name ';'
 		{	Cell.external_join( val[0].val, val[4].val, true )	}
         | internal_cell_elem_name '=>' export_name ';'
 		{	Cell.external_join( val[0].val, val[2].val, false )	}
-        # ä»¥åã®ææ³ã§ã¯ãå¼ã³å£å´ã cell ã®å¤ã«è¨è¿°ãã¦ãã
-        # ãã®æã®å®è£
-ã
-
-export_join    # cell å¤ã«è¨è¿°ããåãå£ã®å¤é¨çµå
+        # 以前の文法では、呼び口側も cell の外に記述していた
+        # その時の実装を
+
+export_join    # cell 外に記述する受け口の外部結合
         : export_name '=>' internal_ref_cell_name '.' internal_cell_elem_name ';'
 		{
@@ -1411,5 +1380,5 @@
         : IDENTIFIER
 
-# ãªã¼ã¸ã§ã³
+# リージョン
 region
         : spec_L region_specifier_list spec_R REGION region_name '{'  region_statement '}' ';'
@@ -1426,13 +1395,13 @@
         : IN_THROUGH '(' plugin_name ',' plugin_arg ')'
 		{ Region.new_in_through( val[2].val, val[4].val ) }
-        | IN_THROUGH '(' ')'   # in è¨±å¯
+        | IN_THROUGH '(' ')'   # in 許可
 		{ Region.new_in_through }
         | OUT_THROUGH '(' plugin_name ',' plugin_arg ')'
 		{ Region.new_out_through( val[2].val, val[4].val ) }
-        | OUT_THROUGH '(' ')'  # out è¨±å¯
+        | OUT_THROUGH '(' ')'  # out 許可
 		{ Region.new_out_through() }
         | TO_THROUGH '(' namespace_region_name ',' plugin_name ',' plugin_arg ')'
 		{ Region.new_to_through( val[2], val[4].val, val[6].val ) }
-        | TO_THROUGH '('namespace_region_name ')'  # to è¨±å¯
+        | TO_THROUGH '('namespace_region_name ')'  # to 許可
 		{ Region.new_to_through( val[2], nil, nil ) }
         | NODE
@@ -1461,5 +1430,5 @@
 			if obj.kind_of?( Cell ) then
 			else
-              Generator.get_statement_specifier   # ã¯ãªã¢
+              Generator.get_statement_specifier   # クリア
               Generator.error( "G9999 unexpected specifier"  )
 			end
@@ -1480,10 +1449,8 @@
 namespace_region_name
          : :IDENTIFIER
-		{ result = [ val[0].val ] }  # mikan é
-åã§ããå¿
-è¦ã¯ãªã
+		{ result = [ val[0].val ] }  # mikan 配列である必要はない
 #        : namespace_identifier
 
-# æå®å­ã®æ¬å¼§ (in, out ãªã©ã®ã­ã¼ã¯ã¼ãåãæ¿ãã®ããåé¢)
+# 指定子の括弧 (in, out などのキーワード切り替えのため分離)
 spec_L
         : '['  { set_in_specifier }
@@ -1620,6 +1587,5 @@
   }
 
-  # æå®å­ '[]' å
-ã§ã®ã¿ä½¿ç¨ã§ããã­ã¼ã¯ã¼ã
+  # 指定子 '[]' 内でのみ使用できるキーワード
   RESERVED2 = {
     # specifier
@@ -1638,5 +1604,5 @@
     # port (entry)
     'inline' => :INLINE,
-    'ref_desc' => :REF_DESC,   # call ãå¯
+    'ref_desc' => :REF_DESC,   # call も可
 
     # port (call)
@@ -1682,29 +1648,29 @@
   }
 
-  # åå¸°çãªãã¼ãµã®ããã®ã¹ã¿ãã¯
+  # 再帰的なパーサのためのスタック
   @@generator_nest = -1
   @@generator_stack = []
   @@current_locale = []
 
-  # import_C ä¸­ã§ãã
+  # import_C 中である
   @@import_C = false
 
-  # ãã¹ã¦ã®æ§æè§£æãå®äºãã
+  # すべての構文解析が完了した
   @@b_end_all_parse = false
 
   def self.parse( file_name, plugin = nil, b_reuse = false )
-    # ãã¼ãµã¤ã³ã¹ã¿ã³ã¹ãçæ(å¥ãã¼ãµã§èª­ã¿è¾¼ã)
+    # パーサインスタンスを生成(別パーサで読み込む)
     parser = Generator.new
 
-    # plugin ãã import ããã¦ããå ´åã® plugin è¨­å®
+    # plugin から import されている場合の plugin 設定
     parser.set_plugin plugin
 
-    # reuse ãã©ã°ãè¨­å®
+    # reuse フラグを設定
     parser.set_reuse b_reuse
 
-    # cdl ããã¼ã¹
+    # cdl をパース
     parser.parse( [file_name] )
 
-    # çµæåããã¼ãµã¹ã¿ãã¯ãæ»ã
+    # 終期化　パーサスタックを戻す
     parser.finalize
   end
@@ -1726,5 +1692,5 @@
   def self.get_plugin
     if @@generator_stack[@@generator_nest] then
-      # tecsgen å¼æ°ã® cdl ã import ãããå ´åã¯ nil
+      # tecsgen 引数の cdl が import される場合は nil
       return @@generator_stack[@@generator_nest].get_plugin
     else
@@ -1743,5 +1709,5 @@
   def self.is_reuse?
     if @@generator_stack[@@generator_nest] then
-      # tecsgen å¼æ°ã® cdl ã import ãããå ´åã¯ nil
+      # tecsgen 引数の cdl が import される場合は nil
       return @@generator_stack[@@generator_nest].is_reuse?
     else
@@ -1773,5 +1739,5 @@
       b_in_string = false
 
-      # euc ã®ã³ã¡ã³ãã utf8 ã¨ãã¦æ±ãã¨ãã³ã¡ã³ãã®çµãããèª¤ãåé¡ã®å¯¾ç­
+      # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策
       TECS_LANG::set_kcode_binary
 
@@ -1783,5 +1749,5 @@
           TECSIO.foreach(file) {|line|
             col = 1
-#            line.rstrip!         æ¹è¡å«ãæå­åãæ±ãããã«ãªã£ãã®ã§ãããã§ç©ºç½ãåãé¤ããªããªã£ã
+#            line.rstrip!         改行含む文字列を扱うようになったので、ここで空白を取り除けなくなった
 
             until line.empty?
@@ -1789,11 +1755,10 @@
               if b_in_comment
                 case line
-                  # ã³ã¡ã³ãçµäº
+                  # コメント終了
                 when /\A\*\//
                   b_in_comment = false
                 when /\A./
                   ;
-                when /\s+/     # line.rstrip! ãæ­¢ãããã \n ãªã©ã®ç©ºç½æå­ã¨ã¾ã£ã¡ããã«ã¼ã«ãå¿
-è¦ã«ãªã£ã
+                when /\s+/     # line.rstrip! を止めたため \n などの空白文字とまっちするルールが必要になった
                   ;
                 end
@@ -1803,9 +1768,9 @@
                   @q <<  [:STRING_LITERAL, Token.new(string, file, lineno, col)]
                   b_in_string = false
-                elsif line =~ /\A.*\\\n/     # æ¹è¡ \n ã¯ '.' ã«ãããããªã
+                elsif line =~ /\A.*\\\n/     # 改行 \n は '.' にマッチしない
                   string += $&
-                elsif line =~ /\A.*\n/     # æ¹è¡ \n ã¯ '.' ã«ãããããªã
+                elsif line =~ /\A.*\n/     # 改行 \n は '.' にマッチしない
                   string += line
-                  # ãã®ä½ç½®ã§ã¯ error ã¡ã½ããã¯ä½¿ããªã (token èª­åºãå)
+                  # この位置では error メソッドは使えない (token 読出し前)
                   puts "error: #{file} line #{lineno}: string literal has newline without escape"
                   @@n_error += 1
@@ -1813,57 +1778,57 @@
               else
                 case line
-                # ç©ºç½ãããªãã­ã»ã¹ãã£ã¬ã¯ãã£ã
+                # 空白、プリプロセスディレクティブ
                 when /\A\s+/
                   ;
-                # è­å¥å­
+                # 識別子
                 when /\A[a-zA-Z_]\w*/
                   word = $&
                   @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)]
-                # 16 é²æ°å®æ°
+                # 16 進数定数
                 when /\A0x[0-9A-Fa-f]+/
                   @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)]
-                # 8 é²æ°å®æ°
+                # 8 進数定数
                 when /\A0[0-7]+/
                   @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)]
-                # æµ®åå°æ°å®æ°
+                # 浮動小数定数
                 when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/
                   @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)]
-                # æ´æ°å®æ°
+                # 整数定数
                 when /\A\d+/
                   @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)]
-                # æå­å®æ°
+                # 文字定数
                 when /\A'(?:[^'\\]|\\.)'/
                   @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)]
-                # æå­å
-#                "#include  #include #include \"../systask/logtask.cfg\"       æå¾ã® " å¿ã)ã§ç¡éã«ã¼ã
+                # 文字列
+#                "#include  #include #include \"../systask/logtask.cfg\"       最後の " 忘れ)で無限ループ
 #                when /\A"(?:[^"\\]+|\\.)*"/
-                when /\A"(?:[^"\\]|\\.)*"/   # ããã¯ãã¾ãè¡ãããã 
+                when /\A"(?:[^"\\]|\\.)*"/   # これはうまく行くようだ
                   @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)]
-                # æå­å (æ¹è¡ãã)
+                # 文字列 (改行あり)
                 when /\A"(?:[^"\\]|\\.)*\\\n$/
                   string = $&
                   b_in_string = true
-                # æå­å (æ¹è¡ãã, escape ãªã)
+                # 文字列 (改行あり, escape なし)
                 when /\A("(?:[^"\\]|\e\.)*)\n$/
                   string = $1 + "\\\n"
                   b_in_string = true
-                  # ãã®ä½ç½®ã§ã¯ error ã¡ã½ããã¯ä½¿ããªã (token èª­åºãå) # mikan cdl_error ã§ã¯ãªã
+                  # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない
                   puts "error: #{file} line #{lineno}: string literal has newline without escape"
                   @@n_error += 1
-                # å±±æ¬å¼§ã§å²ã¾ããæå­å
+                # 山括弧で囲まれた文字列
                 when /\A<[0-9A-Za-z_\. \/]+>/   # AB: angle bracke
                   @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)]
-                # è¡ã³ã¡ã³ã
+                # 行コメント
                 when /\A\/\/.*$/
-                  # èª­ã¿é£ã°ãã ã
-                # ã³ã¡ã³ãéå§
+                  # 読み飛ばすだけ
+                # コメント開始
                 when /\A\/\*/
                   b_in_comment = true
-                # '>>', '<<' ãªã©
+                # '>>', '<<' など
                 when /\A>>/, /\A<</, /\A==/, /\A!=/, /\A\&\&/, /\A\|\|/
                   @q << [$&, Token.new($&, file, lineno, col)]
                 when /\A::/, /\A=>/, /\A<=/, /\A>=/
                   @q << [$&, Token.new($&, file, lineno, col)]
-                # '(', ')' ãªã©ä¸æå­ã®è¨å·ãã¾ãã¯æªç¥ã®è¨å·
+                # '(', ')' など一文字の記号、または未知の記号
                 when /\A./
                   @q << [$&, Token.new($&, file, lineno, col)]
@@ -1889,5 +1854,5 @@
       }
 
-      # çµäºã®å°
+      # 終了の印
       @q << nil
 
@@ -1909,15 +1874,14 @@
 
       if token[0] == :IDENTIFIER then
-        # TYPE_NAME ãã¼ã¯ã³ã¸ç½®æã
+        # TYPE_NAME トークンへ置換え
         if Namespace.is_typename?( token[1].val ) then
           token[0] = :TYPE_NAME
         elsif @in_specifier && RESERVED2[ token[1].val.to_s ] then
-          # æå®å­ã­ã¼ã¯ã¼ãï¼ '[', ']' å
-ã§ã®ã¿æå¹)
+          # 指定子キーワード（ '[', ']' 内でのみ有効)
           token[0] = RESERVED2[ token[1].val.to_s ]
         end
       end
 
-      if $debug then     # 070107 token ç¡å¹æãããéããªããããã (through å¯¾å¿ -d ã®æã«ä¾å¤çºç) 
+      if $debug then     # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 
         locale = @@current_locale[@@generator_nest]
         if token then
@@ -1950,5 +1914,5 @@
   @@n_warning = 0
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¨ã©ã¼çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でエラー発生は不適切）
   def self.error( msg, *arg )
     locale = nil
@@ -1960,5 +1924,5 @@
 
     msg = TECSMsg.get_error_message( msg )
-    # $1, $2, ... ã arg ã§ç½®æ
+    # $1, $2, ... を arg で置換
     count = 1
     arg.each{ |a|
@@ -1968,13 +1932,13 @@
     }
 
-    # import_C ã®ä¸­ã§ã®ã¨ã©ã¼ï¼
+    # import_C の中でのエラー？
     if @@import_C then
       C_parser.error( msg )
     else
 
-      # Node ã®è¨æ¶ãã ä½ç½® (locale) ãä½¿ç¨ããå ´åãå¤æ´ä»¥åã«æ¯ã¹ã
-      # åé¡çºçç®æã¨ç°ãªãä½ç½®ã«ã¨ã©ã¼ãåºããããæ§æè§£æä¸­ã®ã¨ã©ã¼
-      # ã¯ãè§£æä¸­ã®ä½ç½®ãåºåããï¼(new_XXX ã§ owner ãå­è¦ç´ ã®ãã§ã
-      # ã¯ãããã¨ owner ã®è¡çªå·ãåºã¦ãã¾ãç¹ã§ããããçãã¦ãã)
+      # Node の記憶する 位置 (locale) を使用した場合、変更以前に比べ、
+      # 問題発生箇所と異なる位置にエラーが出るため、構文解析中のエラー
+      # は、解析中の位置を出力する．(new_XXX で owner が子要素のチェッ
+      # クをすると owner の行番号が出てしまう点で、ずれが生じている)
 
       if @@b_end_all_parse == false || locale == nil then
@@ -1989,5 +1953,5 @@
   end
 
-  # ãã®ã¡ã½ããã¯æ§æè§£æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¦ã©ã¼ãã³ã°çºçã¯ä¸é©åï¼
+  # このメソッドは構文解析、意味解析からのみ呼出し可（コード生成でウォーニング発生は不適切）
   def self.warning( msg, *arg )
     locale = nil
@@ -1999,5 +1963,5 @@
 
     msg = TECSMsg.get_warning_message( msg )
-    # $1, $2, ... ã arg ã§ç½®æ
+    # $1, $2, ... を arg で置換
     count = 1
     arg.each{ |a|
@@ -2007,5 +1971,5 @@
     }
 
-    # import_C ã®ä¸­ã§ã®ã¦ã©ã¼ãã³ã°ï¼
+    # import_C の中でのウォーニング？
     if @@import_C then
       C_parser.warning( msg )
@@ -2034,5 +1998,5 @@
   end
 
-  #===  '[' specifier å§ã
+  #===  '[' specifier 始め
   def set_in_specifier
     # p "set_in_specifier"
@@ -2040,5 +2004,5 @@
   end
 
-  #=== ']' specifier çµãã
+  #=== ']' specifier 終わり
   def unset_in_specifier
     # p "unset_in_specifier"
@@ -2046,6 +2010,5 @@
   end
 
-  # statement_specifier ã¯æ§æè§£ééä¸­ã§åç
-§ããããã
+  # statement_specifier は構文解釈途中で参照したいため
   @@statement_specifier_stack = []
   def self.add_statement_specifier( ss )
@@ -2064,5 +2027,5 @@
   end
 
-  #=== ãã¹ã¦ã®æ§æè§£æãå®äºãããã¨ãå ±å
+  #=== すべての構文解析が完了したことを報告
   def self.end_all_parse
     @@b_end_all_parse = true
@@ -2072,6 +2035,5 @@
 
 
-# ãã¡ã¤ã« => INCLUDE("header")ã®é
-å
+# ファイル => INCLUDE("header")の配列
 Include = Hash.new {|hash, key| hash[key] = []}
 
@@ -2127,21 +2089,18 @@
 
 #= TECSIO
-#  Ruby2.0(1.9) å¯¾å¿ã«ä¼´ãå°å
-¥ããã¯ã©ã¹
-#  SJIS ä»¥å¤ã§ã¯ãASCII-8BIT ã¨ãã¦å
-¥åãã
+#  Ruby2.0(1.9) 対応に伴い導入したクラス
+#  SJIS 以外では、ASCII-8BIT として入力する
 class TECSIO
-  def self.foreach(file) # ãã­ãã¯å¼æ° { |line| }
-    pr = Proc.new   # ãã®ã¡ã½ããã®ãã­ãã¯å¼æ°ã pr ã«ä»£å
-¥
+  def self.foreach(file) # ブロック引数 { |line| }
+    pr = Proc.new   # このメソッドのブロック引数を pr に代入
     if $b_no_kcode then
 	  msg = "E".encode $Ruby19_File_Encode
       if( $Ruby19_File_Encode == "Shift_JIS" )
 
-        # Shift JIS ã¯ããã£ãã Windows-31J ã¨ãã¦èª­ã¿è¾¼ã¾ããShift_JIS ã«å¤æãããï¼
-        # ã³ã¡ã³ãç­ã«å«ã¾ãã SJIS ã«ä¸é©åãªæå­ã³ã¼ãã¯ '?' ã¾ãã¯ REPLACEMENT CHARACTER ã«å¤æãããï¼
-        # EUC ã UTF-8 ã§è¨è¿°ããã CDL ãæ··å¨ãã¦ãã¦ããRuby ä¾å¤ãçºçãããã¨ãªãå¦çãé²ãããã¨ãã§ããï¼
-        # æå­ã³ã¼ãæå®ã SJIS ã§ãã£ã¦ãæå­åãªãã©ã«ã®ä¸­ã«ãæå­ã³ã¼ããSJIS ä»¥å¤ã®é ASCII ãå«ã¾ãã¦ããå ´åã
-        # Ruby 1.8 ã® tecsgen ã§ã¯æå­ã³ã¼ãæå®ã«å½±é¿ãªãå¦çããããã®ããRuby 1.9 ä»¥éã§ã¯ '?' ã«ç½®ãæããå¯è½æ§ãããï¼
+        # Shift JIS は、いったん Windows-31J として読み込ませ、Shift_JIS に変換させる．
+        # コメント等に含まれる SJIS に不適切な文字コードは '?' または REPLACEMENT CHARACTER に変換される．
+        # EUC や UTF-8 で記述された CDL が混在していても、Ruby 例外が発生することなく処理を進めることができる．
+        # 文字コード指定が SJIS であって、文字列リテラルの中に、文字コードがSJIS 以外の非 ASCII が含まれている場合、
+        # Ruby 1.8 の tecsgen では文字コード指定に影響なく処理されたものが、Ruby 1.9 以降では '?' に置き換わる可能性がある．
 
         mode = "r:Windows-31J"
@@ -2167,17 +2126,17 @@
   end
 
-  #=== æå­ã³ã¼ããç¸éããå ´åä¸è´ããã
-  # msg ã¨ str ã®æå­ã³ã¼ããç¸éããå ´åãstr ã msg ã®æå­ã³ã¼ãã«å¤æãã
-  # å¤æä¸å¯ã®æå­ã³ã¼ãã¯ '?' (utf-8 ã®å ´å U+FFFD (REPLACEMENT CHARACTER )) ã«å¤æ
+  #=== 文字コードが相違する場合一致させる
+  # msg と str の文字コードが相違する場合、str を msg の文字コードに変換する
+  # 変換不可の文字コードは '?' (utf-8 の場合 U+FFFD (REPLACEMENT CHARACTER )) に変換
   #
-  # ãã®ã¡ã½ããã¯ãã¨ã©ã¼ã¡ãã»ã¼ã¸åºåã§ãä½¿ç¨ããã¦ãããã¨ã«æ³¨æï¼
+  # このメソッドは、エラーメッセージ出力でも使用されていることに注意．
   #
   #msg_enc::Encode | String
   def self.str_code_convert( msg, str )
     if $b_no_kcode == false then
-      return str                          # Ruby V1.8 ã¾ã§
+      return str                          # Ruby V1.8 まで
     end
     if msg.encoding != str.encoding then
-      option = { :invalid => :replace, :undef => :replace }   # ä¾å¤ãçºçãããã'?' ã«å¤æãã(utf-8 ã¯ 0xfffd)
+      option = { :invalid => :replace, :undef => :replace }   # 例外を発生させず、'?' に変換する(utf-8 は 0xfffd)
       # return str.encode( msg.encoding, option )
       str = str.encode( "utf-8", option )
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("::")
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/ctypes.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/ctypes.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/ctypes.rb	(revision 321)
@@ -6,69 +6,54 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: ctypes.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
-# CType ã¯ C_parser ã§å®ç¾©ãããåãæ±ã CIntType, CFloatType ãªã©ã« include ãããã®
-# CIntType ã¯ IntType ãç¶æ¿ãããªã©ãC ã®åã§ã¯ TECS ã®åãç¶æ¿ãã
+# CType は C_parser で定義される型を扱う CIntType, CFloatType などに include するもの
+# CIntType は IntType を継承するなど、C の型では TECS の型を継承する
 module CType
 
-  #=== æ§æè¦ç´  type_specifier ãè¤æ°æå®ããã¦ããå ´åã« merge ãã
-  # merge ã¯ const(CIntType) unsigned(CIntTtype), long(CIntType), ãªã©ã¨ä»ã®åããã¼ã¸ãã
-  # const, unsigned, long ãªã©ã¯ãåä½ã§ int (CIntType) åã«ãªããã
+  #=== 構文要素 type_specifier が複数指定されている場合に merge する
+  # merge は const(CIntType) unsigned(CIntTtype), long(CIntType), などと他の型をマージする
+  # const, unsigned, long などは、単体で int (CIntType) 型になりうる
   #
-  # mikan C ã®ææ³ãå³å¯ã«ã¯ãã§ãã¯ãã¦ããªã  long struct ç­ãã§ãã¦ãã¾ã
+  # mikan C の文法を厳密にはチェックしていない  long struct 等もできてしまう
   def merge another
 
     # p "self: #{self.class} kind_of( IntType ): #{self.kind_of?( IntType )}  another: #{another.class}"
 
-    # signed, unsigned ã Symbol ã¨ãã¦æ¥ãäºã¯ç¡ããªã£ã
+    # signed, unsigned が Symbol として来る事は無くなった
     # if another.instance_of? Symbol then
-    #   # ããã§ Symbol ã¯ :SIGNED, :UNSIGNED ã®ãããã
+    #   # ここで Symbol は :SIGNED, :UNSIGNED のいずれか
     # 
-    #   # CIntType ãï¼
+    #   # CIntType か？
     #   if self.instance_of? CIntType then
     #     self.set_sign another
@@ -84,6 +69,6 @@
           @bit_size = -5  # long long
         else
-          # self ã¯ int åãanother ã® bit_size ã (int ä»¥å¤ã§ããã°)ãã¡ãã«ãã
-          # mikan ä¸è¨ä»¥å¤ã§ ä¸¡æ¹ -3 ã§ãªããã°ãæ¬æ¥ã¨ã©ã¼
+          # self は int 型、another の bit_size が (int 以外であれば)そちらにする
+          # mikan 上記以外で 両方 -3 でなければ、本来エラー
           @bit_size = another.get_bit_size
         end
@@ -91,10 +76,10 @@
 
       if another.get_sign then
-        # another ã§ sign ãæå®ããã¦ããã°ããã¡ãã®ãã®ãæ¡ç¨ãã mikan çç¾ã®ãã§ãã¯
+        # another で sign が指定されていれば、そちらのものを採用する mikan 矛盾のチェック
         @sign = another.get_sign
       end
 
 #      if another.get_qualifier then
-#        # another ã§ qualifier ãæå®ããã¦ããã°ããã¡ãã®ãã®ãæ¡ç¨ãã mikan çç¾ã®ãã§ãã¯
+#        # another で qualifier が指定されていれば、そちらのものを採用する mikan 矛盾のチェック
 #        @qualifier = another.get_qualifier
 #      end
@@ -110,5 +95,5 @@
       return another.merge self
     elsif self.instance_of?( CDefinedType ) then
-      # mikan unsigned ãªã©ã¨ã® merge ã®ä¸æ­£æ¤åº
+      # mikan unsigned などとの merge の不正検出
       if another.is_const? then
         @b_const = true
@@ -135,5 +120,5 @@
     else
       # mikan long double
-      #   TECS ã«ã¯ long double ãè¡¨ç¾ããææ®µããªã (double80_t ãå®ç¾©ããã°ããã?)
+      #   TECS には long double を表現する手段がない (double80_t を定義すればよいか?)
 #      cdl_warning( "C1003 $1 & $2 incompatible (\'long double\' is not supported.). Treated as $3." , self.class, another.class, self.class )
       cdl_warning( "W9999 $1 & $2 incompatible (\'long double\' is not supported.). Treated as $3." , self.get_type_str, another.get_type_str, self.get_type_str )
@@ -142,7 +127,6 @@
   end
 
-  #=== qualifier ãè¨­å®ãã
-  #     å
-ã® Type ã¯ã©ã¹ã§ã¯çç¾ãã§ãã¯ããªãï¼TECSã®æ¬æ¥ã®ææ³ã§ã¯éè¤æå®ã§ããªãããï¼
+  #=== qualifier を設定する
+  #     元の Type クラスでは矛盾チェックしない（TECSの本来の文法では重複指定できないため）
   def set_qualifier( qual )
 
@@ -181,5 +165,5 @@
 
   def initialize( bit_size )
-    #p super.class   mikan super.class ã Symbol ã ããªãï¼
+    #p super.class   mikan super.class が Symbol だ、なぜ？
     super( bit_size )
   end
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb	(revision 321)
@@ -6,49 +6,34 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: expression.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
@@ -71,5 +56,5 @@
 
   #=== Expression# to_s
-  # C è¨èªã½ã¼ã¹åãã®æå­åãçæ (globa_name)
+  # C 言語ソース向きの文字列を生成 (globa_name)
   def to_s
     elements_to_s( @elements )
@@ -77,5 +62,5 @@
 
   #=== Expression# to_str
-  # C è¨èªã½ã¼ã¹åãã®æå­åãçæ (globa_name)
+  # C 言語ソース向きの文字列を生成 (globa_name)
   def to_str( name_list, pre, post )
     elements_to_s( @elements, name_list, pre, post )
@@ -83,27 +68,25 @@
 
   #=== Expression#to_CDL_str
-  # CDL è¡¨ç¾ã®æå­åãçæ
+  # CDL 表現の文字列を生成
   def to_CDL_str
     return to_s
   end
 
-  #=== å®æ°å¼ã¨ãã¦è©ä¾¡ãã(ãã©ã¤ãã¦ã¿ã)
+  #=== 定数式として評価する(トライしてみる)
   #
-  # ãã®ã¡ã½ããã¯ãå®æ°å¼ãè©ä¾¡ãã
-  # ã»attribute, var ã®åæåå­
-  # ã»size_is, count_is å¼æ°
-  # ã»é
-åã®æ·»æ°
+  # このメソッドは、定数式を評価する
+  # ・attribute, var の初期化子
+  # ・size_is, count_is 引数
+  # ・配列の添数
   #
-  # name_list(NamedList|Nil): å¼ããåç
-§å¯è½ãªãªã¹ãï¼
-  # NamedList ã®è¦ç´ ã¯  size_is, count_is ã®å¼æ°è©ä¾¡ã®å ´å ParamDecl (é¢æ°ä»®å¼æ°)
+  # name_list(NamedList|Nil): 式から参照可能なリスト．
+  # NamedList の要素は  size_is, count_is の引数評価の場合 ParamDecl (関数仮引数)
   #
-  # name_list2(NamedList|Nil) : NamedList ã®è¦ç´ ã¯ Decl (attribute, var) ã§ããï¼çç¥æ nil
+  # name_list2(NamedList|Nil) : NamedList の要素は Decl (attribute, var) である．省略時 nil
   # 
-  # RETURN: è©ä¾¡ããå®æ°ï¼è©ä¾¡ã§ããªãã£ãå ´åã¯ nil ãè¿ã
+  # RETURN: 評価した定数．評価できなかった場合は nil を返す
   #
-  # åã¯ get_type ã§ãè©ä¾¡ããï¼å®æ°ã¨ãã¦æ±ããããªãã¨ãã«ä½¿ç¨ã§ããï¼
-  # Array ãè¿ãã®ã¯ attr{ int *a = {1, 2, 3}; int *b = a; }; ã® b ã®å³è¾ºãè©ä¾¡ããå ´å
+  # 型は get_type で、評価する（定数として求められないときに使用できる）
+  # Array を返すのは attr{ int *a = {1, 2, 3}; int *b = a; }; の b の右辺を評価した場合
 
   def eval_const( name_list, name_list2 = nil )
@@ -116,26 +99,26 @@
       return val.to_i
     elsif val.kind_of? PointerVal then
-      return val.to_i           # mikan ã¨ã©ã¼ V1008 ãçºçãã¦ãã¾ã
+      return val.to_i           # mikan エラー V1008 が発生してしまう
       # elsif val.kind_of? EnumVal then
       # enum mikan
     else
-      # C_EXP, Array ã¾ãã¯ nil ï¼ãã®ã¾ã¾è¿ã
+      # C_EXP, Array または nil ：そのまま返す
       return val
     end
   end
 
-  #=== å®æ°å¼ã¨ãã¦è©ä¾¡ãã2(ãã©ã¤ãã¦ã¿ã)
+  #=== 定数式として評価する2(トライしてみる)
   #
-  # IntegerVal, FloatVal ããã®ã¾ã¾è¿ãï¼eval_const ã§ã¯ Integer, Float ã«å¤æï¼
+  # IntegerVal, FloatVal をそのまま返す（eval_const では Integer, Float に変換）
   def eval_const2( name_list, name_list2 = nil, nest = 0 )
     val = elements_eval_const( @elements, name_list, name_list2, nest )
   end
 
-  #=== å¼ã®åãè©ä¾¡ãã
+  #=== 式の型を評価する
   #
-  # eval_const ã§å¤ãå¾ãããªãå ´åãåãå°åºå¯è½ã§ããã°åãå¾ã
-  # param ãå«ãã å¼ã¯å®æ°å¤ãæ±ããããªãããåãå¾ããã¨ã¯ã§ãã
-  # æªå®ç¾©å¤æ°ãå«ãã åã¯ãå¾ããã¨ãã§ããªã (ããã¼åå®ç¾©ãè¿ã)
-  def get_type( namedList )        # ååç©ºéã® NamedList ãæå®
+  # eval_const で値が得られない場合、型を導出可能であれば型を得る
+  # param を含んだ式は定数値を求められないが、型を得ることはできる
+  # 未定義変数を含んだ型は、得ることができない (ダミー型定義が返る)
+  def get_type( namedList )        # 名前空間の NamedList を指定
     elements_get_type( @elements, namedList )
   end
@@ -150,5 +133,5 @@
 
   def show_tree( indent )
-    # mikan override ãã¦ãã¾ã£ã print ãå¼åºãæ¹æ³ãããããªãã®ã§ãããã
+    # mikan override してしまった print を呼出す方法がわからないのでこうした
     str = ""
     indent.times { str += "  " }
@@ -158,9 +141,9 @@
 ## private
 
-  #=== å¼ãæå­åã«å¤æ
-  #name_list:: attribute (Celltype::@attribute_list), struct ã® @member_list ãä»®å®ãã¦ãã
+  #=== 式を文字列に変換
+  #name_list:: attribute (Celltype::@attribute_list), struct の @member_list を仮定している
   def elements_to_s( elements, name_list = nil, pre = nil, post = nil )
     if elements.instance_of? Token then
-      return elements.to_s    # OP_DOT, OP_REF ã®å³è¾º
+      return elements.to_s    # OP_DOT, OP_REF の右辺
     end
 
@@ -246,18 +229,15 @@
   end
 
-  # å®æ°å¼(elements)ãè©ä¾¡ãã
+  # 定数式(elements)を評価する
   #
-  # ãã®ã¡ã½ããã¯ Expression ã¯ã©ã¹ã®ã¡ã½ããã§ããå¿
-è¦ã¯ãªãï¼é¢æ°åã§ããï¼
+  # このメソッドは Expression クラスのメソッドである必要はない（関数化できる）
   #
-  # elements ã¯å¼ã®è¦ç´ 
+  # elements は式の要素
   #
-  # name_list, name_list2 ã¯ eval_const ãåç
-§
+  # name_list, name_list2 は eval_const を参照
   #
-  # RETURN: è©ä¾¡ããå®æ°ãè©ä¾¡ã§ããªãã£ãå ´åã¯ nil ãè¿ã
-
-  MAX_NEST_LEVEL = 64    # ç°¡æã®ã«ã¼ãæ¤åºï¼åç
-§ã®ãã¹ãã 64 ã¾ã§è¨±å¯ããï¼
+  # RETURN: 評価した定数、評価できなかった場合は nil を返す
+
+  MAX_NEST_LEVEL = 64    # 簡易のループ検出（参照のネストを 64 まで許可する）
   def elements_eval_const( elements, name_list, name_list2 = nil, nest = nil )
 
@@ -266,9 +246,7 @@
       nsp = elements[1]
 
-      # #809 ã®ä¿®æ­£ããã (å¥ã®åé¡ãè§£æ±ºãããã¦ããªã)
-      # nest += 1     # åç
-§ãã«ã¼ãã«ãªã£ã¦ããªããã®ãã§ãã¯
-      #               # mikan æ¬å½ã«ã«ã¼ããã¦ãããã©ããã§ã¯ãªããåç´ã«å¤æ°ã®åç
-§ãç¹°ãè¿ãã¦ãããã¨ã§å¤å®ãã¦ãã
+      # #809 の修正しかけ (別の問題が解決しきれていない)
+      # nest += 1     # 参照がループになっていないかのチェック
+      #               # mikan 本当にループしているかどうかではなく、単純に多数の参照を繰り返していることで判定している
       # if nest > MAX_NEST_LEVEL then
       #   cdl_error( "E9999: '$1' too many reference (maybe loop) max=$1" , nsp.to_s, MAX_NEST_LEVEL )
@@ -285,17 +263,16 @@
       end
 
-      # è¦ã¤ãããªããã°å®æ°å®ç¾©ããæ¢ã
+      # 見つからなければ定数定義から探す
       if object == nil then
-        object = Namespace.find( nsp )# mikan namespace ã®å¯¾å¿ #1
-      end
-
-# ãã®å®è£
-ã¯ãããå°ãæ´çãããã¹ã
-# ãããå¼åºãããã®ã¯ãä»¥ä¸ã®å ´å
-#   ã»attribute, var ã®å³è¾ºå¼ã®è©ä¾¡
-#   ã»size_is å¼æ°ã®è©ä¾¡ï¼é¢æ°ãã©ã¡ã¼ã¿ã®å ´åã¨attribute, var ã®å ´åããã
-# ä»¥ä¸ã®ã¨ã©ã¼ãã§ãã¯ã§ã¯ããããããã£ã¡ãã«ãªã£ã¦èª¤ããæ¤åºãããã¨ãã¦ãã
-
-      # IDENTIFIER ã¯è¦ã¤ãããªãã£ãï¼
+        object = Namespace.find( nsp )# mikan namespace の対応 #1
+      end
+
+# この実装は、もう少し整理されるべき
+# これが呼出されるのは、以下の場合
+#   ・attribute, var の右辺式の評価
+#   ・size_is 引数の評価：関数パラメータの場合とattribute, var の場合がある
+# 以下のエラーチェックでは、これらがごっちゃになって誤りを検出しようとしている
+
+      # IDENTIFIER は見つからなかった？
       if object == nil then
         cdl_error( "E1001 $1: not found" , nsp.get_path_str )
@@ -303,6 +280,6 @@
         return nil
       elsif object.instance_of?( Join ) then
-        # Join ã®å ´åï¼ cell ã®ä¸­ã® attribute, var, call ã®ã©ãããè¦ã¤ãã£ã
-        # Decl (attribute, var) ã§ãªãï¼
+        # Join の場合： cell の中の attribute, var, call のどれかが見つかった
+        # Decl (attribute, var) でない？
         if ! object.get_definition.instance_of?( Decl ) then
           cdl_error( "E1002 $1: not constant (port)" , nsp.get_path_str )
@@ -311,8 +288,8 @@
         return object.get_rhs.eval_const2( name_list, name_list2, nest )
       elsif ! object.instance_of?( Decl ) then
-        # Decl ã§ãªãå ´åï¼ å®æ°ã§ããªã
+        # Decl でない場合： 定数でもない
         if ( ! object.instance_of?( ParamDecl ) ) then
-                                                      # mikan paramdecl ã¯ç¡è¦ãã
-                                                      # ParamList ããå¼ã°ããã¨ã
+                                                      # mikan paramdecl は無視する
+                                                      # ParamList から呼ばれたとき
           cdl_error( "E1003 $1: not constant" , nsp.get_path_str )
         else
@@ -324,13 +301,13 @@
         object.referenced
         if object.get_initializer == nil then
-          # åæåå­ã®å­å¨ããªãå¤æ°   # mikan ããã¸ããã®ã¯ãéå¸¸ããããªãã¯ãï¼æªæ¤è¨¼ï¼
+          # 初期化子の存在しない変数   # mikan ここへくるのは、通常ありえないはず（未検証）
           return IntegerVal.new( 0 )
         else
-          # Decl ã®å³è¾ºã®è©ä¾¡
-          # mikan size_is å¼æ°ã«ç¾ããå¤æ°ã®åãé©åãã®ãã§ãã¯ãã
+          # Decl の右辺の評価
+          # mikan size_is 引数に現れる変数の型が適切かのチェックする
           if object.get_initializer.instance_of?( Expression ) || object.get_initializer.instance_of?( C_EXP ) then
             return object.get_initializer.eval_const2( name_list, name_list2, nest )
           else
-            # Array ã®å ´å
+            # Array の場合
             return object.get_initializer
           end
@@ -440,5 +417,5 @@
 # p "val.respond_to?( \"-@\" )=#{val.respond_to?( "-@" )} #{val.class}"
 # p "val.respond_to?( \"~@\" )=#{val.respond_to?( "~@" )}"
-#2.0      if val.respond_to?( "~@" ) then  # Ruby 1.9, 2.0 preview çã§ã¯ä¾å¤ãçºçãã¦ãã¾ã
+#2.0      if val.respond_to?( "~@" ) then  # Ruby 1.9, 2.0 preview 版では例外が発生してしまう
       if val.kind_of? IntegerVal then
         return ~ val
@@ -586,6 +563,5 @@
   def elements_get_type( elements, namedList )
     type = elements_get_type_sub( elements, namedList )
-    # è¿ãããæ¹ã DefinedType ã®å ´å å
-ã®åãè¿ã
+    # 返された方が DefinedType の場合 元の型を返す
     if type.kind_of?( DefinedType ) then
       type = type.get_type
@@ -626,24 +602,24 @@
       unless type.kind_of?( PtrType ) then
         cdl_error( "E1013 \'*\': operand is not pointer value"  )
-        return IntType.new( 8 )    # IntType ãè¿ãã¦ãã
+        return IntType.new( 8 )    # IntType を返しておく
       end
       return type.get_referto
 
     when :OP_U_PLUS, :OP_U_MINUS
-      # mikan operand ãé©åãªåããã§ãã¯ãã¦ããªã
+      # mikan operand が適切な型かチェックしていない
       return elements_get_type( elements[1], namedList )
 
     when :OP_ADD, :OP_SUB, :OP_MULT, :OP_DIV, :OP_REMAIN
-      # mikan operand ãé©åãªåããã§ãã¯ãã¦ããªãï¼å·¦è¾ºã®åãæ¡ç¨ãã¦ãã
+      # mikan operand が適切な型かチェックしていない＆左辺の型を採用している
       return elements_get_type( elements[1], namedList )
 
     when :OP_U_TILDE
-      # mikan operand ãæ´æ°ããã§ãã¯ãã¦ããªã
+      # mikan operand が整数かチェックしていない
       return elements_get_type( elements[1], namedList )
     when :OP_AND, :OP_EOR, :OP_OR, :OP_LSFT, :OP_RSFT
-      # mikan operand ãæ´æ°ããã§ãã¯ãã¦ããªã
+      # mikan operand が整数かチェックしていない
       return BoolType.new
     when :OP_U_EXCLAM
-      # mikan operand ãæ´æ°ããã§ãã¯ãã¦ããªã
+      # mikan operand が整数かチェックしていない
       return BoolType.new
 
@@ -655,9 +631,8 @@
   end
 
-  # å¼ã size_is, count_is, string ã®å¼æ°ã§ããå ´åã®æ¹åã®ãã§ãã¯
+  # 式が size_is, count_is, string の引数である場合の方向のチェック
   def elements_check_dir_for_param( elements, namedList, dir, spec )
-   # dir ï¼ å
-ã®å¼æ°ã®æ¹å
-   # direct: size_is ãªã©ã®å¼æ°ã®å¤æ°ã®æ¹å
+   # dir ： 元の引数の方向
+   # direct: size_is などの引数の変数の方向
 
     case elements[0]
@@ -690,5 +665,5 @@
           judge = true if ( direct == :IN || direct == :INOUT )
           req_direct = "in or inout"
-        when :OUT, :RECEIVE     # mikan out ã§ count_is ã®ã¿æå®ããã¦ããå ´å in ã§ãªãã¦ã¯ãªããªã
+        when :OUT, :RECEIVE     # mikan out で count_is のみ指定されている場合 in でなくてはならない
           judge = true if ( direct == :OUT || direct == :INOUT )
           req_direct = "out or inout"
@@ -706,16 +681,13 @@
       return true
 
-    # åé 
-æ¼ç®å­
+    # 単項演算子
     when :OP_U_ASTER, :OP_SIZEOF_EXPR, :OP_SIZEOF_TYPE, :OP_U_PLUS, :OP_U_MINUS, :OP_U_TILDE, :OP_U_EXCLAM, :CAST, :OP_U_AMP, :PARENTHESES,
       elements_check_dir_for_param( elements[1], namedList, dir, spec )
 
-    # 2é 
-æ¼ç®å­
+    # 2項演算子
     when :OP_SUBSC, :OP_DOT, :OP_REF, :OP_MULT, :OP_DIV, :OP_REMAIN, :OP_ADD, :OP_SUB, :OP_LSFT, :OP_RSFT, :OP_LT, :OP_GT, :OP_LE, :OP_GE, :OP_EQ, :OP_NE, :OP_AND, :OP_EOR, :OP_OR, :OP_LAND, :OP_LOR
       return elements_check_dir_for_param( elements[1], namedList, dir, spec ) && elements_check_dir_for_param( elements[2], namedList, dir, spec )
 
-    # 3é 
-æ¼ç®å­
+    # 3項演算子
     when :OP_CEX
       return elements_check_dir_for_param( elements[1], namedList, dir, spec ) && elements_check_dir_for_param( elements[2], namedList, dir, spec ) && elements_check_dir_for_param( elements[3], namedList, dir, spec )
@@ -729,5 +701,5 @@
   #Express# get_allocator_rhs_elem
   #alloc_type::Symbol  :NORMAL_ALLOC|:INTERNAL_ALLOC|:RELAY_ALLOC
-  #å¼ãã¢ã­ã±ã¼ã¿æå®å­ã®å³è¾ºã¨ãã¦å¦¥å½ããã§ãã¯ããæ­£ãããã°åè§£ããå¤ãè¿ã
+  #式がアロケータ指定子の右辺として妥当かチェックし、正しければ分解した値を返す
   #return:
   #  :NORMAL_ALLOC      [ cell_nsp, ep_name ]               # rhs = cell_nsp.ep_name    ex) Alloc.eAlloc
@@ -767,5 +739,5 @@
   end
 
-  #Expression#Expression ã®ã¯ã­ã¼ã³ãä½æãã
+  #Expression#Expression のクローンを作成する
   def clone_for_composite
     cl = self.clone
@@ -775,7 +747,7 @@
   end
 
-  #Expression#elements ã®ã¯ã­ã¼ã³ãä½æ
+  #Expression#elements のクローンを作成
   #elements::Array
-  # ãã®ã¡ã½ããã¯ãArray ã®ãã£ã¼ãã³ãã¼ãè¡ã
+  # このメソッドは、Array のディープコピーを行う
   def clone_elements elements
     elements = elements.clone
@@ -794,18 +766,15 @@
   end
 
-  #=== Expression#ã»ã«çµåã®å¼ãè§£æãã
+  #=== Expression#セル結合の式を解析する
   # Cell.eEntry  => [ :OP_DOT, [ :IDENTIFIER, token ], token ]
   # Cell.eEntry[expression] => [ :OP_SUBSC, [ :OP_DOT, [ :IDENTIFIER, token ], token ], expression ]
   # Return: [ NamespacePath(cell_name), Integer(subscript) or nil, Token(port_name)]
   def analyze_cell_join_expression
-    # å³è¾ºã® Expression ã®è¦ç´ ãåãåºã
+    # 右辺の Expression の要素を取り出す
     elements = @elements
-    if elements[0] == :OP_SUBSC then  # å³è¾ºï¼åãå£é
-åï¼
+    if elements[0] == :OP_SUBSC then  # 右辺：受け口配列？
       # elements = [ :OP_SUBSC, [ :OP_DOT, [ :IDENTIFIER, token ], token ], expression ]
-      subscript = elements[2].eval_const(nil)  # åãå£é
-åã®æ·»æ°
-      elements  = elements[1]          # mikan é
-åã ã£ãå ´å
+      subscript = elements[2].eval_const(nil)  # 受け口配列の添数
+      elements  = elements[1]          # mikan 配列だった場合
     else
       subscript = nil
@@ -823,9 +792,9 @@
   end
 
-  #=== Expression# ã»ã«ã¸ã®çµåã®å¼ãçæãã
+  #=== Expression# セルへの結合の式を生成する
   #nsp:: NamespacePath
   #subscript:: Integer
   #port_name:: Symbol
-  # analyze_cell_join_expression ã¨å¯¾ã«ãªã£ã¦ãã
+  # analyze_cell_join_expression と対になっている
   def self.create_cell_join_expression( nsp, subscript, port_name, locale = nil )
     if ! port_name.instance_of?( Symbol ) then
@@ -843,6 +812,6 @@
   end
 
-  #=== Expression#æ´æ°å®æ°ã®å¼ãçæãã
-  #val:: Integer : å¤ï¼ æ´æ°
+  #=== Expression#整数定数の式を生成する
+  #val:: Integer : 値： 整数
   def self.create_integer_constant( val, locale = nil )
     if val != Integer( val ) || val < 0 then
@@ -852,9 +821,9 @@
   end
 
-  #=== Expression#åä¸ã®è­å¥å­ã®å¼ãè§£æãã
+  #=== Expression#単一の識別子の式を解析する
   # Identifier  => [ :IDENTIFIER, token ]
   # Return: NamespacePath(Identifier)
   def analyze_single_identifier
-    # å³è¾ºã® Expression ã®è¦ç´ ãåãåºã
+    # 右辺の Expression の要素を取り出す
     elements = @elements
     if elements[0] == :IDENTIFIER
@@ -866,6 +835,5 @@
 
   #=== Expression#
-  #nsp:: NamespacePath :  åç
-§ãããã®è­å¥å­
+  #nsp:: NamespacePath :  参照するもの識別子
   def self.create_single_identifier( nsp, locale )
     if ! nsp.instance_of?( NamespacePath ) then
@@ -875,7 +843,7 @@
   end
 
-  #=== è©ä¾¡å¯è½ããã§ãã¯ãã
-  #*v:: å¯å¤åå¼æ°ï¼ä»»æã®åï¼
-  # ãã¹ã¦ã BaseVal ã®å­ã¯ã©ã¹ï¼å¤ï¼ã§ããã°ãè©ä¾¡å¯è½ã¨å¤æ­ãã
+  #=== 評価可能かチェックする
+  #*v:: 可変個引数（任意の型）
+  # すべてが BaseVal の子クラス（値）であれば、評価可能と判断する
   def evaluable?( *v )
     v.each{ |val|
@@ -896,10 +864,10 @@
 
   #c_exp_string::String
-  #b_renew::Bool  : true ãªã C_EXP ã® clone ä½æï¼ã¨ã¹ã±ã¼ãå¦çç­ãããªãï¼
+  #b_renew::Bool  : true なら C_EXP の clone 作成（エスケープ処理等をしない）
   def initialize( c_exp_string, b_renew = false )
     if b_renew then
       @c_exp_string = c_exp_string
     else
-      # åå¾ã® " ãåãé¤ã
+      # 前後の " を取り除く
       # str = c_exp_string.to_s.sub( /^\"(.*)\"$/, "\\1" )
       str = CDLString.remove_dquote c_exp_string.to_s
@@ -908,10 +876,10 @@
   end
 
-  #=== composite ç¨ã« C_EXP ã clone ãã
+  #=== composite 用に C_EXP を clone する
   #ct_name::
   #cell_name::
-  # composite ã® attribute ã«ç¾ãã C_EXP ãæå­åç½®æãã¦çæããªããï¼
-  # ãã®æå­åç½®æã¯ãæå³è§£éæ®µéã§è¡ãï¼
-  # ä»ã® C_EXP ã®æå­åç½®æã¯ãã³ã¼ãçææ®µéã§è¡ãï¼
+  # composite の attribute に現れる C_EXP を文字列置換して生成しなおす．
+  # この文字列置換は、意味解釈段階で行う．
+  # 他の C_EXP の文字列置換は、コード生成段階で行う．
   def clone_for_composite( ct_name, cell_name, locale )
     dbgPrint "C_EXP: #{ct_name} #{cell_name} #{@c_exp_string}\n"
@@ -928,7 +896,7 @@
   end
 
-  #=== C_EXP ãè©ä¾¡ãã
-  # C_EXP ã®å¼ãæ°æå­åãè¿ã
-  # æ¬æ¥ C_EXP ã¯ eval_const ããå¯¾è±¡ã§ã¯ãªãããä¾¿å®ä¸ eval_const ã§å¯¾å¿
+  #=== C_EXP を評価する
+  # C_EXP の引き数文字列を返す
+  # 本来 C_EXP は eval_const する対象ではないが、便宜上 eval_const で対応
   def eval_const( name_list, name_list2 = nil )
      return self
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/gen_xml.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/gen_xml.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/gen_xml.rb	(revision 321)
@@ -6,49 +6,34 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: gen_xml.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
@@ -80,25 +65,25 @@
 
   def gen_XML( file, nest )
-    # signature ã®ã³ã¼ããçæ
+    # signature のコードを生成
     @signature_list.each { |s|
       s.gen_XML file, nest
     }
 
-    # celltype ã®ã³ã¼ããçæ
+    # celltype のコードを生成
     @celltype_list.each { |t|
       t.gen_XML( file, nest )
     }
 
-    # composite ã®ã³ã¼ããçæ
+    # composite のコードを生成
     @compositecelltype_list.each { |t|
       t.gen_XML( file, nest )
     }
 
-    # cell ã®ã³ã¼ããçæ
+    # cell のコードを生成
     @cell_list.each { |t|
       t.gen_XML( file, nest )
     }
 
-    # ãµããã¼ã ã¹ãã¼ã¹ã®ã³ã¼ããçæ
+    # サブネームスペースのコードを生成
     @namespace_list.each { |n|
       kind = n.instance_of?( Namespace ) ? "namespace" : "region"
@@ -250,11 +235,9 @@
 
 #
-# Celltype ã¨å
-±ç¨å¯è½ãªã¯ãã ããä»¥ä¸ã®ç¹ã®å¤æ´ãå¿
-è¦
-#  @active â @b_active
-#  @singleton â @b_singleton
-#  @attribute â @name_list (Decl)
-#  @port â @name_list (Port)
+# Celltype と共用可能なはずだが、以下の点の変更が必要
+#  @active ⇒ @b_active
+#  @singleton ⇒ @b_singleton
+#  @attribute ⇒ @name_list (Decl)
+#  @port ⇒ @name_list (Port)
 class CompositeCelltype
   def gen_XML file, nest
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/generate.rb	(revision 321)
@@ -6,49 +6,34 @@
 #   Copyright (C) 2008-2016 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: generate.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
@@ -134,5 +119,5 @@
 end
 
-# celltype_private.h ãçæ
+# celltype_private.h を生成
 
 class Namespace
@@ -140,8 +125,6 @@
 
     begin
-      # root namespace ãªãã° makefile ãåºåãã(å
-¨ã»ã«ã¿ã¤ãã«é¢ãããã®ã ã)
-      # å
-ã«åºåãã
+      # root namespace ならば makefile を出力する(全セルタイプに関わるものだけ)
+      # 先に出力する
       if @name == "::" then
 
@@ -155,18 +138,18 @@
 
       dbgPrint "generating region: #{$generating_region.get_name} namespace=#{@name} gen_dir=#{$gen}\n"
-      # global_tecsgen.h (typedef, struct, const) ã®çæ
+      # global_tecsgen.h (typedef, struct, const) の生成
       gen_global_header
 
-      # signature ã®ã³ã¼ããçæ
+      # signature のコードを生成
       @signature_list.each { |s|
         s.generate
       }
 
-      # celltype ã®ã³ã¼ããçæ
+      # celltype のコードを生成
       @celltype_list.each { |t|
         t.generate
       }
 
-      # ãµããã¼ã ã¹ãã¼ã¹ã®ã³ã¼ããçæ
+      # サブネームスペースのコードを生成
       @namespace_list.each { |n|
         n.generate
@@ -174,5 +157,5 @@
 
     rescue => evar
-      # ããã¹ã¿ãã¯ãã¬ã¼ã¹ãåºãã¾ã§ãæéãããããããªãã°ãæ¬¡ãã³ã¡ã³ãã¢ã¦ããã¦ã¿ãã¹ã
+      # もしスタックトレースが出るまでい時間がかかるようならば、次をコメントアウトしてみるべし
       cdl_error( "H1001 tecsgen: fatal internal error during code generation"  )
       print_exception( evar )
@@ -187,18 +170,18 @@
 
     begin
-      # global_tecsgen.h (typedef, struct, const) ã®çµããã®ã¬ã¼ãã³ã¼ãçæ
+      # global_tecsgen.h (typedef, struct, const) の終わりのガードコード生成
       gen_global_header_post
 
-      # signature ã®ã³ã¼ããçæ
+      # signature のコードを生成
       @signature_list.each { |s|
         s.generate_post
       }
 
-      # celltype ã®ã³ã¼ããçæ
+      # celltype のコードを生成
       @celltype_list.each { |t|
         t.generate_post
       }
 
-      # ãµããã¼ã ã¹ãã¼ã¹ã®ã³ã¼ããçæ
+      # サブネームスペースのコードを生成
       @namespace_list.each { |n|
         n.generate_post
@@ -214,5 +197,5 @@
   def gen_global_header
 
-    # global_tecs.h ã®çæ
+    # global_tecs.h の生成
     f = AppFile.open( "#{$gen}/global_tecsgen.#{$h_suffix}" )
 
@@ -220,5 +203,5 @@
       print_note f
 
-      # ã¬ã¼ãã³ã¼ããåºå
+      # ガードコードを出力
       f.print <<EOT
 #ifndef GLOBAL_TECSGEN_H
@@ -227,7 +210,7 @@
 EOT
 
-      # import_C ã§æå®ãããããããã¡ã¤ã«ã® #include ãåºå
+      # import_C で指定されたヘッダファイルの #include を出力
       if Import_C.get_header_list2.length > 0 then
-        # ããã include ã®åºå
+        # ヘッダ include の出力
         f.printf TECSMsg.get( :IMP_comment ), "#_IMP_#"
         Import_C.get_header_list2.each{ |h|
@@ -240,11 +223,11 @@
     end
 
-    # typedef, struct, enum ãçæ
+    # typedef, struct, enum を生成
     @decl_list.each { |d|
 
-      # d ã¯ Typedef, StructType, EnumType ã®ãããã
+      # d は Typedef, StructType, EnumType のいずれか
       if d.instance_of?( Typedef ) then
 
-        # Typedef ã®å ´åãdeclarator ã® @type ããCType ã§ãªãã
+        # Typedef の場合、declarator の @type が　CType でないか
         if ! d.get_declarator.get_type.kind_of?( CType ) then
           d.gen_gh f
@@ -252,8 +235,8 @@
       elsif ! d.kind_of?( CType ) then
 
-        # CType ã§ã¯ãªã (StructType ã¾ãã¯ EnumType)
+        # CType ではない (StructType または EnumType)
         d.gen_gh f
 #     else
-#       ããã«è©²å½ããã®ã¯ CStructType, CEnumType
+#       ここに該当するのは CStructType, CEnumType
       end
     }
@@ -283,5 +266,5 @@
     end
 
-    # const ãçæ  mikan
+    # const を生成  mikan
     @const_decl_list.each { |d|
       f.printf( "#define %-14s ((%s%s)%s)\n", d.get_global_name,
@@ -296,5 +279,5 @@
   def gen_global_header_post
 
-    # global_tecs.h ãéã
+    # global_tecs.h を開く
     f = AppFile.open( "#{$gen}/global_tecsgen.#{$h_suffix}" )
 
@@ -310,10 +293,8 @@
   end
 
-  #=== Makefile.tecsgen, Makefile.templ ã®åºå
-  # å
-¨ã»ã«ã¿ã¤ãåãåºåããé¨åãåºå
-  #    ï¼æ¬ã¡ã½ããã¯ root namespace ã«å¯¾ãã¦å¼åºãï¼
-  #     åã
-ã®ã»ã«ã¿ã¤ãã®ã¡ã¼ã¯ã«ã¼ã«ã¯ Celltype ã¯ã©ã¹ã§åºå
+  #=== Makefile.tecsgen, Makefile.templ の出力
+  # 全セルタイプ名を出力する部分を出力
+  #    （本メソッドは root namespace に対して呼出す）
+  #     個々のセルタイプのメークルールは Celltype クラスで出力
   def gen_makefile
     gen_makefile_template
@@ -325,17 +306,17 @@
     return if $generate_no_template
 
-    ### Makefile.templ ã®çæ
+    ### Makefile.templ の生成
     f = AppFile.open( "#{$gen}/Makefile.templ" )
 
     print_Makefile_note f
 
-    # Makefile ã®å¤æ°ã®åºå
+    # Makefile の変数の出力
     f.printf TECSMsg.get( :MVAR_comment ), "#_MVAR_#"
     f.printf "# fixed variable (unchangeable by config or plugin)\n"
 
-    # TARGET ã®åºå (ç¬¬ä¸å¼æ° $target ã« region åããã³ .exe ãä»å )
+    # TARGET の出力 (第一引数 $target に region 名および .exe を付加)
     target = $target
     if $generating_region != @@root_namespace then
-      # å­ region ã®ãªã³ã¯ã¿ã¼ã²ããã®å ´å
+      # 子 region のリンクターゲットの場合
       target += "-#{$generating_region.get_global_name}"
     end
@@ -419,5 +400,5 @@
 EOT
 
-    # make ã«ã¼ã«ã®åºå
+    # make ルールの出力
     f.printf( TECSMsg.get( :MRUL_comment), "#_MRUL_#" )
 
@@ -447,5 +428,5 @@
     f.print "-include $(GEN_DIR)/Makefile.tecsgen\n"
     if $generating_region.get_n_cells != 0 then
-      # Makefile.depend ã® include
+      # Makefile.depend の include
       f.print "-include $(GEN_DIR)/Makefile.depend\n\n"
 
@@ -457,5 +438,5 @@
       f.print "\nsub_regions:$(TIMESTAMP)\n"
       Region.get_link_roots.each {|region|
-        if region.get_global_name != "" then  # Root region: ãã® Makefile èªèº«
+        if region.get_global_name != "" then  # Root region: この Makefile 自身
           f.print "\tcd #{region.get_global_name}; make all\n"
         end
@@ -464,9 +445,9 @@
     end
 
-    # clean: ã¿ã¼ã²ãã
+    # clean: ターゲット
     f.print "clean :\n"
     if $generating_region == @@root_namespace then
       Region.get_link_roots.each {|region|
-        if region.get_global_name != "" then  # Root region: ãã® Makefile èªèº«
+        if region.get_global_name != "" then  # Root region: この Makefile 自身
           f.print "\tcd #{region.get_global_name}; make clean\n"
         end
@@ -479,5 +460,5 @@
     f.print "\n"
 
-    # tecs: ã¿ã¼ã²ãã
+    # tecs: ターゲット
     if $generating_region == @@root_namespace then
       f.print "tecs : $(PRE_TECSGEN_TARGET) $(TIMESTAMP) $(POST_TECSGEN_TARGET)\n\n"
@@ -508,5 +489,5 @@
 
   def gen_makefile_tecsgen
-    ### Makefile.tecsgen ã®çæ
+    ### Makefile.tecsgen の生成
     f = AppFile.open( "#{$gen}/Makefile.tecsgen" )
 
@@ -563,6 +544,5 @@
     domain_regions = nil
     DomainType.get_domain_regions.each{ |dt, regions|
-      # domain_type ã¯ä¸ã¤ã®ãã¼ãã«ã¯ãä¸ã¤ãããªãã®ã§ããã®ã«ã¼ãã¯ãå¿
-ãä¸åããåããªã
+      # domain_type は一つのノードには、一つしかないので、このループは、必ず一回しか回らない
       domain_regions = regions
       domain_type = dt
@@ -687,14 +667,13 @@
   end
 
-  #=== ãã¹ã¦ã®ã»ã«ã¿ã¤ãã®ååãåºå
-  #f::       FILE:   åºåå
-ãã¡ã¤ã«
-  #prepend:: string: åç½®æå­å
-  #append::  string: å¾ç½®æå­å
-  #b_plguin::  bool:   plugin ã«ããçæãããã»ã«ã¿ã¤ããåºå
-  ##b_inline_only::  bool:   true ãªãã° inline ã® entry port ã®ã¿ã®ã»ã«ã¿ã¤ããå«ãã
-  #b_inline_only_or_proc::  bool|Proc:   true ãªãã° inline ã® entry port ã®ã¿ããã¤ã¤ã³ã¢ã¯ãã£ããªã»ã«ã¿ã¤ããå«ãã
-  #                                      Proc ãªãã° Proc ãå®è¡ããçµæ true ãªãã°å«ãã
-  #  namespace "::" ããå¼åºããã
+  #=== すべてのセルタイプの名前を出力
+  #f::       FILE:   出力先ファイル
+  #prepend:: string: 前置文字列
+  #append::  string: 後置文字列
+  #b_plguin::  bool:   plugin により生成されたセルタイプを出力
+  ##b_inline_only::  bool:   true ならば inline の entry port のみのセルタイプを含める
+  #b_inline_only_or_proc::  bool|Proc:   true ならば inline の entry port のみ、かつインアクティブなセルタイプを含める
+  #                                      Proc ならば Proc を実行した結果 true ならば含める
+  #  namespace "::" から呼出される
   def gen_celltype_names( f, prepend, append, b_plugin, b_inline_only_or_proc = true )
     dbgPrint "gen_celltype_names #{@name}\n"
@@ -716,11 +695,10 @@
   end
 
-  #=== ãã¹ã¦ã®ã»ã«ã¿ã¤ãã®ååãåºå
+  #=== すべてのセルタイプの名前を出力
   #region:: Region:
-  # gen_celltype_names ã¨gen_celltype_names_domain ã®ç¸éï¼
-  #   region ã domain_roots ã«å«ãå ´åãåºåããï¼
-  #   ã¾ãã¯ãregion ãå«ã¾ãªãããdomain_roots ãè¤æ°ãã¤ã«ã¼ããªã¼ã¸ã§ã³ã®å ´åãåºåããï¼
-  # ããä»¥å¤ã¯ãgen_celltype_names ã®èª¬æãåç
-§
+  # gen_celltype_names とgen_celltype_names_domain の相違：
+  #   region を domain_roots に含む場合、出力する．
+  #   または、region を含まないが、domain_roots が複数かつルートリージョンの場合、出力する．
+  # それ以外は、gen_celltype_names の説明を参照
   def gen_celltype_names_domain( f, prepend, append, domain_type, region, b_plugin, b_inline_only = true )
     dbgPrint "gen_celltype_names #{@name}\n"
@@ -752,11 +730,11 @@
     }
   end
-  #== Namespace#ãã¹ã¦ã®ã»ã«ã¿ã¤ãã®ååãåºå
-  # ã»ã«ã¿ã¤ãã³ã¼ãã®ããã®åååºå
-  # gen_celltype_names_domain ã¨ gen_celltype_names_domain2 ã®ç¸é
-  # ã»ã©ããä¸ã¤ã®ãªã¼ã¸ã§ã³ã«ããåºããªã
-  #     domain_roots ã1ã¤ã ãã§ãæå®ãªã¼ã¸ã§ã³ãå«ã
-  #     domain_roots ã2ã¤ä»¥ä¸ã§ãæå®ãªã¼ã¸ã§ã³ãã«ã¼ããªã¼ã¸ã§ã³ 
-  # ã»ãã¡ã¤ã³åãä»å ããªã
+  #== Namespace#すべてのセルタイプの名前を出力
+  # セルタイプコードのための名前出力
+  # gen_celltype_names_domain と gen_celltype_names_domain2 の相違
+  # ・どれか一つのリージョンにしか出さない
+  #     domain_roots が1つだけで、指定リージョンを含む
+  #     domain_roots が2つ以上で、指定リージョンがルートリージョン 
+  # ・ドメイン名を付加しない
   def gen_celltype_names_domain2( f, prepend, append, domain_type, region, b_plugin, b_inline_only = true )
     dbgPrint "gen_celltype_names #{@name}\n"
@@ -885,5 +863,5 @@
   def gen_sh_func_tab f
 
-    # ã·ã°ããã£ãã£ã¹ã¯ãªãã¿ã®åºå
+    # シグニチャディスクリプタの出力
     f.printf TECSMsg.get(:SD_comment), "#_SD_#"
     f.print "struct tag_#{@global_name}_VDES {\n"
@@ -891,5 +869,5 @@
     f.print "};\n\n"
 
-    # ã·ã°ããã£é¢æ°ãã¼ãã«ã®åºå
+    # シグニチャ関数テーブルの出力
     f.printf TECSMsg.get(:SFT_comment), "#_SFT_#"
     f.print( "struct tag_#{@global_name}_VMT {\n" )
@@ -906,5 +884,5 @@
         len = items.length
       else
-        # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+        # ここで nil になるのは、引数なしの時に void がなかった場合
         items = []
         len = 0
@@ -932,5 +910,5 @@
   end
 
-  #=== Signature# é¢æ°ã® ID ã® define ãåºå
+  #=== Signature# 関数の ID の define を出力
   def gen_sh_func_id f
     f.print "/* function id */\n"
@@ -951,5 +929,5 @@
   def generate
 
-    if need_generate?    # ã»ã«ã®ãªãã»ã«ã¿ã¤ãã¯çæããªã
+    if need_generate?    # セルのないセルタイプは生成しない
 
       generate_private_header
@@ -962,10 +940,10 @@
       generate_makefile
 
-    elsif $generate_all_template   # ãã³ãã¬ã¼ãã³ã¼ãçæãªãã·ã§ã³
+    elsif $generate_all_template   # テンプレートコード生成オプション
 
       generate_template_code
       generate_inline_template_code
 
-      # generate_makefile_template ã¯ Makefile ã«è¿½è¨ãããã®ã ãããå¼ã³åºããªã
+      # generate_makefile_template は Makefile に追記するものだから、呼び出さない
 
     end
@@ -974,5 +952,5 @@
 
   def generate_post
-    return if ! need_generate?    # ã»ã«ã®ãªãã»ã«ã¿ã¤ãã¯çæããªã
+    return if ! need_generate?    # セルのないセルタイプは生成しない
 
     generate_private_header_post
@@ -994,8 +972,6 @@
     gen_ph_cell_cb_type f
     gen_ph_INIB_as_CB f
-    gen_ph_extern_cell f          # ã»ã«ã¿ã¤ãã°ã«ã³ã¼ãä»¥å¤ã¯åç
-§ããªã
-    gen_ph_typedef_idx f          # mikan åç
-§ãããã®ãã§ãã¦ããªã
+    gen_ph_extern_cell f          # セルタイプグルコード以外は参照しない
+    gen_ph_typedef_idx f          # mikan 参照するものができていない
     gen_ph_ep_fun_prototype f
     end_extern_C f
@@ -1005,6 +981,6 @@
 
     if @n_entry_port_inline == 0 then
-      # inline ããªããã° CB_TYPE_ONLY ã¨ãã
-      # inline ããã®å ´åããã£ãã define ãã¦ããã¦ãå¾ã§ãã¹ã¦ undef ãã
+      # inline がなければ CB_TYPE_ONLY とする
+      # inline ありの場合、いったん define しておいて、後ですべて undef する
       ifndef_cb_type_only f
     end
@@ -1028,8 +1004,6 @@
 #    gen_ph_cell_cb_type f
 #    gen_ph_INIB_as_CB f
-#    gen_ph_extern_cell f          # ã»ã«ã¿ã¤ãã°ã«ã³ã¼ãä»¥å¤ã¯åç
-§ããªã
-    # gen_ph_typedef_idx f          # mikan åç
-§ãããã®ãã§ãã¦ããªã
+#    gen_ph_extern_cell f          # セルタイプグルコード以外は参照しない
+    # gen_ph_typedef_idx f          # mikan 参照するものができていない
 #    gen_ph_ep_fun_prototype f
     gen_ph_ep_skel_prototype f
@@ -1037,5 +1011,5 @@
     endif_macro_only f
 
-    # ç­ç¸®å½¢ãªã©ã®ãã¯ã­åºå
+    # 短縮形などのマクロ出力
     if @n_entry_port_inline == 0 then
       ifndef_cb_type_only f
@@ -1047,6 +1021,6 @@
     gen_ph_test_optional_call_port_abbrev f
     gen_ph_ep_fun_macro f         if @n_entry_port > 0
-    gen_ph_foreach_cell f         # FOREACH ãã¯ã­ã®åºå
-    gen_ph_cb_initialize_macro f   # CB åæåãã¯ã­ã®åºåï¼æ¶è²»ããªãã®ã§ ram_initializer ãã©ã°ã«é¢ãããåºå
+    gen_ph_foreach_cell f         # FOREACH マクロの出力
+    gen_ph_cb_initialize_macro f   # CB 初期化マクロの出力．消費しないので ram_initializer フラグに関わらず出力
     gen_ph_dealloc_code f, ""
     gen_ph_dealloc_code f, "_RESET"
@@ -1095,5 +1069,5 @@
         next if p.get_port_type != :CALL
 
-        # is_...joined ã¯ omit ããã±ã¼ã¹ã§ãåºåããããããomit ãæ¤æ»ããåã«åºå
+        # is_...joined は omit するケースでも出力されるため、omit を検査する前に出力
         if p.is_optional? then
           f.print( "#undef is_#{p.get_name}_joined\n" )
@@ -1130,5 +1104,5 @@
   end
 
-  #=== CELLTYPE_tecsgen.c ãçæ
+  #=== CELLTYPE_tecsgen.c を生成
   def generate_cell_code
     fs = { }
@@ -1165,5 +1139,5 @@
     end
 
-    # ãã¹ã¦ã® _tecsgen.c ã«åºå
+    # すべての _tecsgen.c に出力
     print_note f
     gen_cell_private_header f
@@ -1171,5 +1145,5 @@
     gen_cell_ep_des_type f
 
-    # ãã¹ã¦ã® _tecsgen.c ã«åºå
+    # すべての _tecsgen.c に出力
     fs.each{ |r,f2|
       if f == f2 then
@@ -1182,19 +1156,18 @@
     }
 
-    # ä¸ã¤ã® _tecsgen.c ã«åºå
+    # 一つの _tecsgen.c に出力
     gen_cell_skel_fun f
     gen_cell_fun_table f
     gen_cell_var_init f
 
-    # ã»ã«ãã¨ã« _tecsgen.c ã«åºå
+    # セルごとに _tecsgen.c に出力
     gen_cell_ep_vdes fs
     gen_cell_ep_vdes_array fs
-    gen_cell_cb_out_init fs         # INITIALIZE_CB ã§åç
-§ããããã ram_initializer=false ã§ãæ¶ããªã
+    gen_cell_cb_out_init fs         # INITIALIZE_CB で参照されるため ram_initializer=false でも消せない
     gen_cell_cb fs
     gen_cell_extern_mt fs
     gen_cell_ep_des fs
 
-    # ä¸ã¤ã® _tecsgen.c ã«åºå
+    # 一つの _tecsgen.c に出力
     gen_cell_cb_tab f
     if $ram_initializer then
@@ -1251,13 +1224,13 @@
 
   def gen_ph_include f
-    # ã©ã³ã¿ã¤ã ãããã® include
+    # ランタイムヘッダの include
 #    f.printf TECSMsg.get( :IRTH_comment), "#_IRTH_#"
 #    f.print "#include \"tecs.#{$h_suffix}\"\n\n"
 
-    # ã°ã­ã¼ãã«ãããã® include
+    # グローバルヘッダの include
     f.printf TECSMsg.get( :IGH_comment ), "#_IGH_#"
     f.print "#include \"global_tecsgen.#{$h_suffix}\"\n\n"
 
-    # ã·ã°ããã£ãããã® include
+    # シグニチャヘッダの include
     f.printf TECSMsg.get( :ISH_comment ), "#_ISH_#"
     @port.each { |p|
@@ -1277,7 +1250,6 @@
     end
 
-    # æé©åã®ããåç
-§ããã»ã«ã¿ã¤ãã® CB åã®å®ç¾©ãåè¾¼ã
-    # _CB_TYPE_ONLY ãå®ç¾©ããä¸ã§ include ãã
+    # 最適化のため参照するセルタイプの CB 型の定義を取込む
+    # _CB_TYPE_ONLY を定義した上で include する
     f.printf( TECSMsg.get( :ICT_comment ), "#_ICT_#" )
 
@@ -1292,5 +1264,5 @@
 
       if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
-        # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦ãªã©
+        # 最適化コード (optimize) # スケルトン不要など
         p2 = p.get_real_callee_port
         if p2 then
@@ -1301,5 +1273,5 @@
           end
         # else
-          # optional ã§æªçµå
+          # optional で未結合
         end
       end
@@ -1313,5 +1285,5 @@
 #      next if p.get_port_type != :CALL
 #      if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
-#        # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦ãªã©
+#        # 最適化コード (optimize) # スケルトン不要など
 #        p2 = p.get_real_callee_port
 #        ct = p2.get_celltype
@@ -1329,5 +1301,5 @@
     return if @singleton
 
-    # ID ã®åºæ°ããã³åæ°ã® define ãåºå
+    # ID の基数および個数の define を出力
     f.printf("#define %-20s %10s  /* %s #_NIDB_# */\n", "#{@global_name}_ID_BASE", "(#{@id_base})", TECSMsg.get(:NIDB_comment))
     f.printf("#define %-20s %10s  /* %s  #_NCEL_# */\n\n", "#{@global_name}_N_CELL", "(#{@n_cell_gen})", TECSMsg.get(:NCEL_comment))
@@ -1337,6 +1309,6 @@
     return if @singleton
 
-    # mikan  æé©å
-    # IDX æ­£å½æ§ãã§ãã¯ãã¯ã­ã®åºå
+    # mikan  最適化
+    # IDX 正当性チェックマクロの出力
     f.printf( TECSMsg.get( :CVI_comment ), "#_CVI_#" )
     if @idx_is_id_act then
@@ -1351,5 +1323,5 @@
     return if @singleton
 
-    # IDX æ­£å½æ§ãã§ãã¯ãã¯ã­ï¼ç­ç¸®å½¢ï¼ã®åºå
+    # IDX 正当性チェックマクロ（短縮形）の出力
     f.printf( TECSMsg.get( :CVIA_comment ), "#_CVIA_#")
     f.print("#define VALID_IDX(IDX)  #{@global_name}_VALID_IDX(IDX)\n\n")
@@ -1357,8 +1329,7 @@
   end
 
-  #=== å¼ã³å£é
-åã®å¤§ãããå¾ããã¯ã­ã®åºå
+  #=== 呼び口配列の大きさを得るマクロの出力
   #
-  #ã»ã«ã¿ã¤ããããã¸å¼ã³å£ã®åæ°ãåºå
+  #セルタイプヘッダへ呼び口の個数を出力
   def gen_ph_n_cp f
 
@@ -1374,10 +1345,8 @@
       end
 
-      if p.get_array_size != "[]" then       # åºå®é·é
-å
+      if p.get_array_size != "[]" then       # 固定長配列
         f.print( "#define N_CP_#{p.get_name}    (#{p.get_array_size})\n" )
         f.print( "#define NCP_#{p.get_name}     (#{p.get_array_size})\n" )
-      else                                   # å¯å¤é·é
-å
+      else                                   # 可変長配列
         if @singleton then
           if has_INIB? then
@@ -1388,5 +1357,5 @@
           f.print( "#define N_CP_#{p.get_name}  (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
           f.print( "#define NCP_#{p.get_name}   (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
-          # mikan singleton ãªãã°ãåºå®é·åã§ãã
+          # mikan singleton ならば、固定長化できる
         else
           if has_CB? && has_INIB? then
@@ -1402,8 +1371,7 @@
   end
 
-  #=== åãå£é
-åã®å¤§ãããå¾ããã¯ã­ã®åºå
+  #=== 受け口配列の大きさを得るマクロの出力
   #
-  #ã»ã«ã¿ã¤ããããã¸åãå£ã®åæ°ãåºå
+  #セルタイプヘッダへ受け口の個数を出力
   def gen_ph_n_ep f
 
@@ -1411,6 +1379,5 @@
     @port.each { |p|
       next if p.get_port_type != :ENTRY
-      # next if p.is_omit?                       # åãå£é
-åã®åæ°ã¯çç¥ããªã
+      # next if p.is_omit?                       # 受け口配列の個数は省略しない
       next if p.get_array_size == nil
 
@@ -1420,9 +1387,7 @@
       end
 
-      if p.get_array_size != "[]" then       # åºå®é·é
-å
+      if p.get_array_size != "[]" then       # 固定長配列
         f.print( "#define NEP_#{p.get_name}     (#{p.get_array_size})\n" )
-      else                                   # å¯å¤é·é
-å
+      else                                   # 可変長配列
         if @singleton then
           if has_INIB? then
@@ -1432,5 +1397,5 @@
           end
           f.print( "#define NEP_#{p.get_name}   (#{@global_name}_SINGLE_CELL_#{inib}.n_#{p.get_name})\n" )
-          # mikan singleton ãªãã°ãåºå®é·åã§ãã
+          # mikan singleton ならば、固定長化できる
         else
           if has_CB? && has_INIB? then
@@ -1445,5 +1410,5 @@
   end
 
-  #=== optional ãªå¼ã³å£ãçµåããã¦ããããã¹ãããã³ã¼ãã®çæ
+  #=== optional な呼び口が結合されているかテストするコードの生成
   def gen_ph_test_optional_call_port f
     b_comment = false
@@ -1466,5 +1431,5 @@
       next if p.get_port_type != :CALL
       next if ! p.is_optional?
-      # next if p.is_omit?  # omit ã§ã test ã³ã¼ãã¯çæãã
+      # next if p.is_omit?  # omit でも test コードは生成する
 
       if b_comment == false then
@@ -1484,9 +1449,8 @@
       end
 
-      # é¢æ°åã®åºå(æ¨æºï¼åãå£ãã£ã¹ã¯ãªãã¿ãã VMT ã®é¢æ°åãæé©åï¼åãå£é¢æ° or åãå£ãã£ã¹ã¯ãªãã¿)
-      # mikan  å
-¨é¨ã¤ãªãã£ã¦ãããã©ããã§ (1) ãå¤å®ãã
+      # 関数名の出力(標準：受け口ディスクリプタから VMT の関数名、最適化：受け口関数 or 受け口ディスクリプタ)
+      # mikan  全部つながっているかどうかで (1) を判定する
       if ! p.is_VMT_useless? then
-        # æ¨æºã³ã¼ã
+        # 標準コード
         if p.get_array_size == nil then
           if @singleton then
@@ -1496,6 +1460,5 @@
           end
         else
-          # é
-åã®å ´å
+          # 配列の場合
           if @singleton then
             f.print( "\t  ((#{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}!=0) \\\n" )
@@ -1507,18 +1470,17 @@
         end
       else
-        # æé©åã³ã¼ã (optimize) # VMT ä¸è¦ï¼é
-åè¦ç´ ãã¹ã¦åãï¼
+        # 最適化コード (optimize) # VMT 不要（配列要素すべて同じ）
         p2 = p.get_real_callee_port
         if p2 then
           ct = p2.get_celltype
           if p.is_skelton_useless? then
-            # åãå£é¢æ°ãç´æ¥å¼åºã
+            # 受け口関数を直接呼出す
             f.print( "\t  (1)\n" )
           else
-            # åãå£ã¹ã±ã«ãã³é¢æ°ãç´æ¥å¼åºã
+            # 受け口スケルトン関数を直接呼出す
             f.print( "\t  (1)\n" )
           end
         else
-          # optional ã§æªçµå
+          # optional で未結合
           f.print( "\t  (0)    /* not joined */\n" )
         end
@@ -1527,5 +1489,5 @@
   end
 
-  #=== optional ãªå¼ã³å£ãçµåããã¦ããããã¹ãããã³ã¼ãã®çæï¼ç­ç¸®å½¢ï¼
+  #=== optional な呼び口が結合されているかテストするコードの生成（短縮形）
   def gen_ph_test_optional_call_port_abbrev f
     b_comment = false
@@ -1534,5 +1496,5 @@
       next if p.get_port_type != :CALL
       next if ! p.is_optional?
-      # next if p.is_omit?  # omit ã§ã test ã³ã¼ãã¯çæãã
+      # next if p.is_omit?  # omit でも test コードは生成する
 
       if b_comment == false then
@@ -1550,11 +1512,11 @@
   end
 
-  #=== CELLCB ã¸ã®ãã¤ã³ã¿ãå¾ããã¯ã­ãåºå
-  #   ã»ã«ã¿ã¤ããããã¸åºå
+  #=== CELLCB へのポインタを得るマクロを出力
+  #   セルタイプヘッダへ出力
   def gen_ph_get_cellcb f
     f.printf( TECSMsg.get( :GCB_comment ), "#_GCB_#" )
     if ( ! has_CB? && ! has_INIB? ) || @singleton then
       f.print( "#define #{@global_name}_GET_CELLCB(idx) ((void *)0)\n" )
-    elsif @idx_is_id_act then   # mikan åä¸ã®ã»ã«ã®å ´åã®æé©å, idx_is_id ã§ãªãå ´å
+    elsif @idx_is_id_act then   # mikan 単一のセルの場合の最適化, idx_is_id でない場合
       f.print( "#define #{@global_name}_GET_CELLCB(idx) (#{@global_name}_CB_tab[(idx) - #{@global_name}_ID_BASE])\n" )
     else
@@ -1563,6 +1525,6 @@
   end
 
-  #=== CELLCB ã¸ã®ãã¤ã³ã¿ãå¾ããã¯ã­ï¼ç­ç¸®å½¢ï¼ãåºå
-  #  ã»ã«ã¿ã¤ããããã¸åºå
+  #=== CELLCB へのポインタを得るマクロ（短縮形）を出力
+  #  セルタイプヘッダへ出力
   def gen_ph_get_cellcb_abbrev f
     f.printf( TECSMsg.get( :GCBA_comment ), "#_GCBA_#" )
@@ -1580,6 +1542,6 @@
   end
 
-  #===  attribute, var ãã¢ã¯ã»ã¹ãããã¯ã­ãåºå
-  #    ã»ã«ã¿ã¤ããããã¸åºå
+  #===  attribute, var をアクセスするマクロを出力
+  #    セルタイプヘッダへ出力
   def gen_ph_attr_access f
     if @n_attribute_rw > 0 || @n_attribute_ro > 0 then
@@ -1591,5 +1553,5 @@
       next if a.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
@@ -1601,5 +1563,5 @@
         f.printf( "%-20s", "#{@global_name}_ATTR_#{a.get_name}" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         if ! a.is_rw? && has_CB? && has_INIB? then
@@ -1632,10 +1594,10 @@
       end
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
         f.printf( "%-20s", "#{@global_name}_GET_#{a.get_name}()" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_GET_#{a.get_name}(p_that)" )
@@ -1648,5 +1610,5 @@
           f.printf( "%-20s", "#{@global_name}_SET_#{a.get_name}(val)" )
           f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{a.get_name} = (val))\n" )
-          # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+          # mikan ここでは cell ではなく celltype の名前
         else
           f.printf( "%-20s", "#{@global_name}_SET_#{a.get_name}(p_that,val)" )
@@ -1680,10 +1642,10 @@
       end
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
         f.printf( "%-20s", "#{@global_name}_VAR_#{v.get_name}" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_#{inib}.#{v.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_VAR_#{v.get_name}(p_that)" )
@@ -1696,10 +1658,10 @@
       next if v.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       if @singleton then
         f.printf( "%-20s", "#{@global_name}_GET_#{v.get_name}()" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_CB.#{v.get_name})\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_GET_#{v.get_name}(p_that)" )
@@ -1711,5 +1673,5 @@
         f.printf( "%-20s", "#{@global_name}_SET_#{v.get_name}(val)" )
         f.print( "\t(#{@global_name}_SINGLE_CELL_CB.#{v.get_name}=(val))\n" )
-        # mikan ããã§ã¯ cell ã§ã¯ãªã celltype ã®åå
+        # mikan ここでは cell ではなく celltype の名前
       else
         f.printf( "%-20s", "#{@global_name}_SET_#{v.get_name}(p_that,val)" )
@@ -1721,5 +1683,5 @@
   end
 
-  #===  attribute/var ã¢ã¯ã»ã¹ãã¯ã­ï¼ç­ç¸®å½¢ï¼ã³ã¼ãã®çæ
+  #===  attribute/var アクセスマクロ（短縮形）コードの生成
   def gen_ph_attr_access_abbrev f
     if @n_attribute_rw > 0 || @n_attribute_ro > 0 then
@@ -1730,5 +1692,5 @@
       next if a.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       f.printf( "%-20s", "ATTR_#{a.get_name}" )
@@ -1748,5 +1710,5 @@
       next if v.is_omit?
 
-      # mikan const_value ã®å ´å
+      # mikan const_value の場合
       f.print( "#define " )
       f.printf( "%-20s", "VAR_#{v.get_name}" )
@@ -1809,7 +1771,7 @@
         delim = ""
 
-        # é¢æ°åã®åºå(æ¨æºï¼åãå£ãã£ã¹ã¯ãªãã¿ãã VMT ã®é¢æ°åãæé©åï¼åãå£é¢æ° or åãå£ãã£ã¹ã¯ãªãã¿)
+        # 関数名の出力(標準：受け口ディスクリプタから VMT の関数名、最適化：受け口関数 or 受け口ディスクリプタ)
         if ! p.is_VMT_useless? then
-          # æ¨æºã³ã¼ã
+          # 標準コード
           if @singleton then
             f.print( "\t  #{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}" )
@@ -1819,18 +1781,18 @@
           f.print( "#{subsc}->VMT->#{fun.get_name}__T( \\\n" )
         else
-          # æé©åã³ã¼ã (optimize) # VMT ä¸è¦
+          # 最適化コード (optimize) # VMT 不要
           p2 = p.get_real_callee_port
           if p2 then
             ct = p2.get_celltype
             if p.is_skelton_useless? then
-              # åãå£é¢æ°ãç´æ¥å¼åºã
+              # 受け口関数を直接呼出す
               f.print( "\t  #{ct.get_global_name}_#{p2.get_name}_#{fun.get_name}( \\\n" )
             else
-              # åãå£ã¹ã±ã«ãã³é¢æ°ãç´æ¥å¼åºã
+              # 受け口スケルトン関数を直接呼出す
               f.print( "\t  #{ct.get_global_name}_#{p2.get_name}_#{fun.get_name}_skel( \\\n" )
               # print "skelton: #{@name} #{ct.get_global_name}_#{p2.get_name}\n"
             end
           else
-            # optional ã§æªçµå
+            # optional で未結合
             f.print( "\t  ((#{fun.get_declarator.get_type.get_type.get_type_str} (*)()" )
             f.print( "#{fun.get_declarator.get_type.get_type.get_type_str_post})0)()\n" )
@@ -1842,10 +1804,9 @@
         end
 
-        b_join = true    # optional ã§çµåãã¦ããªãå ´å false
-
-        # åãå£æ
-å ±ã®åºå(æ¨æºï¼åãå£ãã£ã¹ã¯ãªãã¿ãæé©åï¼IDX ãªã©)
+        b_join = true    # optional で結合していない場合 false
+
+        # 受け口情報の出力(標準：受け口ディスクリプタ、最適化：IDX など)
         if ! p.is_skelton_useless? && ! p.is_cell_unique? then
-          # æ¨æºã³ã¼ã
+          # 標準コード
           if @singleton then
             f.print( "\t  #{@global_name}_SINGLE_CELL_#{inib}.#{p.get_name}#{subsc}" )
@@ -1856,10 +1817,9 @@
           end
         else
-          # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦
-          c2 = p.get_real_callee_cell               # å¯ä¸ã®ã»ã«(ã§ãªãå ´åããããè¤æ°ã»ã«ãããå ´å)
-          p2 = p.get_real_callee_port               # å¯ä¸ã®ãã¼ã(ã§ãªãå ´åã¯ããªã)
+          # 最適化コード (optimize) # スケルトン不要
+          c2 = p.get_real_callee_cell               # 唯一のセル(でない場合もある、複数セルがある場合)
+          p2 = p.get_real_callee_port               # 唯一のポート(でない場合は、ない)
           if p2 then
-            ct = p2.get_celltype                    # å¼ã³å
-ã®ã»ã«ã¿ã¤ã
+            ct = p2.get_celltype                    # 呼び先のセルタイプ
             if ! ct.is_singleton? then
               if ct.has_CB? || ct.has_INIB? then
@@ -1868,6 +1828,6 @@
                   f.print( "\t   #{name_array[7]}" )
                 else
-                  # CELLCB IDX ãæ¸¡ã (æ¨æºã³ã¼ãã¨åãã ããæ±ãåã¯ç°ãªã)
-                  # p.is_skelton_useless? == true/false ã¨ãã«åã
+                  # CELLCB IDX を渡す (標準コードと同じだが、扱う型は異なる)
+                  # p.is_skelton_useless? == true/false ともに同じ
                   f.print( "\t   (p_that)#{inib}->#{p.get_name}#{subsc}" )
                 end
@@ -1880,5 +1840,5 @@
             end
           else
-            # optional ã§æªçµå
+            # optional で未結合
             b_join = false
           end
@@ -1897,7 +1857,7 @@
   end
 
-  #=== send/receive ã§åãåã£ãã¡ã¢ãªé åã dealloc ãããã¯ã­ã³ã¼ã
+  #=== send/receive で受け取ったメモリ領域を dealloc するマクロコード
   #f:: File
-  #b_undef:: bool : true = #undef ã³ã¼ãã®çæ,  false = #define ã³ã¼ãã®çæ
+  #b_undef:: bool : true = #undef コードの生成,  false = #define コードの生成
   def  gen_ph_dealloc_code( f, append_name, b_undef = false )
     b_msg = false
@@ -1906,5 +1866,5 @@
 
       p.each_param{ |port, fd, par|
-        case par.get_direction                        # å¼æ°ã®æ¹åæå®å­ (in, out, inout, send, receive )
+        case par.get_direction                        # 引数の方向指定子 (in, out, inout, send, receive )
         when :SEND
           # next if port.get_port_type == :CALL
@@ -1923,5 +1883,5 @@
         end
 
-        #                      ãã¼ãå         é¢æ°å         ãã©ã¡ã¼ã¿å
+        #                      ポート名         関数名         パラメータ名
         dealloc_func_name = "#{port.get_name}_#{fd.get_name}_#{par.get_name}_dealloc"
         dealloc_macro_name = dealloc_func_name.upcase
@@ -1962,5 +1922,5 @@
     @port.each { |p|
       next if p.get_port_type != :CALL
-      # next if p.is_omit?  å¼ã³åºãã¨ã¨ã©ã¼ãèµ·ããã³ã¼ããçæ
+      # next if p.is_omit?  呼び出すとエラーを起こすコードを生成
 
       p.get_signature.get_function_head_array.each{ |fun|
@@ -2067,5 +2027,5 @@
         f.print( "struct tag_#{@global_name}_CB *" )
       elsif has_INIB? then
-        # f.print( "struct tag_#{@global_name}_INIB *" )  # const ãåºåãã¦ããªã
+        # f.print( "struct tag_#{@global_name}_INIB *" )  # const を出力していない
         f.print( "const struct tag_#{@global_name}_INIB *" )
       else
@@ -2103,5 +2063,5 @@
 
         if p.get_array_size then
-          f.print( "#{delim} int_t subscript" )     # mikan singleton æã® ',' ã®å§æ«
+          f.print( "#{delim} int_t subscript" )     # mikan singleton 時の ',' の始末
           delim = ","
         end
@@ -2111,5 +2071,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -2132,5 +2092,5 @@
 
   def gen_ph_ep_skel_prototype f
-    # åãå£ã¹ã±ã«ãã³é¢æ°ã®ãã­ãã¿ã¤ãå®£è¨ãåºå
+    # 受け口スケルトン関数のプロトタイプ宣言を出力
     if @n_entry_port >0 then
       f.printf( TECSMsg.get( :EPSP_comment ), "#_EPSP_#" )
@@ -2139,6 +2099,6 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-#      if p.is_skelton_useless? || ! p.is_VMT_useless? then    # åãå£æé©å
-      if p.is_skelton_useless? then    # åãå£æé©å
+#      if p.is_skelton_useless? || ! p.is_VMT_useless? then    # 受け口最適化
+      if p.is_skelton_useless? then    # 受け口最適化
 #        f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
         next
@@ -2159,5 +2119,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -2182,5 +2142,5 @@
 
     if ( $rom )then
-      # å®æ°é¨ã¯ ROM, å¤æ°é¨ã¯ RAM
+      # 定数部は ROM, 変数部は RAM
 
       if has_INIB? then
@@ -2215,6 +2175,5 @@
 
     else
-      # å
-¨ã¦ RAM
+      # 全て RAM
       f.printf( TECSMsg.get( :CCTPO_comment ), "#_CCTPO_#" )
 
@@ -2230,6 +2189,6 @@
 
 
-  #===   attribute ã®åå®£è¨åºå
-  #inib_cb::  :INIB ã¾ãã¯ :CB
+  #===   attribute の型宣言出力
+  #inib_cb::  :INIB または :CB
   def gen_cell_cb_type_attribute( f, inib_cb )
     if inib_cb == :INIB && @n_attribute_ro > 0 then
@@ -2264,5 +2223,5 @@
       next if v.is_omit?
       next if v.get_size_is == nil
-      next if $rom && inib_cb == :CB      # size_is æå®ããããã®ã¯ INIB ã«ã®ã¿åºåãã
+      next if $rom && inib_cb == :CB      # size_is 指定されたものは INIB にのみ出力する
 
       f.print "    "
@@ -2273,5 +2232,5 @@
 
   def gen_cell_cb_type_var f
-    # å¤æ°ã®åºå
+    # 変数の出力
     if @n_var > 0 then
       f.print "    /* var #_VA_# */ \n"
@@ -2281,5 +2240,5 @@
 
       next if v.is_omit?
-      next if v.get_size_is != nil    # size_is æå®ããã var ã¯ attribute ã¸åºåãã
+      next if v.get_size_is != nil    # size_is 指定された var は attribute へ出力する
 
       f.print "    "
@@ -2295,5 +2254,5 @@
 
   def gen_cell_cb_type_call_port f
-    # å¼ã³å£
+    # 呼び口
     if @n_call_port >0 then
       f.print "    /* call port #_TCP_# */ \n"
@@ -2308,5 +2267,5 @@
       if ! p.is_cell_unique? then
         if ! p.is_skelton_useless? then
-          # æ¨æºå½¢
+          # 標準形
           f.print( "    struct tag_#{p.get_signature.get_global_name}_VDES #{ptr}const*#{p.get_name;};\n" )
           if p.get_array_size == "[]" then
@@ -2314,13 +2273,11 @@
           end
         else
-          # æé©å skelton é¢æ°ãå¼åºããªã(åãå£é¢æ°ãç´æ¥å¼åºã)
-          # å¼ã³å
-ã»ã«ã¿ã¤ãã® CB ã® IDX å
+          # 最適化 skelton 関数を呼出さない(受け口関数を直接呼出す)
+          # 呼び先セルタイプの CB の IDX 型
           if p.get_real_callee_cell then
             f.print( "    " )
             p.get_real_callee_cell.get_celltype.gen_ph_idx_type f
             f.print( " #{ptr}#{p.get_name;};\n" )
-            # ç¸äºåç
-§ã«åãã¦ãtypedef ããåãä½¿ããªã
+            # 相互参照に備えて、typedef した型を使わない
             # f.print( "    #{p.get_real_callee_cell.get_celltype.get_global_name}_IDX #{ptr}#{p.get_name;};\n" )
             if p.get_array_size == "[]" then
@@ -2328,17 +2285,16 @@
             end
           #else
-          #  optional ã§æªçµå
+          #  optional で未結合
           end
         end
       # else
-        # æé©å ä¸ã¤ããã»ã«ããªãå ´åãåãå£ãã£ã¹ã¯ãªãã¿ã¾ãã¯åãå´ã® IDX ã¯å¼ã³å£é¢æ°ãã¯ã­ã«åãè¾¼ã¾ãã
-      end
-    }
-  end
-
-  #=== Celltype#åãå£é
-åæ·»æ°ãè¨æ¶ããå¤æ°ã®å®ç¾©
+        # 最適化 一つしかセルがない場合、受け口ディスクリプタまたは受け側の IDX は呼び口関数マクロに埋め込まれる
+      end
+    }
+  end
+
+  #=== Celltype#受け口配列添数を記憶する変数の定義
   def gen_cell_cb_type_entry_port f
-    # å¼ã³å£
+    # 呼び口
     if @n_entry_port >0 then
       f.print "    /* call port #_NEP_# */ \n"
@@ -2346,6 +2302,5 @@
 
     @port.each{ |p|
-      # next if p.is_omit?                       # åãå£é
-åã®åæ°ã¯çç¥ããªã
+      # next if p.is_omit?                       # 受け口配列の個数は省略しない
       if p.get_port_type == :ENTRY && p.get_array_size == "[]"
         f.print( "    int_t n_#{p.get_name};\n" )
@@ -2389,6 +2344,6 @@
   end
 
-  #===  ã¤ãã¬ã¼ã¿ã³ã¼ã (FOREACH_CELL)ã®çæ
-  #      singleton ã§ã¯åºåããªã
+  #===  イテレータコード (FOREACH_CELL)の生成
+  #      singleton では出力しない
   def gen_ph_foreach_cell f
 
@@ -2431,5 +2386,5 @@
 
 
-  #===  å¤æ°varåæåã³ã¼ã
+  #===  変数var初期化コード
   #
   def gen_ph_cb_initialize_macro f
@@ -2442,7 +2397,7 @@
         type = v.get_type
         if( type.kind_of? PtrType )then
-          # PtrType ã¯ ArrayType ã«ããæ¿ãã
-
-          # åæåå­ã®è¦ç´ æ°ã¨ãã (å¾ã¯ 0 ã§ãã)
+          # PtrType は ArrayType にすり替える
+
+          # 初期化子の要素数とする (後は 0 である)
           t2 = ArrayType.new( Expression.create_integer_constant( init.length, nil ) )
           t2.set_type( type.get_type )
@@ -2512,5 +2467,5 @@
 
     # else
-    #   ã»ã«ãä¸ã¤ããªããã°åºåããªã
+    #   セルが一つもなければ出力しない
     end
 
@@ -2519,5 +2474,5 @@
 
   def gen_ph_inline f
-    # inline ãã¼ããä¸ã¤ã§ãããã°ãinline.h ã® include
+    # inline ポートが一つでもあれば、inline.h の include
     if @n_entry_port_inline > 0 then
       f.printf( TECSMsg.get( :INL_comment ), "#_INL_#" )
@@ -2571,5 +2526,5 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      if p.is_skelton_useless?    # åãå£æé©å
+      if p.is_skelton_useless?    # 受け口最適化
         f.print( "/* #{p.get_name} : omitted by entry port optimize */\n\n" )
         next
@@ -2582,5 +2537,5 @@
         f.print( "    #{@name}_IDX  idx;\n" )
       else
-        # CB ã INIB ãå­å¨ããªã (ã®ã§ãidx ã¨ãã¦æ´æ°ã§åæåãã¦ãã)
+        # CB も INIB も存在しない (ので、idx として整数で初期化しておく)
         f.print( "    int           idx;\n" )
       end
@@ -2600,5 +2555,5 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      if p.is_skelton_useless? then    # åãå£æé©å
+      if p.is_skelton_useless? then    # 受け口最適化
         f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
         next
@@ -2619,5 +2574,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -2641,5 +2596,5 @@
         end
 
-        if functype.get_type_str == "void" then # mikan "void" ã® typedef ã«æªå¯¾å¿
+        if functype.get_type_str == "void" then # mikan "void" の typedef に未対応
           f.print "    "
         else
@@ -2684,5 +2639,5 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      if p.is_VMT_useless? then    # åãå£æé©å
+      if p.is_VMT_useless? then    # 受け口最適化
         f.print "/* #{p.get_name} : omitted by entry port optimize */\n"
         next
@@ -2710,36 +2665,31 @@
     end
 
-    # ãã®ã»ã«ã¿ã¤ãã®ãã¹ã¦ã®ã»ã«ã«ã¤ãã¦
+    # このセルタイプのすべてのセルについて
     @ordered_cell_list.each{ |c|
-      if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+      if c.is_generate? then                           # 生成対象か？
 
         f = fs[ c.get_region.get_domain_root ]
 
-        # çµåã®ãªã¹ã (NamedList)
+        # 結合のリスト (NamedList)
         jl = c.get_join_list
 
-        # å
-¨ã¦ã®çµåãªã¹ãã«ã¤ãã¦
+        # 全ての結合リストについて
         jl.get_items.each{ |j|
 
-          # å·¦è¾ºã®å®ç¾©ãå¾ã
+          # 左辺の定義を得る
           definition = j.get_definition
 
-          # å¼ã³å£ã§ã¯ãªãï¼ãï¼å±æ§ï¼
+          # 呼び口ではない？　（属性）
           next unless definition.instance_of? Port
 
-          port = find j.get_name # celltype ã® Port (ãã¡ãã«æé©åæ
-å ±ããã)
-          # port = definition    # definition ã¯ composite ã® Port ãå¾ããããã¨ããã
+          port = find j.get_name # celltype の Port (こちらに最適化情報がある)
+          # port = definition    # definition は composite の Port が得られることがある
           next if port.is_cell_unique?
           next if port.is_omit?
 
-          # é
-åè¦ç´ ãå¾ãï¼åãå£é
-åã§ãªããã° nil ãè¿ãï¼
+          # 配列要素を得る（受け口配列でなければ nil が返る）
           am = j.get_array_member2
 
-          # å¼ã³å£é
-åã?
+          # 呼び口配列か?
           if am  then
             i = 0
@@ -2748,5 +2698,5 @@
               if j then
                 if am[i].get_cell.get_celltype == self then
-                  # åãã»ã«ã¿ã¤ãã¸çµåãã¦ããå ´å(VDES ã§ã¯ type conflict ã«ãªã)
+                  # 同じセルタイプへ結合している場合(VDES では type conflict になる)
                   p = am[i].get_rhs_port
                   des_type = "const struct tag_#{@global_name}_#{p.get_name}_DES"
@@ -2755,10 +2705,8 @@
                 end
 
-                # å³è¾ºã¯åãå£é
-åãï¼
+                # 右辺は受け口配列か？
                 if j.get_rhs_subscript then
 
-                  # åãå£ã®é
-åæ·»æ°
+                  # 受け口の配列添数
                   subscript = j.get_rhs_subscript
 
@@ -2773,6 +2721,5 @@
                 end
               #else if j == nil
-              #  optioanl ã§é
-åè¦ç´ ãåæåããã¦ããªã
+              #  optioanl で配列要素が初期化されていない
               end
               i += 1
@@ -2780,5 +2727,5 @@
           else
             if j.get_cell.get_celltype == self then
-              # åãã»ã«ã¿ã¤ãã¸çµåãã¦ããå ´å(VDES ã§ã¯ type conflict ã«ãªã)
+              # 同じセルタイプへ結合している場合(VDES では type conflict になる)
               p = j.get_rhs_port
               des_type = "const struct tag_#{@global_name}_#{p.get_name}_DES"
@@ -2788,6 +2735,5 @@
 
             if j.get_rhs_subscript then
-              # åãå£é
-å
+              # 受け口配列
               subscript = j.get_rhs_subscript
               f.printf( "extern %s %s%d;\n",
@@ -2801,6 +2747,5 @@
             end
           end
-          # mikan   cell ã® namespace æªå¯¾å¿ãJoin ã§ Cell ãªãã¸ã§ã¯ããå¼å½ã¦ããå¿
-è¦ãã
+          # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておく必要あり
         }
 
@@ -2812,6 +2757,5 @@
   def gen_cell_ep_vdes_array fs
     if @n_cell_gen >0 then
-      fs.each{ |r, f| f.printf( TECSMsg.get( :CPA_comment ), "#_CPA_#" ) }  # mikan å¼ã³å£é
-åãç¡ãå ´åãåºã¦ãã¾ã
+      fs.each{ |r, f| f.printf( TECSMsg.get( :CPA_comment ), "#_CPA_#" ) }  # mikan 呼び口配列が無い場合も出てしまう
     end
 
@@ -2824,7 +2768,6 @@
           definition = j.get_definition
           next unless definition.instance_of? Port
-          # port = definition    # definition ã¯ composite ã® Port ãå¾ããããã¨ããã
-          port = find j.get_name # celltype ã® Port (ãã¡ãã«æé©åæ
-å ±ããã)
+          # port = definition    # definition は composite の Port が得られることがある
+          port = find j.get_name # celltype の Port (こちらに最適化情報がある)
           next if port.is_cell_unique?
           next if port.is_omit?
@@ -2832,6 +2775,5 @@
           am = j.get_array_member2
           if am  then
-            # å·¦è¾ºã¯é
-å
+            # 左辺は配列
 
             if ! port.is_skelton_useless? then
@@ -2842,10 +2784,8 @@
             else
 
-#              ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©åã®å ´åããã®é
-åã¯åç
-§ãããªã
-              # mikan ãã®ã±ã¼ã¹ããã¹ãããã¦ããªã
+#              スケルトン関数不要最適化の場合、この配列は参照されない
+              # mikan このケースがテストされていない
               f.printf( "const %s_IDX  %s_%s[] = {\n",
-#                        "#{j.get_celltype.get_global_name}",   # å³è¾º composite ã«å¯¾å¿ã§ããªã
+#                        "#{j.get_celltype.get_global_name}",   # 右辺 composite に対応できない
                         "#{j.get_rhs_cell.get_celltype.get_global_name}",
                         "#{c.get_global_name}",
@@ -2864,6 +2804,5 @@
 
               if j then
-                # åä¸ã»ã«ã¿ã¤ãã®çµåã®å ´åãVDES åã¸ã®ã­ã£ã¹ããå¿
-è¦
+                # 同一セルタイプの結合の場合、VDES 型へのキャストが必要
                 if j.get_rhs_cell.get_celltype == self then
                   definition = j.get_definition
@@ -2875,6 +2814,5 @@
                 
                 if j.get_rhs_subscript then
-                  # å³è¾ºé
-åã®å ´å(æé©åã¯ãªã)
+                  # 右辺配列の場合(最適化はない)
                   subscript = j.get_rhs_subscript
                   f.printf( "    %s%d,\n",
@@ -2885,6 +2823,5 @@
 
                 else
-                  # å³è¾ºéé
-åã®å ´å */
+                  # 右辺非配列の場合 */
                   if ! port.is_skelton_useless? then
                     f.printf( "    %s,\n",
@@ -2897,12 +2834,10 @@
                 end
               else
-                # optional ã§å¼ã³å£é
-åè¦ç´ ãåæåããã¦ããªã
+                # optional で呼び口配列要素が初期化されていない
                 f.printf( "    0,\n" )
               end
             # }
             end
-            # mikan   cell ã® namespace æªå¯¾å¿ãJoin ã§ Cell ãªãã¸ã§ã¯ããå¼å½ã¦ããå¿
-è¦ãã
+            # mikan   cell の namespace 未対応、Join で Cell オブジェクトを引当ておく必要あり
             f.print "};\n"
           end
@@ -2914,5 +2849,5 @@
   end
 
-  #=== CB ãåæåãããã­ã°ã©ã ã®çæ
+  #=== CB を初期化するプログラムの生成
   def gen_cell_cb_initialize_code f
     if ! need_CB_initializer?
@@ -2946,8 +2881,8 @@
   end
 
-  # === CB/INIB ã®å¤ã§åæåãããå¤æ°ã®åºå
+  # === CB/INIB の外で初期化される変数の出力
   def gen_cell_cb_out_init fs
 
-    # ã»ã«ããªããã°ãåºåããªã
+    # セルがなければ、出力しない
     if @n_cell_gen == 0 then
       return
@@ -2956,7 +2891,5 @@
     fs.each{ |r, f| f.printf( TECSMsg.get( :AVAI_comment ), "#_AVAI_#" ) }
 
-    # attribute, var ã®ãã¤ã³ã¿åã®åç
-§ããé
-åãçæ
+    # attribute, var のポインタ型の参照する配列を生成
     @ordered_cell_list.each{ |c|
       next if  ! c.is_generate?
@@ -2968,7 +2901,5 @@
       jl = c.get_join_list
 
-      # attribute, var ã®ãã¤ã³ã¿å¤æ°ãé
-åã«ããåæåãããå ´åã®ãé
-åãåºå
+      # attribute, var のポインタ変数が配列により初期化される場合の、配列を出力
       av_list = ct.get_attribute_list + ct.get_var_list
       if av_list.length != 0 then
@@ -2986,9 +2917,7 @@
 
             if size then
-              # å¼ãè©ä¾¡ãã(attribute, var ã«å«ã¾ããå¤æ°ãåç
-§å¯è½)
+              # 式を評価する(attribute, var に含まれる変数を参照可能)
               sz = size.eval_const( c.get_join_list, c.get_celltype.get_name_list )
-              # å¼ãçæããªãã (å¤æ°ãå«ã¾ãªãå½¢ã«ãã)  ä¸å®å
-¨ãªå½¢ã§ Token ãçæ (ã¨ã©ã¼çºçããªããã)
+              # 式を生成しなおす (変数を含まない形にする)  不完全な形で Token を生成 (エラー発生しないから)
               size = Expression.new( [:INTEGER_CONSTANT, Token.new(sz, nil, 0, 0)] )
               array_type = ArrayType.new( size )
@@ -3004,5 +2933,5 @@
 								# name_array[3]: cell_CB_INIT
               if !( $ram_initializer && a.get_kind == :VAR ) then
-                # -R (ram initializer ä½¿ç¨) ã®å ´å var ã¯åæåã³ã¼ããåºåããªã
+                # -R (ram initializer 使用) の場合 var は初期化コードを出力しない
                 if( init )then
                   str = " = #{gen_cell_cb_init( f, c, name_array, array_type, init, a.get_identifier, 1, true )}"
@@ -3022,7 +2951,7 @@
   end
 
-  #=== var ã®åæå¤ã® ROM é¨ã¸ã®
+  #=== var の初期値の ROM 部への
   def gen_cell_var_init f
-    # var ã®{ }ã§å²ã¾ããåæå¤æå®ããããèª¿ã¹ã
+    # var の{ }で囲まれた初期値指定があるか調べる
     n_init = 0
     @var.each { |v|
@@ -3041,7 +2970,7 @@
 
           if( type.kind_of? PtrType )then
-            # PtrType ã¯ ArrayType ã«ããæ¿ãã
-
-            # åæåå­ã®è¦ç´ æ°ã ãã¨ããï¼å¾ã¯ 0)
+            # PtrType は ArrayType にすり替える
+
+            # 初期化子の要素数だけとする（後は 0)
             t2 = ArrayType.new( Expression.create_integer_constant( init.length, nil ) )
             t2.set_type( type.get_type )
@@ -3049,16 +2978,15 @@
           end
 
-          c = @ordered_cell_list[0]   # ä»®ã® cell (å®éã«ã¯ä½¿ãããªã)
+          c = @ordered_cell_list[0]   # 仮の cell (実際には使われない)
           name_array = get_name_array( c )
           # f.print "const #{type0.get_type_str}\t#{@global_name}_#{v.get_name}_VAR_INIT#{type0.get_type_str_post} = "
           f.print "const #{type.get_type_str}\t#{@global_name}_#{v.get_name}_VAR_INIT#{type.get_type_str_post} = "
           if type.kind_of? StructType then
-            # celltype ã® default ã®åæå¤ãã
+            # celltype の default の初期値あり
             str = gen_cell_cb_init( f, c, name_array, type, init, v.get_identifier, 1, true )
           elsif( type.kind_of?( PtrType ) || type.kind_of?( ArrayType ) ) then
             str = "{ "
             type = type.get_type
-            # mikan ãã¤ã³ã¿ã§ã¯ãªããé
-ååã¨ããªãã¨ããã¤ã³ã¿å¤æ°ã®é åã®åãæãã
+            # mikan ポインタではなく、配列型としないと、ポインタ変数の領域の分、損する
             init.each { |i|
               str += gen_cell_cb_init( f, c, name_array, type, i, v.get_identifier, 1, true )
@@ -3117,5 +3045,5 @@
 
         unless @singleton then
-          # 1 ã¤ã® cell INIB ã®çµãã
+          # 1 つの cell INIB の終わり
           if @idx_is_id_act then
             f.print( "};\n\n" )
@@ -3135,5 +3063,5 @@
       end
 
-      # RAM initializer ãä½¿ç¨ããªããã¾ãã¯ ROM åããªã
+      # RAM initializer を使用しない、または ROM 化しない
       if $ram_initializer == false || $rom == false then
         if @singleton then
@@ -3177,5 +3105,5 @@
 
           unless @singleton then
-            # 1 ã¤ã® cell CB ã®çµãã
+            # 1 つの cell CB の終わり
             if @idx_is_id_act then
               f.print( "};\n\n" )
@@ -3215,5 +3143,5 @@
         f.print "/* ID to INIB table #_INTAB_# */\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # çæå¯¾è±¡ãã¤ãã«ã¼ãä»¥å¤ã
+          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3224,5 +3152,5 @@
         f.print "#{@global_name}_INIB *#{@global_name}_INIB_tab[] ={\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+          if c.is_generate? then                           # 生成対象か？
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3235,5 +3163,5 @@
         f.print "/* ID to CB table #_CBTAB_# */\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # çæå¯¾è±¡ãã¤ãã«ã¼ãä»¥å¤ã
+          if c.is_generate? && ( c.get_region.get_domain_root != Region.get_root ) then # 生成対象かつ、ルート以外か
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3244,5 +3172,5 @@
         f.print "#{@global_name}_CB *#{@global_name}_CB_tab[] ={\n"
         @ordered_cell_list.each{ |c|
-          if c.is_generate? then                           # çæå¯¾è±¡ãï¼
+          if c.is_generate? then                           # 生成対象か？
             name_array = get_name_array( c )
             print_indent( f, indent + 1 )
@@ -3256,15 +3184,12 @@
 
 
-  #=== name_array ãçæ
+  #=== name_array を生成
   # IN:   cell  : Cell
-  #       index : CB, INIB é
-åã®æ·»æ°
+  #       index : CB, INIB 配列の添数
   # RETURN: name_array
   #   name_array[0] = @name           # celltype name
   #   name_array[1] = cell.get_name   # cell name
   #   name_array[2] = cell_CB_name    # cell_CB_name
-  #   name_array[3] = cell_CB_INIT    # cell_CB_INIT # CB ã®å¤å´ã§åæåãå¿
-è¦ãªé
-åã®åå
+  #   name_array[3] = cell_CB_INIT    # cell_CB_INIT # CB の外側で初期化が必要な配列の名前
   #   name_array[4] = cell_CB_proto   # CB name for prototype
   #   name_array[5] = cell_INIB       # INIB name
@@ -3305,5 +3230,5 @@
 
     if ! has_CB? && ! has_INIB? then
-      cell_CBP = "NULL"    # CB ã INIB ããªããã° NULL ã«ç½®æ
+      cell_CBP = "NULL"    # CB も INIB もなければ NULL に置換
     else
       cell_CBP = "&#{cell_CB_name}"
@@ -3326,8 +3251,7 @@
   end
 
-  #=== attribute ã¨ size_is æå®ããã var (ãã¤ã³ã¿)ã®åæåãã¼ã¿ãåºå
+  #=== attribute と size_is 指定された var (ポインタ)の初期化データを出力
   #
-  # ROM åãµãã¼ãã®æç¡ãããã³åºåå¯¾è±¡ã CB ã INIB ãã«ããåºåãããå
-å®¹ãç°ãªã
+  # ROM 化サポートの有無、および出力対象が CB か INIB かにより出力される内容が異なる
   def gen_cell_cb_attribute( cell, indent, f, name_array, cb_inib )
     ct = self
@@ -3339,11 +3263,10 @@
       f.print "/* attribute(RO) */ \n"
     elsif $rom then  # && cb_inib == CB
-      # CB ã§ rw ã¨ var
+      # CB で rw と var
       return if @n_attribute_rw == 0
       print_indent( f, indent + 1 )
       f.print "/* attribute(RW) */ \n"
     else  # cb_inib == CB && $rom == false
-      # CB ã«å
-¨é¨
+      # CB に全部
       return if @n_attribute_rw == 0 && @n_attribute_ro == 0 && @n_var_size_is == 0
       print_indent( f, indent + 1 )
@@ -3355,5 +3278,5 @@
       next if a.is_omit?
       if cb_inib == :INIB && a.is_rw? == true then
-        # $rom == true ã§ãããããã¸æ¥ãªã
+        # $rom == true でしか、ここへ来ない
         next
       elsif cb_inib == :CB && $rom && ! a.is_rw? then
@@ -3363,11 +3286,11 @@
       j = jl.get_item( a.get_identifier )
       if j then
-        # cell ã®åæå¤æå®ãã
+        # cell の初期値指定あり
         gen_cell_cb_init( f, cell, name_array, a.get_type, j.get_rhs, a.get_identifier, indent + 1 )
       elsif a.get_initializer then
-        # celltype ã® default ã®åæå¤ãã
+        # celltype の default の初期値あり
         gen_cell_cb_init( f, cell, name_array, a.get_type, a.get_initializer, a.get_identifier, indent + 1 )
       else
-        # åæå¤æªæå®
+        # 初期値未指定
         gen_cell_cb_init( f, cell, name_array, a.get_type, nil, a.get_identifier, indent + 1 )
       end
@@ -3375,10 +3298,10 @@
     @var.each{ |v|
       next if v.is_omit?
-      next if v.get_size_is == nil   # size_is æå®ãããå ´å attribute ã®ä¸é¨ã¨ãã¦åºå
+      next if v.get_size_is == nil   # size_is 指定がある場合 attribute の一部として出力
 
       if v.get_initializer && $ram_initializer == false then
         gen_cell_cb_init( f, cell, name_array, v.get_type, v.get_initializer, v.get_identifier, indent + 1 )
       else
-        # åæå¤æªæå® ã¾ãã¯ RAM initializer ä½¿ç¨
+        # 初期値未指定 または RAM initializer 使用
         gen_cell_cb_init( f, cell, name_array, v.get_type, nil, v.get_identifier, indent + 1 )
       end
@@ -3386,5 +3309,5 @@
   end
 
-  #=== var ã®åæåãã¼ã¿ãåºå
+  #=== var の初期化データを出力
   def gen_cell_cb_var( cell, indent, f, name_array )
     jl = cell.get_join_list
@@ -3396,10 +3319,10 @@
 
         next if v.is_omit?
-        next if v.get_size_is      # size_is æå®ãããå ´å attribute ã®ä¸é¨ã¨ãã¦åºå
+        next if v.get_size_is      # size_is 指定がある場合 attribute の一部として出力
 
         if v.get_initializer && $ram_initializer == false then
           gen_cell_cb_init( f, cell, name_array, v.get_type, v.get_initializer, v.get_identifier, indent + 1 )
         else
-          # åæå¤æªæå® ã¾ãã¯ RAM initializer ä½¿ç¨
+          # 初期値未指定 または RAM initializer 使用
           gen_cell_cb_init( f, cell, name_array, v.get_type, nil, v.get_identifier, indent + 1 )
         end
@@ -3413,5 +3336,5 @@
   end
 
-  #=== å¼ã³å£ã®åæåã³ã¼ãã®çæ
+  #=== 呼び口の初期化コードの生成
   def gen_cell_cb_call_port( cell, indent, f, name_array )
     jl = cell.get_join_list
@@ -3424,5 +3347,5 @@
         next if p.get_port_type != :CALL
         next if p.is_omit?
-        next if p.is_cell_unique?        # æé©åï¼åä¸ã»ã«ã§å¼ã³å£ãã¯ã­ã«åãè¾¼ã¾ããï¼
+        next if p.is_cell_unique?        # 最適化（単一セルで呼び口マクロに埋め込まれる）
 
         j = jl.get_item( p.get_name )
@@ -3431,11 +3354,10 @@
         # debug
         if j == nil then
-          # optional å¼ã³å£
+          # optional 呼び口
           # cdl_error( "H1003 internal error: cell \'$1\' port \'$2\': initializer not found\n" , cell.get_name, p.get_name )
           # exit( 1 )
           f.printf( "%-40s /* #_CCP5_# */\n",  "0," )
           if p.get_array_size == "[]" then
-            # æ·»æ°çç¥ã®å¼ã³å£é
-å
+            # 添数省略の呼び口配列
             print_indent( f, indent + 1 )
             f.printf( "%-40s /* %s #_CCP6_# */\n", "0,", "length of #{p.get_name} (n_#{p.get_name})" )
@@ -3446,16 +3368,13 @@
         am = j.get_array_member2
         if am then
-          # å¼ã³å£é
-åã®å ´å
+          # 呼び口配列の場合
           f.printf( "%-40s /* #_CCP3_# */\n",  "#{cell.get_global_name}_#{j.get_name}," )
           if p.get_array_size == "[]" then
-            # æ·»æ°çç¥ã®å¼ã³å£é
-å
+            # 添数省略の呼び口配列
             print_indent( f, indent + 1 )
             f.printf( "%-40s /* %s #_CCP4_# */\n", "#{am.length},", "length of #{p.get_name} (n_#{p.get_name})" )
           end
         else
-          # åä¸ã»ã«ã¿ã¤ãã®çµåã®å ´åãVDES åã¸ã®ã­ã£ã¹ããå¿
-è¦
+          # 同一セルタイプの結合の場合、VDES 型へのキャストが必要
           #print "CCP0/CCP1 #{p.get_name}, #{j.get_rhs_cell.get_celltype.get_name}, #{@name}\n"
           if j.get_rhs_cell.get_celltype == self then
@@ -3467,6 +3386,5 @@
 
           if j.get_rhs_subscript then
-            # åãå£é
-åã®å ´å
+            # 受け口配列の場合
             subscript = j.get_rhs_subscript
             f.printf( "%-40s /* %s #_CCP0_# */\n",
@@ -3475,7 +3393,5 @@
                       p.get_name )
           else
-            # å¼ã³å£é
-åã§ããåãå£é
-åã§ããªã
+            # 呼び口配列でも、受け口配列でもない
             if ! p.is_skelton_useless? then
               f.printf( "%-40s /* %s #_CCP1_# */\n",
@@ -3483,16 +3399,12 @@
                         p.get_name )
             else
-              # ã¹ã±ã«ãã³ä¸è¦æé©åï¼CB (INIB) ã¸ã®ãã¤ã³ã¿ãåãè¾¼ãï¼
-              c = j.get_rhs_cell                    # å¼ã³å
-ã»ã«
-              ct = c.get_celltype                   # å¼ã³å
-ã»ã«ã¿ã¤ã
+              # スケルトン不要最適化（CB (INIB) へのポインタを埋め込む）
+              c = j.get_rhs_cell                    # 呼び先セル
+              ct = c.get_celltype                   # 呼び先セルタイプ
               if ct.has_INIB? || ct.has_CB? then
-                name_array = ct.get_name_array( c )   # å¼ã³å
-ã»ã«ã¿ã¤ãã§ name_array ãå¾ã
+                name_array = ct.get_name_array( c )   # 呼び先セルタイプで name_array を得る
                 f.printf( "%-40s /* %s #_CCP2_# */\n", "#{name_array[7]},", p.get_name )
               else
-                # å¼ã³å
-ã¯ CB ã INIB ãæããªãï¼NULL ã«åæåï¼
+                # 呼び先は CB も INIB も持たない（NULL に初期化）
                 f.printf( "%-40s /* %s #_CCP2_# */\n", "0,", p.get_name )
               end
@@ -3505,5 +3417,5 @@
   end
 
-  #=== åãå£ã®åæåã³ã¼ãã®çæ
+  #=== 受け口の初期化コードの生成
   def gen_cell_cb_entry_port( cell, indent, f, name_array )
     jl = cell.get_join_list
@@ -3514,6 +3426,5 @@
       f.print "/* entry port #_EP_# */ \n"
       @port.each{ |p|
-        # next if p.is_omit?  # åãå£é
-åã®åæ°ã¯çç¥ããªã
+        # next if p.is_omit?  # 受け口配列の個数は省略しない
         if p.get_port_type == :ENTRY && p.get_array_size == "[]"
           print_indent( f, indent + 1 )
@@ -3524,11 +3435,10 @@
   end
 
-  #=== ã»ã«ã® attribute ã®åæå¤ãåºå
+  #=== セルの attribute の初期値を出力
   #
-  #f_get_str:: true ã®å ´åãæå­åãè¿ããfalse ã®å ´åããã¡ã¤ã« f ã«åºåããï¼
-  # æå­åãè¿ãã¨ããæ«å°¾ã« ',' ã¯å«ã¾ããªãï¼
-  # ãã¡ã¤ã«ã¸åºåããã¨ããæ«å°¾ã« ',' ãåºåãããï¼æ§é ä½è¦ç´ ãé
-åè¦ç´ ã®åæå¤ãåºåããã¨ ',' ãäºéã«åºåãããï¼
-  # ãã ãç¾ç¶ã§ã¯ããã¡ã¤ã«ã¸åºåãããã¨ã¯ãªã
+  #f_get_str:: true の場合、文字列を返す、false の場合、ファイル f に出力する．
+  # 文字列を返すとき、末尾に ',' は含まれない．
+  # ファイルへ出力するとき、末尾に ',' が出力される．構造体要素、配列要素の初期値を出力すると ',' が二重に出力される．
+  # ただし現状では、ファイルへ出力することはない
   #
   def gen_cell_cb_init( f, cell, name_array, type, init, identifier, indent, f_get_str = false )
@@ -3544,5 +3454,5 @@
 
       if f_get_str then
-        # åæå¤æªæå®
+        # 初期値未指定
         if type.kind_of?( BoolType ) then
           str = "false"   # formerly tecs_false
@@ -3568,5 +3478,5 @@
         return str
       else
-        # åæå¤æªæå®
+        # 初期値未指定
         if type.kind_of?( BoolType ) then
           f.print "    " * indent
@@ -3602,7 +3512,6 @@
     end    
 
-    # ãã®ã¡ã½ããã¯ Celltype ã®ãã®ã§ããå¿
-è¦ã¯ç¡ãï¼ä¸ã«ç¶ãã®ã§ããã«ç½®ãï¼
-    # åæå¤æå®ãã
+    # このメソッドは Celltype のものである必要は無い（上に続くのでここに置く）
+    # 初期値指定あり
     if type.kind_of?( BoolType ) then
       if init.instance_of?( C_EXP ) then
@@ -3670,5 +3579,5 @@
 
       len.times {
-        next if ! init[i]        # mikan ãã®å¦ç½®ã¯é©åï¼
+        next if ! init[i]        # mikan この処置は適切？
         if f_get_str then
           str += gen_cell_cb_init( f, cell, name_array, at, init[i], "#{identifier}[#{i}]", indent + 1, f_get_str )
@@ -3752,6 +3661,5 @@
   end
 
-  #== é¢æ°ãã¼ãã«ã®å¤é¨åç
-§
+  #== 関数テーブルの外部参照
   def gen_cell_extern_mt fs
     fs.each{ |r, f|
@@ -3768,5 +3676,5 @@
   end
 
-  #=== åãå£ãã£ã¹ã¯ãªãã¿ã®å®ç¾©ãçæ
+  #=== 受け口ディスクリプタの定義を生成
   def gen_cell_ep_des fs
     if @n_cell_gen >0 then
@@ -3789,5 +3697,5 @@
           next if p.get_port_type != :ENTRY
           next if p.is_omit?
-          if p.is_skelton_useless?       # åãå£æé©ån ep_opt
+          if p.is_skelton_useless?       # 受け口最適化n ep_opt
             f.print( "/* #{p.get_name} : omitted by entry port optimize */\n" )
             next
@@ -3800,6 +3708,5 @@
 
           if len != nil then
-            # åãå£é
-åã®å ´å
+            # 受け口配列の場合
             i = 0
             while i < len
@@ -3882,14 +3789,12 @@
     return if @b_reuse && ! $generate_all_template
     if ! ( @plugin && @plugin.gen_ep_func? ) then
-      return if $generate_no_template     # $generate_all_template ããåªå
-ããã
-
-      # åèã¨ãã¦åºåãããã³ãã¬ã¼ããã¡ã¤ã«ã§ãããã¨ãç¤ºãããã« "_templ" ãä»å ãã
+      return if $generate_no_template     # $generate_all_template より優先される
+
+      # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
       fname = "#{$gen}/#{@global_name}_templ.#{$c_suffix}"
     else
-      # Plugin ã«ããçæãããã»ã«ã¿ã¤ãã«ã¤ãã¦ã¯ãååçã«ãã³ãã¬ã¼ãã§ã¯ãªãã
-      # ä¿®æ­£ä¸è¦ãªã»ã«ã¿ã¤ãã®å®è£
-ã³ã¼ããçæããï¼
-      # ãã®ããããã¡ã¤ã«åã« _temp ãä»å ããªã
+      # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
+      # 修正不要なセルタイプの実装コードを生成する．
+      # このため、ファイル名に _temp を付加しない
       fname = "#{$gen}/#{@global_name}.#{$c_suffix}"
     end
@@ -3906,5 +3811,5 @@
     gen_template_attr_access f
     gen_template_cp_fun f
-    # gen_template_types f     # 0805503 è¿½å ãã¦ã¿ããããã£ã±ãããã
+    # gen_template_types f     # 0805503 追加してみたが、やっぱりやめる
     f.print( " *\n * #[</PREAMBLE>]# */\n\n" )
     f.printf TECSMsg.get( :PAC_comment ), "#_PAC_#"
@@ -3912,5 +3817,5 @@
     gen_template_private_header f
     if ( @plugin ) then
-      # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+      # このメソッドの引数は plugin.rb の説明を見よ
       @plugin.gen_preamble( f, @singleton, @name, @global_name )
     end
@@ -3921,5 +3826,5 @@
 
     if ( @plugin ) then
-      # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+      # このメソッドの引数は plugin.rb の説明を見よ
       @plugin.gen_postamble( f, @singleton, @name, @global_name )
     end
@@ -4075,6 +3980,6 @@
       next if p.get_port_type != :ENTRY
       next if p.is_omit?
-      next if b_inline && ! p.is_inline?  # inline ãã¼ã
-      next if ! b_inline && p.is_inline?  # é inline ãã¼ã
+      next if b_inline && ! p.is_inline?  # inline ポート
+      next if ! b_inline && p.is_inline?  # 非 inline ポート
 
       inline_prefix = ""
@@ -4133,5 +4038,5 @@
           len = items.length
         else
-          # ããã§ nil ã«ãªãã®ã¯ãå¼æ°ãªãã®æã« void ããªãã£ãå ´å
+          # ここで nil になるのは、引数なしの時に void がなかった場合
           items = []
           len = 0
@@ -4153,5 +4058,5 @@
 
         if ( @plugin && @plugin.gen_ep_func? ) then
-          # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+          # このメソッドの引数は plugin.rb の説明を見よ
           @plugin.gen_ep_func_body( f, @singleton, @name, @global_name, p.get_signature.get_global_name, p.get_name, fun.get_name, "#{@global_name}_#{p.get_name}_#{fun.get_name}", functype, items )
 
@@ -4200,14 +4105,12 @@
     if ! ( @plugin && @plugin.gen_ep_func? ) then
       return if @b_reuse && ! $generate_all_template
-      return if $generate_no_template     # $generate_all_template ããåªå
-ããã
-
-      # åèã¨ãã¦åºåãããã³ãã¬ã¼ããã¡ã¤ã«ã§ãããã¨ãç¤ºãããã« "_templ" ãä»å ãã
+      return if $generate_no_template     # $generate_all_template より優先される
+
+      # 参考として出力するテンプレートファイルであることを示すために "_templ" を付加する
       fname = "#{$gen}/#{@global_name}_inline_templ.#{$h_suffix}"
     else
-      # Plugin ã«ããçæãããã»ã«ã¿ã¤ãã«ã¤ãã¦ã¯ãååçã«ãã³ãã¬ã¼ãã§ã¯ãªãã
-      # ä¿®æ­£ä¸è¦ãªã»ã«ã¿ã¤ãã®å®è£
-ã³ã¼ããçæããï¼
-      # ãã®ããããã¡ã¤ã«åã« _temp ãä»å ããªã
+      # Plugin により生成されたセルタイプについては、原則的にテンプレートではなく、
+      # 修正不要なセルタイプの実装コードを生成する．
+      # このため、ファイル名に _temp を付加しない
       fname = "#{$gen}/#{@global_name}_inline.#{$h_suffix}"
     end
@@ -4232,5 +4135,5 @@
 
     if ( @plugin ) then
-      # ãã®ã¡ã½ããã®å¼æ°ã¯ plugin.rb ã®èª¬æãè¦ã
+      # このメソッドの引数は plugin.rb の説明を見よ
       @plugin.gen_postamble( f, @singleton, @name, @global_name )
     end
@@ -4249,19 +4152,19 @@
       if fa.get_name == :write then
 
-        # åå¾ã® " ãåãé¤ã
+        # 前後の " を取り除く
         # file_name = fa.get_file_name.sub( /^\"(.*)\"$/, "\\1" )
         file_name = CDLString.remove_dquote fa.get_file_name
         format = CDLString.remove_dquote fa.get_format
-        # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # åã® " ãåãé¤ã
-        # format    = format.sub( /(.*)\"\z/, "\\1" )              # å¾ã® " ãåãé¤ã
+        # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
+        # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
         format    = format.gsub( /\\\n/, "\n" )                  # \\\n => \n
 
 
-        # mikan ä»¥ä¸ã¯ subst_name ã§ç½®æããããã«å¤æ´ãã¹ã
-        file_name = file_name.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        file_name = file_name.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        format    = format.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        format    = format.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ ãã»ã«ã¿ã¤ãåã«ç½®æ
-        format    = format.gsub( /\$\$/, "\$" )                # $$ ã $ ã«ç½®æ
+        # mikan 以下は subst_name で置換するように変更すべき
+        file_name = file_name.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
+        file_name = file_name.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
+        format    = format.gsub( /(^|[^\$])\$ct\$/, "\\1#{@name}" )   # $ct$ をセルタイプ名に置換
+        format    = format.gsub( /(^|[^\$])\$ct_global\$/, "\\1#{@global_name}" )   # $ct$ をセルタイプ名に置換
+        format    = format.gsub( /\$\$/, "\$" )                # $$ を $ に置換
 
         if file_name[0] != ?/ then
@@ -4275,5 +4178,5 @@
             puts( format )
           end
-          # format ä¸­ã® \n, \r, \t, \f ã¨ \" ãªã©ãç½®æ
+          # format 中の \n, \r, \t, \f と \" などを置換
           fmt = CDLString.escape format
           cfg_file.print( fmt )
@@ -4292,5 +4195,5 @@
     @ordered_cell_list.each{ |c|
 
-      # cell ã®ãã­ãã¿ã¤ãå®£è¨ãªãç¡è¦
+      # cell のプロトタイプ宣言なら無視
       next if ! c.is_generate?
 
@@ -4301,12 +4204,12 @@
         if fa.get_name == :write then
 
-          # åå¾ã® " ãåãé¤ã
+          # 前後の " を取り除く
           # file_name = fa.get_file_name.sub( /^\"(.*)\"$/, "\\1" )
           file_name = CDLString.remove_dquote fa.get_file_name
           file_name = subst_name( file_name, name_array )
-          # format    = fa.get_format.sub( /^\"(.*)\"$/, "\\1" )        # åå¾ã® "" ãåãé¤ã
+          # format    = fa.get_format.sub( /^\"(.*)\"$/, "\\1" )        # 前後の "" を取り除く
           format    = CDLString.remove_dquote fa.get_format
-          # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # åã® " ãåãé¤ã
-          # format    = format.sub( /(.*)\"\z/, "\\1" )              # å¾ã® " ãåãé¤ã
+          # format    = fa.get_format.sub( /^\"(.*)/, "\\1" )        # 前の " を取り除く
+          # format    = format.sub( /(.*)\"\z/, "\\1" )              # 後の " を取り除く
           format    = format.gsub( /\\\n/, "\n" )                  # \\\n => \n
 
@@ -4319,10 +4222,10 @@
           end
 
-          na = []     # ã·ã³ãã«ã attribute ã®å¤ã«ç½®ãæããå¾ã®å¼æ°
+          na = []     # シンボルを attribute の値に置き換えた後の引数
           if arg_list then
             arg_list.each { |a|
               case a[0]
-              when :STRING_LITERAL   # æå­åå®æ°
-                # s = a[1].sub( /^\"(.*)\"$/, "\\1" )            # åå¾ã® "" ãåãé¤ã
+              when :STRING_LITERAL   # 文字列定数
+                # s = a[1].sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く
                 s = CDLString.remove_dquote a[1]
                 s = subst_name( s, name_array )
@@ -4331,13 +4234,12 @@
                 na << s
               when :IDENTIFIER
-                param_name = a[1]    # è­å¥å­ï¼å±æ§ã®ååï¼
+                param_name = a[1]    # 識別子（属性の名前）
                 attr = self.find( param_name )
-                init = attr.get_initializer      # celltype ã§æå®ãããåæå¤
-
-                # cell ã® join ã®ãªã¹ãããååãæ¢ã
+                init = attr.get_initializer      # celltype で指定された初期値
+
+                # cell の join のリストから名前を探す
                 j = c.get_join_list.get_item( param_name )
-                if j then    # param_name ã® cell ã®ã¸ã§ã¤ã³ãããã
-                  init = j.get_rhs                    # cell ã§æå®ãããåæå¤ãåªå
-
+                if j then    # param_name の cell のジョインがあるか
+                  init = j.get_rhs                    # cell で指定された初期値を優先
                 end
 
@@ -4345,5 +4247,5 @@
                                       # file,cell, name_array, type,          init, identifier,       indent, f_get_str
 
-                # str = str.sub( /^\"(.*)\"$/, "\\1" )            # åå¾ã® "" ãåãé¤ã mikan ããã§ç½®æã§ããï¼
+                # str = str.sub( /^\"(.*)\"$/, "\\1" )            # 前後の "" を取り除く mikan ここで置換でよい？
                 str = CDLString.remove_dquote str
                 na << str
@@ -4363,5 +4265,5 @@
             end
 
-            # format ä¸­ã® \n, \r, \t, \f ã¨ \" ãªã©ãç½®æ
+            # format 中の \n, \r, \t, \f と \" などを置換
             fmt = CDLString.escape format
             cfg_file.printf( fmt, *na )
@@ -4387,5 +4289,5 @@
     return if $generate_no_template
 
-    # Makefile.templ ã®çæï¼è¿½è¨ï¼
+    # Makefile.templ の生成（追記）
 
     f = AppFile.open( "#{$gen}/Makefile.templ" )
@@ -4395,7 +4297,7 @@
  
 EOT
-# ãã®çæè¦åã¯2ç¹ã§æå³ããªã
-#  ã»$(GEN_DIR) ã« .o ãçæããã«ã¼ã«ããªã
-#  ã»ãã³ãã¬ã¼ãã³ã¼ãããã®ã¾ã¾ãã«ãããã®ã¯ç´ãããã
+# この生成規則は2点で意味がない
+#  ・$(GEN_DIR) に .o を生成するルールがない
+#  ・テンプレートコードをそのままビルドするのは紛らわしい
 # # Celltype: #{@name}
 # $(GEN_DIR)/#{@global_name}_tecsgen.o : $(GEN_DIR)/#{@global_name}_tecsgen.#{$c_suffix}
@@ -4414,10 +4316,10 @@
     headers = [ "$(GEN_DIR)/#{@global_name}_tecsgen.#{$h_suffix}", "$(GEN_DIR)/#{@global_name}_factory.#{$h_suffix}", "$(GEN_DIR)/global_tecsgen.#{$h_suffix}" ]
 
-    # inline åãå£ãæã¤ãï¼
+    # inline 受け口を持つか？
     if @n_entry_port_inline > 0 then
       headers << "#{@global_name}_inline.#{$h_suffix}"
     end
 
-    # å¼ã³å£ã¾ãã¯åãå£ã®ã·ã°ããã£ã®ããã
+    # 呼び口または受け口のシグニチャのヘッダ
     @port.each { |p|
       next if p.is_omit?
@@ -4444,9 +4346,8 @@
   end
 
-  #=== decl ç¨ã® dealloc ã³ã¼ããçæ
-  #b_reset:: Bool:  ãªã»ããç¨ã® dealloc ã³ã¼ãã®çæ (NULL ãã¤ã³ã¿ã®å ´å dealloc ããªã)
-  # mikan string ä¿®é£¾ããããã¤ã³ã¿ã®å
-ã«ãã¤ã³ã¿ãæ¥ãªãã¨ä»®å®ããã¤ã³ã¿åãæã¤æ§é ä½ã®å¯è½æ§ãæé¤ãã¦ããªã
-  # ãã®ã¡ã½ããã§ã¯ãè¡ãåºåããç´åã« " \\\n" ãåºåããè¡æ«ã§æ¹è¡æå­ãåºåããªã
+  #=== decl 用の dealloc コードを生成
+  #b_reset:: Bool:  リセット用の dealloc コードの生成 (NULL ポインタの場合 dealloc しない)
+  # mikan string 修飾されたポインタの先にポインタが来ないと仮定。ポインタ型を持つ構造体の可能性を排除していない
+  # このメソッドでは、行を出力する直前に " \\\n" を出力し、行末で改行文字を出力しない
   def gen_dealloc_code_for_type( f, type, dealloc_func_name, pre, name, post, level, b_reset, count_str = nil )
     type = type.get_original_type
@@ -4477,5 +4378,5 @@
         post2 = ""
         type2 = md.get_type.get_original_type
-        if type2.kind_of? PtrType then   # mikan typedef ãããå
+        if type2.kind_of? PtrType then   # mikan typedef された型
           if type2.get_count then
             count_str = type2.get_count.to_str( members_decl, pre2, post2 )
@@ -4550,8 +4451,6 @@
     end
 
-    # å¼ã³å£ã®çµåå
-ã®ã»ã«ã¿ã¤ãã®ãããï¼æé©åã®å ´åã®ã¿ï¼
-    # çµåå
-ã®åãå£ã inline ã®å ´åãinline ãããã
+    # 呼び口の結合先のセルタイプのヘッダ（最適化の場合のみ）
+    # 結合先の受け口が inline の場合、inline ヘッダも
     @port.each { |p|
       next if p.get_port_type != :CALL
@@ -4559,5 +4458,5 @@
 
       if p.is_skelton_useless? || p.is_cell_unique? || p.is_VMT_useless? then
-        # æé©åã³ã¼ã (optimize) # ã¹ã±ã«ãã³ä¸è¦ãªã©
+        # 最適化コード (optimize) # スケルトン不要など
         p2 = p.get_real_callee_port
         if p2 then
@@ -4569,5 +4468,5 @@
           headers += ct.get_depend_header_list_( celltype_list )
         #else
-        #  optional ã§æªçµå  
+        #  optional で未結合  
         end
       end
@@ -4577,23 +4476,23 @@
 
 
-  #=== $id$, $ct$, $cb$, $idx$ ç½®æ
+  #=== $id$, $ct$, $cb$, $idx$ 置換
   #
-  #  str ã«ä»¥ä¸ã®ç½®æãè¡ã
-  #-   $ct$ â ã»ã«ã¿ã¤ãå(ct)
-  #-   $cell$ â ã»ã«å(cell)   cell ã nil ãªãã°3ã¤ã®ç½®æã¯è¡ãããªã
-  #-   $cb$ â CB ã® C è¨èªå(cb)
-  #-   $cbp$ â CB ã¸ã®ãã¤ã³ã¿(cbp)
-  #-   $cb_proto$ â CB ã® C è¨èªåãã­ãã¿ã¤ãå®£è¨ç¨(cb_proto)
-  #-   $id$ â ct_cell
-  #-   $idx$ â idx
-  #-   $ID$ â id (æ´æ°ã®çªå·)
-  #-   $ct_global$ â ã»ã«ã¿ã¤ãå(ct)
-  #-   $cell_global$ â ã»ã«å(cell)   cell ã nil ãªãã°3ã¤ã®ç½®æã¯è¡ãããªã
-  #-   $$   â $
+  #  str に以下の置換を行う
+  #-   $ct$ ⇒ セルタイプ名(ct)
+  #-   $cell$ ⇒ セル名(cell)   cell が nil ならば3つの置換は行われない
+  #-   $cb$ ⇒ CB の C 言語名(cb)
+  #-   $cbp$ ⇒ CB へのポインタ(cbp)
+  #-   $cb_proto$ ⇒ CB の C 言語名プロトタイプ宣言用(cb_proto)
+  #-   $id$ ⇒ ct_cell
+  #-   $idx$ ⇒ idx
+  #-   $ID$ ⇒ id (整数の番号)
+  #-   $ct_global$ ⇒ セルタイプ名(ct)
+  #-   $cell_global$ ⇒ セル名(cell)   cell が nil ならば3つの置換は行われない
+  #-   $$   ⇒ $
   def subst_name( str, name_array )
     ct   = name_array[0]    # celltype name
     cell = name_array[1]    # cell name
     cb   = name_array[2]    # cell CB name
-    cb_init = name_array[3] # cell CB INIT, ããã¯ç½®æã«ä½¿ãããªã
+    cb_init = name_array[3] # cell CB INIT, これは置換に使われない
     cb_proto = name_array[4] # cell CB name for prototype
     id   = name_array[6]    # cell ID
@@ -4615,5 +4514,5 @@
       str = str.gsub( /(^|[^\$])\$cell_global\$/, "\\1#{cell_global}" )
     end
-    str = str.gsub( /\$\$/, "\$" )                       # $$ ã $ ã«ç½®æ
+    str = str.gsub( /\$\$/, "\$" )                       # $$ を $ に置換
 
     return str
@@ -4622,7 +4521,7 @@
 end
 
-# Appendable Fileï¼è¿½è¨å¯è½ãã¡ã¤ã«ï¼
+# Appendable File（追記可能ファイル）
 class AppFile
-  # éãããã¡ã¤ã«ã®ãªã¹ã
+  # 開いたファイルのリスト
   @@file_name_list = {}
 
@@ -4641,18 +4540,18 @@
     end
 
-    # æ¢ã«éãã¦ãããï¼
+    # 既に開いているか？
     if @@file_name_list[ name ] then
 #2.0
       mode = "a" + mode
-      # è¿½è¨ã¢ã¼ãã§éã
+      # 追記モードで開く
       file = File.open( real_name, mode )
     else
 #2.0
       mode = "w" + mode
-      # æ°è¦ã¢ã¼ãã§éãï¼æ¢ã«ããã°ããµã¤ãºãï¼ã«ããï¼
+      # 新規モードで開く（既にあれば、サイズを０にする）
       file = File.open( real_name, mode )
       @@file_name_list[ name ] = true
     end
-    # File ã¯ã©ã¹ã®ãªãã¸ã§ã¯ããè¿ã
+    # File クラスのオブジェクトを返す
     return file
   end
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/location.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/location.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/location.rb	(revision 321)
@@ -6,49 +6,34 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: location.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
@@ -77,6 +62,5 @@
 
 #==  Cell_location
-  # tecscde ã®ä½ç½®æ
-å ±
+  # tecscde の位置情報
   class  Cell_location
 
@@ -105,6 +89,5 @@
 
   #==  Join_location
-  # tecscde ã®ä½ç½®æ
-å ±
+  # tecscde の位置情報
   class  Join_location
     @@join_location_list = []
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/messages.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/messages.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/messages.rb	(revision 321)
@@ -6,59 +6,43 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: messages.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
-#== TECS ã®çæããåå½èªåå¿
-è¦ãªæå­å
-# ç¾ç¶ãã¨ã©ã¼ã¡ãã»ã¼ã¸ã¯è±èªã®ã¿
-# çæãã¡ã¤ã«ã®ã³ã¡ã³ãã¨ãã¦åºåãããæå­å
+#== TECS の生成する各国語化必要な文字列
+# 現状、エラーメッセージは英語のみ
+# 生成ファイルのコメントとして出力される文字列
 class TECSMsg
 
-  #=== TECSMsg#çæãããããããã³ãã¬ã¼ããªã©ã«å«ããã³ã¡ã³ãã®åå¾
-  # CDL ã®æå­ã³ã¼ãã«åããã¦ãæå­ã³ã¼ãå¤æãè¡ã
+  #=== TECSMsg#生成するヘッダやテンプレートなどに含めるコメントの取得
+  # CDL の文字コードに合わせて、文字コード変換を行う
   def self.get( msg )
     str = @@comment[ msg ]
@@ -71,10 +55,10 @@
   end
 
- #=== TECSMsg#ã­ã¼ã«ã©ã¤ãºãããã¨ã©ã¼ã¡ãã»ã¼ã¸ãå¾ã
- #body::String   : "S0001 error message body"  ã®å½¢å¼
- # S0001 ã®é¨åãä½¿ç¨ããã
- # Generator.error2 ããå¼ã³åºããã
+ #=== TECSMsg#ローカライズされたエラーメッセージを得る
+ #body::String   : "S0001 error message body"  の形式
+ # S0001 の部分が使用される
+ # Generator.error2 から呼び出される
  def self.get_error_message( body )
-   body =~ /^[A-Z0-9]+/    # ã¨ã©ã¼çªå·ãåãåºã
+   body =~ /^[A-Z0-9]+/    # エラー番号を取り出す
    num = $&
    if num then
@@ -91,8 +75,8 @@
  end
 
- #=== TECSMsg#ã­ã¼ã«ã©ã¤ãºãããã¦ã©ã¼ãã³ã°ã¡ãã»ã¼ã¸ãå¾ã
- # Generator.warning2 ããå¼ã³åºããã
+ #=== TECSMsg#ローカライズされたウォーニングメッセージを得る
+ # Generator.warning2 から呼び出される
  def self.get_warning_message( body )
-   body =~ /^[A-Z0-9]+/    # ã¦ã©ã¼ãã³ã°çªå·ãåãåºã
+   body =~ /^[A-Z0-9]+/    # ウォーニング番号を取り出す
    num = $&
    msg = @@warning_message[ num.to_sym ]
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/optimize.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/optimize.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/optimize.rb	(revision 321)
@@ -6,49 +6,34 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: optimize.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
@@ -58,20 +43,20 @@
 Other processes are setting ID for each cell and setting domain information
 
-ãã®ãã¡ã¤ã«ã«ã¯ãæå³è§£æããã³ã¼ãçæã®éã§è¡ãã¹ãå¦çãå«ã¾ããï¼
-æé©åããã®ä¸ã¤ã§ããï¼
-ãã®ä»ã«ãã»ã«æ¯ã® ID ä»ãããã¡ã¤ã³ãããè¡ãï¼
-ã³ã¼ãçæå¯¾è±¡ã¨ãªãã»ã«ãå¯¾è±¡ã«å¦çãè¡ããã®ãå«ã¾ããï¼
+このファイルには、意味解析からコード生成の間で行うべき処理が含まれる．
+最適化もその一つである．
+その他に、セル毎の ID 付け、ドメインわけを行う．
+コード生成対象となるセルを対象に処理を行うものが含まれる．
 =end
 
 class Namespace
 
-  #===  åã»ã«ã« ID ï¼æ´æ°å¤ï¼ãå²ä»ãã
+  #===  各セルに ID （整数値）を割付ける
   def set_cell_id_and_domain
-    # celltype ã®åã»ã«ã« ID ãå²ä»ãã
+    # celltype の各セルに ID を割付ける
     @celltype_list.each { |t|
       t.set_cell_id_and_domain
     }
 
-    # ãµããã¼ã ã¹ãã¼ã¹ã®åã»ã«ã« ID ãå²ä»ãã
+    # サブネームスペースの各セルに ID を割付ける
     @namespace_list.each { |n|
       n.set_cell_id_and_domain
@@ -80,10 +65,10 @@
 
   def optimize
-    # celltype ã®æé©å
+    # celltype の最適化
     @celltype_list.each { |t|
       t.optimize
     }
 
-    # ãµããã¼ã ã¹ãã¼ã¹ã®æé©å
+    # サブネームスペースの最適化
     @namespace_list.each { |n|
       n.optimize
@@ -92,10 +77,10 @@
 
   def reset_optimize
-    # celltype ã®æé©å
+    # celltype の最適化
     @celltype_list.each { |t|
       t.reset_optimize
     }
 
-    # ãµããã¼ã ã¹ãã¼ã¹ã®æé©å
+    # サブネームスペースの最適化
     @namespace_list.each { |n|
       n.reset_optimize
@@ -106,5 +91,5 @@
 class Celltype
 
-  ID_BASE = 1               # reset_optimize ã§ãªã»ãããã
+  ID_BASE = 1               # reset_optimize でリセットする
   @@ID_BASE = ID_BASE
 
@@ -114,5 +99,5 @@
   end
 
-  #=== åã»ã«ã« ID ï¼æ´æ°å¤ï¼ãå²ä»ãã
+  #=== 各セルに ID （整数値）を割付ける
   def set_cell_id
 
@@ -122,8 +107,7 @@
 
     if $unique_id then
-      @id_base = @@ID_BASE   # id ãã·ã¹ãã å
-¨ä½ã§é£çªã«ãã
+      @id_base = @@ID_BASE   # id をシステム全体で連番にする
     else
-      @id_base = 1           # base ãå¸¸ã« 1 ããå§ãã
+      @id_base = 1           # base を常に 1 から始める
     end
 
@@ -131,5 +115,5 @@
     no_id_specified_cells = []
 
-    # ãã­ãã¿ã¤ããé¤ããæ°ãæ±ãã
+    # プロトタイプを除いた数を求める
     @cell_list.each{ |c|
       if c.is_generate? then
@@ -148,6 +132,6 @@
     }
 
-    @ordered_cell_list = []   # id = 1 ãæ·»æ° 0 ã«æ ¼ç´ããã
-    # ID æå®ããã¦ããã»ã«ã« id çªå·ãä¸ãã
+    @ordered_cell_list = []   # id = 1 が添数 0 に格納される
+    # ID 指定されているセルに id 番号を与える
     id_specified_cells.each{ |c|
       id = c.get_specified_id
@@ -169,5 +153,5 @@
       end
       @ordered_cell_list[ id - 1 ] = c
-      # éãçªå·ã¨ããå ´åã®ãã @id_base ãå ãã
+      # 通し番号とする場合のため @id_base を加える
       c.set_id( @id_base - 1 + id )
       if $verbose then
@@ -176,5 +160,5 @@
     }
 
-    # ID æå®ããã¦ããªãã»ã«ã« id çªå·ãä¸ãã
+    # ID 指定されていないセルに id 番号を与える
     i = 0
     no_id_specified_cells.each{ |c|
@@ -226,5 +210,5 @@
 
     @domain_roots.each{ |dn, regions|
-      # domain_type ã¯ä¸ã¤ã®ãã¼ãã«ä¸ã¤ãããªãã®ã§ãä¸ã¤ã®è¦ç´ ãç¡æ¡ä»¶ã§åãåºã
+      # domain_type は一つのノードに一つしかないので、一つの要素を無条件で取り出す
       if regions.length > 1 then
         cdl_info( "celltype:#{@name} has cells in multi domain.\n" )
@@ -239,6 +223,5 @@
   def optimize
 
-    # port ã®åç
-§ããã»ã«ã¿ã¤ãã®æ°ãã»ã«ã®æ°ãæ±ãã
+    # port の参照するセルタイプの数、セルの数を求める
     if $verbose then
       print "=== optimizing celltype #{get_namespace_path.to_s} ===\n"
@@ -248,9 +231,9 @@
       next if port.get_port_type != :CALL
       if port.is_omit? then
-        # å¼ã³å£æé©åå®æ½
+        # 呼び口最適化実施
         @b_cp_optimized = true
-        @n_call_port_omitted_in_CB += 1               # CB ã§çç¥ããå¼ã³å£
-        port.set_skelton_useless                      # ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©å
-        port.set_VMT_useless                          # VMT ä¸è¦æé©å (ç´æ¥åãå£é¢æ°ãå¼åºã)
+        @n_call_port_omitted_in_CB += 1               # CB で省略する呼び口
+        port.set_skelton_useless                      # スケルトン関数不要最適化
+        port.set_VMT_useless                          # VMT 不要最適化 (直接受け口関数を呼出す)
         if $verbose then
           print "optimized by omit: port: #{port.get_name} : o\n"
@@ -263,11 +246,8 @@
       end
 
-      port_cells = []    # å¼ã³å
-ã»ã«
-      port_ports = []    # å¼ã³å
-ã®ãã¼ã
-
-      # ã»ã«ã®åç
-§ããã»ã«ãéããï¼ãã¼ããä¸ç·ã«éããï¼
+      port_cells = []    # 呼び先セル
+      port_ports = []    # 呼び先のポート
+
+      # セルの参照するセルを集める（ポートも一緒に集める）
       @cell_list.each{ |cell|
 
@@ -281,14 +261,11 @@
         if j then
           if j.get_array_member2 then
-            # å¼ã³å£é
-åã®å ´åãå
-¨é¨ã®çµåå
-ãéãã
+            # 呼び口配列の場合、全部の結合先を集める
             j.get_array_member2.each { |j2|
               if j2 then
                 port_cells << j2.get_rhs_cell
-                port_ports << j2.get_rhs_port   # å³è¾ºã®ãã¼ã
+                port_ports << j2.get_rhs_port   # 右辺のポート
               else
-                # optional ã§ãããæ·»æ°ã®ã¿åæåããã¦ããªãï¼ãã¹ã¦åæåãããªãå ´åã¯ãä¸ï¼
+                # optional で、ある添数のみ初期化されていない（すべて初期化されない場合は、下）
                 port_cells << nil
                 port_ports << nil
@@ -296,51 +273,41 @@
             }
           else
-            # å
-¨ã¦ã®çµåå
-ãéãã
+            # 全ての結合先を集める
             port_cells << j.get_rhs_cell
-            port_ports << j.get_rhs_port   # å³è¾ºã®ãã¼ã
+            port_ports << j.get_rhs_port   # 右辺のポート
           end
         else
-          # optional ã§åæåããã¦ããªãï¼nil ãè¦ç´ ã«å ãã¦ããï¼
+          # optional で初期化されていない（nil を要素に加えておく）
           port_cells << nil
-          port_ports << nil   # å³è¾ºã®ãã¼ã
+          port_ports << nil   # 右辺のポート
         end
       }
 
-      # éè¤è¦ç´ ãåãé¤ã
+      # 重複要素を取り除く
       port_cells.uniq!
       port_ports.uniq!
 
-      # å¼ã³å£ã®å¼ã³å
-ãä¸ã¤ã®ãã¼ãã ããï¼
+      # 呼び口の呼び先が一つのポートだけか？
       if port_ports.length == 1 then
 
-        # å¼ã³å£é
-åãå¯å¤é·ã®å ´åãæé©åããªã
-             # mikan å¼ã³å£é
-åè¦ç´ æ°ãã¯ã­ä¸å
-·åæ«å®å¯¾ç­
-             # ããæã¾ããä¿®æ­£ã¯ãåãå£ã¸ã®ãã¤ã³ã¿ã¯çç¥ããããé
-ååæ°ã¯åºåãã(#_CP_#, #_TCP_#)
-             # ããã«é
-ååæ°ãå®æ°åã§ããã®ã§ããã°ãå®æ°ãã¯ã­ãåºå (#_NCPA_#)
+        # 呼び口配列が可変長の場合、最適化しない
+             # mikan 呼び口配列要素数マクロ不具合暫定対策
+             # より望ましい修正は、受け口へのポインタは省略するが、配列個数は出力する(#_CP_#, #_TCP_#)
+             # さらに配列個数が定数化できるのであれば、定数マクロを出力 (#_NCPA_#)
         next if port.get_array_size == "[]"
 
-        # å¼ã³å£æé©åå®æ½
+        # 呼び口最適化実施
         @b_cp_optimized = true
 
-        # å¼ã³å
-ãä¸ã¤ã®ã»ã«ã ããï¼
+        # 呼び先が一つのセルだけか？
         if port_cells.length == 1 then
 
-          # å¼ã³å£ã¯ optional ã§åæåããã¦ããªããã¾ãã¯åãå£ã¯é
-åã§ã¯ãªããï¼
+          # 呼び口は optional で初期化されていない、または受け口は配列ではないか？
           if port_ports[0] == nil || port_ports[0].get_array_size == nil then
 
-            @n_call_port_omitted_in_CB += 1               # CB ã§çç¥ããå¼ã³å£
-            port.set_cell_unique                          # ã»ã«ä¸ã¤ã ãæé©å
-            port.set_skelton_useless                      # ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©å
-            port.set_VMT_useless                          # VMT ä¸è¦æé©å (ç´æ¥åãå£é¢æ°ãå¼åºã)
+            @n_call_port_omitted_in_CB += 1               # CB で省略する呼び口
+            port.set_cell_unique                          # セル一つだけ最適化
+            port.set_skelton_useless                      # スケルトン関数不要最適化
+            port.set_VMT_useless                          # VMT 不要最適化 (直接受け口関数を呼出す)
 
             if $verbose then
@@ -348,5 +315,5 @@
             end
           else
-            port.set_VMT_useless                          # VMT ä¸è¦æé©å (ã¹ã±ã«ãã³é¢æ°ãå¼åºã)
+            port.set_VMT_useless                          # VMT 不要最適化 (スケルトン関数を呼出す)
 
             if $verbose then
@@ -355,13 +322,11 @@
           end
 
-        else  # å¼ã³å
-ãè¤æ°ã®ã»ã«ï¼åä¸ã®ãã¼ãï¼
-
-          # å¼ã³å£ã¯ optional ã§åæåããã¦ããªããã¾ãã¯åãå£ã¯é
-åã§ã¯ãªããï¼
+        else  # 呼び先が複数のセル（単一のポート）
+
+          # 呼び口は optional で初期化されていない、または受け口は配列ではないか？
           if port_ports[0] == nil || port_ports[0].get_array_size == nil then
             if ! @singleton then
-              port.set_skelton_useless                    # ã¹ã±ã«ãã³é¢æ°ä¸è¦æé©å
-              port.set_VMT_useless                        # VMT ä¸è¦æé©å (ã¹ã±ã«ãã³é¢æ° or åãå£é¢æ°ãå¼åºã)
+              port.set_skelton_useless                    # スケルトン関数不要最適化
+              port.set_VMT_useless                        # VMT 不要最適化 (スケルトン関数 or 受け口関数を呼出す)
 
               if $verbose then
@@ -369,5 +334,5 @@
               end
             else
-              port.set_VMT_useless                           # VMT ä¸è¦æé©å (ã¹ã±ã«ãã³é¢æ° or åãå£é¢æ°ãå¼åºã)
+              port.set_VMT_useless                           # VMT 不要最適化 (スケルトン関数 or 受け口関数を呼出す)
 
               if $verbose then
@@ -379,5 +344,5 @@
 
         port.set_only_callee( port_ports[0], port_cells[0] )
-           # set_cell_unique ã§ãªãå ´å cell ã¯æå³ããªã
+           # set_cell_unique でない場合 cell は意味がない
 
       end
@@ -387,15 +352,13 @@
     }
 
-    # åãå£æé©åã®è¨­å®
+    # 受け口最適化の設定
     @port.each{ |port|
       next if port.get_port_type != :CALL
 
-      # å¼ã³å£å´ã®æé©åç¶æ
-
+      # 呼び口側の最適化状態
       b_VMT_useless     = port.is_VMT_useless?
       b_skelton_useless = port.is_skelton_useless?
 
-      # ã»ã«ã®åç
-§ããã»ã«ãéããï¼ãã¼ããä¸ç·ã«éããï¼
+      # セルの参照するセルを集める（ポートも一緒に集める）
       @cell_list.each{ |cell|
 
@@ -407,21 +370,19 @@
         j = jl.get_item( port.get_name )
 
-        if j then    # optional ã§çµåããã¦ããªãå ´å nil
+        if j then    # optional で結合されていない場合 nil
           if j.get_array_member2 then
-            # å¼ã³å£é
-å
+            # 呼び口配列
             j.get_array_member2.each { |j2|
               if j2 then
-                port2 = j2.get_rhs_port   # å³è¾ºã®ãã¼ã
-                # åãå£å´ã®æé©åå¯è½æ§ãè¨­å®
+                port2 = j2.get_rhs_port   # 右辺のポート
+                # 受け口側の最適化可能性を設定
                 port2.set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
               #else
-              #  optional ã§å¼ã³å£é
-åè¦ç´ ãåæåããã¦ããªã
+              #  optional で呼び口配列要素が初期化されていない
               end
             }
           else
-            port2 = j.get_rhs_port      # å³è¾ºã®ãã¼ã
-            # åãå£å´ã®æé©åå¯è½æ§ãè¨­å®
+            port2 = j.get_rhs_port      # 右辺のポート
+            # 受け口側の最適化可能性を設定
             port2.set_entry_VMT_skelton_useless( b_VMT_useless, b_skelton_useless )
           end
@@ -431,12 +392,12 @@
   end
 
-  #Celltype# ãªã»ãããã
+  #Celltype# リセットする
   def reset_optimize
-    @@ID_BASE = ID_BASE      # æ¬å½ã¯ä¸åã ãã§ãã
-    @id_base = 1             # set_cell_id ã§ãªã»ãããããã®ã§ä¸è¦
-
-    @b_cp_optimized = false  # å¼ã³å£æé©å
-    @n_call_port_omitted_in_CB = 0 # å¼ã³å£æé©åã«ããä¸çæã¨ãªã£ããã¼ãã®æ°
-    @n_cell_gen = 0          # çæã»ã«åæ°
+    @@ID_BASE = ID_BASE      # 本当は一回だけでよい
+    @id_base = 1             # set_cell_id でリセットされるので不要
+
+    @b_cp_optimized = false  # 呼び口最適化
+    @n_call_port_omitted_in_CB = 0 # 呼び口最適化により不生成となったポートの数
+    @n_cell_gen = 0          # 生成セル個数
     @port.each{ |p|
       p.reset_optimize
@@ -446,9 +407,9 @@
   end
 
-  #Celltype# ãããã¯ include ããã¦ããã
-  #hname::Symbol : ãããå
-  #RETURN:: bool_t: false ã¤ã³ã¯ã«ã¼ãããã¦ããªããtrue ã¤ã³ã¯ã«ã¼ãããã¦ãã
-  # #_ISH_#, #_ICT_# ã§ããããåãè¾¼ã¾ãã¦ããããã§ãã¯ãã
-  # false ãè¿ã£ãå ´åãhname ã¯ç»é²ããã¦ãæ¬¡åã®å¼ã³åºãã§ã¯ true ãè¿ã
+  #Celltype# ヘッダは include されているか
+  #hname::Symbol : ヘッダ名
+  #RETURN:: bool_t: false インクルードされていない、true インクルードされている
+  # #_ISH_#, #_ICT_# でヘッダが取り込まれているかチェックする
+  # false が返った場合、hname は登録されて、次回の呼び出しでは true が返る
   def header_included?( hname )
     if @included_header[ hname ] == nil then
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/plugin.rb	(revision 321)
@@ -6,55 +6,40 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: plugin.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
-#== class ã¢ã¸ã¥ã¼ã«
-# ThroughPlugin, SignaturePlugin, CelltypePlugin ã« include ãã
+#== class モジュール
+# ThroughPlugin, SignaturePlugin, CelltypePlugin に include する
 class Plugin < Node
-#@error_backlog:: [msg1, msg2, ... ]   @locale ãè¨­å®ãããåã«çºçããã¨ã©ã¼
+#@error_backlog:: [msg1, msg2, ... ]   @locale が設定される前に発生したエラー
 
   PluginArgProc = {
@@ -65,10 +50,10 @@
     super
     @b_silent = false
-    @locale = nil       # set_locale ãå¼ã³åºãããã¾ã§ nil ã¨ãªã
+    @locale = nil       # set_locale が呼び出されるまで nil となる
     @error_backlog = []
   end
 
   #=== Plugin#cdl_error
-  # set_locale ãå¼ã³åºãããã¾ã§ @error_backlog ã«ä¿å­ãä¿çãã
+  # set_locale が呼び出されるまで @error_backlog に保存し保留する
   def cdl_error *arg
     if @locale then
@@ -79,8 +64,8 @@
   end
 
-  #=== locale ãè¨­å®ãã
-  # Node ã¯ initialize ã§ locale ãè¨­å®ããããplugin ã¯ parse ã¨ã¯
-  # ç°ãªãã¿ã¤ãã³ã° new ããããããlocale ãåè¨­å®ãã
-  # ãã®ã¡ã½ããã2åº¦å¼ã³åºãã¨ @error_backlog ã®ã¨ã©ã¼ã2åº¦åºåããã¦ãã¾ã
+  #=== locale を設定する
+  # Node は initialize で locale を設定するが、plugin は parse とは
+  # 異なるタイミング new されるため、locale を再設定する
+  # このメソッドを2度呼び出すと @error_backlog のエラーが2度出力されてしまう
   def set_locale locale
     @locale = locale
@@ -90,30 +75,28 @@
   end
 
-### æå³è§£ææ®µéã§å¼ã³åºãããã¡ã½ãã ###
-  #===  CDL ãã¡ã¤ã«ã®çæ
-  #      typedef, signature, celltype, cell ã®ã³ã¼ããçæ
-  #      éè¤ãã¦çæãã¦ã¯ãªããªã
-  #      ãã§ã«çæããã¦ããå ´åã¯åºåããªããã¨ã
-  #      ãããã¯ååã® import ã«ãããéè¤ãé¿ãããã¨ã
-  #file::        FILE       çæãããã¡ã¤ã«
+### 意味解析段階で呼び出されるメソッド ###
+  #===  CDL ファイルの生成
+  #      typedef, signature, celltype, cell のコードを生成
+  #      重複して生成してはならない
+  #      すでに生成されている場合は出力しないこと。
+  #      もしくは同名の import により、重複を避けること。
+  #file::        FILE       生成するファイル
   def gen_cdl_file file
   end
 
 
-### ã³ã¼ãçæ®µéã§å¼ã³åºãããã¡ã½ãã ###
-  #=== ãã©ã°ã¤ã³ã¯ gen_ep_func ãæä¾ããã
-  # gen_ep_func å®ç¾©   â ãã³ãã¬ã¼ãã§ã¯ãªããã»ã«ã¿ã¤ãã³ã¼ã(tCelltype.c)ãçæ 
-  # gen_ep_func æªå®ç¾© â ãã³ãã¬ã¼ã(tCelltype_templ.c)ãçæ
+### コード生段階で呼び出されるメソッド ###
+  #=== プラグインは gen_ep_func を提供するか
+  # gen_ep_func 定義   ⇒ テンプレートではない、セルタイプコード(tCelltype.c)を生成 
+  # gen_ep_func 未定義 ⇒ テンプレート(tCelltype_templ.c)を生成
   def gen_ep_func?
     self.class.method_defined?( :gen_ep_func_body )
   end
 
-  #===  åãå£é¢æ°ã®æ¬ä½(Cè¨èª)ãçæãã
-  #     ãã©ã°ã¤ã³ã®å ´åãå¤æ´ããå¿
-è¦ã®ãªãã»ã«ã¿ã¤ãã³ã¼ããçæãã
-  #     ãã®ã¡ã½ãããæªå®ç¾©ã§ããã°ããã©ã°ã¤ã³ã¯ã»ã«ã¿ã¤ãã³ã¼ããçæããªã (éå¸¸éããã³ãã¬ã¼ããçæãã)
-  #      gen_cdl_file ã®ä¸­ã§çæãããã»ã«ã¿ã¤ãã«å¯¾ãã¦å¼ã³åºããã
-  #file::           FILE        åºåå
-ãã¡ã¤ã« (tCelltype.c)
+  #===  受け口関数の本体(C言語)を生成する
+  #     プラグインの場合、変更する必要のないセルタイプコードを生成する
+  #     このメソッドが未定義であれば、プラグインはセルタイプコードを生成しない (通常通りテンプレートを生成する)
+  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
+  #file::           FILE        出力先ファイル (tCelltype.c)
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
@@ -127,55 +110,50 @@
 #  end
 
-  #===  åãå£é¢æ°ã® preamble (Cè¨èª)ãçæãã
-  #     å¿
-è¦ãªã preamble é¨ã«åºåãã
-  #      gen_cdl_file ã®ä¸­ã§ã§çæãããã»ã«ã¿ã¤ãã«å¯¾ãã¦å¼ã³åºããã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #===  受け口関数の preamble (C言語)を生成する
+  #     必要なら preamble 部に出力する
+  #      gen_cdl_file の中でで生成されたセルタイプに対して呼び出される
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
   #global_ct_name:: string
   def gen_preamble( file, b_singleton, ct_name, global_ct_name )
-    # ããã©ã«ãã§ã¯ä½ãåºåããªã
-  end
-
-  #===  åãå£é¢æ°ã® postamble (Cè¨èª)ãçæãã
-  #     å¿
-è¦ãªã postamble é¨ã«åºåãã
-  #      gen_cdl_file ã®ä¸­ã§çæãããã»ã«ã¿ã¤ãã«å¯¾ãã¦å¼ã³åºããã
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+    # デフォルトでは何も出力しない
+  end
+
+  #===  受け口関数の postamble (C言語)を生成する
+  #     必要なら postamble 部に出力する
+  #      gen_cdl_file の中で生成されたセルタイプに対して呼び出される
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
   #global_ct_name:: string
   def gen_postamble( file, b_singleton, ct_name, global_ct_name )
-    # ããã©ã«ãã§ã¯ä½ãåºåããªã
-  end
-
-  #=== gen_cdl_file ã®ä¸­ã§çæãããã»ã«ã¿ã¤ãã«æ°ããã»ã«ãçæããã
-  # ã©ã®ã»ã«ã¿ã¤ããã¯ cell.get_celltype ã§åãã
+    # デフォルトでは何も出力しない
+  end
+
+  #=== gen_cdl_file の中で生成されたセルタイプに新しいセルが生成された
+  # どのセルタイプかは cell.get_celltype で分かる
   #
-  #file::           FILE        åºåå
-ãã¡ã¤ã«
+  #file::           FILE        出力先ファイル
   #b_singleton::    bool        true if singleton
   #ct_name::        Symbol
   #global_ct_name:: string
   def new_cell cell
-    # ããã©ã«ãã§ã¯ä½ãããªã
-  end
-
-### ãã©ã°ã¤ã³å¼æ°ã®è§£é ###
+    # デフォルトでは何もしない
+  end
+
+### プラグイン引数の解釈 ###
   def parse_plugin_arg
     arg = @plugin_arg_str.dup
 
-    # æ¹è¡ãæ¶ã
+    # 改行を消す
     arg.gsub!( /\\\n/, "" )
 
     while arg != ""
 
-      # åã®ç©ºç½èª­ã¿é£ã°ã
+      # 前の空白読み飛ばす
       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
 
-      #  è­å¥å­åå¾
+      #  識別子取得
       if arg =~ /\A[a-zA-Z_]\w*/ then
         ident = $~
@@ -186,5 +164,5 @@
       end
       
-      # åã®ç©ºç½èª­ã¿é£ã°ã
+      # 前の空白読み飛ばす
       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
 
@@ -196,37 +174,37 @@
       end
 
-      # åã®ç©ºç½èª­ã¿é£ã°ã
+      # 前の空白読み飛ばす
       arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')
 
-      # å³è¾ºæå­å
-      if arg =~ /\A\\"(.*?)\\"\s*,/ then      # \"  \" ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A%(.*?)%\s*,/ then      # %   % ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A!(.*?)!\s*,/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A'(.*?)'\s*,/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || ã«ã [,$] ã«ãã§ããªãã£ã
+      # 右辺文字列
+      if arg =~ /\A\\"(.*?)\\"\s*,/ then      # \"  \" で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A%(.*?)%\s*,/ then      # %   % で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A!(.*?)!\s*,/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A'(.*?)'\s*,/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif  arg =~ /\A\\"(.*?)\\"\s*,/ then  # || にも [,$] にもできなかった
         rhs = $1
         remain = $'
       # elsif arg =~ /\A(.*?)\s*$/ then
-      elsif arg =~ /\A\\"(.*?)\\"\s*\z/ then      # \"  \" ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A%(.*?)%\s*\z/ then      # %   % ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A!(.*?)!\s*\z/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif arg =~ /\A'(.*?)'\s*\z/ then    # $   $ ã§å²ã¾ãã¦ããå ´å
-        rhs = $1
-        remain = $'
-      elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || ã«ã [,$] ã«ãã§ããªãã£ã
+      elsif arg =~ /\A\\"(.*?)\\"\s*\z/ then      # \"  \" で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A%(.*?)%\s*\z/ then      # %   % で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A!(.*?)!\s*\z/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif arg =~ /\A'(.*?)'\s*\z/ then    # $   $ で囲まれている場合
+        rhs = $1
+        remain = $'
+      elsif  arg =~ /\A\\"(.*?)\\"\s*\z/ then  # || にも [,$] にもできなかった
         rhs = $1
         remain = $'
@@ -234,5 +212,5 @@
         rhs = $1
         remain = $'
-        # åã®ç©ºç½èª­ã¿é£ã°ã
+        # 前の空白読み飛ばす
         rhs.sub!( /\A\s*(.*)\s*\z/, '\1')
       elsif arg =~ /\A(.*?)\s*\z/ then
@@ -244,14 +222,14 @@
       end
 
-      # 0æå­ã®æå­åã to_sym ããã¨ä¾å¤çºçããã®ã§ç©ºç½æå­ã¨ãã
+      # 0文字の文字列を to_sym すると例外発生するので空白文字とする
       if rhs == "" then
         rhs = " "
       end
 
-      arg = remain         # arg ã®æ®ãã®é¨å
-      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # åã®ç©ºç½èª­ã¿é£ã°ã
-
-      # \ ãå¤ã
-      rhs = rhs.gsub( /\\(.)/, "\\1" )   # ããã§ $' ãå¤ãããã¨ã«æ³¨æï¼
+      arg = remain         # arg の残りの部分
+      arg.sub!( /\A\s*(?:\\\n)*\s*(.*)/, '\1')      # 前の空白読み飛ばす
+
+      # \ を外す
+      rhs = rhs.gsub( /\\(.)/, "\\1" )   # ここで $' が変わることに注意！
       # print "parse_plugin_arg:  #{ident} #{rhs}\n"
       @plugin_arg_list[ ident ] = rhs
@@ -262,9 +240,9 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ°ããã§ãã¯ãã
-  # @plugin_arg_check_proc_tab ã«å¾ã£ã¦ãã©ã°ã¤ã³å¼æ°ããã§ãã¯ããã
-  # å¤ãç¨æ³ï¼å­ã¯ã©ã¹ã§ãªã¼ãã¼ã©ã¤ãããå¼æ°è­å¥å­ãæ­£ããããã§ãã¯ãã
-  #ident:: string: å¼æ°è­å¥å­
-  #rhs:: string: å³è¾ºæå­å
+  #=== プラグイン引数をチェックする
+  # @plugin_arg_check_proc_tab に従ってプラグイン引数をチェックすする
+  # 古い用法：子クラスでオーバーライドし、引数識別子が正しいかチェックする
+  #ident:: string: 引数識別子
+  #rhs:: string: 右辺文字列
   def check_plugin_arg( ident, rhs )
 
@@ -291,5 +269,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³ã®ã¡ãã»ã¼ã¸åºå
+  #=== プラグインのメッセージ出力
   def print_msg( msg )
     if @b_silent == true then
@@ -299,5 +277,5 @@
   end
 
-  #=== ãã©ã°ã¤ã³å¼æ° silent
+  #=== プラグイン引数 silent
   def set_silent rhs
     if rhs == "true" || rhs == nil then
@@ -307,11 +285,11 @@
 end
 
-#== åºåæå­åã EUC ããåºåãã¡ã¤ã«ã« convert ãã
-# tecsgen ã®ã½ã¼ã¹ã³ã¼ãã¯ EUC ã§è¨è¿°ããã¦ãã
-# ããããåºåãã¡ã¤ã«ã®æå­ã³ã¼ãã«å¤æãã¦åºåãã
+#== 出力文字列を EUC から出力ファイルに convert する
+# tecsgen のソースコードは EUC で記述されている
+# これを、出力ファイルの文字コードに変換して出力する
 #
-# generate.rb ã§åºåãããã®ã¯ message.rb ã§å¤æãã¦ãã
-# generate.rb ã§åºåãããã®ã¯ APPFile ã¯ã©ã¹ãä½¿ç¨ãã¦ãã
-# mikan: CFile ã§åºåãããã®ã« factory ã§è¿½è¨ã§ããªã (cdl ãã¡ã¤ã«ã®å ´åãè¿½è¨ã§ãã¦ãæå³ããªã)
+# generate.rb で出力するものは message.rb で変換している
+# generate.rb で出力するものは APPFile クラスを使用している
+# mikan: CFile で出力したものに factory で追記できない (cdl ファイルの場合、追記できても意味がない)
 class CFile
   def self.open( path, mode )
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/pluginModule.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/pluginModule.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/pluginModule.rb	(revision 321)
@@ -6,52 +6,37 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: pluginModule.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
-#== ãã©ã°ã¤ã³ãã­ã¼ãããå´ã®ã¢ã¸ã¥ã¼ã«
+#== プラグインをロードする側のモジュール
 # @@loaded_plugin_list:: {Symbol=>Integer}
 module PluginModule
@@ -59,9 +44,9 @@
   @@loaded_plugin_list = {}
 
-  #=== ãã©ã°ã¤ã³ãã­ã¼ããã
-  #return:: true : æåã false : å¤±æ
+  #=== プラグインをロードする
+  #return:: true : 成功、 false : 失敗
   #
-  # ãã§ã«ã­ã¼ãããã¦ãããã®ã¯ãéè¤ãã¦ã­ã¼ãããªã
-  # load æã®ä¾å¤ã¯ãã®ã¡ã½ããã®ä¸­ã§ã­ã£ããããã¦ false ãè¿ããã
+  # すでにロードされているものは、重複してロードしない
+  # load 時の例外はこのメソッドの中でキャッチされて false が返される
   def load_plugin( plugin_name, superClass )
 
@@ -73,5 +58,5 @@
           print( "load '#{plugin_name}.rb'\n" )
         end
-        # "#{plugin_name}.rb" ãã­ã¼ãï¼ã·ã¹ãã ç¨ã§ã¯ãªãã®ã§ãfatal ã¨ã©ã¼ã«ããªãï¼
+        # "#{plugin_name}.rb" をロード（システム用ではないので、fatal エラーにしない）
         if require_tecsgen_lib( "#{plugin_name}.rb", false ) == false
           cdl_error( "P2001 $1.rb : fail to load plugin" , plugin_name )
@@ -101,7 +86,7 @@
   end
 
-  #=== ãã©ã°ã¤ã³ã® gen_cdl_file ãå¼ã³ãã¦ cdl ãã¡ã¤ã«ãçæãããè§£éãè¡ã
+  #=== プラグインの gen_cdl_file を呼びして cdl ファイルを生成させ、解釈を行う
   def generate_and_parse plugin_object
-    if plugin_object == nil     # ãã©ã°ã¤ã³ã®ã­ã¼ãã«å¤±æãã¦ããï¼æ¢ã«ã¨ã©ã¼ï¼
+    if plugin_object == nil     # プラグインのロードに失敗している（既にエラー）
       return
     end
@@ -109,5 +94,5 @@
     if @@loaded_plugin_list[ plugin_name ] == nil
       raise "#{plugin_name} might have different name "
-      # ãã©ã°ã¤ã³ã®ãã¡ã¤ã«åã¨ããã©ã°ã¤ã³ã®ã¯ã©ã¹åãç¸éããå ´å
+      # プラグインのファイル名と、プラグインのクラス名が相違する場合
     end
     count = @@loaded_plugin_list[ plugin_name ]
@@ -141,6 +126,6 @@
   end
 
-  #=== ãã©ã°ã¤ã³ã CDL ã® POST ã³ã¼ããçæ
-  # tmp_plugin_post_code.cdl ã¸ã®åºå
+  #=== プラグインが CDL の POST コードを生成
+  # tmp_plugin_post_code.cdl への出力
   def self.gen_plugin_post_code file
     dbgPrint "PluginModule #{@@loaded_plugin_list}\n"
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/syntaxobj.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/syntaxobj.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/syntaxobj.rb	(revision 321)
@@ -6,63 +6,45 @@
 #   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: syntaxobj.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
-# mikan ruby ã® symbol ã¨æå­åã®ä½¿ãåããã©ããã¦ããã¾ããããªããã¨ãæã
-ããã®ã§ name.to_sym ãå
-¥ãããã¨ã«ãã
+# mikan ruby の symbol と文字列の使い分けがどうしてもうまくいかないことが時々あるので name.to_sym を入れることにした
 
 #== Node
 #
-# Node ã®ç´æ¥ã®å­ã¯ã©ã¹ï¼ C_EXP, Type, BaseVal, BDNode(ã»ã¨ãã©ã®ãã®ã¯ BDNode ã®å­ã¯ã©ã¹)
-# Node ã« (BDNodeã«ã) å
-¥ããªããã®: Token, Import, Import_C, Generate
+# Node の直接の子クラス： C_EXP, Type, BaseVal, BDNode(ほとんどのものは BDNode の子クラス)
+# Node に (BDNodeにも) 入らないもの: Token, Import, Import_C, Generate
 #
-# owner ãæããªããã®ã Node ã¨ãªã
-# ã¨ã©ã¼ã¯ãcdl_error ãéãã¦å ±åãã (æå³è§£æãæ§æè§£æå¾ã«è¡ãããå ´åã«ã¯ãè¡çªå·ãæ­£ããåºåã§ãã
+# owner を持たないものが Node となる
+# エラーは、cdl_error を通じて報告する (意味解析が構文解析後に行われる場合には、行番号が正しく出力できる
 # 
 
@@ -74,18 +56,18 @@
   end
 
-  #=== ã¨ã©ã¼ãåºåãã
+  #=== エラーを出力する
   def cdl_error( message, *arg )
     Generator.error2( @locale, message, *arg )
   end
 
-  #=== ã¨ã©ã¼ãåºåãã
-  #locale:: Array(locale info) : æ§æè§£æä¸­ã¯ç¡è¦ããã
+  #=== エラーを出力する
+  #locale:: Array(locale info) : 構文解析中は無視される
   def cdl_error2( locale, message, *arg )
     Generator.error2( locale, message, *arg )
   end
 
-  #=== ã¨ã©ã¼ãåºåãã
+  #=== エラーを出力する
   #locale:: Array(locale info)
-  # æ§æè§£æä¸­ cdl_error2 ã§ã¯ locale ãç¡è¦ããããããå¥ã« locale ãåºåãã
+  # 構文解析中 cdl_error2 では locale が無視されるため、別に locale を出力する
   def cdl_error3( locale, message, *arg )
     Generator.error(  message, *arg )
@@ -93,16 +75,15 @@
   end
 
-  #=== ã¦ã©ã¼ãã³ã°åºåãã
+  #=== ウォーニング出力する
   def cdl_warning( message, *arg )
     Generator.warning2( @locale, message, *arg )
   end
 
-  #=== ã¦ã©ã¼ãã³ã°åºåãã
+  #=== ウォーニング出力する
   def cdl_warning2( locale, message, *arg )
     Generator.warning2( locale, message, *arg )
   end
 
-  #=== æ
-å ±ãè¡¨ç¤ºãã
+  #=== 情報を表示する
   def cdl_info( message )
     Console.puts "info: #{message}"
@@ -122,11 +103,10 @@
 end
 
-#== åæ¹å Node (Bi Direction Node)
+#== 双方向 Node (Bi Direction Node)
 #
-#  Node ã®å­ã¯ã©ã¹
-#  owner Node ããåç
-§ããã¦ãããã® (owner ã¸ã®ãªã³ã¯ãåãåºãã)
+#  Node の子クラス
+#  owner Node から参照されているもの (owner へのリンクも取り出せる)
 #
-#  get_owner ã§å¾ããããã®
+#  get_owner で得られるもの
 #    FuncHead => Signature
 #    Decl => Namespace(const), Typedef(typedef),
@@ -134,5 +114,5 @@
 #            Struct(member), ParamDecl(parameter), FuncHead(funchead)
 #    Signature, Celltype, CompositeCelltype, Typedef => Namespace
-#,   Namespace => Namespace, Generator.class (root Namespace ã®å ´å)
+#,   Namespace => Namespace, Generator.class (root Namespace の場合)
 #    Cell => Region, CompositeCelltype(in_composite)
 #    Port => Celltype, Composite
@@ -144,12 +124,12 @@
 #    ParamList => FuncHead
 #    Expression => Namespace
-#    å¤§åã®ãã®ã¯ new_* ã¡ã½ããã§ owner Node ã«ä¼éããã
-#    ãã®ã¡ã½ãããå¼ã³åºãããã¨ãã« owner Node ãè¨é²ããã
-#    new_* ããªããã®ï¼
+#    大半のものは new_* メソッドで owner Node に伝達される
+#    そのメソッドが呼び出されたときに owner Node が記録される
+#    new_* がないもの：
 #            Decl(parameter), ParamDecl, ParamList, FuncHead, Expression 
 #
-#    Expression ã¯ãowner Node ã¨ãªããã®ãå¤ãããããæ¹é ãå°é£ã§ãããã
-#    Expression ãå®ç¾©ãããã¨ãã® Namespace ã owner Node ã¨ãã
-#    StructType ã¯ Type ã®ä¸ç¨®ãªã®ã§ owner ãæããªã
+#    Expression は、owner Node となるものが多くあるが、改造が困難であるため
+#    Expression が定義されたときの Namespace を owner Node とする
+#    StructType は Type の一種なので owner を持たない
 #
 class BDNode < Node
@@ -167,5 +147,5 @@
   end
 
-  #=== owner ãè¨­å®ãã
+  #=== owner を設定する
   def set_owner owner
     dbgPrint "set_owner: #{owner.class.name}\n"
@@ -173,7 +153,6 @@
   end
 
-  #=== owner ãå¾ã
-  # class ã®èª¬æãåç
-§
+  #=== owner を得る
+  # class の説明を参照
   def get_owner
     if @owner == nil
@@ -184,5 +163,5 @@
 end
 
-#== Namespace åãæã¤ BDNode
+#== Namespace 名を持つ BDNode
 # Namespace(Region), Signature, Celltype, CompositeCelltype, Cell
 class NSBDNode < BDNode
@@ -192,6 +171,6 @@
   end
 
-  #=== å±ãã namespace ãå¾ã
-  # owner ã namespace ã«ãã©ãçãã¾ã§ä¸ã«ãã©ã
+  #=== 属する namespace を得る
+  # owner を namespace にたどり着くまで上にたどる
   def get_namespace
     if @owner.kind_of? Namespace
@@ -200,5 +179,5 @@
       return @owner.get_namespace
     else
-      # @owner == nil ãªã "::"
+      # @owner == nil なら "::"
       if @name != "::" then
         raise "non-root namespace has no owner #{self.class.name}##{@name} #{self}"
@@ -217,5 +196,5 @@
   end
 
-  #=== NamespacePath ãå¾ã
+  #=== NamespacePath を得る
   def get_namespace_path
     return @NamespacePath
@@ -226,5 +205,5 @@
       return @import.is_imported?
     else
-      return false    # mikan: ä»® @import ã nil ã«ãªãã±ã¼ã¹ãè¿½æ±ã§ãã¦ããªã
+      return false    # mikan: 仮 @import が nil になるケースが追求できていない
     end
   end
@@ -233,8 +212,7 @@
 class NamedList
 #  @names:: {} of items
-#  @items:: [] of items : item ã® CLASS ã¯ get_name ã¡ã½ãããæã¤ãã¨ get_name ã®æ»ãå¤ã¯ Symbol ã§ãªãã¦ã¯ãªããªã
-#                         NamedList ã clone_for_composite ããå ´åã¯ãitem ã«ãã¡ã½ãããå¿
-è¦
-#  @type:: string	ã¨ã©ã¼ã¡ãã»ã¼ã¸
+#  @items:: [] of items : item の CLASS は get_name メソッドを持つこと get_name の戻り値は Symbol でなくてはならない
+#                         NamedList を clone_for_composite する場合は、item にもメソッドが必要
+#  @type:: string	エラーメッセージ
 
   def initialize( item, type )
@@ -245,6 +223,6 @@
   end
 
-  #=== è¦ç´ ãå ãã
-  # parse ããæç¹ã§å ãããã¨(å ´æãè¨æ¶ãã)
+  #=== 要素を加える
+  # parse した時点で加えること(場所を記憶する)
   def add_item( item )
 
@@ -305,7 +283,7 @@
   end
 
-  #=== composite cell ã clone ããæã«è¦ç´ (JOIN) ã® clone ãã
+  #=== composite cell を clone した時に要素(JOIN) の clone する
   #
-  # mikan ãã®ã¡ã½ããã¯ Join ã«ç¹åããã¦ããã®ã§ NamedList ããåé¢ãã¹ã
+  # mikan このメソッドは Join に特化されているので NamedList から分離すべき
   def clone_for_composite( ct_name, cell_name, locale )
     cl = self.clone
@@ -314,8 +292,7 @@
   end
 
-  #=== clone ããã NamedList ã¤ã³ã¹ã¿ã³ã¹ã®åç
-§ãããã®(item)ã clone
+  #=== clone された NamedList インスタンスの参照するもの(item)を clone
   #
-  # mikan ãã®ã¡ã½ããã¯ Join ã«ç¹åããã¦ããã®ã§ NamedList ããåé¢ãã¹ã
+  # mikan このメソッドは Join に特化されているので NamedList から分離すべき
   def set_cloned( ct_name, cell_name, locale )
     items = []
@@ -379,6 +356,6 @@
 end
 
-#== é¢æ°é ­é¨
-# signature ã«ç»é²ãããé¢æ°
+#== 関数頭部
+# signature に登録される関数
 class FuncHead <BDNode
 #  @declarator:: Decl
@@ -425,13 +402,12 @@
   end
 
-  #=== FuncHead# é¢æ°ã®ååãè¿ã
+  #=== FuncHead# 関数の名前を返す
   def get_name
     return @declarator.get_name
   end
 
-  #=== FuncHead# é¢æ°ã®æ»ãå¤ã®åãè¿ã
-  # types.rb ã«å®ç¾©ããã¦ããå
-  # é¢æ°ãããã®å®ç¾©ã¨ãã¦ä¸å®å
-¨ãªå ´å nil ãè¿ã
+  #=== FuncHead# 関数の戻り値の型を返す
+  # types.rb に定義されている型
+  # 関数ヘッダの定義として不完全な場合 nil を返す
   def get_return_type
     if is_function? then
@@ -440,8 +416,7 @@
   end
 
-  #=== FuncHead# é¢æ°ã®å¼æ°ã®ãªã¹ããè¿ã
-  # ParamList ãè¿ã
-  # é¢æ°ãããã®å®ç¾©ã¨ãã¦ä¸å®å
-¨ãªå ´å nil ãè¿ã
+  #=== FuncHead# 関数の引数のリストを返す
+  # ParamList を返す
+  # 関数ヘッダの定義として不完全な場合 nil を返す
   def get_paramlist
     if is_function? then
@@ -457,30 +432,29 @@
 end
 
-#=== å®£è¨
-# @kind ã§ç¤ºãããåç¨®ã®å®£è¨
+#=== 宣言
+# @kind で示される各種の宣言
 class Decl < BDNode
 
 # @identifer:: String
-# @global_name:: String | nil : String(@kind=TYPEDEF||:CONSTANT), nil(@kind=ãã®ä»)
-#                set_kind ã«ã¦è¨­å®ããã
+# @global_name:: String | nil : String(@kind=TYPEDEF||:CONSTANT), nil(@kind=その他)
+#                set_kind にて設定される
 # @type:: ArrayType, FuncType, PtrType, IntType, StructType
 #         VoidType, FloatType, DefinedType, BoolType
 # @initializer:: constant_expression, mikan { initlist }
-# @kind:: :VAR, :ATTRIBUTE, :PARAMETER, :TYPEDEF, :CONSTANT, :MEMBER, :FUNCHEAD(signatureã®é¢æ°å®ç¾©)
+# @kind:: :VAR, :ATTRIBUTE, :PARAMETER, :TYPEDEF, :CONSTANT, :MEMBER, :FUNCHEAD(signatureの関数定義)
 # @b_referenced:: bool
 #
-# ä»¥ä¸ã¯ã@kind ã :VAR, :ATTRIBUTE ã®ã¨ãã«æå¹
-# @rw:: bool     # å¤ãææ³ã§ã¯ attr ã«æå®å¯è½ã ã£ãï¼æ¶ãã«ã¯ generate ã®ä¿®æ­£ãå¿
-è¦ï¼
+# 以下は、@kind が :VAR, :ATTRIBUTE のときに有効
+# @rw:: bool     # 古い文法では attr に指定可能だった（消すには generate の修正も必要）
 # @omit:: bool
-# @choice_list:: [String]  attr åæå¤ã®é¸æè¢
-# ä»¥ä¸ã¯ã@kind ã :VAR, :ATTRIBUTE, :MEMBER ã®ã¨ãã«æå¹
+# @choice_list:: [String]  attr 初期値の選択肢
+# 以下は、@kind が :VAR, :ATTRIBUTE, :MEMBER のときに有効
 # @size_is:: Expression or nil unless specified
-# ä»¥ä¸ã¯ã@kind ã :MEMBER ã®ã¨ãã«æå¹
+# 以下は、@kind が :MEMBER のときに有効
 # @count_is:: Expression or nil unless specified
-#             attr, var ã®å ´åãcount_is ã¯æå®ã§ããªã
+#             attr, var の場合、count_is は指定できない
 # @string:: Expression, -1 (length not specified) or nil (not specified)
 #
-# mikan  ParamDecl ã ãå¥ã«è¨­ããããMemberDecl, AttrDecl ãªã©ãåããã¹ãã(ï¼)
+# mikan  ParamDecl だけ別に設けたが、MemberDecl, AttrDecl なども分けるべきか(？)
 
   def initialize( identifier )
@@ -512,13 +486,12 @@
   end
 
-  #== Decl ã®æå³çèª¤ãããã§ãã¯ãã
+  #== Decl の意味的誤りをチェックする
   def check
     # return nil if @type == nil
 
-    # æ§é ä½ã¿ã°ãã§ãã¯ï¼ãã¤ã³ã¿åããæ§é ä½ãåç
-§ããã¦ããå ´åã¯ãã¿ã°ã®å­å¨ããã§ãã¯ããªãï¼
+    # 構造体タグチェック（ポインタ型から構造体が参照されている場合は、タグの存在をチェックしない）
     @type.check_struct_tag @kind
 
-    # åã®ãã§ãã¯ãè¡ã
+    # 型のチェックを行う
     res = @type.check
     if res then
@@ -526,5 +499,5 @@
     end
 
-    # ä¸è¦ã®åæåå­ããã§ãã¯ãã
+    # 不要の初期化子をチェックする
     if @initializer then
       case @kind
@@ -532,7 +505,6 @@
         cdl_error( "S2003 $1: $2 cannot have initializer" , @identifier, @kind.to_s.downcase )
       when :VAR, :ATTRIBUTE, :CONSTANT
-        # p @initializer  ããã§ã¯ä»£å
-¥å¯è½ãã©ããããã§ãã¯ããªã
-        # :VAR, :ATTRIBUTE, :CONSTANT ã¯ããããã§ãã§ãã¯ãã
+        # p @initializer  ここでは代入可能かどうか、チェックしない
+        # :VAR, :ATTRIBUTE, :CONSTANT はそれぞれでチェックする
         # return @type.check_init( @identifier, @initializer, @kind )
       else
@@ -552,9 +524,9 @@
   end
 
-  #== ãã¤ã³ã¿ã¬ãã«ãå¾ã
-  # æ»ãå¤ï¼
-  #   éãã¤ã³ã¿å¤æ°   = 0
-  #   ãã¤ã³ã¿å¤æ°     = 1
-  #   äºéãã¤ã³ã¿å¤æ° = 2
+  #== ポインタレベルを得る
+  # 戻り値：
+  #   非ポインタ変数   = 0
+  #   ポインタ変数     = 1
+  #   二重ポインタ変数 = 2
   def get_ptr_level
     level = 0
@@ -564,6 +536,5 @@
         level += 1
         type = type.get_referto
-#      elsif type.kind_of?( ArrayType ) then  # æ·»æ°ãªãé
-åã¯ãã¤ã³ã¿ã¨ã¿ãªã
+#      elsif type.kind_of?( ArrayType ) then  # 添数なし配列はポインタとみなす
 #        if type.get_subscript == nil then
 #          level += 1
@@ -572,6 +543,5 @@
 #          break
 #        end
-        # mikan ãã¤ã³ã¿ã®æ·»æ°ããé
-åã®ãã¤ã³ã¿ã¬ãã«ã¯ï¼ã§ããï¼
+        # mikan ポインタの添数あり配列のポインタレベルは０でよい？
       elsif type.kind_of?( DefinedType ) then
         type = type.get_type
@@ -596,5 +566,5 @@
       @type = type
     else
-      @type.set_type( type )             # èã«è¨­å®
+      @type.set_type( type )             # 葉に設定
     end
   end
@@ -731,25 +701,21 @@
 end
 
-# é¢æ°ãã©ã¡ã¼ã¿ã®å®£è¨
+# 関数パラメータの宣言
 class ParamDecl < BDNode
 
 # @declarator:: Decl:  Token, ArrayType, FuncType, PtrType
 # @direction:: :IN, :OUT, :INOUT, :SEND, :RECEIVE
-# @size:: Expr   (size_is å¼æ°)
-# @count:: Expr   (count_is å¼æ°)
-# @max:: Expr (size_is ã®ç¬¬äºå¼æ°)
+# @size:: Expr   (size_is 引数)
+# @count:: Expr   (count_is 引数)
+# @max:: Expr (size_is の第二引数)
 # @b_nullable:: Bool : nullable 
-# @string:: Expr or -1(if size not specified) ï¼string å¼æ°ï¼
+# @string:: Expr or -1(if size not specified) （string 引数）
 # @allocator:: Signature of allocator
-# @b_ref:: bool : size_is, count_is, string_is å¼æ°ã¨ãã¦åç
-§ããã¦ãã
+# @b_ref:: bool : size_is, count_is, string_is 引数として参照されている
 #
-# 1. é¢æ°åã§ãªããã¨
-# 2. ï¼æ¬¡å
-ä»¥ä¸ã®é
-åã§ãã£ã¦æãå
-å´ä»¥å¤ã®æ·»æ°ããããã¨
-# 3. in, out, ..., size_is, count_is, ... ã®éè¤æå®ããªããã¨
-# 4. ãã¤ã³ã¿ã¬ãã«ãé©åãªãã¨
+# 1. 関数型でないこと
+# 2. ２次元以上の配列であって最も内側以外の添数があること
+# 3. in, out, ..., size_is, count_is, ... の重複指定がないこと
+# 4. ポインタレベルが適切なこと
 
   def initialize( declarator, specifier, param_specifier )
@@ -818,8 +784,6 @@
         end
       when :MAX_IS
-        # max_is ã¯ãå
-é¨çãªãã® bnf.y.rb åç
-§
-        # size_is ã§éè¤ãã§ãã¯ããã
+        # max_is は、内部的なもの bnf.y.rb 参照
+        # size_is で重複チェックされる
         @max = i[1]
       when :NULLABLE
@@ -841,6 +805,5 @@
     end
 
-    # mikan ãã¤ã³ã¿ã®é
-åï¼æ·»æ°æï¼ã®ã¬ãã«ãï¼
+    # mikan ポインタの配列（添数有）のレベルが０
     ptr_level = @declarator.get_ptr_level
 
@@ -885,5 +848,5 @@
       cdl_error( "S2014 $1 need pointer or more pointer" , @declarator.get_identifier )
     elsif ptr_level > max_level then
-      # note: æ§æè§£ææ®µéã§å®è¡ã®ãã get_current å¯
+      # note: 構文解析段階で実行のため get_current 可
       if Signature.get_current == nil || Signature.get_current.is_deviate? == false then
         cdl_warning( "W3003 $1 pointer level mismatch" , @declarator.get_identifier )
@@ -897,5 +860,5 @@
 
     if ptr_level > 0 then
-      # size_is, count_is, string ãã»ãã
+      # size_is, count_is, string をセット
       if @direction == :RECEIVE && ptr_level > 1 then
         type.get_type.set_scs( @size, @count, @string, @max, @b_nullable )
@@ -907,6 +870,5 @@
 #type.show_tree 1
 
-      # ãã¤ã³ã¿ãæãã¦ããå
-ã®ãã¼ã¿åãå¾ã
+      # ポインタが指している先のデータ型を得る
       i = 0
       t2 = type
@@ -923,5 +885,5 @@
 # p t2.is_const?
 
-      # const ä¿®é£¾ãé©åããã§ãã¯
+      # const 修飾が適切かチェック
       if @direction == :IN then
         if ! t2.is_const? then
@@ -934,5 +896,5 @@
       end
     else
-      # éãã¤ã³ã¿ã¿ã¤ã
+      # 非ポインタタイプ
       if @size != nil || @count != nil || @string != nil || @max != nil || @b_nullable then
         type.set_scs( @size, @count, @string, @max, @b_nullable )
@@ -1006,12 +968,8 @@
   end
 
-  #=== PPAllocator ãå¿
-è¦ã
-  # Transparent RPC ã®å ´å in ã§ size_is, count_is, string ã®ãããããæå®ããã¦ããå ´å oneway ã§ã¯ PPAllocator ãå¿
-è¦
-  # Transparent PC ã§ oneway ãã©ããã¯ãããã§ã¯å¤æ­ããªãã®ã§å¥éå¤æ­ãå¿
-è¦
-  # Opaque RPC ã®å ´å size_is, count_is, string ã®ãããããæå®ããã¦ããå ´åãPPAllocator ãå¿
-è¦
+  #=== PPAllocator が必要か
+  # Transparent RPC の場合 in で size_is, count_is, string のいずれかが指定されている場合 oneway では PPAllocator が必要
+  # Transparent PC で oneway かどうかは、ここでは判断しないので別途判断が必要
+  # Opaque RPC の場合 size_is, count_is, string のいずれかが指定されている場合、PPAllocator が必要
   def need_PPAllocator?( b_opaque = false )
     if ! b_opaque then
@@ -1060,5 +1018,5 @@
 end
 
-# é¢æ°ãã©ã¡ã¼ã¿ãªã¹ã
+# 関数パラメータリスト
 class ParamList < BDNode
 # @param_list:: NamedList : item: ParamDecl
@@ -1073,5 +1031,5 @@
 
   def add_param( paramdecl )
-    return if paramdecl == nil    # æ¢ã«ã¨ã©ã¼
+    return if paramdecl == nil    # 既にエラー
 
     @param_list.add_item( paramdecl )
@@ -1083,13 +1041,12 @@
   end
 
-  #=== size_is, count_is, string ã®å¼æ°ã®å¼ããã§ãã¯
-  # å¤æ°ã¯åæ¹åç
-§å¯è½ãªãããé¢æ°é ­é¨ã®æ§æè§£éãçµãã£ãå¾ã«ãã§ãã¯ãã
+  #=== size_is, count_is, string の引数の式をチェック
+  # 変数は前方参照可能なため、関数頭部の構文解釈が終わった後にチェックする
   def check_param
     @param_list.get_items.each { |i|
-      next if i == nil                      # i == nil : ã¨ã©ã¼æ
+      next if i == nil                      # i == nil : エラー時
 
       if i.get_type.class == VoidType then
-        # åä¸ã® void åã¯ããã«ã¯ããªã
+        # 単一の void 型はここにはこない
         cdl_error( "S2027 '$1' parameter cannot be void type", i.get_name )
       end
@@ -1098,6 +1055,6 @@
       if size then
         val = size.eval_const( @param_list )
-        if val == nil then			# å®æ°å¼ã§ãªããï¼
-          # mikan å¤æ°ãå«ãå¼ï¼åä¸ã®å¤æ°ã®ã¿ OK
+        if val == nil then			# 定数式でないか？
+          # mikan 変数を含む式：単一の変数のみ OK
           type = size.get_type( @param_list )
           unless type.kind_of?( IntType ) then
@@ -1137,6 +1094,6 @@
       if count then
         val = count.eval_const( @param_list )
-        if val == nil then			# å®æ°å¼ã§ãªããï¼
-          # mikan å¤æ°ãå«ãå¼ï¼åä¸ã®å¤æ°ã®ã¿ OK
+        if val == nil then			# 定数式でないか？
+          # mikan 変数を含む式：単一の変数のみ OK
           type = count.get_type( @param_list )
           unless type.kind_of?( IntType ) then
@@ -1157,6 +1114,6 @@
       if string != -1 && string then
         val = string.eval_const( @param_list )
-        if val == nil then			# å®æ°å¼ã§ãªããï¼
-          # mikan å¤æ°ãå«ãå¼ï¼åä¸ã®å¤æ°ã®ã¿ OK
+        if val == nil then			# 定数式でないか？
+          # mikan 変数を含む式：単一の変数のみ OK
           type = string.get_type( @param_list )
           unless type.kind_of?( IntType ) then
@@ -1182,8 +1139,6 @@
   end
 
-  #=== Push Pop Allocator ãå¿
-è¦ãï¼
-  # Transparent RPC ã®å ´å (oneway ãã¤) in ã®é
-å(size_is, count_is, string ã®ããããã§ä¿®é£¾ï¼ããã
+  #=== Push Pop Allocator が必要か？
+  # Transparent RPC の場合 (oneway かつ) in の配列(size_is, count_is, string のいずれかで修飾）がある
   def need_PPAllocator?( b_opaque = false )
     @param_list.get_items.each { |i|
@@ -1199,6 +1154,6 @@
   end
 
-  #== ParamList# æå­åå
-  #b_name:: Bool: ãã©ã¡ã¼ã¿åãå«ãã
+  #== ParamList# 文字列化
+  #b_name:: Bool: パラメータ名を含める
   def to_str( b_name )
     str = "("
@@ -1223,8 +1178,8 @@
 end
 
-#== CDL ã®æå­åãªãã©ã«ãæ±ãããã®ã¯ã©ã¹
-# CDL ã®æå­åãªãã©ã«ãã®ãã®ã§ã¯ãªã
+#== CDL の文字列リテラルを扱うためのクラス
+# CDL の文字列リテラルそのものではない
 class CDLString
-  # ã¨ã¹ã±ã¼ãæå­ãå¤æ
+  # エスケープ文字を変換
   def self.escape str
     str = str.dup
@@ -1238,9 +1193,9 @@
     str.gsub!( /(\\[Xx][0-9A-Fa-f]{1,2})/, '{printf \"\\1\"}' )
     str.gsub!( /(\\[0-7]{1,3})/, '{printf \"\\1\"}' )
-    str.gsub!( /\\(.)/, "\\1" )   # mikan æªå®ç¾©ã®ã¨ã¹ã±ã¼ãã·ã¼ã±ã³ã¹ãå¤æãã¦ãã¾ã (gcc V3.4.4 ã§ã¯è­¦åãåºããã)
+    str.gsub!( /\\(.)/, "\\1" )   # mikan 未定義のエスケープシーケンスを変換してしまう (gcc V3.4.4 では警告が出される)
     return str
   end
 
-  #=== CDLString#åå¾ã® " ãåãé¤ã
+  #=== CDLString#前後の " を取り除く
   def self.remove_dquote str
     s = str.sub( /\A"/, "" )
@@ -1250,12 +1205,12 @@
 end
 
-#== CDL ã®åæåå­ãæ±ãããã®ã¯ã©ã¹
-# CDL ã®åæåå­ãã®ãã®ã§ã¯ãªã
+#== CDL の初期化子を扱うためのクラス
+# CDL の初期化子そのものではない
 class CDLInitializer
-  #=== åæåå­ã®ã¯ã­ã¼ã³
-  # åæåå­ã¯ Expression, C_EXP, Array ã®ãããã
+  #=== 初期化子のクローン
+  # 初期化子は Expression, C_EXP, Array のいずれか
   def self.clone_for_composite( rhs, ct_name, cell_name, locale )
     if rhs.instance_of? C_EXP then
-      # C_EXP ã® clone ãä½ãã¨ã¨ãã«ç½®æ
+      # C_EXP の clone を作るとともに置換
       rhs = rhs.clone_for_composite( ct_name, cell_name, locale )
     elsif rhs.instance_of? Expression then
@@ -1269,9 +1224,8 @@
   end
 
-  #=== åæåå­ï¼é
-åï¼ã®ã¯ã­ã¼ã³
-  # è¦ç´ ã¯ clone_for_composite ãæã¤ãã®ã ã
+  #=== 初期化子（配列）のクローン
+  # 要素は clone_for_composite を持つものだけ
   def self.clone_for_compoiste_array( array, ct_name, cell_name, locale )
-    # "compoiste.identifier" ã®å ´å (CDL ã¨ãã¦ã¯èª¤ã)
+    # "compoiste.identifier" の場合 (CDL としては誤り)
     if array[0] == :COMPOSITE then
       return array.clone
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/tecs_lang.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/tecs_lang.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/tecs_lang.rb	(revision 321)
@@ -6,59 +6,44 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: tecs_lang.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
-#== è¨èªã«é¢ããå¤æ°ãè¨­å®
-# ã¡ãã»ã¼ã¸ãã¡ã¤ã«ã®èª­ã¿è¾¼ã¿ãè¡ã (èª­ã¿è¾¼ã¿ã«å¤±æããå ´åãããã©ã«ãã®æå­ã³ã¼ãã«å¤æ´ãã)
+#== 言語に関する変数を設定
+# メッセージファイルの読み込みも行う (読み込みに失敗した場合、デフォルトの文字コードに変更する)
 class TECS_LANG
-  # ããã·ã¥ã®ã¿ã°ã¯ case insensitive ã®ãããå¤§æå­ã®æå­åã¨ãã
+  # ハッシュのタグは case insensitive のため、大文字の文字列とする
   CHARSET_ALIAS = {
     "UJIS" => :eucJP,
     "UTF-8" => :utf8,
-    "EUCJP" => :eucJP,   # ä»¥ä¸ case insensitive ã«ãããã
+    "EUCJP" => :eucJP,   # 以下 case insensitive にするため
     "SJIS" => :sjis,
     "UTF8" => :utf8,
@@ -67,5 +52,5 @@
   LANG_ALIAS = {
     "C" => :en_US,
-    "EN_US" => :en_US,   # ä»¥ä¸ case insensitive ã«ãããã
+    "EN_US" => :en_US,   # 以下 case insensitive にするため
     "JA_JP" => :ja_JP
   }
@@ -75,6 +60,6 @@
   }
 
-  #=== LANG ã®ãã¼ã¹
-  #lang::String  "ja_JP.eucJP@cjknarrow", "C" ãªã©
+  #=== LANG のパース
+  #lang::String  "ja_JP.eucJP@cjknarrow", "C" など
   #RETURN:: [ :ja_JP, :eucJP, :cjknarrow ]
   def self.parse_lang( lang )
@@ -82,7 +67,6 @@
 
     lang_terri = $1.to_sym if $1 != nil && $1 != ""
-    # set_kcode_binary ã«ãããC.UTF-8 ã®ã¿ãç¹å¥æ±ãããå¿
-è¦ããªããªã£ã
-    # if lang_terri == :C then    # LANG=C.* ã¯ããã¹ã¦ 1 byte æå­ã³ã¼ãã¨ãã¦æ±ã
+    # set_kcode_binary により、C.UTF-8 のみを特別扱いする必要がなくなった
+    # if lang_terri == :C then    # LANG=C.* は、すべて 1 byte 文字コードとして扱う
     #  codeset = nil
     #  modifier = nil
@@ -94,9 +78,9 @@
   end
 
-  #=== lang, charset ã®å¥æè§£æ±ºããã³å¦¥å½æ§ã®ãã§ãã¯
-  #lang::Symbol    : :en_US, :ja_JP ãªã©
-  #charset::Symbol : :eucJP, :utf8 ãªã©
+  #=== lang, charset の別明解決および妥当性のチェック
+  #lang::Symbol    : :en_US, :ja_JP など
+  #charset::Symbol : :eucJP, :utf8 など
   #RETURN:
-  #  [ lang, charset, result ]::ããresult = false ã®å ´å lang, charset ã¯ä¸é©å
+  #  [ lang, charset, result ]::　　result = false の場合 lang, charset は不適切
   def self.resolve_alias_and_check( lang, charset )
     if LANG_ALIAS[ lang.to_s.upcase ] then
@@ -122,6 +106,6 @@
   end
 
-  #=== codepage ãåãåºã
-  #codepage ã¯3ï½5æ¡ã®æ´æ°ã¨ãã¦ä»®å®
+  #=== codepage を取り出す
+  #codepage は3～5桁の整数として仮定
   def self.get_win_codepage
     cmd_pipe = IO.popen('cmd /c chcp','r')
@@ -132,5 +116,5 @@
   end
 
-  #=== codepage ãã LANG ã®è¨­å®æå­åã«å¤æ
+  #=== codepage から LANG の設定文字列に変換
   def self.codepage_to_lang cp
     if cp == "932" then
@@ -141,16 +125,16 @@
   end
 
-  #=== è¨èªãæå­ã³ã¼ãã«é¢ããå¤æ°ãè¨­å®
-  # ä»¥ä¸ã®é ã«ãã§ãã¯ãããä¸çªæå¾ã«è¨­å®ãããå¤ãæ¡ç¨ããã
-  #   ã»ããã©ã«ã
-  #   ã»codepage  (exerb çã§ TERM æªè¨­å®ã¾ãã¯ TERM=cygwin ã®å ´åã®ã¿)
-  #   ã»LANG ç°å¢å¤æ°
-  #   ã»TECSGEN_LANG ç°å¢å¤æ°
-  #   ã»TECSGEN_FILE_LANG ç°å¢å¤æ° (ãã¡ã¤ã«ã®æå­ã³ã¼ãã®ã¿)
-  #   ã»-k ãªãã·ã§ã³ (ãã¡ã¤ã«ã®æå­ã³ã¼ãã®ã¿)
+  #=== 言語、文字コードに関する変数を設定
+  # 以下の順にチェックされ、一番最後に設定された値が採用される
+  #   ・デフォルト
+  #   ・codepage  (exerb 版で TERM 未設定または TERM=cygwin の場合のみ)
+  #   ・LANG 環境変数
+  #   ・TECSGEN_LANG 環境変数
+  #   ・TECSGEN_FILE_LANG 環境変数 (ファイルの文字コードのみ)
+  #   ・-k オプション (ファイルの文字コードのみ)
   def self.set_lang_var
 
     if $IN_EXERB && ( ENV[ 'TERM' ] == nil || ENV[ 'TERM' ] == "cygwin" ) then
-      # exerb çã§ç«¯æ« cygwin ã®æã¯ codepage ã®ã¿ãè¦ã
+      # exerb 版で端末 cygwin の時は codepage のみを見る
       cp = get_win_codepage
       lang = codepage_to_lang cp
@@ -160,6 +144,6 @@
 
     elsif ENV[ 'LANG' ]then
-      # é exerb çã§ã¯ LANG ç°å¢å¤æ°ãè¦ã
-      # cygwin console ã§ã¯ codepage ã«å¾ã£ã¦åºåããæ¹ãå¹³åãªãã
+      # 非 exerb 版では LANG 環境変数を見る
+      # cygwin console では codepage に従って出力した方が平和なため
 
       $LANG_FILE, $CHARSET_FILE, *dum = self.parse_lang( ENV[ 'LANG' ] )
@@ -181,5 +165,5 @@
   end
 
-  #=== -k ãªãã·ã§ã³ãããã¡ã¤ã«ç¨ã®è¨èªãæå­ã³ã¼ãå¤æ°ãè¨­å®
+  #=== -k オプションからファイル用の言語、文字コード変数を設定
   def self.set_lang_by_option
     if $kcode == nil
@@ -211,10 +195,9 @@
   end
 
-  #=== Kconv ã¯ã©ã¹ç¨ã®å¤æ°ãè¨­å®
-  # è¨èªæ
-å ±ãã Kconv ã«é¢ããå¤æ°ãè¨­å®
+  #=== Kconv クラス用の変数を設定
+  # 言語情報から Kconv に関する変数を設定
   def self.set_kconv_var
 
-    # æå­ã³ã¼ãã®è¨­å®
+    # 文字コードの設定
     case $CHARSET_FILE           # string: "EUC" | "SJIS" | "NONE" | "UTF8"
     when :eucJP
@@ -251,13 +234,13 @@
     end
 
-    $KCODE_TECSGEN = "UTF8"      # string: "EUC"  ãã®ãã¡ã¤ã«ã®æå­ã³ã¼ãï¼ãªãã·ã§ã³ã§ã¯ãªãå®æ°ï¼
+    $KCODE_TECSGEN = "UTF8"      # string: "EUC"  このファイルの文字コード（オプションではなく定数）
     $KCONV_TECSGEN = Kconv::UTF8 # const: 
-    set_kcode $KCODE_TECSGEN     # ãã®ãã¡ã¤ã«ã®æå­ã³ã¼ããè¨­å®
-  end
-
-  #=== ä¸æçã« KCODE ã BINARY ã«å¤æ´ãã
-  # EUC ã UTF8 ã§èª­ã¿è¾¼ãã å ´åã«æå­åºåããèª¤ãåé¡ã®å¯¾å¿
-  # ã³ã¡ã³ãã®èª­ã¿é£ã°ããèª¤ãç¹ãåé¡
-  # ãã ããSJIS ã®å ´åã¯ãã¨ã¹ã±ã¼ãæå­ã®åé¡ããããããå¤æ´ããªã
+    set_kcode $KCODE_TECSGEN     # このファイルの文字コードを設定
+  end
+
+  #=== 一時的に KCODE を BINARY に変更する
+  # EUC を UTF8 で読み込んだ場合に文字区切りを誤る問題の対応
+  # コメントの読み飛ばしを誤る点が問題
+  # ただし、SJIS の場合は、エスケープ文字の問題があるため、変更しない
   def self.set_kcode_binary
 
@@ -273,6 +256,5 @@
   end
 
-  #=== ä¸æçãªã KCODE ã®å¤æ´ãå
-ã«æ»ã
+  #=== 一時的なあ KCODE の変更を元に戻す
   def self.reset_kcode
     set_kcode $KCODE_BACK
@@ -280,10 +262,10 @@
 
   #####
-  # $LANG_FILE        è¨èª (C ã¯ en_US ã«å¤æããã)
-  # $LANG_CONSOLE     è¨èª (C ã¯ en_US ã«å¤æããã)
-  # $CHARSET_FILE     ãã¡ã¤ã«ã®æå­ã³ã¼ã
-  # $CHARSET_CONSOLE  ã³ã³ã½ã¼ã«æå­ã³ã¼ã
-
-  # ããã©ã«ãã®è¨­å®ï¼æ­£è¦åæ¸ã¿ã®ãã¨ï¼
+  # $LANG_FILE        言語 (C は en_US に変換される)
+  # $LANG_CONSOLE     言語 (C は en_US に変換される)
+  # $CHARSET_FILE     ファイルの文字コード
+  # $CHARSET_CONSOLE  コンソール文字コード
+
+  # デフォルトの設定（正規化済みのこと）
   $LANG_FILE_DEFAULT  = :en_US
   $CHARSET_FILE_DEFAULT = nil
@@ -296,11 +278,11 @@
   $CHARSET_CONSOLE = $CHARSET_CONSOLE_DEFAULT
 
-  # -k ã§æå®å¯è½ãªã³ã¼ã
+  # -k で指定可能なコード
   $CODE_TYPE_ARRAY = [ "euc", "sjis", "none", "utf8" ]
 
-  # è¨èªãæ±ºå®ãã
+  # 言語を決定する
   self.set_lang_var
 
-  # è¨èªãã³ã¼ãã®ãã§ãã¯ã¨æ­£è¦å
+  # 言語、コードのチェックと正規化
   lang_file, charset_file, res =
     self.resolve_alias_and_check( $LANG_FILE, $CHARSET_FILE )
@@ -316,5 +298,5 @@
   end
 
-  # ã¡ãã»ã¼ã¸ã¢ã¸ã¥ã¼ã«ãã­ã¼ã
+  # メッセージモジュールをロード
   if require_tecsgen_lib( "tecslib/messages/messages_console_#{lang_console}.rb", false ) == false then
     require_tecsgen_lib( "tecslib/messages/messages_console_#{$LANG_CONSOLE_DEFAULT}.rb" )
@@ -330,5 +312,5 @@
   end
 
-  # Kconv ã¯ã©ã¹ã®ããã®å¤æ°ãè¨­å®
+  # Kconv クラスのための変数を設定
   self.set_kconv_var 
 
@@ -337,5 +319,5 @@
   dbgPrint "Ruby19_File_Encode=#{$Ruby19_File_Encode}\n"
 
-  #=== åä½ãã¹ãå®è¡
+  #=== 単体テスト実行
   if $unit_test then
     print "unit test: set_lang_var\n"
@@ -350,6 +332,6 @@
 end
 
-#= Console ã¯ã©ã¹
-# æå­ã³ã¼ããå¤æãã
+#= Console クラス
+# 文字コードを変換する
 class Console
   def self.print str
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/tecsgen.rb	(revision 321)
@@ -6,49 +6,34 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: tecsgen.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
@@ -56,6 +41,6 @@
 class TECSGEN
 
-  #=== import ãã¹ (-I) ãæ«å°¾ã«è¿½å 
-  # æ¢ã«ç»é²æ¸ã¿ã§ããã°ãè¿½å ããªã
+  #=== import パス (-I) を末尾に追加
+  # 既に登録済みであれば、追加しない
   def self.add_import_path path
     if $import_path.index( path ) == nil then
@@ -65,7 +50,7 @@
   end
 
-  #=== EXEB çã®ãã¹ã®èª¿æ´
-  # ç°å¢å¤æ° TECSPATH ã cygwin ã¹ã¿ã¤ã«ã ã¨ãexerb çã§ã¯æ±ããªã
-  # $import_path ã¨ $TECSPATH ãèª¿æ´ãã
+  #=== EXEB 版のパスの調整
+  # 環境変数 TECSPATH が cygwin スタイルだと、exerb 版では扱えない
+  # $import_path と $TECSPATH を調整する
   def self.adjust_exerb_path
     if $IN_EXERB then
@@ -74,5 +59,5 @@
       paths = []
       $import_path.each{ |path|
-        # cygpath ã¯ '..' ãç°¡ç´ãã¦ãã¾ãã®ã§ãnew_tecspath ã§ç½®æãã
+        # cygpath は '..' を簡約してしまうので、new_tecspath で置換する
         # paths << cygpath( path, path )
         paths << path.sub( pattern, new_tecspath )
@@ -85,7 +70,7 @@
   end
 
-  #=== $(TECSPATH) ã¸ã®ç½®æ
-  #path::String   : ENV[ 'TECSPATH' ] ã«ä¸è´ããé¨åãããã°ã "$(TECSPATH)" ã«ç½®æ
-  #b_global::Bool : true ãªã gsub ã§ç½®æãfalse ãªã sub ã§ç½®æ
+  #=== $(TECSPATH) への置換
+  #path::String   : ENV[ 'TECSPATH' ] に一致する部分があれば、 "$(TECSPATH)" に置換
+  #b_global::Bool : true なら gsub で置換。false なら sub で置換
   def self.subst_tecspath( path, b_global = false )
     tp = $tecspath.dup
@@ -102,7 +87,7 @@
   end
 
-  #=== path ã¯çµ¶å¯¾ãã¹ã?
+  #=== path は絶対パスか?
   #path:: String   :
-  # '/' ã¾ãã¯ '$' ã§å§ã¾ãå ´åãçµ¶å¯¾ãã¹ã¨å¤å®ãã
+  # '/' または '$' で始まる場合、絶対パスと判定する
   def self.is_absolute_path?( path )
     pa = path[0..0]; pa2 = path[0..1]
@@ -116,5 +101,5 @@
   end
 
-  #=== tecsgen ã®ããã©ã«ããè¨­å®
+  #=== tecsgen のデフォルトを設定
   def self.set_default_config
     Makefile::set_default_config
@@ -122,8 +107,7 @@
 
   ###
-  #== Makefile.templ ã®åºåå
-å®¹ãè¿½å ãå¤æ´ããããã®æä½
+  #== Makefile.templ の出力内容を追加、変更するための操作
   module Makefile
-    # åºå®ããã¦ããå¤æ°(add_var ã§å¤æ´ã§ããªã)
+    # 固定されている変数(add_var で変更できない)
     @@fixed_vars = { :INCLUDES => nil, :DEFINES => nil, :TARGET_BASE => nil, :BASE_DIR => nil }
     @@config_mode = false
@@ -140,11 +124,11 @@
     @@lines = []
 
-    #=== OTHER_OBJS ã«è¿½å ãã
+    #=== OTHER_OBJS に追加する
     def self.add_obj obj
       @@objs << obj
     end
-    #=== è¿½å ããå¤æ°
-    # ãã©ã°ã¤ã³ããã¯ãããã©ã«ãå¤ãå¤æ´ã§ãã
-    # config ã«ãã
+    #=== 追加する変数
+    # プラグインからは、デフォルト値を変更できる
+    # config により
     def self.add_var( var, val, comment = nil )
       if @@fixed_vars[ var ]
@@ -159,36 +143,36 @@
       end
     end
-    #=== LDFLAGS ã«è¿½å ãã
+    #=== LDFLAGS に追加する
     def self.add_ldflag ldflag
       @@ldflags += " " + ldflag
     end
-    #=== ãµã¼ããã¹ãè¿½å ãã
-    # CFLAGS, vpath ã«è¿½å ãã
+    #=== サーチパスを追加する
+    # CFLAGS, vpath に追加する
     def self.add_search_path path
       @@search_path << path
     end
-    #=== PRE_TECSGEN_TARGET ã«è¿½å ãã
-    # PRE_TECSGEN_TARGET ã« target ãè¿½å ãã
+    #=== PRE_TECSGEN_TARGET に追加する
+    # PRE_TECSGEN_TARGET に target を追加する
     def self.add_pre_tecsgen_target target
       @@pre_tecsgen_target << pre_tecsgen_target
     end
-    #=== POST_TECSGEN_TARGET ã«è¿½å ãã
-    # POST_TECSGEN_TARGET ã« target ãè¿½å ãã
+    #=== POST_TECSGEN_TARGET に追加する
+    # POST_TECSGEN_TARGET に target を追加する
     def self.add_post_tecsgen_target target
       @@post_tecsgen_target << pre_tecsgen_target
     end
-    #=== è¿½å ããå¤æ°
+    #=== 追加する変数
     def self.add_line( line )
       @@lines << line.to_s + "\n"
     end
 
-    def self.get_objs  # Array ãè¿ã
+    def self.get_objs  # Array を返す
       return @@objs.uniq
     end
-    def self.get_vars  # Array ãè¿ã
+    def self.get_vars  # Array を返す
       if RUBY_VERSION >= '1.9' then
         return (@@vars.keys + @@vars_default.keys).sort.uniq
       else
-        # V1.8 ã§ã¯ãSymbol ã® sort ãã§ããªãã®ã§ãä¸æ¦ String ã«ç½®æãã
+        # V1.8 では、Symbol の sort ができないので、一旦 String に置換する
         return (@@vars.keys + @@vars_default.keys).map{|s| s.to_s }.sort.uniq.map!{|s| s.to_sym }
       end
@@ -200,23 +184,23 @@
       return @@var_comments[ var ]
     end
-    def self.get_ldflags  # String ãè¿ã
+    def self.get_ldflags  # String を返す
       return @@ldflags
     end
-    def self.get_search_path  # Array ãè¿ã
+    def self.get_search_path  # Array を返す
       return @@search_path.uniq
     end
-    def self.get_pre_tecsgen_target  # Array ãè¿ã
+    def self.get_pre_tecsgen_target  # Array を返す
       return @@pre_tecsgen_target.uniq
     end
-    def self.get_post_tecsgen_target  # Array ãè¿ã
+    def self.get_post_tecsgen_target  # Array を返す
       return @@post_tecsgen_target.uniq
     end
-    def self.get_lines  # ä»å ããè¡ãå¾ã
+    def self.get_lines  # 付加する行を得る
       return @@lines.uniq
     end
 
-    #=== TECSGEN ã®ããã©ã«ãè¨­å®ãè¡ã
+    #=== TECSGEN のデフォルト設定を行う
     # Makefile 
-    # @@fixed_vars ã§å®ç¾©ããã¦ããå¤æ°ã¯ãå¤æ´ã§ãããå®æ°å®ç¾©ããã¦ãã
+    # @@fixed_vars で定義されている変数は、変更できず、定数定義されている
     def self.set_default_config
       add_var( "TARGET", "$(TARGET_BASE).exe", "default target name"  )
@@ -235,9 +219,9 @@
 
   def syntax_analisys argv
-    # ã«ã¼ã namespace (region) ãçæ
+    # ルート namespace (region) を生成
     @root_namespace = Region.new("::")
 
-    ####  æ§æè§£æ (post ã³ã¼ããé¤ã) ####
-    # ãã¹ã¦ã® cdl ã import ãã
+    ####  構文解析 (post コードを除く) ####
+    # すべての cdl を import する
     argv.each{ |f|
       dbgPrint( "## Import: #{f}\n")
@@ -245,7 +229,7 @@
     }
 
-    # ãã¹ã¦ã®æ§æè§£éãå®äºãããã¨ã®å ±å
-    #   å®éã«ã¯ãå¾ãããã©ã°ã¤ã³ã®çæãã CDL ã®ãã¼ã¹ãè¡ããã
-    #   ã¨ã©ã¼è¡æ°ã®æ±ºå®æ¹æ³ã®å¤æ´ã®ããã«è¡ã
+    # すべての構文解釈が完了したことの報告
+    #   実際には、後からプラグインの生成する CDL のパースが行われる
+    #   エラー行数の決定方法の変更のために行う
     Generator.end_all_parse
     dbgPrint( "## End all parse (except Post Code)\n")
@@ -253,19 +237,19 @@
 
   def semantics_analisys_1
-    ####  æå³è§£æï¼ (post ã³ã¼ããé¤ã) ####
+    ####  意味解析１ (post コードを除く) ####
     dbgPrint( "## Creating reverse join \n")
     Cell.create_reverse_join
 
-    #0 set_definition_join ã¯2åå¼ã³åºãããï¼1åç®ï¼
+    #0 set_definition_join は2回呼び出される（1回目）
     dbgPrint( "## Checking all join\n")
     @root_namespace.set_definition_join
-    # @root_namespace.set_require_join                   ### ãã£ããè¦åãããéè¤ã¨ã©ã¼ãè¦éã
-    # through ãã©ã°ã¤ã³ã§çæãããã»ã«ã«ã require ãçæã§ãã (set_definition_join ã®å¾ãã§å®æ½)
-
-    ####  post ã³ã¼ãã®çæã¨æ§æè§£æ ####
-    # å¼æ°ããªããã°ããã©ã°ã¤ã³ã®ãã¹ãã³ã¼ããåºåããªã
+    # @root_namespace.set_require_join                   ### いったん見合わせ。重複エラーを見逃す
+    # through プラグインで生成されたセルにも require も生成できる (set_definition_join の後ろで実施)
+
+    ####  post コードの生成と構文解析 ####
+    # 引数がなければ、プラグインのポストコードを出力しない
     if ARGV.length > 0 then
       dbgPrint( "## Generating Post Code\n")
-      # ãã©ã°ã¤ã³ã®ãã¹ãã³ã¼ãã®åºåã¨ import
+      # プラグインのポストコードの出力と import
       tmp_file_name = "#{$gen}/tmp_plugin_post_code.cdl"
       file = nil
@@ -277,5 +261,5 @@
 
       if file then
-        # through ãã©ã°ã¤ã³ã®ãã¹ãã³ã¼ãçæ
+        # through プラグインのポストコード生成
         PluginModule.gen_plugin_post_code file
 
@@ -290,33 +274,29 @@
     end
 
-    ####  æå³è§£æï¼ (post ã³ã¼ã) ####
+    ####  意味解析１ (post コード) ####
     dbgPrint( "## Creating reverse join (for post code) \n")
     Cell.create_reverse_join
 
-    # Join ã®å®ç¾©ã®è¨­å®ã¨ãã§ãã¯
-    #0 # åæ¹åç
-§å¯¾å¿
-    #0 set_definition_join ã¯2åå¼ã³åºãããï¼2åç®ï¼  post_code ã§çæããã
+    # Join の定義の設定とチェック
+    #0 # 前方参照対応
+    #0 set_definition_join は2回呼び出される（2回目）  post_code で生成された
     dbgPrint( "## Checking all join (for cells generated by Post Code\n")
     @root_namespace.set_definition_join
 
     dbgPrint( "## Set require join\n")
-    @root_namespace.set_require_join   # mikan post ã®åã«ã
-    # ãã¹ãã³ã¼ãã§çæãããã»ã«ã® require ã®join ãçæ
-    # mikan require ã§ through ãé©ç¨ããã¦ããã¹ãã³ã¼ããå¿
-è¦ã¨ãªã£ã¦ãåºåãããªã
+    @root_namespace.set_require_join   # mikan post の前にも
+    # ポストコードで生成されたセルの require のjoin を生成
+    # mikan require で through が適用されて、ポストコードが必要となっても出力されない
   end # semantics_analisys_1
 
   def semantics_analisys_2
-    ####  æå³è§£æï¼ ####
+    ####  意味解析２ ####
     Cell.make_cell_list2
     dbgPrint( "## Set fixed join\n")
     Cell.create_reverse_require_join
-    # create_reverse_require_join ã¯ set_detinition_join ã«åãè¾¼ããã¨ãã§ããªã
-        # namespace ã«ä¾å­ããªãåºç¾é ã§è¡ã
-        # mikan through ãã©ã°ã¤ã³ãé©ç¨ãããã¹ãã³ã¼ãã«å½±é¿ãä¸ããå ´åãèæ
-®ã§ãã¦ããªã
-        # mikan post code ã«å½±é¿ã®ãããã®ã§ããã°ãæ©ãã« reverse_require_join ã®çµåãå¿
-è¦
+    # create_reverse_require_join は set_detinition_join に埋め込むことができない
+        # namespace に依存しない出現順で行う
+        # mikan through プラグインが適用されポストコードに影響を与える場合が考慮できていない
+        # mikan post code に影響のあるものであれば、早くに reverse_require_join の結合が必要
     dbgPrint( "## Setting port reference count\n")
     @root_namespace.set_port_reference_count
@@ -325,5 +305,5 @@
     @root_namespace.check_join
 
-    # mikan ãã©ã°ã¤ã³ã§çæãããã³ã³ãã¼ãã³ãã® set_def_and_check_join
+    # mikan プラグインで生成されたコンポーネントの set_def_and_check_join
 
     dbgPrint( "## Checking referenced but undefined cell\n")
@@ -332,5 +312,5 @@
 
   def optimize_and_generate
-    #### Region link root ãã¨ã«ãªããã£ãã¤ãºããã³çæ ####
+    #### Region link root ごとにオプティマイズおよび生成 ####
     Region.get_link_roots.each { |region|
 
@@ -354,6 +334,6 @@
       end
 
-      # ã»ã«ãä¸ã¤ããªããã°çæããªã
-      # ã»ã«ã®çæããªãå ´å
+      # セルが一つもなければ生成しない
+      # セルの生成がない場合
       if region.get_n_cells == 0 then
         if $region_list.length > 0 then
@@ -385,13 +365,12 @@
 
       dbgPrint( "## Unset optimize variables\n")
-      @root_namespace.reset_optimize   # æé©åããªã»ãããã
+      @root_namespace.reset_optimize   # 最適化をリセットする
 
       if Generator.get_n_error == 0 then
-        # ã¨ã©ã¼ãçºçãã¦ããããè¨­å®ããªã
+        # エラーが発生していたら、設定しない
         dbgPrint( "## Set cell id\n")
-        @root_namespace.set_cell_id_and_domain      # ã»ã«ã® ID ã¨ãã¡ã¤ã³æ
-å ±ãè¨­å®ï¼linkunit æ¯ã«0ããã¤ããï¼
-
-        # ã¨ã©ã¼ãçºçãã¦ããããæé©åã¯å®æ½ããªã
+        @root_namespace.set_cell_id_and_domain      # セルの ID とドメイン情報を設定（linkunit 毎に0からつける）
+
+        # エラーが発生していたら、最適化は実施しない
         if ! $unopt then
           dbgPrint( "## Optimizing: Link Region=#{@root_namespace.get_name}\n")
@@ -401,5 +380,5 @@
 
       if $show_tree then
-        # ã¨ã©ã¼ãçºçãã¦ãã¦ãè¡¨ç¤ºï¼ã¨ã©ã¼çºçæã¯æé©åããã¦ããªãã®ã§æ³¨æï¼
+        # エラーが発生していても表示（エラー発生時は最適化されていないので注意）
         print "##### show_tree LinkRegion=#{region.get_name} #####\n"
         @root_namespace.show_tree(0)
@@ -407,5 +386,5 @@
       end
 
-      # æ§æè§£éãæå³è§£æã§ã¨ã©ã¼çºçãã¦ããããã³ã¼ãçæãããªã
+      # 構文解釈、意味解析でエラー発生していたら、コード生成をしない
       if Generator.get_n_error != 0 then
         print_report
@@ -413,5 +392,5 @@
       end
 
-      #### ã³ã¼ãçæ ####
+      #### コード生成 ####
       begin
         dbgPrint( "## Generating: Link Region=#{@root_namespace.get_name}\n")
@@ -420,5 +399,5 @@
         @root_namespace.generate_post
       rescue
-        # éå¸¸ããã¸ã¯æ¥ãªã (generate, generate_post ã§å¦ç½®ããã)
+        # 通常ここへは来ない (generate, generate_post で処置される)
         Generator.error( "G9999 fail to generate" )
       end
@@ -438,8 +417,8 @@
     }
 
-    # update ãã
-    # APPFile ã§çæããããã¡ã¤ã«ã¯ãããå¤åãããã°ãããã§æ´æ°ãã
-    # ã³ã¼ãçææ®µéã§ã¨ã©ã¼ãçºçããã°ãæ´æ°ããªã
-    # CFile ã§çæããããã®ã¯ãæ´æ°ããã¦ãã
+    # update する
+    # APPFile で生成されたファイルは、もし変化があれば、ここで更新する
+    # コード生成段階でエラーが発生すれば、更新しない
+    # CFile で生成されたものは、更新されている
     if Generator.get_n_error == 0 then
       begin
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/types.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/types.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/types.rb	(revision 321)
@@ -6,63 +6,45 @@
 #   Copyright (C) 2008-2015 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: types.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
-#= HasType: @type ãå
-é¨ã«æã¤åã®ããã®ã¢ã¸ã¥ã¼ã«
+#= HasType: @type を内部に持つ型のためのモジュール
 #  @b_cloned::Bool  : true if @type is cloned
 #
-# ãã®ã¢ã¸ã¥ã¼ã«ã¯ DefinedType, PtrType, ArrayType ã« include ããã
-# æ¬å½ã¯ typedef ãããæã® Decl ã®è¦ç´ ã®ã¿ clone ããã°ããã®ã ããget_type, get_original_type ã§
-# åãåºãããã¨ããset_scs, set_qualifier ãããã¨ãã«ç¡æ¡ä»¶ã§ clone ãã (ç¡é§ã«ã¡ã¢ãªãä½¿ç¨ãã)
-# ãã ããclone ããã®ã¯ä¸åã®ã¿ã§ãã (äºå clone ããã¨å¥ã®åãåç
-§ãã¦ãã¾ã)
+# このモジュールは DefinedType, PtrType, ArrayType に include される
+# 本当は typedef された時の Decl の要素のみ clone すればよいのだが、get_type, get_original_type で
+# 取り出されたとき、set_scs, set_qualifier されたときに無条件で clone する (無駄にメモリを使用する)
+# ただし、clone するのは一回のみである (二回 clone すると別の型を参照してしまう)
 #
-# initialize ã§ clone ãã¦ããå
-±æããã¦ããã¨ãã« clone ãããªã
+# initialize で clone しても、共有されているときに clone されない
 #
 module HasType
@@ -71,5 +53,5 @@
   end
 
-  #=== HasType# @type ãã¯ã­ã¼ã³ãã
+  #=== HasType# @type をクローンする
   def clone_type
 #    if @b_cloned == false then
@@ -131,6 +113,6 @@
   end
 
-  #=== size_is, count_is, string ãè¨­å®
-  # æ´¾çã¯ã©ã¹ã§ãªã¼ãã¼ã©ã¤ãããï¼ããã©ã«ãã§ã¯ã¨ã©ã¼ï¼
+  #=== size_is, count_is, string を設定
+  # 派生クラスでオーバーライドする（デフォルトではエラー）
   def set_scs( size, count, string, max = nil, b_nullable = false )
     str = ""
@@ -170,38 +152,31 @@
   end
 
-  #=== åããã§ãã¯
-  #    æ­£å½ãªåå®ç¾©ãã©ããããã§ãã¯ãã
+  #=== 型をチェック
+  #    正当な型定義かどうか、チェックする
   def check
-    # åã«èª¤ããããã°ãã¨ã©ã¼æå­åãè¿ã
-  end
-
-  #=== struct ã® tag ããã§ãã¯
-  #    æ­£å½ãªåå®ç¾©ãã©ããããã§ãã¯ãã
-  #kind:: Decl ã® @kind ãåç
-§
+    # 型に誤りがあれば、エラー文字列を返す
+  end
+
+  #=== struct の tag をチェック
+  #    正当な型定義かどうか、チェックする
+  #kind:: Decl の @kind を参照
   def check_struct_tag kind
-    # tag ãå­å¨ããªããã°ã¨ã©ã¼ãåºåãã
-    # é
-ååã§ã¯ãè¦ç´ ã®åãåå¸°çã«ãã§ãã¯
-    # ãã¤ã³ã¿åã§ã¯ãæãå
-ã® tag ãã§ãã¯ã¯ããªã
-    # é¢æ°åã§ã¯ãã©ã¡ã¼ã¿ãªã¹ãã®ãã¹ã¦ã«ã¤ãã¦è¡ã
-  end
-
-  #===  åæåå¯è½ããã§ãã¯
-  #     attribute ãªã©åæåå¯è½ããã§ãã¯ããï¼åã«å¯¾ãæ­£å½ãªåæåå­ãä¸ãããã¦ãããï¼
-  #ident::        string                è¢«ä»£å
-¥å¤æ°å½
+    # tag が存在しなければエラーを出力する
+    # 配列型では、要素の型を再帰的にチェック
+    # ポインタ型では、指す先の tag チェックはしない
+    # 関数型ではパラメータリストのすべてについて行う
+  end
+
+  #===  初期化可能かチェック
+  #     attribute など初期化可能かチェックする（型に対し正当な初期化子が与えられているか）
+  #ident::        string                被代入変数命
   #initialize::   Expression, Array of initializer or C_EXP
-  #               ä»£å
-¥å¤ãC_EXP ãä¸ããããã®ã¯ IntType ã®å ´åã®ã¿
+  #               代入値、C_EXP が与えられるのは IntType の場合のみ
   #kind::         symbol (:ATTRIBUTE, :VAR, :CONSTNAT )
-  #attribute::    NameList              kind == :VAR ã®ã¨ãåç
-§ã§ãã attribute
+  #attribute::    NameList              kind == :VAR のとき参照できる attribute
   #
-  #     locale ãç¬¬ä¸å¼æ°ã¨ãã¦åãã®ã¯ãä»¥ä¸ã®çç±ã«ããã
-  #     ãã®ã¡ã½ããã¯ãå¤æ°ã¸ã®ä»£å
-¥ãè¡ããããè¡ãã«å¯¾ãã¦å¼ã³åºããããã
-  #     Type ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ãå¤æ°ãå®ç¾©ããããè¡ããè¨æ¶ãã¦ããã
+  #     locale を第一引数として取るのは、以下の理由による。
+  #     このメソッドは、変数への代入が行われる「行」に対して呼び出されるが、
+  #     Type クラスのインスタンスは、変数が定義された「行」を記憶している。
   #
   # STAGE: S
@@ -210,52 +185,45 @@
   end
 
-  #=== const_val ãæå®ã®åã«ã­ã£ã¹ããã
-  # æ´¾çã¯ã©ã¹ã§ãªã¼ãã¼ã©ã¤ããã¦ããªãã¨ã¨ã©ã¼
+  #=== const_val を指定の型にキャストする
+  # 派生クラスでオーバーライドしていないとエラー
   def cast( const_val )
     cdl_error( "T1004 cannot cast to $1" , self.class )
   end
 
-  #=== åãä¸è´ãããã®ãã§ãã¯
-  # ååã®å­é¢ã§ãã§ãã¯ï¼
-  # typedef ãããåãå­é¢ã§ä¸è´ãè¦ããããå
-ã®åãåãã§ãååãç°ãªãã°ä¸ä¸è´ã¨ãªã
+  #=== 型が一致するかのチェック
+  # 型名の字面でチェック．
+  # typedef された型も字面で一致を見るため、元の型が同じでも型名が異なれば不一致となる
   def equal? type2
     return ( get_type_str == type2.get_type_str ) && ( get_type_str_post == type2.get_type_str_post )
   end
 
-  #=== bit size ãå¾ã
-  # IntType, FloatType ä»¥å¤ã¯0
+  #=== bit size を得る
+  # IntType, FloatType 以外は0
   def get_bit_size
     return 0
   end
 
-  #=== å
-ã®åãå¾ã
-  # typedef ãããåã®å ´åããã®å
-ã®åãè¿ã.
-  # ããä»¥å¤ã¯ãèªåèªèº«ãè¿ãï¼
-  # (DefinedType ã§ã¯æ¬ã¡ã½ããããªã¼ãã¼ã©ã¤ãããã)
+  #=== 元の型を得る
+  # typedef された型の場合、その元の型を返す.
+  # それ以外は、自分自身を返す．
+  # (DefinedType では本メソッドがオーバーライドされる)
   def get_original_type
     return self
   end
 
-  #=== å
-é¨ã«ãã¤ã³ã¿åãæã¤
-  # ãã¤ã³ã¿åãã¾ãã¯ãã¤ã³ã¿åã¡ã³ããæã¤æ§é ä½ãã¾ãã¯è¦ç´ ããã¤ã³ã¿åãæã¤é
-å
+  #=== 内部にポインタ型を持つ
+  # ポインタ型、またはポインタ型メンバを持つ構造体、または要素がポインタ型を持つ配列
   def has_pointer?
     false
   end
 
-  #=== size_is, count_is, string æå®ããããã¤ã³ã¿ãæã¤ã
-  # size_is, count_is, string æå®ããããã¤ã³ã¿åãã¾ãã¯ãããã¡ã³ãã«æã¤æ§é ä½ãã¾ãã¯ããããè¦ç´ ã«æã¤é
-å
+  #=== size_is, count_is, string 指定されたポインタを持つか
+  # size_is, count_is, string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれをを要素に持つ配列
   def has_sized_pointer?
     false
   end
   
-  #=== é·ãæå®ã®ãªã string ãæã¤
-  # ãªãæå®ã®ãªã string æå®ããããã¤ã³ã¿åãã¾ãã¯ãããã¡ã³ãã«æã¤æ§é ä½ãã¾ãã¯ãããè¦ç´ ã«æã¤é
-å
+  #=== 長さ指定のない string を持つ
+  # なさ指定のない string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれを要素に持つ配列
   def has_unsized_string?
     false
@@ -281,5 +249,5 @@
     @type_name = type_name
 
-    # mikan type_name ã path ã«ãªã£ã¦ããªãããæ«å®
+    # mikan type_name が path になっていないため暫定
     @typedef = Namespace.find( [ type_name ] )  #1
 
@@ -317,5 +285,5 @@
   end
 
-  #=== qualifier(const, volatile) ã®è¨­å®
+  #=== qualifier(const, volatile) の設定
   def set_qualifier( qualifier )
     clone_type
@@ -338,6 +306,6 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
-    nil    # typedef ã®æ®µéã§æå³ãã§ãã¯ããã¦ãã
+  def check	# 意味的誤りがあれば、文字列を返す
+    nil    # typedef の段階で意味チェックされている
   end
 
@@ -346,22 +314,18 @@
   end
 
-  #=== å
-é¨ã«ãã¤ã³ã¿åãæã¤
-  # ãã¤ã³ã¿åãã¾ãã¯ãã¤ã³ã¿åã¡ã³ããæã¤æ§é ä½ãã¾ãã¯è¦ç´ ããã¤ã³ã¿åãæã¤é
-å
+  #=== 内部にポインタ型を持つ
+  # ポインタ型、またはポインタ型メンバを持つ構造体、または要素がポインタ型を持つ配列
   def has_pointer?
     @type.has_pointer?
   end
 
-  #=== size_is, count_is, string æå®ããããã¤ã³ã¿ãæã¤ã
-  # size_is, count_is, string æå®ããããã¤ã³ã¿åãã¾ãã¯ãããã¡ã³ãã«æã¤æ§é ä½ãã¾ãã¯ããããè¦ç´ ã«æã¤é
-å
+  #=== size_is, count_is, string 指定されたポインタを持つか
+  # size_is, count_is, string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれをを要素に持つ配列
   def has_sized_pointer?
     @type.has_sized_pointer?
   end
   
-  #=== é·ãæå®ã®ãªã string ãæã¤
-  # ãªãæå®ã®ãªã string æå®ããããã¤ã³ã¿åãã¾ãã¯ãããã¡ã³ãã«æã¤æ§é ä½ãã¾ãã¯ãããè¦ç´ ã«æã¤é
-å
+  #=== 長さ指定のない string を持つ
+  # なさ指定のない string 指定されたポインタ型、またはそれをメンバに持つ構造体、またはそれを要素に持つ配列
   def has_unsized_string?
     @type.has_unsized_string?
@@ -383,5 +347,5 @@
 class VoidType < Type
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     nil
   end
@@ -408,5 +372,5 @@
 class BoolType < Type
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     nil
   end
@@ -458,5 +422,5 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     nil
   end
@@ -466,16 +430,14 @@
     if val.instance_of?( Expression ) then
       val = val.eval_const2( nil, attribute )
-      # è©ä¾¡ã®çµæ C_EXP ã Array ã¨ãªãå¯è½æ§ããã
-    end
-
-    if val.instance_of? Token then    # StringVal å°å
-¥ã«ããããã¯ã Token ã¯æ¥ãªãã¯ã
-      # val ã Token ã®å ´å == ã®å³è¾ºã String ã ã¨ã¨ã©ã¼ãèµ·ãã (#198)
+      # 評価の結果 C_EXP や Array となる可能性がある
+    end
+
+    if val.instance_of? Token then    # StringVal 導入により、もはや Token は来ないはず
+      # val が Token の場合 == の右辺が String だとエラーを起こす (#198)
       cdl_error2( locale, "T1009 $1: $2: not integer" , ident, val )
       return
     elsif val.is_a? C_EXP then
-      # #192 var ã attribute ãåç
-§ããattribute ã®å³è¾ºã C_EXP ã®å ´å
-      # const ã®å³è¾ºã C_EXP ã®å ´åã
+      # #192 var が attribute を参照し、attribute の右辺が C_EXP の場合
+      # const の右辺が C_EXP の場合も
       return
     elsif val.kind_of? FloatVal then
@@ -521,8 +483,8 @@
   end
 
-  #=== IntType# æå¤§å¤ãæå°å¤ããã§ãã¯ãã¦ã¯ãªãããã
-  # ã­ã£ã¹ãæ¼ç®ãè¡ã
-  #in_val:: IntegerVal, FloatVal:  ãã®åã«ã­ã£ã¹ãããå¤
-  #from_type:: Symbol:  :IntType, :FloatType  IntType ã®å ´åã¯ãããæ°ã§ã¯ãªãããFloatType ã®å ´åã¯æå¤§å¤ã§ã¯ãªãã
+  #=== IntType# 最大値、最小値をチェックしてクリップする
+  # キャスト演算を行う
+  #in_val:: IntegerVal, FloatVal:  この型にキャストする値
+  #from_type:: Symbol:  :IntType, :FloatType  IntType の場合はビット数でクリップ、FloatType の場合は最大値でクリップ
   def check_and_clip( in_val, from_type = :IntType )
     bit_size = get_bit_size
@@ -533,7 +495,7 @@
     if get_max && val > get_max then
       if from_type == :IntType then
-        rval = ((1 << bit_size)-1) & val   # bit æ°ã§ã¯ãªãã
+        rval = ((1 << bit_size)-1) & val   # bit 数でクリップ
       else
-        rval = get_max                         # æå¤§å¤ã§ã¯ãªãã (FloatType)
+        rval = get_max                         # 最大値でクリップ (FloatType)
       end
       cdl_warning( "W2003 $1: too large to cast to $2, clipped($3)" , in_val, get_type_str, rval )
@@ -546,5 +508,5 @@
       if @sign == :SIGNED || @sign == nil then
         cdl_warning( "W2004 $1: too small to cast to $2, clipped($3)" , in_val, get_type_str, rval )
-      else    # @sign == :UNSIGNED || @sign == nil (char ã®å ´å)
+      else    # @sign == :UNSIGNED || @sign == nil (char の場合)
         cdl_warning( "W2005 $1: negative value for unsigned: convert to $2" , in_val, rval )
       end
@@ -558,5 +520,5 @@
     if @sign == :SIGNED || @sign == nil then
       if @bit_size == -1 then
-        bit_sz = 8   # char_t ã¯ãæç¬¦å·ã«æ±ã
+        bit_sz = 8   # char_t は、有符号に扱う
       else
         bit_sz = @bit_size
@@ -576,5 +538,5 @@
     if @bit_size == -1 then
       if @sign == nil then
-        return 255   # char_t ã¯ãç¡ç¬¦å·ã«æ±ã
+        return 255   # char_t は、無符号に扱う
       else
         bit_sz = 8
@@ -600,5 +562,5 @@
   end
 
-  #=== IntType# C è¨èªã«ãããååï¼ä¿®é£¾å­ä»ãï¼
+  #=== IntType# C 言語における型名（修飾子付き）
   def get_type_str
     str = super
@@ -620,20 +582,20 @@
 
     case @bit_size
-    when -1      # char_t å
+    when -1      # char_t 型
       if @sign == :SIGNED then
         sign = "s"
       end
       str = "#{str}#{sign}char_t"
-    when -11     # char å(obsolete)
+    when -11     # char 型(obsolete)
       str = "#{str}#{signL}char"
-    when -2      # short å
+    when -2      # short 型
       str = "#{str}#{signL}short"
-    when -3      # int å
+    when -3      # int 型
       str = "#{str}#{signL}int"
-    when -4      # long å
+    when -4      # long 型
       str = "#{str}#{signL}long"
-    when -5      # long long å
+    when -5      # long long 型
       str = "#{str}#{signL}long long"
-    when 8, 16, 32, 64, 128     # int16, int32, int64, int128 å
+    when 8, 16, 32, 64, 128     # int16, int32, int64, int128 型
       str = "#{str}#{sign}int#{@bit_size}_t"
     end
@@ -642,19 +604,17 @@
   end
 
-  #=== IntType# C è¨èªã«ãããååï¼å¾ç½®æå­åï¼
+  #=== IntType# C 言語における型名（後置文字列）
   def get_type_str_post
     ""
   end
 
-  #=== IntType#bit_size ãå¾ã
-  #    è¿ãããå¤ã¯ @bit_size ã®ä»æ§ãåç
-§
+  #=== IntType#bit_size を得る
+  #    返される値は @bit_size の仕様を参照
   def get_bit_size
     return @bit_size
   end
 
-  #=== IntType# sign ãå¾ã
-  # @sign ã®èª¬æãåç
-§
+  #=== IntType# sign を得る
+  # @sign の説明を参照
   def get_sign
     @sign
@@ -676,20 +636,19 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     nil
   end
 
-  # mikan Float åã® C_EXP å¯¾å¿ (generate.rb ã«ãå¤æ´å¿
-è¦)
+  # mikan Float 型の C_EXP 対応 (generate.rb にも変更必要)
   def check_init( locale, ident, initializer, kind, attribute = nil )
-    # åã«å¯¾ããåæå¤ã«èª¤ããããã°ãã¨ã©ã¼æå­åãè¿ã
+    # 型に対する初期値に誤りがあれば、エラー文字列を返す
     val = initializer
     if val.instance_of?( Expression ) then
       val = val.eval_const2( nil, attribute )
-      # è©ä¾¡ã®çµæ C_EXP ã Array ã¨ãªãå¯è½æ§ããã
+      # 評価の結果 C_EXP や Array となる可能性がある
     end
 
     if val.instance_of? Token then
-      # val ã Token ã®å ´å == ã®å³è¾ºã String ã ã¨ã¨ã©ã¼ãèµ·ãã
+      # val が Token の場合 == の右辺が String だとエラーを起こす
       cdl_error2( locale, "T1018 $1: $2: not number" , ident, val )
       return
@@ -772,13 +731,13 @@
 #  @members_decl:: NamedList
 #  @definition:: StructType
-#  @b_has_pointer_member:: bool : ã¡ã³ãã«ãã¤ã³ã¿åããã
-#  @b_has_sized_pointer_member:: bool : ã¡ã³ãã«ãã¤ã³ã¿åããã
-#  @b_has_unsized_string_member:: bool : ã¡ã³ãã«ãã¤ã³ã¿åããã
-#  @member_types_symbol:: Symbol : tag ãç¡ãæã®ã¿è¨­å® (ããä»¥å¤ã§ã¯ nil)
+#  @b_has_pointer_member:: bool : メンバにポインタ型がある
+#  @b_has_sized_pointer_member:: bool : メンバにポインタ型がある
+#  @b_has_unsized_string_member:: bool : メンバにポインタ型がある
+#  @member_types_symbol:: Symbol : tag が無い時のみ設定 (それ以外では nil)
 
   @@structtype_current_stack = []
   @@structtype_current_sp = -1
 
-  # tag ãªã struct
+  # tag なし struct
   @@no_struct_tag_num = 0
   @@no_tag_struct_list = {}
@@ -803,10 +762,10 @@
     if @b_define then
       @members_decl = NamedList.new( nil, "in struct #{@tag}" )
-      # if @tag then    ç»é²ã¿ã¤ãã³ã°ãçµããã«å¤æ´ V1.0.2.19
+      # if @tag then    登録タイミングを終わりに変更 V1.0.2.19
       #  Namespace.new_structtype( self )
       # end
     else
       @definition = Namespace.find_tag( @tag )
-      # check_struct_tag ã«ç§»ã V1.0.2.19
+      # check_struct_tag に移す V1.0.2.19
       # if @definition == nil then
       #  cdl_error( "T1021 \'$1\': struct not defined" , @tag )
@@ -833,12 +792,11 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     nil
   end
 
-  #=== æ§é ä½ã®ã¿ã°ããã§ãã¯
-  #  declarator ã®æç¹ã§ãã§ãã¯ãã
-  #kind:: Decl ã® @kind ãåç
-§
+  #=== 構造体のタグをチェック
+  #  declarator の時点でチェックする
+  #kind:: Decl の @kind を参照
   def check_struct_tag kind
     if @tag == nil
@@ -852,6 +810,5 @@
   end
 
-  # mikan Float åã® C_EXP å¯¾å¿ (generate.rb ã«ãå¤æ´å¿
-è¦)
+  # mikan Float 型の C_EXP 対応 (generate.rb にも変更必要)
   def check_init( locale, ident, initializer, kind, attribute = nil )
 
@@ -862,5 +819,5 @@
     end
 
-    # åæåå­ãå¼ã®å ´åãåï¼ã¿ã°ï¼ãä¸è´ããããã§ãã¯
+    # 初期化子が式の場合、型（タグ）が一致するかチェック
     if initializer.instance_of?( Expression ) then
       t = initializer.get_type( attribute )
@@ -898,5 +855,5 @@
 
   def end_of_parse()
-    if @members_decl == nil   # @b_define = false ã¾ãã¯ã¡ã³ãã¼ã®ãªãæ§é ä½ï¼ã¨ã©ã¼ï¼
+    if @members_decl == nil   # @b_define = false またはメンバーのない構造体（エラー）
       return
     end
@@ -924,5 +881,5 @@
       string = md.get_string
       if string == -1 then
-        # é·ãæå®ãªã
+        # 長さ指定なし
       elsif string then
         val = string.eval_const( @members_decl )
@@ -962,10 +919,10 @@
 
     if @tag then
-      # typedef struct tag StructType; ã®å½¢å¼ã®å ´å
-      # struct ã®æ¬ä½ã¯ãå¥ã«çæããã
+      # typedef struct tag StructType; の形式の場合
+      # struct の本体は、別に生成される
       return "#{str}struct #{@tag} "
 
     else
-      # typedef struct { int a; } StructType; ã®å½¢å¼ã®å ´å
+      # typedef struct { int a; } StructType; の形式の場合
       str += "struct {\n"
       @members_decl.get_items.each{ |i|
@@ -1018,7 +975,7 @@
   end
 
-  #=== åãæ§é ä½ãã©ãããã§ãã¯ãã
-  # tag ã®ãã§ãã¯ã¯è¡ããªã
-  # ãã¹ã¦ã®ã¡ã³ãã®ååã¨åãä¸è´ãããã¨ãç¢ºèªãã
+  #=== 同じ構造体かどうかチェックする
+  # tag のチェックは行わない
+  # すべてのメンバの名前と型が一致することを確認する
   def same? another
     md = another.get_members_decl
@@ -1110,19 +1067,18 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
-    if @type.class == ArrayType then	# é
-åãè¿ãé¢æ°
+  def check	# 意味的誤りがあれば、文字列を返す
+    if @type.class == ArrayType then	# 配列を返す関数
       return "function returning array"
-    elsif @type.class == FuncType then	# é¢æ°ãè¿ãé¢æ°
+    elsif @type.class == FuncType then	# 関数を返す関数
       return "function returning function"
     end
-    return @type.check   # é¢æ°ã® return ããåã®ãã§ãã¯
-
-    # ãã©ã¡ã¼ã¿ã®åã®ãã§ãã¯ã¯ ParamList#check_param ã§è¡ã
+    return @type.check   # 関数の return する型のチェック
+
+    # パラメータの型のチェックは ParamList#check_param で行う
   end
 
   def check_struct_tag kind
     @type.check_struct_tag kind
-    # ParamDecl ã§ããã§ãã¯ãããã®ã§ãããã§ã¯ãã§ãã¯ããªã
+    # ParamDecl でもチェックされるので、ここではチェックしない
     # @paramlist.check_struct_tag kind
   end
@@ -1141,8 +1097,8 @@
   end
 
-  #=== return type ãè¿ã
+  #=== return type を返す
   #
-  # return type ãè¿ã
-  # get_return_type ã¨ãã¹ãã ã£ã
+  # return type を返す
+  # get_return_type とすべきだった
   def get_type
     @type
@@ -1154,5 +1110,5 @@
 
   def get_type_str_post
-    # åã ããè¿ã (ä»®å¼æ°ã®ååãå«ããªã)
+    # 型だけを返す (仮引数の名前を含めない)
     @paramlist.to_str( false )
   end
@@ -1182,8 +1138,6 @@
   end
 
-  #=== Push Pop Allocator ãå¿
-è¦ãï¼
-  # Transparent RPC ã®å ´å oneway ãã¤ in ã®é
-å(size_is, count_is, string ã®ããããã§ä¿®é£¾ï¼ããã
+  #=== Push Pop Allocator が必要か？
+  # Transparent RPC の場合 oneway かつ in の配列(size_is, count_is, string のいずれかで修飾）がある
   def need_PPAllocator?( b_opaque = false )
     if @b_oneway || b_opaque then
@@ -1194,5 +1148,5 @@
   end
 
-  #=== ãã©ã¡ã¼ã¿ã in, inout, out, send, receive ãæã¤ã
+  #=== パラメータが in, inout, out, send, receive を持つか
   def has_in?
     @has_in
@@ -1211,10 +1165,9 @@
   end
 
-  #=== å
-¥åæ¹åã®ãã©ã¡ã¼ã¿ãæã¤ã
+  #=== 入力方向のパラメータを持つか
   def has_inward?
     @has_in || @has_inout || @has_send
   end
-  #=== åºåæ¹åã®ãã©ã¡ã¼ã¿ãæã¤ã
+  #=== 出力方向のパラメータを持つか
   def has_outward?
     @has_inout || @has_out || @has_receive
@@ -1258,5 +1211,5 @@
   end
 
-  #=== Array#qualifier(const, volatile) ã®è¨­å®
+  #=== Array#qualifier(const, volatile) の設定
   def set_qualifier( qualifier )
     clone_type
@@ -1265,12 +1218,10 @@
   end
 
-  # é
-åè¦ç´ ã const ãªã const
+  # 配列要素が const なら const
   def is_const?
     @type.is_const?
   end
 
-  # é
-åè¦ç´ ã volatile ãªã volatile
+  # 配列要素が volatile なら volatile
   def is_volatile?
     @type.is_volatile?
@@ -1298,11 +1249,8 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
-    if @type.class == FuncType then		# é¢æ°ã®é
-å
+  def check	# 意味的誤りがあれば、文字列を返す
+    if @type.class == FuncType then		# 関数の配列
       return "array of function"
-    elsif @type.class == ArrayType then	# æ·»æ°ãªãé
-åã®é
-å
+    elsif @type.class == ArrayType then	# 添数なし配列の配列
       unless @type.get_subscript then
         return "subscript not specified"
@@ -1310,6 +1258,5 @@
     end
 
-    return @type.check    # é
-åè¦ç´ ã®åããã§ãã¯
+    return @type.check    # 配列要素の型をチェック
   end
 
@@ -1364,5 +1311,5 @@
 #  @size:: Expr, or nil if not specified
 #  @count:: Expr, or nil if not specified
-#  @string:: Expr or -1(if size not specified) ï¼string å¼æ°ï¼, or nil if not specified
+#  @string:: Expr or -1(if size not specified) （string 引数）, or nil if not specified
 
   include HasType
@@ -1381,6 +1328,5 @@
       @type = type
     else
-      @type.set_type( type )	# æå
-ã® type ãè¨­å®
+      @type.set_type( type )	# 枝先の type を設定
     end
   end
@@ -1404,5 +1350,5 @@
   end
 
-  def check	# æå³çèª¤ããããã°ãæå­åãè¿ã
+  def check	# 意味的誤りがあれば、文字列を返す
     return nil if @type == nil
     @type.check
@@ -1410,6 +1356,5 @@
 
   def check_struct_tag kind
-    if kind != :MEMBER  # æ§é ä½ã¡ã³ãã¼ã®å ´åããã¤ã³ã¿ã®å
-ã®æ§é ä½ã¿ã°ããã§ãã¯ããªã
+    if kind != :MEMBER  # 構造体メンバーの場合、ポインタの先の構造体タグをチェックしない
       @type.check_struct_tag kind
     end
@@ -1428,5 +1373,5 @@
           if ( t1.class == t2.class ) && ( t1.get_bit_size == t2.get_bit_size ) then
           elsif ( t1.kind_of?( CDefinedType) || t2.kind_of?( CDefinedType ) )&& t1.get_type_str == t2.get_type_str && t1.get_type_str_post && t2.get_type_str_post then
-            # int8_t ãªã©ããä¸æ¹ã¯ .h ã«å®ç¾©ããã¦ããã±ã¼ã¹
+            # int8_t などが、一方は .h に定義されているケース
           else
             cdl_error2( locale, "T1032 $1: incompatible pointer type" , ident )
@@ -1439,5 +1384,5 @@
         end
       elsif val.kind_of? StringVal then
-        # æå­åå®æ°
+        # 文字列定数
         # mikan L"wide string"
         if @type.get_bit_size != -1 && @type.get_bit_size != -11 then  # -1: char_t
@@ -1483,7 +1428,7 @@
     @b_nullable = b_nullable
 
-    # string ã¯æãå·¦å´ã® ptr ã«ä½ç¨ãã
+    # string は最も左側の ptr に作用する
     if @type.kind_of?( PtrType ) then
-      # ptr_level ã 2 ä»¥ä¸ã§ãããã¨ã¯ ParamDecl#initializer ã§ãã§ãã¯ããã
+      # ptr_level が 2 以上であることは ParamDecl#initializer でチェックされる
       clone_type
       @type.set_scs( nil, nil, string, nil, false )
@@ -1532,5 +1477,5 @@
   end
 
-  #=== PtrType# size_is ã®æå¤§å¤
+  #=== PtrType# size_is の最大値
   def get_max
     @max
@@ -1595,6 +1540,6 @@
 end
 
-#==  DescriptorType ã¯ã©ã¹
-# åççµåã§æ¸¡ããã¹ã¯ãªãã¿å
+#==  DescriptorType クラス
+# 動的結合で渡すデスクリプタ型
 class DescriptorType < Type
 # @sinagure_nsp::NamespacePath
@@ -1630,5 +1575,5 @@
     case kind
     when :PARAMETER
-      # å¼æ°ã¯åæåã§ããªã
+      # 引数は初期化できない
     else
       cdl_error2( locale, "T9999 Descriptor cannot be used for $1", kind)
@@ -1637,5 +1582,5 @@
 
   #== DescriptorType#
-  # æå³è§£ææ®µéã§ã¯ nil ãè¿ãããå¯è½æ§ã«æ³¨æ
+  # 意味解析段階では nil が返される可能性に注意
   def get_signature
     Namespace.find @signature_nsp
@@ -1643,5 +1588,5 @@
 end
 
-# ä»¥ä¸åä½ãã¹ãã³ã¼ã
+# 以下単体テストコード
 if $unit_test then
   puts( "===== Unit Test: IntType ===== (types.rb)")
Index: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/value.rb
===================================================================
--- EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/value.rb	(revision 270)
+++ EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/value.rb	(revision 321)
@@ -6,63 +6,47 @@
 #   Copyright (C) 2008-2014 by TOPPERS Project
 #--
-#   ä¸è¨èä½æ¨©è
-ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
-#   ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ãä½¿ç¨ã»è¤è£½ã»æ¹
-#   å¤ã»åé
-å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
-#   (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
-#       æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
-#       ã¹ã³ã¼ãä¸­ã«å«ã¾ãã¦ãããã¨ï¼
-#   (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨
-#       è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
-#       ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#   (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
-#       ç¨ã§ããªãå½¢ã§åé
-å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
-#       ã¨ï¼
-#     (a) åé
-å¸ã«ä¼´ããã­ã¥ã¡ã³ãï¼å©ç¨è
-ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
-#         ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
-#     (b) åé
-å¸ã®å½¢æ
-ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSãã­ã¸ã§ã¯ãã«
-#         å ±åãããã¨ï¼
-#   (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
-#       å®³ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ããå
-è²¬ãããã¨ï¼
-#       ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
-#       ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
-ããã³TOPPERSãã­ã¸ã§ã¯ãã
-#       å
-è²¬ãããã¨ï¼
+#   上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
 #  
-#   æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
-ã
-#   ãã³TOPPERSãã­ã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
-#   ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
-#   ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæå®³ã«é¢ãã¦ãï¼ã
-#   ã®è²¬ä»»ãè² ããªãï¼
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
 #  
-#   $Id: value.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
+#   $Id$
 #++
 
-#= BaseVal æ´æ°ãæµ®åå°æ°ãªã©ã®å¤ãæ±ãã¯ã©ã¹ã®åºåºã¯ã©ã¹
+#= BaseVal 整数、浮動小数などの値を扱うクラスの基底クラス
 #
-# TECS ã® CDL ã§æ±ãå¤ã¯ãä»¥ä¸ã«åé¡ããã
-# ã»æ´æ°
-# ã»æµ®åå°æ°
-# ã»æå­å
-# ã»ãã¼ã«å¤
-# éæåï¼æ§é ä½ãé
-åï¼ã¨ C_EXP ã¯ããã§ã¯æ±ããªã
+# TECS の CDL で扱う値は、以下に分類される
+# ・整数
+# ・浮動小数
+# ・文字列
+# ・ブール値
+# 集成型（構造体、配列）と C_EXP はここでは扱わない
 #
-# ãã®ã¯ã©ã¹ã§å®ç¾©æ¸ã¿ã®æ¼ç®å­ã¯ãã¨ã©ã¼ã¨ãªã
-# åã«ããæ¼ç®å¯è½ãªå ´åãæ¼ç®å­ããªã¼ãã¼ã©ã¤ããã
+# このクラスで定義済みの演算子は、エラーとなる
+# 型により演算可能な場合、演算子をオーバーライドする
 #
 class BaseVal < Node
@@ -160,12 +144,11 @@
 end
 
-#= Pointer å¤ (IntegerVal ã® Pointer ç)
+#= Pointer 値 (IntegerVal の Pointer 版)
 #
-# ãã¤ã³ã¿å¤ã¯ãCDL ã§ç´æ¥çæããããã¨ã¯ãªã
-# æ´æ°å¤ã®ã­ã£ã¹ãæ¼ç®ã«ããçæããã
+# ポインタ値は、CDL で直接生成されることはない
+# 整数値のキャスト演算により生成される
 class PointerVal < BaseVal
-#@int_val:: IntegerVal: IntegerVal ã§ãªãã¦ã¯ãªããªã
-#@ptr_type:: PtrType: ãã¤ã³ã¿ã®æãå
-ã®å
+#@int_val:: IntegerVal: IntegerVal でなくてはならない
+#@ptr_type:: PtrType: ポインタの指す先の型
 
   def initialize( int_val, ptr_type )
@@ -175,7 +158,6 @@
   end
 
-  #=== ãã¤ã³ã¿ã®æãå
-ã®åãå¾ã
-  # PointerVal å°ç¨ã®ã¡ã½ãã
+  #=== ポインタの指す先の型を得る
+  # PointerVal 専用のメソッド
   def get_type
     @ptr_type
@@ -183,6 +165,5 @@
 
   def cast type
-    t = type.get_original_type   # typedef ã®å
-ãå¾ã
+    t = type.get_original_type   # typedef の元を得る
     if t.kind_of? IntType then
       val = t.check_and_clip( @int_val, :IntType )
@@ -213,5 +194,5 @@
 end
 
-#= IntegerVal: æ´æ°å¤ãæ±ãã¯ã©ã¹
+#= IntegerVal: 整数値を扱うクラス
 class IntegerVal < BaseVal
 #@val:: Integer: value
@@ -250,5 +231,5 @@
   def / val
     if val.kind_of? FloatVal then
-      v2 = val.to_f   # to_f ã2åè©ä¾¡ããªã
+      v2 = val.to_f   # to_f を2回評価しない
       if v2 == 0.0 then
         cdl_error( "V1009 / : divieded by zero"  )
@@ -257,5 +238,5 @@
       return FloatVal.new( @val.to_f / v2 )
     else
-      v2 = val.to_i   # to_i ã2åè©ä¾¡ããªã
+      v2 = val.to_i   # to_i を2回評価しない
       if v2 == 0 then
         cdl_error( "V1010 / : divieded by zero"  )
@@ -267,5 +248,5 @@
   def % val
     if val.kind_of? FloatVal then
-      v2 = val.to_f   # to_f ã2åè©ä¾¡ããªã
+      v2 = val.to_f   # to_f を2回評価しない
       if v2 == 0.0 then
         cdl_error( "V1011 % : divieded by zero"  )
@@ -274,5 +255,5 @@
       return FloatVal.new( @val.to_f % v2 )
     else
-      v2 = val.to_i   # to_i ã2åè©ä¾¡ããªã
+      v2 = val.to_i   # to_i を2回評価しない
       if v2 == 0 then
         cdl_error( "V1012 % : divieded by zero"  )
@@ -360,6 +341,5 @@
   end
   def cast( type )
-    t = type.get_original_type   # typedef ã®å
-ãå¾ã
+    t = type.get_original_type   # typedef の元を得る
     if t.kind_of? IntType then
       val = t.check_and_clip( @val, :IntType )
@@ -395,5 +375,5 @@
 end
 
-#= BoolVal: bool å¤ãæ±ãã¯ã©ã¹
+#= BoolVal: bool 値を扱うクラス
 class BoolVal < BaseVal
 #@val:: bool: true, false
@@ -437,6 +417,5 @@
   end
   def cast( type )
-    t = type.get_original_type   # typedef ã®å
-ãå¾ã
+    t = type.get_original_type   # typedef の元を得る
     if @val then
       val = 1
@@ -478,5 +457,5 @@
 end
 
-#= FloatVal: å®æ°å¤ãæ±ãã¯ã©ã¹
+#= FloatVal: 実数値を扱うクラス
 class FloatVal < BaseVal
 #@val:: Float
@@ -496,5 +475,5 @@
   end
   def / val
-    v2 = val.to_f   # to_f ã2åè©ä¾¡ããªã
+    v2 = val.to_f   # to_f を2回評価しない
     if v2 == 0.0 then
       cdl_error( "V1017 / : divieded by zero"  )
@@ -504,5 +483,5 @@
   end
   def % val
-    v2 = val.to_f   # to_f ã2åè©ä¾¡ããªã
+    v2 = val.to_f   # to_f を2回評価しない
     if v2 == 0.0 then
       cdl_error( "V1018 % : divieded by zero"  )
@@ -536,6 +515,5 @@
   end
   def cast( type )
-    t = type.get_original_type   # typedef ã®å
-ãå¾ã
+    t = type.get_original_type   # typedef の元を得る
     if t.kind_of? IntType then
       val = t.check_and_clip( @val, :FloatType )
@@ -565,5 +543,5 @@
 end
 
-#= æå­åãªãã©ã«ãæ±ãã¯ã©ã¹
+#= 文字列リテラルを扱うクラス
 class StringVal < BaseVal
 #@str:: Token:
@@ -573,13 +551,12 @@
     super()
     @str = str
-    @specifier = spec   # mikan L"str" wide æå­åæªå¯¾å¿
+    @specifier = spec   # mikan L"str" wide 文字列未対応
   end
 
   #===
   #
-  # string ã® cast ã¯ã§ããªã mikan ãã¤ã³ã¿åã¸ã® cast ã¯ã§ããã¹ã
+  # string の cast はできない mikan ポインタ型への cast はできるべき
   def cast type
-    t = type.get_original_type   # typedef ã®å
-ãå¾ã
+    t = type.get_original_type   # typedef の元を得る
     if t.kind_of? IntType then
       cdl_error( "V1022 string cannot cast to integer"  )
@@ -598,5 +575,5 @@
 
   def val
-    @str.to_s   # Token ã§æ±ããã¦ããåæ® (val ãåãåºã)
+    @str.to_s   # Token で扱われていた名残 (val を取り出す)
   end
 end
