Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r270 r321  
    66#   Copyright (C) 2008-2014 by TOPPERS Project
    77#--
    8 #   ä¸Šè¨˜è‘—作権è€
    9 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    10 #   ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    11 #   å¤‰ãƒ»å†é
    12 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    13 #   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    14 #       æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    15 #       ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    16 #   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    17 #       ç”¨ã§ãã‚‹å½¢ã§å†é
    18 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    19 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    20 #       è€
    21 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    22 #       ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    23 #   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    24 #       ç”¨ã§ããªã„形で再é
    25 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    26 #       ã¨ï¼Ž
    27 #     (a) 再é
    28 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    29 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    30 #         ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    31 #     (b) 再é
    32 å¸ƒã®å½¢æ
    33 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    34 #         å ±å‘Šã™ã‚‹ã“と.
    35 #   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    36 #       å®³ã‹ã‚‰ã‚‚,上記著作権è€
    37 ãŠã‚ˆã³TOPPERSプロジェクトをå
    38 è²¬ã™ã‚‹ã“と.
    39 #       ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    40 #       ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    41 ãŠã‚ˆã³TOPPERSプロジェクトを
    42 #       å
    43 è²¬ã™ã‚‹ã“と.
     8#   上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     9#   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10#   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11#   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12#       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13#       スコード中に含まれていること.
     14#   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15#       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16#       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17#       の無保証規定を掲載すること.
     18#   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19#       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20#       と.
     21#     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22#         作権表示,この利用条件および下記の無保証規定を掲載すること.
     23#     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24#         報告すること.
     25#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26#       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27#       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28#       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29#       免責すること.
    4430
    45 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    46 ãŠ
    47 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    48 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    49 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    50 #   ã®è²¬ä»»ã‚’負わない.
     31#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35#   の責任を負わない.
    5136
    52 #   $Id: expression.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
     37#   $Id$
    5338#++
    5439
     
    7156
    7257  #=== Expression# to_s
    73   # C 言語ソース向きの文字列を生成 (globa_name)
     58  # C 言語ソース向きの文字列を生成 (globa_name)
    7459  def to_s
    7560    elements_to_s( @elements )
     
    7762
    7863  #=== Expression# to_str
    79   # C 言語ソース向きの文字列を生成 (globa_name)
     64  # C 言語ソース向きの文字列を生成 (globa_name)
    8065  def to_str( name_list, pre, post )
    8166    elements_to_s( @elements, name_list, pre, post )
     
    8368
    8469  #=== Expression#to_CDL_str
    85   # CDL 表現の文字列を生成
     70  # CDL 表現の文字列を生成
    8671  def to_CDL_str
    8772    return to_s
    8873  end
    8974
    90   #=== 定数式として評価する(トライしてみる)
     75  #=== 定数式として評価する(トライしてみる)
    9176  #
    92   # このメソッドは、定数式を評価する
    93   # ・attribute, var の初期化子
    94   # ・size_is, count_is 引数
    95   # ・é
    96 åˆ—の添数
     77  # このメソッドは、定数式を評価する
     78  # ・attribute, var の初期化子
     79  # ・size_is, count_is 引数
     80  # ・配列の添数
    9781  #
    98   # name_list(NamedList|Nil): 式から参ç
    99 §å¯èƒ½ãªãƒªã‚¹ãƒˆï¼Ž
    100   # NamedList の要素は  size_is, count_is の引数評価の場合 ParamDecl (関数仮引数)
     82  # name_list(NamedList|Nil): 式から参照可能なリスト.
     83  # NamedList の要素は  size_is, count_is の引数評価の場合 ParamDecl (関数仮引数)
    10184  #
    102   # name_list2(NamedList|Nil) : NamedList の要素は Decl (attribute, var) である.省略時 nil
     85  # name_list2(NamedList|Nil) : NamedList の要素は Decl (attribute, var) である.省略時 nil
    10386  #
    104   # RETURN: 評価した定数.評価できなかった場合は nil を返す
     87  # RETURN: 評価した定数.評価できなかった場合は nil を返す
    10588  #
    106   # 型は get_type で、評価する(定数として求められないときに使用できる)
    107   # Array を返すのは attr{ int *a = {1, 2, 3}; int *b = a; }; の b の右辺を評価した場合
     89  # 型は get_type で、評価する(定数として求められないときに使用できる)
     90  # Array を返すのは attr{ int *a = {1, 2, 3}; int *b = a; }; の b の右辺を評価した場合
    10891
    10992  def eval_const( name_list, name_list2 = nil )
     
    11699      return val.to_i
    117100    elsif val.kind_of? PointerVal then
    118       return val.to_i           # mikan エラー V1008 が発生してしまう
     101      return val.to_i           # mikan エラー V1008 が発生してしまう
    119102      # elsif val.kind_of? EnumVal then
    120103      # enum mikan
    121104    else
    122       # C_EXP, Array または nil :そのまま返す
     105      # C_EXP, Array または nil :そのまま返す
    123106      return val
    124107    end
    125108  end
    126109
    127   #=== 定数式として評価する2(トライしてみる)
     110  #=== 定数式として評価する2(トライしてみる)
    128111  #
    129   # IntegerVal, FloatVal をそのまま返す(eval_const では Integer, Float に変換)
     112  # IntegerVal, FloatVal をそのまま返す(eval_const では Integer, Float に変換)
    130113  def eval_const2( name_list, name_list2 = nil, nest = 0 )
    131114    val = elements_eval_const( @elements, name_list, name_list2, nest )
    132115  end
    133116
    134   #=== 式の型を評価する
     117  #=== 式の型を評価する
    135118  #
    136   # eval_const で値が得られない場合、型を導出可能であれば型を得る
    137   # param を含んだ式は定数値を求められないが、型を得ることはできる
    138   # 未定義変数を含んだ型は、得ることができない (ダミー型定義が返る)
    139   def get_type( namedList )        # 名前空間の NamedList を指定
     119  # eval_const で値が得られない場合、型を導出可能であれば型を得る
     120  # param を含んだ式は定数値を求められないが、型を得ることはできる
     121  # 未定義変数を含んだ型は、得ることができない (ダミー型定義が返る)
     122  def get_type( namedList )        # 名前空間の NamedList を指定
    140123    elements_get_type( @elements, namedList )
    141124  end
     
    150133
    151134  def show_tree( indent )
    152     # mikan override してしまった print を呼出す方法がわからないのでこうした
     135    # mikan override してしまった print を呼出す方法がわからないのでこうした
    153136    str = ""
    154137    indent.times { str += "  " }
     
    158141## private
    159142
    160   #=== 式を文字列に変換
    161   #name_list:: attribute (Celltype::@attribute_list), struct の @member_list を仮定している
     143  #=== 式を文字列に変換
     144  #name_list:: attribute (Celltype::@attribute_list), struct の @member_list を仮定している
    162145  def elements_to_s( elements, name_list = nil, pre = nil, post = nil )
    163146    if elements.instance_of? Token then
    164       return elements.to_s    # OP_DOT, OP_REF の右辺
     147      return elements.to_s    # OP_DOT, OP_REF の右辺
    165148    end
    166149
     
    246229  end
    247230
    248   # 定数式(elements)を評価する
     231  # 定数式(elements)を評価する
    249232  #
    250   # このメソッドは Expression クラスのメソッドであるå¿
    251 è¦ã¯ãªã„(関数化できる)
     233  # このメソッドは Expression クラスのメソッドである必要はない(関数化できる)
    252234  #
    253   # elements は式の要素
     235  # elements は式の要素
    254236  #
    255   # name_list, name_list2 は eval_const を参ç
    256 §
     237  # name_list, name_list2 は eval_const を参照
    257238  #
    258   # RETURN: 評価した定数、評価できなかった場合は nil を返す
    259 
    260   MAX_NEST_LEVEL = 64    # 簡易のループ検出(参ç
    261 §ã®ãƒã‚¹ãƒˆã‚’ 64 まで許可する)
     239  # RETURN: 評価した定数、評価できなかった場合は nil を返す
     240
     241  MAX_NEST_LEVEL = 64    # 簡易のループ検出(参照のネストを 64 まで許可する)
    262242  def elements_eval_const( elements, name_list, name_list2 = nil, nest = nil )
    263243
     
    266246      nsp = elements[1]
    267247
    268       # #809 の修正しかけ (別の問題が解決しきれていない)
    269       # nest += 1     # 参ç
    270 §ãŒãƒ«ãƒ¼ãƒ—になっていないかのチェック
    271       #               # mikan 本当にループしているかどうかではなく、単純に多数の参ç
    272 §ã‚’繰り返していることで判定している
     248      # #809 の修正しかけ (別の問題が解決しきれていない)
     249      # nest += 1     # 参照がループになっていないかのチェック
     250      #               # mikan 本当にループしているかどうかではなく、単純に多数の参照を繰り返していることで判定している
    273251      # if nest > MAX_NEST_LEVEL then
    274252      #   cdl_error( "E9999: '$1' too many reference (maybe loop) max=$1" , nsp.to_s, MAX_NEST_LEVEL )
     
    285263      end
    286264
    287       # 見つからなければ定数定義から探す
     265      # 見つからなければ定数定義から探す
    288266      if object == nil then
    289         object = Namespace.find( nsp )# mikan namespace の対応 #1
    290       end
    291 
    292 # この実è£
    293 ã¯ã€ã‚‚う少し整理されるべき
    294 # これが呼出されるのは、以下の場合
    295 #   ãƒ»attribute, var の右辺式の評価
    296 #   ãƒ»size_is 引数の評価:関数パラメータの場合とattribute, var の場合がある
    297 # 以下のエラーチェックでは、これらがごっちゃになって誤りを検出しようとしている
    298 
    299       # IDENTIFIER は見つからなかった?
     267        object = Namespace.find( nsp )# mikan namespace の対応 #1
     268      end
     269
     270# この実装は、もう少し整理されるべき
     271# これが呼出されるのは、以下の場合
     272#   ・attribute, var の右辺式の評価
     273#   ・size_is 引数の評価:関数パラメータの場合とattribute, var の場合がある
     274# 以下のエラーチェックでは、これらがごっちゃになって誤りを検出しようとしている
     275
     276      # IDENTIFIER は見つからなかった?
    300277      if object == nil then
    301278        cdl_error( "E1001 $1: not found" , nsp.get_path_str )
     
    303280        return nil
    304281      elsif object.instance_of?( Join ) then
    305         # Join の場合: cell の中の attribute, var, call のどれかが見つかった
    306         # Decl (attribute, var) でない?
     282        # Join の場合: cell の中の attribute, var, call のどれかが見つかった
     283        # Decl (attribute, var) でない?
    307284        if ! object.get_definition.instance_of?( Decl ) then
    308285          cdl_error( "E1002 $1: not constant (port)" , nsp.get_path_str )
     
    311288        return object.get_rhs.eval_const2( name_list, name_list2, nest )
    312289      elsif ! object.instance_of?( Decl ) then
    313         # Decl でない場合: 定数でもない
     290        # Decl でない場合: 定数でもない
    314291        if ( ! object.instance_of?( ParamDecl ) ) then
    315                                                       # mikan paramdecl は無視する
    316                                                       # ParamList から呼ばれたとき
     292                                                      # mikan paramdecl は無視する
     293                                                      # ParamList から呼ばれたとき
    317294          cdl_error( "E1003 $1: not constant" , nsp.get_path_str )
    318295        else
     
    324301        object.referenced
    325302        if object.get_initializer == nil then
    326           # 初期化子の存在しない変数   # mikan ここへくるのは、通常ありえないはず(未検証)
     303          # 初期化子の存在しない変数   # mikan ここへくるのは、通常ありえないはず(未検証)
    327304          return IntegerVal.new( 0 )
    328305        else
    329           # Decl の右辺の評価
    330           # mikan size_is 引数に現れる変数の型が適切かのチェックする
     306          # Decl の右辺の評価
     307          # mikan size_is 引数に現れる変数の型が適切かのチェックする
    331308          if object.get_initializer.instance_of?( Expression ) || object.get_initializer.instance_of?( C_EXP ) then
    332309            return object.get_initializer.eval_const2( name_list, name_list2, nest )
    333310          else
    334             # Array の場合
     311            # Array の場合
    335312            return object.get_initializer
    336313          end
     
    440417# p "val.respond_to?( \"-@\" )=#{val.respond_to?( "-@" )} #{val.class}"
    441418# p "val.respond_to?( \"~@\" )=#{val.respond_to?( "~@" )}"
    442 #2.0      if val.respond_to?( "~@" ) then  # Ruby 1.9, 2.0 preview 版では例外が発生してしまう
     419#2.0      if val.respond_to?( "~@" ) then  # Ruby 1.9, 2.0 preview 版では例外が発生してしまう
    443420      if val.kind_of? IntegerVal then
    444421        return ~ val
     
    586563  def elements_get_type( elements, namedList )
    587564    type = elements_get_type_sub( elements, namedList )
    588     # 返された方が DefinedType の場合 å
    589 ƒã®åž‹ã‚’返す
     565    # 返された方が DefinedType の場合 元の型を返す
    590566    if type.kind_of?( DefinedType ) then
    591567      type = type.get_type
     
    626602      unless type.kind_of?( PtrType ) then
    627603        cdl_error( "E1013 \'*\': operand is not pointer value"  )
    628         return IntType.new( 8 )    # IntType を返しておく
     604        return IntType.new( 8 )    # IntType を返しておく
    629605      end
    630606      return type.get_referto
    631607
    632608    when :OP_U_PLUS, :OP_U_MINUS
    633       # mikan operand が適切な型かチェックしていない
     609      # mikan operand が適切な型かチェックしていない
    634610      return elements_get_type( elements[1], namedList )
    635611
    636612    when :OP_ADD, :OP_SUB, :OP_MULT, :OP_DIV, :OP_REMAIN
    637       # mikan operand が適切な型かチェックしていない&左辺の型を採用している
     613      # mikan operand が適切な型かチェックしていない&左辺の型を採用している
    638614      return elements_get_type( elements[1], namedList )
    639615
    640616    when :OP_U_TILDE
    641       # mikan operand が整数かチェックしていない
     617      # mikan operand が整数かチェックしていない
    642618      return elements_get_type( elements[1], namedList )
    643619    when :OP_AND, :OP_EOR, :OP_OR, :OP_LSFT, :OP_RSFT
    644       # mikan operand が整数かチェックしていない
     620      # mikan operand が整数かチェックしていない
    645621      return BoolType.new
    646622    when :OP_U_EXCLAM
    647       # mikan operand が整数かチェックしていない
     623      # mikan operand が整数かチェックしていない
    648624      return BoolType.new
    649625
     
    655631  end
    656632
    657   # 式が size_is, count_is, string の引数である場合の方向のチェック
     633  # 式が size_is, count_is, string の引数である場合の方向のチェック
    658634  def elements_check_dir_for_param( elements, namedList, dir, spec )
    659    # dir : å
    660 ƒã®å¼•æ•°ã®æ–¹å‘
    661    # direct: size_is などの引数の変数の方向
     635   # dir : 元の引数の方向
     636   # direct: size_is などの引数の変数の方向
    662637
    663638    case elements[0]
     
    690665          judge = true if ( direct == :IN || direct == :INOUT )
    691666          req_direct = "in or inout"
    692         when :OUT, :RECEIVE     # mikan out で count_is のみ指定されている場合 in でなくてはならない
     667        when :OUT, :RECEIVE     # mikan out で count_is のみ指定されている場合 in でなくてはならない
    693668          judge = true if ( direct == :OUT || direct == :INOUT )
    694669          req_direct = "out or inout"
     
    706681      return true
    707682
    708     # 単é 
    709 æ¼”算子
     683    # 単項演算子
    710684    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,
    711685      elements_check_dir_for_param( elements[1], namedList, dir, spec )
    712686
    713     # 2é 
    714 æ¼”算子
     687    # 2項演算子
    715688    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
    716689      return elements_check_dir_for_param( elements[1], namedList, dir, spec ) && elements_check_dir_for_param( elements[2], namedList, dir, spec )
    717690
    718     # 3é 
    719 æ¼”算子
     691    # 3項演算子
    720692    when :OP_CEX
    721693      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 )
     
    729701  #Express# get_allocator_rhs_elem
    730702  #alloc_type::Symbol  :NORMAL_ALLOC|:INTERNAL_ALLOC|:RELAY_ALLOC
    731   #式がアロケータ指定子の右辺として妥当かチェックし、正しければ分解した値を返す
     703  #式がアロケータ指定子の右辺として妥当かチェックし、正しければ分解した値を返す
    732704  #return:
    733705  #  :NORMAL_ALLOC      [ cell_nsp, ep_name ]               # rhs = cell_nsp.ep_name    ex) Alloc.eAlloc
     
    767739  end
    768740
    769   #Expression#Expression のクローンを作成する
     741  #Expression#Expression のクローンを作成する
    770742  def clone_for_composite
    771743    cl = self.clone
     
    775747  end
    776748
    777   #Expression#elements のクローンを作成
     749  #Expression#elements のクローンを作成
    778750  #elements::Array
    779   # このメソッドは、Array のディープコピーを行う
     751  # このメソッドは、Array のディープコピーを行う
    780752  def clone_elements elements
    781753    elements = elements.clone
     
    794766  end
    795767
    796   #=== Expression#セル結合の式を解析する
     768  #=== Expression#セル結合の式を解析する
    797769  # Cell.eEntry  => [ :OP_DOT, [ :IDENTIFIER, token ], token ]
    798770  # Cell.eEntry[expression] => [ :OP_SUBSC, [ :OP_DOT, [ :IDENTIFIER, token ], token ], expression ]
    799771  # Return: [ NamespacePath(cell_name), Integer(subscript) or nil, Token(port_name)]
    800772  def analyze_cell_join_expression
    801     # 右辺の Expression の要素を取り出す
     773    # 右辺の Expression の要素を取り出す
    802774    elements = @elements
    803     if elements[0] == :OP_SUBSC then  # 右辺:受け口é
    804 åˆ—?
     775    if elements[0] == :OP_SUBSC then  # 右辺:受け口配列?
    805776      # elements = [ :OP_SUBSC, [ :OP_DOT, [ :IDENTIFIER, token ], token ], expression ]
    806       subscript = elements[2].eval_const(nil)  # 受け口é
    807 åˆ—の添数
    808       elements  = elements[1]          # mikan é
    809 åˆ—だった場合
     777      subscript = elements[2].eval_const(nil)  # 受け口配列の添数
     778      elements  = elements[1]          # mikan 配列だった場合
    810779    else
    811780      subscript = nil
     
    823792  end
    824793
    825   #=== Expression# セルへの結合の式を生成する
     794  #=== Expression# セルへの結合の式を生成する
    826795  #nsp:: NamespacePath
    827796  #subscript:: Integer
    828797  #port_name:: Symbol
    829   # analyze_cell_join_expression と対になっている
     798  # analyze_cell_join_expression と対になっている
    830799  def self.create_cell_join_expression( nsp, subscript, port_name, locale = nil )
    831800    if ! port_name.instance_of?( Symbol ) then
     
    843812  end
    844813
    845   #=== Expression#整数定数の式を生成する
    846   #val:: Integer : 値: 整数
     814  #=== Expression#整数定数の式を生成する
     815  #val:: Integer : 値: 整数
    847816  def self.create_integer_constant( val, locale = nil )
    848817    if val != Integer( val ) || val < 0 then
     
    852821  end
    853822
    854   #=== Expression#単一の識別子の式を解析する
     823  #=== Expression#単一の識別子の式を解析する
    855824  # Identifier  => [ :IDENTIFIER, token ]
    856825  # Return: NamespacePath(Identifier)
    857826  def analyze_single_identifier
    858     # 右辺の Expression の要素を取り出す
     827    # 右辺の Expression の要素を取り出す
    859828    elements = @elements
    860829    if elements[0] == :IDENTIFIER
     
    866835
    867836  #=== Expression#
    868   #nsp:: NamespacePath :  参ç
    869 §ã™ã‚‹ã‚‚の識別子
     837  #nsp:: NamespacePath :  参照するもの識別子
    870838  def self.create_single_identifier( nsp, locale )
    871839    if ! nsp.instance_of?( NamespacePath ) then
     
    875843  end
    876844
    877   #=== 評価可能かチェックする
    878   #*v:: 可変個引数(任意の型)
    879   # すべてが BaseVal の子クラス(値)であれば、評価可能と判断する
     845  #=== 評価可能かチェックする
     846  #*v:: 可変個引数(任意の型)
     847  # すべてが BaseVal の子クラス(値)であれば、評価可能と判断する
    880848  def evaluable?( *v )
    881849    v.each{ |val|
     
    896864
    897865  #c_exp_string::String
    898   #b_renew::Bool  : true なら C_EXP の clone 作成(エスケープ処理等をしない)
     866  #b_renew::Bool  : true なら C_EXP の clone 作成(エスケープ処理等をしない)
    899867  def initialize( c_exp_string, b_renew = false )
    900868    if b_renew then
    901869      @c_exp_string = c_exp_string
    902870    else
    903       # 前後の " を取り除く
     871      # 前後の " を取り除く
    904872      # str = c_exp_string.to_s.sub( /^\"(.*)\"$/, "\\1" )
    905873      str = CDLString.remove_dquote c_exp_string.to_s
     
    908876  end
    909877
    910   #=== composite 用に C_EXP を clone する
     878  #=== composite 用に C_EXP を clone する
    911879  #ct_name::
    912880  #cell_name::
    913   # composite の attribute に現れる C_EXP を文字列置換して生成しなおす.
    914   # この文字列置換は、意味解釈段階で行う.
    915   # 他の C_EXP の文字列置換は、コード生成段階で行う.
     881  # composite の attribute に現れる C_EXP を文字列置換して生成しなおす.
     882  # この文字列置換は、意味解釈段階で行う.
     883  # 他の C_EXP の文字列置換は、コード生成段階で行う.
    916884  def clone_for_composite( ct_name, cell_name, locale )
    917885    dbgPrint "C_EXP: #{ct_name} #{cell_name} #{@c_exp_string}\n"
     
    928896  end
    929897
    930   #=== C_EXP を評価する
    931   # C_EXP の引き数文字列を返す
    932   # 本来 C_EXP は eval_const する対象ではないが、便宜上 eval_const で対応
     898  #=== C_EXP を評価する
     899  # C_EXP の引き数文字列を返す
     900  # 本来 C_EXP は eval_const する対象ではないが、便宜上 eval_const で対応
    933901  def eval_const( name_list, name_list2 = nil )
    934902     return self
Note: See TracChangeset for help on using the changeset viewer.