Index: asp3_gr_sakura/trunk/tecsgen/tecslib/core/syntaxobj.rb
===================================================================
--- asp3_gr_sakura/trunk/tecsgen/tecslib/core/syntaxobj.rb	(revision 317)
+++ asp3_gr_sakura/trunk/tecsgen/tecslib/core/syntaxobj.rb	(revision 318)
@@ -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 2374 2016-01-03 22:14:59Z okuma-top $
+#   $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
