Ignore:
Timestamp:
Jul 3, 2020, 7:19:17 PM (4 years ago)
Author:
coas-nagasima
Message:

ASP3, TINET, mbed を更新

File:
1 edited

Legend:

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

    r321 r429  
    44#      Generator for TOPPERS Embedded Component System
    55
    6 #   Copyright (C) 2008-2014 by TOPPERS Project
     6#   Copyright (C) 2008-2017 by TOPPERS Project
    77#--
    88#   上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     
    151151    when :IDENTIFIER
    152152      nsp = elements[1]
     153      # if nsp.is_name_only? && name_list && name_list.get_item( nsp.get_name ) then
    153154      if nsp.is_name_only? && name_list && name_list.get_item( nsp.get_name ) then
    154155        return "#{pre}#{nsp.get_name}#{post}"
     
    229230  end
    230231
     232  #=== Expression# 逆ポーランド文字列化
     233  #param_list:: ParamlList  関数の引数リスト
     234  def get_rpn( param_list = nil, name_list2 = nil )
     235    return elements_rpn( @elements, param_list, name_list2 )
     236  end
     237
     238  #=== Expression# 逆ポーランド文字列化 (private)
     239  #name_list:: ParamlList  関数の引数リスト
     240  def elements_rpn( elements, name_list = nil, name_list2 = nil )
     241    if elements.instance_of? Token then
     242      print "rpn: #{elements.to_s}\n"
     243      return elements.to_s    # OP_DOT, OP_REF の右辺
     244    end
     245
     246    case elements[0]
     247    when :IDENTIFIER
     248      nsp = elements[1]
     249      #if nsp.is_name_only? && name_list && name_list.find( nsp.get_name ) then
     250      if nsp.is_name_only? then
     251        count = 0
     252        # p "search: #{nsp.get_name}"
     253        name_list.get_items.each{ |nm,val|
     254          # p "    : #{nm.get_name} #{nsp.get_name.class} #{nm.get_name.class}"
     255          if nsp.get_name == nm.get_name then
     256            return " $#{count}"
     257          end
     258          count += 1
     259        }
     260        raise "not found parameter"
     261      else
     262        # return  elements[1].get_global_name
     263        raise "not unexpected parameter"
     264      end
     265    when :INTEGER_CONSTANT, :FLOATING_CONSTANT, :OCTAL_CONSTANT, :HEX_CONSTANT, :CHARACTER_LITERAL, :STRING_LITERAL_LIST, :BOOL_CONSTANT
     266      return elements[1].to_s
     267    when :PARENTHESES
     268      return elements_rpn( elements[1], name_list, name_list2 )
     269    when :OP_SUBSC
     270      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[1], "", name_list, name_list2 ) + " []"
     271    when :OP_DOT
     272      return elements_rpn( elements[1], name_list, name_list2 ) + " ."
     273    when :OP_REF
     274      return elements_rpn( elements[1], name_list, name_list2 ) + " ->"
     275    when :OP_SIZEOF_EXPR
     276      return elements_rpn( elements[1], name_list, name_list2 ) + " #s"
     277    when :OP_SIZEOF_TYPE
     278      return elements_rpn( elements[1], name_list, name_list2 ) + " #S"
     279    when :OP_U_AMP
     280      return elements_rpn( elements[1], name_list, name_list2 ) + " #&"
     281    when :OP_U_ASTER
     282      return elements_rpn( elements[1], name_list, name_list2 ) + " #*"
     283    when :OP_U_PLUS
     284      return elements_rpn( elements[1], name_list, name_list2 ) + " #+"
     285    when :OP_U_MINUS
     286      return elements_rpn( elements[1], name_list, name_list2 ) + " #-"
     287    when :OP_U_TILDE
     288      return elements_rpn( elements[1], name_list, name_list2 ) + " #~"
     289    when :OP_U_EXCLAM
     290      return elements_rpn( elements[1], name_list, name_list2 ) + " #!"
     291    when :CAST
     292      return elements_rpn( elements[1], name_list, name_list2 ) + " #(" + elements_rpn( elements[2], "", name_list, name_list2 ) + ")"
     293    when :OP_MULT
     294      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " *"
     295    when :OP_DIV
     296      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " /"
     297    when :OP_REMAIN
     298      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " %"
     299    when :OP_ADD
     300      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " +"
     301    when :OP_SUB
     302      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " -"
     303    when :OP_LSFT
     304      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " <<"
     305    when :OP_RSFT
     306      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " >>"
     307    when :OP_LT
     308      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " <"
     309    when :OP_GT
     310      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " >"
     311    when :OP_LE
     312      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " <="
     313    when :OP_GE
     314      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " >="
     315    when :OP_EQ
     316      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " =="
     317    when :OP_NE
     318      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " !="
     319    when :OP_AND
     320      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " &"
     321    when :OP_EOR
     322      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " ^"
     323    when :OP_OR
     324      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " |"
     325    when :OP_LAND
     326      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " &&"
     327    when :OP_LOR
     328      return elements_rpn( elements[1], name_list, name_list2 ) + " " + elements_rpn( elements[2], "", name_list, name_list2 ) + " ||"
     329    when :OP_CEX
     330      return elements_rpn( elements[1], name_list, name_list2 ) + " " +
     331             elements_rpn( elements[2], name_list, name_list2 ) + " " +
     332             elements_rpn( elements[3], name_list, name_list2 ) + " ?:"
     333    else
     334      raise "Unknown expression element: #{elemets[0]}. try -t and please report"
     335    end
     336    return ""
     337  end
     338
    231339  # 定数式(elements)を評価する
    232340  #
     
    382490      return nil
    383491    when :OP_SIZEOF_EXPR
    384       cdl_error( "E1007 cannot evaluate \'sizeof\' operator"  )
     492      if Generator.parsing_C? then
     493        cdl_info( "I9999 cannot evaluate \'sizeof\' operator. this might causes later error."  )
     494      else
     495        cdl_error( "E1007 cannot evaluate \'sizeof\' operator"  )
     496      end
    385497      return nil
    386498    when :OP_SIZEOF_TYPE
    387       cdl_error( "E1008 cannot evaluate \'sizeof\' operator"  )
     499      if Generator.parsing_C? then
     500        cdl_info( "I9999 cannot evaluate \'sizeof\' operator. this might causes later error."  )
     501      else
     502        cdl_error( "E1008 cannot evaluate \'sizeof\' operator"  )
     503      end
    388504      return nil
    389505    when :OP_U_AMP
Note: See TracChangeset for help on using the changeset viewer.