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 )
