Index: asp3_gr_sakura/trunk/tecsgen/tecslib/core/expression.rb
===================================================================
--- asp3_gr_sakura/trunk/tecsgen/tecslib/core/expression.rb	(revision 317)
+++ asp3_gr_sakura/trunk/tecsgen/tecslib/core/expression.rb	(revision 318)
@@ -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 2061 2014-05-31 22:15:33Z okuma-top $
+#   $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
