- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/core/value.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 6 6 # Copyright (C) 2008-2014 by TOPPERS Project 7 7 #-- 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 # 免責すること. 44 30 # 45 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 46 ã 47 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 48 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 49 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 50 # ã®è²¬ä»»ãè² ããªãï¼ 31 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 # の責任を負わない. 51 36 # 52 37 # $Id$ 53 38 #++ 54 39 55 #= BaseVal æ´æ°ãæµ®åå°æ°ãªã©ã®å¤ãæ±ãã¯ã©ã¹ã®åºåºã¯ã©ã¹40 #= BaseVal 整数、浮動小数などの値を扱うクラスの基底クラス 56 41 # 57 # TECS ã® CDL ã§æ±ãå¤ã¯ã以ä¸ã«åé¡ããã 58 # ã»æ´æ° 59 # ã»æµ®åå°æ° 60 # ã»æåå 61 # ã»ãã¼ã«å¤ 62 # éæåï¼æ§é ä½ãé 63 åï¼ã¨ C_EXP ã¯ããã§ã¯æ±ããªã 42 # TECS の CDL で扱う値は、以下に分類される 43 # ・整数 44 # ・浮動小数 45 # ・文字列 46 # ・ブール値 47 # 集成型(構造体、配列)と C_EXP はここでは扱わない 64 48 # 65 # ãã®ã¯ã©ã¹ã§å®ç¾©æ¸ã¿ã®æ¼ç®åã¯ãã¨ã©ã¼ã¨ãªã66 # åã«ããæ¼ç®å¯è½ãªå ´åãæ¼ç®åããªã¼ãã¼ã©ã¤ããã49 # このクラスで定義済みの演算子は、エラーとなる 50 # 型により演算可能な場合、演算子をオーバーライドする 67 51 # 68 52 class BaseVal < Node … … 160 144 end 161 145 162 #= Pointer å¤ (IntegerVal ã® Pointer ç)146 #= Pointer 値 (IntegerVal の Pointer 版) 163 147 # 164 # ãã¤ã³ã¿å¤ã¯ãCDL ã§ç´æ¥çæããããã¨ã¯ãªã165 # æ´æ°å¤ã®ãã£ã¹ãæ¼ç®ã«ããçæããã148 # ポインタ値は、CDL で直接生成されることはない 149 # 整数値のキャスト演算により生成される 166 150 class PointerVal < BaseVal 167 #@int_val:: IntegerVal: IntegerVal ã§ãªãã¦ã¯ãªããªã 168 #@ptr_type:: PtrType: ãã¤ã³ã¿ã®æãå 169 ã®å 151 #@int_val:: IntegerVal: IntegerVal でなくてはならない 152 #@ptr_type:: PtrType: ポインタの指す先の型 170 153 171 154 def initialize( int_val, ptr_type ) … … 175 158 end 176 159 177 #=== ãã¤ã³ã¿ã®æãå 178 ã®åãå¾ã 179 # PointerVal å°ç¨ã®ã¡ã½ãã 160 #=== ポインタの指す先の型を得る 161 # PointerVal 専用のメソッド 180 162 def get_type 181 163 @ptr_type … … 183 165 184 166 def cast type 185 t = type.get_original_type # typedef ã®å 186 ãå¾ã 167 t = type.get_original_type # typedef の元を得る 187 168 if t.kind_of? IntType then 188 169 val = t.check_and_clip( @int_val, :IntType ) … … 213 194 end 214 195 215 #= IntegerVal: æ´æ°å¤ãæ±ãã¯ã©ã¹196 #= IntegerVal: 整数値を扱うクラス 216 197 class IntegerVal < BaseVal 217 198 #@val:: Integer: value … … 250 231 def / val 251 232 if val.kind_of? FloatVal then 252 v2 = val.to_f # to_f ã2åè©ä¾¡ããªã233 v2 = val.to_f # to_f を2回評価しない 253 234 if v2 == 0.0 then 254 235 cdl_error( "V1009 / : divieded by zero" ) … … 257 238 return FloatVal.new( @val.to_f / v2 ) 258 239 else 259 v2 = val.to_i # to_i ã2åè©ä¾¡ããªã240 v2 = val.to_i # to_i を2回評価しない 260 241 if v2 == 0 then 261 242 cdl_error( "V1010 / : divieded by zero" ) … … 267 248 def % val 268 249 if val.kind_of? FloatVal then 269 v2 = val.to_f # to_f ã2åè©ä¾¡ããªã250 v2 = val.to_f # to_f を2回評価しない 270 251 if v2 == 0.0 then 271 252 cdl_error( "V1011 % : divieded by zero" ) … … 274 255 return FloatVal.new( @val.to_f % v2 ) 275 256 else 276 v2 = val.to_i # to_i ã2åè©ä¾¡ããªã257 v2 = val.to_i # to_i を2回評価しない 277 258 if v2 == 0 then 278 259 cdl_error( "V1012 % : divieded by zero" ) … … 360 341 end 361 342 def cast( type ) 362 t = type.get_original_type # typedef ã®å 363 ãå¾ã 343 t = type.get_original_type # typedef の元を得る 364 344 if t.kind_of? IntType then 365 345 val = t.check_and_clip( @val, :IntType ) … … 395 375 end 396 376 397 #= BoolVal: bool å¤ãæ±ãã¯ã©ã¹377 #= BoolVal: bool 値を扱うクラス 398 378 class BoolVal < BaseVal 399 379 #@val:: bool: true, false … … 437 417 end 438 418 def cast( type ) 439 t = type.get_original_type # typedef ã®å 440 ãå¾ã 419 t = type.get_original_type # typedef の元を得る 441 420 if @val then 442 421 val = 1 … … 478 457 end 479 458 480 #= FloatVal: å®æ°å¤ãæ±ãã¯ã©ã¹459 #= FloatVal: 実数値を扱うクラス 481 460 class FloatVal < BaseVal 482 461 #@val:: Float … … 496 475 end 497 476 def / val 498 v2 = val.to_f # to_f ã2åè©ä¾¡ããªã477 v2 = val.to_f # to_f を2回評価しない 499 478 if v2 == 0.0 then 500 479 cdl_error( "V1017 / : divieded by zero" ) … … 504 483 end 505 484 def % val 506 v2 = val.to_f # to_f ã2åè©ä¾¡ããªã485 v2 = val.to_f # to_f を2回評価しない 507 486 if v2 == 0.0 then 508 487 cdl_error( "V1018 % : divieded by zero" ) … … 536 515 end 537 516 def cast( type ) 538 t = type.get_original_type # typedef ã®å 539 ãå¾ã 517 t = type.get_original_type # typedef の元を得る 540 518 if t.kind_of? IntType then 541 519 val = t.check_and_clip( @val, :FloatType ) … … 565 543 end 566 544 567 #= æååãªãã©ã«ãæ±ãã¯ã©ã¹545 #= 文字列リテラルを扱うクラス 568 546 class StringVal < BaseVal 569 547 #@str:: Token: … … 573 551 super() 574 552 @str = str 575 @specifier = spec # mikan L"str" wide æååæªå¯¾å¿553 @specifier = spec # mikan L"str" wide 文字列未対応 576 554 end 577 555 578 556 #=== 579 557 # 580 # string ã® cast ã¯ã§ããªã mikan ãã¤ã³ã¿åã¸ã® cast ã¯ã§ããã¹ã558 # string の cast はできない mikan ポインタ型への cast はできるべき 581 559 def cast type 582 t = type.get_original_type # typedef ã®å 583 ãå¾ã 560 t = type.get_original_type # typedef の元を得る 584 561 if t.kind_of? IntType then 585 562 cdl_error( "V1022 string cannot cast to integer" ) … … 598 575 599 576 def val 600 @str.to_s # Token ã§æ±ããã¦ããåæ® (val ãåãåºã)577 @str.to_s # Token で扱われていた名残 (val を取り出す) 601 578 end 602 579 end -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.