- Timestamp:
- Jul 3, 2020, 7:19:17 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/expression.rb
r321 r429 4 4 # Generator for TOPPERS Embedded Component System 5 5 # 6 # Copyright (C) 2008-201 4by TOPPERS Project6 # Copyright (C) 2008-2017 by TOPPERS Project 7 7 #-- 8 8 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ … … 151 151 when :IDENTIFIER 152 152 nsp = elements[1] 153 # if nsp.is_name_only? && name_list && name_list.get_item( nsp.get_name ) then 153 154 if nsp.is_name_only? && name_list && name_list.get_item( nsp.get_name ) then 154 155 return "#{pre}#{nsp.get_name}#{post}" … … 229 230 end 230 231 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 231 339 # 定数式(elements)を評価する 232 340 # … … 382 490 return nil 383 491 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 385 497 return nil 386 498 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 388 504 return nil 389 505 when :OP_U_AMP
Note:
See TracChangeset
for help on using the changeset viewer.