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/syntaxobj.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r270 r321  
    66#   Copyright (C) 2008-2016 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: syntaxobj.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
     37#   $Id$
    5338#++
    5439
    55 # mikan ruby の symbol と文字列の使い分けがどうしてもうまくいかないことが時ã€
    56 ã‚るので name.to_sym をå
    57 ¥ã‚Œã‚‹ã“とにした
     40# mikan ruby の symbol と文字列の使い分けがどうしてもうまくいかないことが時々あるので name.to_sym を入れることにした
    5841
    5942#== Node
    6043#
    61 # Node の直接の子クラス: C_EXP, Type, BaseVal, BDNode(ほとんどのものは BDNode の子クラス)
    62 # Node に (BDNodeにも) å
    63 ¥ã‚‰ãªã„もの: Token, Import, Import_C, Generate
     44# Node の直接の子クラス: C_EXP, Type, BaseVal, BDNode(ほとんどのものは BDNode の子クラス)
     45# Node に (BDNodeにも) 入らないもの: Token, Import, Import_C, Generate
    6446#
    65 # owner を持たないものが Node となる
    66 # エラーは、cdl_error を通じて報告する (意味解析が構文解析後に行われる場合には、行番号が正しく出力できる
     47# owner を持たないものが Node となる
     48# エラーは、cdl_error を通じて報告する (意味解析が構文解析後に行われる場合には、行番号が正しく出力できる
    6749#
    6850
     
    7456  end
    7557
    76   #=== エラーを出力する
     58  #=== エラーを出力する
    7759  def cdl_error( message, *arg )
    7860    Generator.error2( @locale, message, *arg )
    7961  end
    8062
    81   #=== エラーを出力する
    82   #locale:: Array(locale info) : 構文解析中は無視される
     63  #=== エラーを出力する
     64  #locale:: Array(locale info) : 構文解析中は無視される
    8365  def cdl_error2( locale, message, *arg )
    8466    Generator.error2( locale, message, *arg )
    8567  end
    8668
    87   #=== エラーを出力する
     69  #=== エラーを出力する
    8870  #locale:: Array(locale info)
    89   # 構文解析中 cdl_error2 では locale が無視されるため、別に locale を出力する
     71  # 構文解析中 cdl_error2 では locale が無視されるため、別に locale を出力する
    9072  def cdl_error3( locale, message, *arg )
    9173    Generator.error(  message, *arg )
     
    9375  end
    9476
    95   #=== ウォーニング出力する
     77  #=== ウォーニング出力する
    9678  def cdl_warning( message, *arg )
    9779    Generator.warning2( @locale, message, *arg )
    9880  end
    9981
    100   #=== ウォーニング出力する
     82  #=== ウォーニング出力する
    10183  def cdl_warning2( locale, message, *arg )
    10284    Generator.warning2( locale, message, *arg )
    10385  end
    10486
    105   #=== æƒ
    106 å ±ã‚’表示する
     87  #=== 情報を表示する
    10788  def cdl_info( message )
    10889    Console.puts "info: #{message}"
     
    122103end
    123104
    124 #== 双方向 Node (Bi Direction Node)
     105#== 双方向 Node (Bi Direction Node)
    125106#
    126 #  Node の子クラス
    127 #  owner Node から参ç
    128 §ã•ã‚Œã¦ã„るもの (owner へのリンクも取り出せる)
     107#  Node の子クラス
     108#  owner Node から参照されているもの (owner へのリンクも取り出せる)
    129109#
    130 #  get_owner で得られるもの
     110#  get_owner で得られるもの
    131111#    FuncHead => Signature
    132112#    Decl => Namespace(const), Typedef(typedef),
     
    134114#            Struct(member), ParamDecl(parameter), FuncHead(funchead)
    135115#    Signature, Celltype, CompositeCelltype, Typedef => Namespace
    136 #,   Namespace => Namespace, Generator.class (root Namespace の場合)
     116#,   Namespace => Namespace, Generator.class (root Namespace の場合)
    137117#    Cell => Region, CompositeCelltype(in_composite)
    138118#    Port => Celltype, Composite
     
    144124#    ParamList => FuncHead
    145125#    Expression => Namespace
    146 #    大半のものは new_* メソッドで owner Node に伝達される
    147 #    そのメソッドが呼び出されたときに owner Node が記録される
    148 #    new_* がないもの:
     126#    大半のものは new_* メソッドで owner Node に伝達される
     127#    そのメソッドが呼び出されたときに owner Node が記録される
     128#    new_* がないもの:
    149129#            Decl(parameter), ParamDecl, ParamList, FuncHead, Expression
    150130#
    151 #    Expression は、owner Node となるものが多くあるが、改造が困難であるため
    152 #    Expression が定義されたときの Namespace を owner Node とする
    153 #    StructType は Type の一種なので owner を持たない
     131#    Expression は、owner Node となるものが多くあるが、改造が困難であるため
     132#    Expression が定義されたときの Namespace を owner Node とする
     133#    StructType は Type の一種なので owner を持たない
    154134#
    155135class BDNode < Node
     
    167147  end
    168148
    169   #=== owner を設定する
     149  #=== owner を設定する
    170150  def set_owner owner
    171151    dbgPrint "set_owner: #{owner.class.name}\n"
     
    173153  end
    174154
    175   #=== owner を得る
    176   # class の説明を参ç
    177 §
     155  #=== owner を得る
     156  # class の説明を参照
    178157  def get_owner
    179158    if @owner == nil
     
    184163end
    185164
    186 #== Namespace 名を持つ BDNode
     165#== Namespace 名を持つ BDNode
    187166# Namespace(Region), Signature, Celltype, CompositeCelltype, Cell
    188167class NSBDNode < BDNode
     
    192171  end
    193172
    194   #=== 属する namespace を得る
    195   # owner を namespace にたどり着くまで上にたどる
     173  #=== 属する namespace を得る
     174  # owner を namespace にたどり着くまで上にたどる
    196175  def get_namespace
    197176    if @owner.kind_of? Namespace
     
    200179      return @owner.get_namespace
    201180    else
    202       # @owner == nil なら "::"
     181      # @owner == nil なら "::"
    203182      if @name != "::" then
    204183        raise "non-root namespace has no owner #{self.class.name}##{@name} #{self}"
     
    217196  end
    218197
    219   #=== NamespacePath を得る
     198  #=== NamespacePath を得る
    220199  def get_namespace_path
    221200    return @NamespacePath
     
    226205      return @import.is_imported?
    227206    else
    228       return false    # mikan: ä»® @import が nil になるケースが追求できていない
     207      return false    # mikan: 仮 @import が nil になるケースが追求できていない
    229208    end
    230209  end
     
    233212class NamedList
    234213#  @names:: {} of items
    235 #  @items:: [] of items : item の CLASS は get_name メソッドを持つこと get_name の戻り値は Symbol でなくてはならない
    236 #                         NamedList を clone_for_composite する場合は、item にもメソッドがå¿
    237 è¦
    238 #  @type:: string       ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
     214#  @items:: [] of items : item の CLASS は get_name メソッドを持つこと get_name の戻り値は Symbol でなくてはならない
     215#                         NamedList を clone_for_composite する場合は、item にもメソッドが必要
     216#  @type:: string       エラーメッセージ
    239217
    240218  def initialize( item, type )
     
    245223  end
    246224
    247   #=== 要素を加える
    248   # parse した時点で加えること(場所を記憶する)
     225  #=== 要素を加える
     226  # parse した時点で加えること(場所を記憶する)
    249227  def add_item( item )
    250228
     
    305283  end
    306284
    307   #=== composite cell を clone した時に要素(JOIN) の clone する
     285  #=== composite cell を clone した時に要素(JOIN) の clone する
    308286  #
    309   # mikan このメソッドは Join に特化されているので NamedList から分離すべき
     287  # mikan このメソッドは Join に特化されているので NamedList から分離すべき
    310288  def clone_for_composite( ct_name, cell_name, locale )
    311289    cl = self.clone
     
    314292  end
    315293
    316   #=== clone された NamedList インスタンスの参ç
    317 §ã™ã‚‹ã‚‚の(item)を clone
     294  #=== clone された NamedList インスタンスの参照するもの(item)を clone
    318295  #
    319   # mikan このメソッドは Join に特化されているので NamedList から分離すべき
     296  # mikan このメソッドは Join に特化されているので NamedList から分離すべき
    320297  def set_cloned( ct_name, cell_name, locale )
    321298    items = []
     
    379356end
    380357
    381 #== 関数頭部
    382 # signature に登録される関数
     358#== 関数頭部
     359# signature に登録される関数
    383360class FuncHead <BDNode
    384361#  @declarator:: Decl
     
    425402  end
    426403
    427   #=== FuncHead# 関数の名前を返す
     404  #=== FuncHead# 関数の名前を返す
    428405  def get_name
    429406    return @declarator.get_name
    430407  end
    431408
    432   #=== FuncHead# 関数の戻り値の型を返す
    433   # types.rb に定義されている型
    434   # 関数ヘッダの定義として不完å
    435 ¨ãªå ´åˆ nil を返す
     409  #=== FuncHead# 関数の戻り値の型を返す
     410  # types.rb に定義されている型
     411  # 関数ヘッダの定義として不完全な場合 nil を返す
    436412  def get_return_type
    437413    if is_function? then
     
    440416  end
    441417
    442   #=== FuncHead# 関数の引数のリストを返す
    443   # ParamList を返す
    444   # 関数ヘッダの定義として不完å
    445 ¨ãªå ´åˆ nil を返す
     418  #=== FuncHead# 関数の引数のリストを返す
     419  # ParamList を返す
     420  # 関数ヘッダの定義として不完全な場合 nil を返す
    446421  def get_paramlist
    447422    if is_function? then
     
    457432end
    458433
    459 #=== 宣言
    460 # @kind で示される各種の宣言
     434#=== 宣言
     435# @kind で示される各種の宣言
    461436class Decl < BDNode
    462437
    463438# @identifer:: String
    464 # @global_name:: String | nil : String(@kind=TYPEDEF||:CONSTANT), nil(@kind=その他)
    465 #                set_kind にて設定される
     439# @global_name:: String | nil : String(@kind=TYPEDEF||:CONSTANT), nil(@kind=その他)
     440#                set_kind にて設定される
    466441# @type:: ArrayType, FuncType, PtrType, IntType, StructType
    467442#         VoidType, FloatType, DefinedType, BoolType
    468443# @initializer:: constant_expression, mikan { initlist }
    469 # @kind:: :VAR, :ATTRIBUTE, :PARAMETER, :TYPEDEF, :CONSTANT, :MEMBER, :FUNCHEAD(signatureの関数定義)
     444# @kind:: :VAR, :ATTRIBUTE, :PARAMETER, :TYPEDEF, :CONSTANT, :MEMBER, :FUNCHEAD(signatureの関数定義)
    470445# @b_referenced:: bool
    471446#
    472 # 以下は、@kind が :VAR, :ATTRIBUTE のときに有効
    473 # @rw:: bool     # 古い文法では attr に指定可能だった(消すには generate の修正もå¿
    474 è¦ï¼‰
     447# 以下は、@kind が :VAR, :ATTRIBUTE のときに有効
     448# @rw:: bool     # 古い文法では attr に指定可能だった(消すには generate の修正も必要)
    475449# @omit:: bool
    476 # @choice_list:: [String]  attr 初期値の選択肢
    477 # 以下は、@kind が :VAR, :ATTRIBUTE, :MEMBER のときに有効
     450# @choice_list:: [String]  attr 初期値の選択肢
     451# 以下は、@kind が :VAR, :ATTRIBUTE, :MEMBER のときに有効
    478452# @size_is:: Expression or nil unless specified
    479 # 以下は、@kind が :MEMBER のときに有効
     453# 以下は、@kind が :MEMBER のときに有効
    480454# @count_is:: Expression or nil unless specified
    481 #             attr, var の場合、count_is は指定できない
     455#             attr, var の場合、count_is は指定できない
    482456# @string:: Expression, -1 (length not specified) or nil (not specified)
    483457#
    484 # mikan  ParamDecl だけ別に設けたが、MemberDecl, AttrDecl なども分けるべきか(?)
     458# mikan  ParamDecl だけ別に設けたが、MemberDecl, AttrDecl なども分けるべきか(?)
    485459
    486460  def initialize( identifier )
     
    512486  end
    513487
    514   #== Decl の意味的誤りをチェックする
     488  #== Decl の意味的誤りをチェックする
    515489  def check
    516490    # return nil if @type == nil
    517491
    518     # 構造体タグチェック(ポインタ型から構造体が参ç
    519 §ã•ã‚Œã¦ã„る場合は、タグの存在をチェックしない)
     492    # 構造体タグチェック(ポインタ型から構造体が参照されている場合は、タグの存在をチェックしない)
    520493    @type.check_struct_tag @kind
    521494
    522     # 型のチェックを行う
     495    # 型のチェックを行う
    523496    res = @type.check
    524497    if res then
     
    526499    end
    527500
    528     # 不要の初期化子をチェックする
     501    # 不要の初期化子をチェックする
    529502    if @initializer then
    530503      case @kind
     
    532505        cdl_error( "S2003 $1: $2 cannot have initializer" , @identifier, @kind.to_s.downcase )
    533506      when :VAR, :ATTRIBUTE, :CONSTANT
    534         # p @initializer  ここでは代å
    535 ¥å¯èƒ½ã‹ã©ã†ã‹ã€ãƒã‚§ãƒƒã‚¯ã—ない
    536         # :VAR, :ATTRIBUTE, :CONSTANT はそれぞれでチェックする
     507        # p @initializer  ここでは代入可能かどうか、チェックしない
     508        # :VAR, :ATTRIBUTE, :CONSTANT はそれぞれでチェックする
    537509        # return @type.check_init( @identifier, @initializer, @kind )
    538510      else
     
    552524  end
    553525
    554   #== ポインタレベルを得る
    555   # 戻り値:
    556   #   éžãƒã‚¤ãƒ³ã‚¿å¤‰æ•°   = 0
    557   #   ãƒã‚¤ãƒ³ã‚¿å¤‰æ•°     = 1
    558   #   äºŒé‡ãƒã‚¤ãƒ³ã‚¿å¤‰æ•° = 2
     526  #== ポインタレベルを得る
     527  # 戻り値:
     528  #   非ポインタ変数   = 0
     529  #   ポインタ変数     = 1
     530  #   二重ポインタ変数 = 2
    559531  def get_ptr_level
    560532    level = 0
     
    564536        level += 1
    565537        type = type.get_referto
    566 #      elsif type.kind_of?( ArrayType ) then  # 添数なしé
    567 åˆ—はポインタとみなす
     538#      elsif type.kind_of?( ArrayType ) then  # 添数なし配列はポインタとみなす
    568539#        if type.get_subscript == nil then
    569540#          level += 1
     
    572543#          break
    573544#        end
    574         # mikan ポインタの添数ありé
    575 åˆ—のポインタレベルは0でよい?
     545        # mikan ポインタの添数あり配列のポインタレベルは0でよい?
    576546      elsif type.kind_of?( DefinedType ) then
    577547        type = type.get_type
     
    596566      @type = type
    597567    else
    598       @type.set_type( type )             # 葉に設定
     568      @type.set_type( type )             # 葉に設定
    599569    end
    600570  end
     
    731701end
    732702
    733 # 関数パラメータの宣言
     703# 関数パラメータの宣言
    734704class ParamDecl < BDNode
    735705
    736706# @declarator:: Decl:  Token, ArrayType, FuncType, PtrType
    737707# @direction:: :IN, :OUT, :INOUT, :SEND, :RECEIVE
    738 # @size:: Expr   (size_is 引数)
    739 # @count:: Expr   (count_is 引数)
    740 # @max:: Expr (size_is の第二引数)
     708# @size:: Expr   (size_is 引数)
     709# @count:: Expr   (count_is 引数)
     710# @max:: Expr (size_is の第二引数)
    741711# @b_nullable:: Bool : nullable
    742 # @string:: Expr or -1(if size not specified) (string 引数)
     712# @string:: Expr or -1(if size not specified) (string 引数)
    743713# @allocator:: Signature of allocator
    744 # @b_ref:: bool : size_is, count_is, string_is 引数として参ç
    745 §ã•ã‚Œã¦ã„ã‚‹
     714# @b_ref:: bool : size_is, count_is, string_is 引数として参照されている
    746715#
    747 # 1. 関数型でないこと
    748 # 2. 2次å
    749 ƒä»¥ä¸Šã®é
    750 åˆ—であって最もå†
    751 å´ä»¥å¤–の添数があること
    752 # 3. in, out, ..., size_is, count_is, ... の重複指定がないこと
    753 # 4. ポインタレベルが適切なこと
     716# 1. 関数型でないこと
     717# 2. 2次元以上の配列であって最も内側以外の添数があること
     718# 3. in, out, ..., size_is, count_is, ... の重複指定がないこと
     719# 4. ポインタレベルが適切なこと
    754720
    755721  def initialize( declarator, specifier, param_specifier )
     
    818784        end
    819785      when :MAX_IS
    820         # max_is は、å†
    821 éƒ¨çš„なもの bnf.y.rb 参ç
    822 §
    823         # size_is で重複チェックされる
     786        # max_is は、内部的なもの bnf.y.rb 参照
     787        # size_is で重複チェックされる
    824788        @max = i[1]
    825789      when :NULLABLE
     
    841805    end
    842806
    843     # mikan ポインタのé
    844 åˆ—(添数有)のレベルが0
     807    # mikan ポインタの配列(添数有)のレベルが0
    845808    ptr_level = @declarator.get_ptr_level
    846809
     
    885848      cdl_error( "S2014 $1 need pointer or more pointer" , @declarator.get_identifier )
    886849    elsif ptr_level > max_level then
    887       # note: 構文解析段階で実行のため get_current 可
     850      # note: 構文解析段階で実行のため get_current 可
    888851      if Signature.get_current == nil || Signature.get_current.is_deviate? == false then
    889852        cdl_warning( "W3003 $1 pointer level mismatch" , @declarator.get_identifier )
     
    897860
    898861    if ptr_level > 0 then
    899       # size_is, count_is, string をセット
     862      # size_is, count_is, string をセット
    900863      if @direction == :RECEIVE && ptr_level > 1 then
    901864        type.get_type.set_scs( @size, @count, @string, @max, @b_nullable )
     
    907870#type.show_tree 1
    908871
    909       # ポインタが指しているå
    910 ˆã®ãƒ‡ãƒ¼ã‚¿åž‹ã‚’å¾—ã‚‹
     872      # ポインタが指している先のデータ型を得る
    911873      i = 0
    912874      t2 = type
     
    923885# p t2.is_const?
    924886
    925       # const 修飾が適切かチェック
     887      # const 修飾が適切かチェック
    926888      if @direction == :IN then
    927889        if ! t2.is_const? then
     
    934896      end
    935897    else
    936       # 非ポインタタイプ
     898      # 非ポインタタイプ
    937899      if @size != nil || @count != nil || @string != nil || @max != nil || @b_nullable then
    938900        type.set_scs( @size, @count, @string, @max, @b_nullable )
     
    1006968  end
    1007969
    1008   #=== PPAllocator がå¿
    1009 è¦ã‹
    1010   # Transparent RPC の場合 in で size_is, count_is, string のいずれかが指定されている場合 oneway では PPAllocator がå¿
    1011 è¦
    1012   # Transparent PC で oneway かどうかは、ここでは判断しないので別途判断がå¿
    1013 è¦
    1014   # Opaque RPC の場合 size_is, count_is, string のいずれかが指定されている場合、PPAllocator がå¿
    1015 è¦
     970  #=== PPAllocator が必要か
     971  # Transparent RPC の場合 in で size_is, count_is, string のいずれかが指定されている場合 oneway では PPAllocator が必要
     972  # Transparent PC で oneway かどうかは、ここでは判断しないので別途判断が必要
     973  # Opaque RPC の場合 size_is, count_is, string のいずれかが指定されている場合、PPAllocator が必要
    1016974  def need_PPAllocator?( b_opaque = false )
    1017975    if ! b_opaque then
     
    10601018end
    10611019
    1062 # 関数パラメータリスト
     1020# 関数パラメータリスト
    10631021class ParamList < BDNode
    10641022# @param_list:: NamedList : item: ParamDecl
     
    10731031
    10741032  def add_param( paramdecl )
    1075     return if paramdecl == nil    # 既にエラー
     1033    return if paramdecl == nil    # 既にエラー
    10761034
    10771035    @param_list.add_item( paramdecl )
     
    10831041  end
    10841042
    1085   #=== size_is, count_is, string の引数の式をチェック
    1086   # 変数は前方参ç
    1087 §å¯èƒ½ãªãŸã‚ã€é–¢æ•°é ­éƒ¨ã®æ§‹æ–‡è§£é‡ˆãŒçµ‚わった後にチェックする
     1043  #=== size_is, count_is, string の引数の式をチェック
     1044  # 変数は前方参照可能なため、関数頭部の構文解釈が終わった後にチェックする
    10881045  def check_param
    10891046    @param_list.get_items.each { |i|
    1090       next if i == nil                      # i == nil : エラー時
     1047      next if i == nil                      # i == nil : エラー時
    10911048
    10921049      if i.get_type.class == VoidType then
    1093         # 単一の void 型はここにはこない
     1050        # 単一の void 型はここにはこない
    10941051        cdl_error( "S2027 '$1' parameter cannot be void type", i.get_name )
    10951052      end
     
    10981055      if size then
    10991056        val = size.eval_const( @param_list )
    1100         if val == nil then                      # 定数式でないか?
    1101           # mikan 変数を含む式:単一の変数のみ OK
     1057        if val == nil then                      # 定数式でないか?
     1058          # mikan 変数を含む式:単一の変数のみ OK
    11021059          type = size.get_type( @param_list )
    11031060          unless type.kind_of?( IntType ) then
     
    11371094      if count then
    11381095        val = count.eval_const( @param_list )
    1139         if val == nil then                      # 定数式でないか?
    1140           # mikan 変数を含む式:単一の変数のみ OK
     1096        if val == nil then                      # 定数式でないか?
     1097          # mikan 変数を含む式:単一の変数のみ OK
    11411098          type = count.get_type( @param_list )
    11421099          unless type.kind_of?( IntType ) then
     
    11571114      if string != -1 && string then
    11581115        val = string.eval_const( @param_list )
    1159         if val == nil then                      # 定数式でないか?
    1160           # mikan 変数を含む式:単一の変数のみ OK
     1116        if val == nil then                      # 定数式でないか?
     1117          # mikan 変数を含む式:単一の変数のみ OK
    11611118          type = string.get_type( @param_list )
    11621119          unless type.kind_of?( IntType ) then
     
    11821139  end
    11831140
    1184   #=== Push Pop Allocator がå¿
    1185 è¦ã‹ï¼Ÿ
    1186   # Transparent RPC の場合 (oneway かつ) in のé
    1187 åˆ—(size_is, count_is, string のいずれかで修飾)がある
     1141  #=== Push Pop Allocator が必要か?
     1142  # Transparent RPC の場合 (oneway かつ) in の配列(size_is, count_is, string のいずれかで修飾)がある
    11881143  def need_PPAllocator?( b_opaque = false )
    11891144    @param_list.get_items.each { |i|
     
    11991154  end
    12001155
    1201   #== ParamList# 文字列化
    1202   #b_name:: Bool: パラメータ名を含める
     1156  #== ParamList# 文字列化
     1157  #b_name:: Bool: パラメータ名を含める
    12031158  def to_str( b_name )
    12041159    str = "("
     
    12231178end
    12241179
    1225 #== CDL の文字列リテラルを扱うためのクラス
    1226 # CDL の文字列リテラルそのものではない
     1180#== CDL の文字列リテラルを扱うためのクラス
     1181# CDL の文字列リテラルそのものではない
    12271182class CDLString
    1228   # エスケープ文字を変換
     1183  # エスケープ文字を変換
    12291184  def self.escape str
    12301185    str = str.dup
     
    12381193    str.gsub!( /(\\[Xx][0-9A-Fa-f]{1,2})/, '{printf \"\\1\"}' )
    12391194    str.gsub!( /(\\[0-7]{1,3})/, '{printf \"\\1\"}' )
    1240     str.gsub!( /\\(.)/, "\\1" )   # mikan 未定義のエスケープシーケンスを変換してしまう (gcc V3.4.4 では警告が出される)
     1195    str.gsub!( /\\(.)/, "\\1" )   # mikan 未定義のエスケープシーケンスを変換してしまう (gcc V3.4.4 では警告が出される)
    12411196    return str
    12421197  end
    12431198
    1244   #=== CDLString#前後の " を取り除く
     1199  #=== CDLString#前後の " を取り除く
    12451200  def self.remove_dquote str
    12461201    s = str.sub( /\A"/, "" )
     
    12501205end
    12511206
    1252 #== CDL の初期化子を扱うためのクラス
    1253 # CDL の初期化子そのものではない
     1207#== CDL の初期化子を扱うためのクラス
     1208# CDL の初期化子そのものではない
    12541209class CDLInitializer
    1255   #=== 初期化子のクローン
    1256   # 初期化子は Expression, C_EXP, Array のいずれか
     1210  #=== 初期化子のクローン
     1211  # 初期化子は Expression, C_EXP, Array のいずれか
    12571212  def self.clone_for_composite( rhs, ct_name, cell_name, locale )
    12581213    if rhs.instance_of? C_EXP then
    1259       # C_EXP の clone を作るとともに置換
     1214      # C_EXP の clone を作るとともに置換
    12601215      rhs = rhs.clone_for_composite( ct_name, cell_name, locale )
    12611216    elsif rhs.instance_of? Expression then
     
    12691224  end
    12701225
    1271   #=== 初期化子(é
    1272 åˆ—)のクローン
    1273   # 要素は clone_for_composite を持つものだけ
     1226  #=== 初期化子(配列)のクローン
     1227  # 要素は clone_for_composite を持つものだけ
    12741228  def self.clone_for_compoiste_array( array, ct_name, cell_name, locale )
    1275     # "compoiste.identifier" の場合 (CDL としては誤り)
     1229    # "compoiste.identifier" の場合 (CDL としては誤り)
    12761230    if array[0] == :COMPOSITE then
    12771231      return array.clone
Note: See TracChangeset for help on using the changeset viewer.