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)")
