- 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/C_parser.y.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 6 6 # Copyright (C) 2008-2018 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$ … … 55 40 class C_parser 56 41 rule 57 # ãããã¬ãã«ã®æ§æè¦ç´ ã¯C_parser42 # トップレベルの構文要素は C_parser 58 43 all: C_parser 59 44 60 45 # Expr 61 ########################## å¼ ########################## 62 # K&Rã®ææ³(ããã°ã©ãã³ã°è¨èªC 第2ç ä»é²)ã¨ä¸é¨ç°ãªã 63 # argument_expression_list(é¢æ°å¼æ°), assignment_expression(代å 64 ¥)ããªã 65 # å¼ã® result ã¯ããã¹ã¦é 66 åã§ç¬¬ä¸è¦ç´ ãèå¥ã·ã³ãã«ã第äºè¦ç´ 以ä¸ãå¼æ° 46 ########################## 式 ########################## 47 # K&Rの文法(プログラミング言語C 第2版 付録)と一部異なる 48 # argument_expression_list(関数引数), assignment_expression(代入)がない 49 # 式の result は、すべて配列で第一要素が識別シンボル、第二要素以下が引数 67 50 # 68 # 2019/3/28 é·å³¶ ä¸è¨ã®C99ã®æ§æã«è¿ã¥ãããå¤æ´69 # ï¼èªããªããããã¼ãã¡ã¤ã«ããã£ãããï¼51 # 2019/3/28 長島 下記のC99の構文に近づくよう変更 52 #(読めないヘッダーファイルがあったため) 70 53 # http://www.quut.com/c/ANSI-C-grammar-y-1999.html 71 # å 72 ã 73 ã®ã³ã¡ã³ãã¨åããªããªã£ã¦ãã¾ã 54 # 元々のコメントと合わなくなっています 74 55 75 56 primary_expression 76 57 : namespace_identifier 77 58 { result = [ :IDENTIFIER, val[0] ] } #1ok 78 # : IDENTIFIER # mikan namespace ã¸ã®å¯¾å¿59 # : IDENTIFIER # mikan namespace への対応 79 60 # { result = [ :IDENTIFIER, val[0] ] } 80 61 # | TRUE … … 103 84 { result << val[1] } 104 85 105 # é¢æ°å¼ã³åºãã¨å¾ç½®ã¤ã³ã¯ãªã¡ã³ãããã¯ãªã¡ã³ãæ¼ç®åããªã86 # 関数呼び出しと後置インクリメント、デクリメント演算子がない 106 87 postfix_expression 107 88 : primary_expression … … 115 96 | postfix_expression '->' IDENTIFIER 116 97 { result = [ :OP_REF, val[0], val[2] ] } 117 | postfix_expression '++' { result = val[0] } # ++, -- ã¯ç¡è¦ãã98 | postfix_expression '++' { result = val[0] } # ++, -- は無視する 118 99 | postfix_expression '--' { result = val[0] } 119 100 | '(' type_name ')' '{' initializer_list '}' … … 125 106 126 107 127 # åç½®ã¤ã³ã¯ãªã¡ã³ãããã¯ãªã¡ã³ãæ¼ç®åããªã108 # 前置インクリメント、デクリメント演算子がない 128 109 unary_expression 129 110 : postfix_expression … … 134 115 | SIZEOF '(' type_name ')' 135 116 { result = [ :OP_SIZEOF_TYPE, val[1] ] } 136 | '++' unary_expression { result = val[1] } # ++, -- ã¯ç¡è¦ãã117 | '++' unary_expression { result = val[1] } # ++, -- は無視する 137 118 | '--' unary_expression { result = val[1] } 138 119 … … 246 227 | expression ',' assignment_expression 247 228 { 248 result = Expression.new( val[2] ) # ',' ã®å¾ããæ¡ç¨229 result = Expression.new( val[2] ) # ',' の後ろを採用 249 230 } 250 231 … … 264 245 265 246 # Types 266 ########################## 宣è¨##########################267 # 宣è¨ãK&Rã¨ä¸é¨ç°ãªã268 269 # declaration ã¯ã»ã«ã®å±æ§ã§ä½¿ããã270 # K&R ã¨ã®éã: storage classãæå®ã§ããªããåãçç¥ã§ããªã247 ########################## 宣言 ########################## 248 # 宣言もK&Rと一部異なる 249 250 # declarationはセルの属性で使われる 251 # K&Rとの違い: storage classが指定できない、型が省略できない 271 252 declaration 272 253 : declaration_specifiers init_declarator_list ';' 273 254 # : specifier_qualifier_list init_declarator_list ';' 274 255 275 # declaration_specifiers ã¯é¢æ°ã®ãã©ã¡ã¼ã¿ã§ä½¿ããããã276 # specifier_qualifier_list ã§ååãããããªã256 # declaration_specifiersは関数のパラメータで使われるが、 257 # specifier_qualifier_listで十分かもしれない 277 258 278 259 declaration_specifiers 279 260 : storage_class_specifier 280 261 { 281 result = CIntType.new( -3 ) # storage class ã¯ç¡è¦262 result = CIntType.new( -3 ) # storage class は無視 282 263 } 283 264 | storage_class_specifier declaration_specifiers 284 265 { 285 result = val[1] # storage class ã¯ç¡è¦266 result = val[1] # storage class は無視 286 267 } 287 268 | type_specifier … … 350 331 { set_no_type_name true; result = CBoolType.new } 351 332 | struct_specifier 352 { set_no_type_name true; result = val[0] } # set_no_type_name true 㯠struct_tag ã§ãå¼ã°ãã333 { set_no_type_name true; result = val[0] } # set_no_type_name true は struct_tag でも呼ばれる 353 334 | union_specifier 354 { set_no_type_name true; result = CVoidType.new } # void ã宣è¨ãããã¨ãã335 { set_no_type_name true; result = CVoidType.new } # void が宣言されたとする 355 336 | enum_specifier 356 { set_no_type_name true; result = CVoidType.new } # void ã宣è¨ãããã¨ãã337 { set_no_type_name true; result = CVoidType.new } # void が宣言されたとする 357 338 | TYPE_NAME 358 339 { set_no_type_name true; result = CDefinedType.new( val[0].val ) } 359 340 360 # mikan K&R ã®struct_or_union_specifierã«ç¸å½ããããunionã¯ä½¿ããªã, bit field ã«ã対å¿ããªã341 # mikan K&Rのstruct_or_union_specifierに相当するが、unionは使えない, bit field にも対応しない 361 342 struct_specifier # mikan 362 343 # : STRUCT struct_tag '{' … … 379 360 result = val[1] 380 361 } 381 # | STRUCT struct_tag # mikan struct_tag 㯠namespace 対å¿ãå¿ 382 è¦ 383 | struct_term struct_tag # mikan struct_tag 㯠namespace 対å¿ãå¿ 384 è¦ 362 # | STRUCT struct_tag # mikan struct_tag は namespace 対応が必要 363 | struct_term struct_tag # mikan struct_tag は namespace 対応が必要 385 364 { 386 365 StructType.set_define( false ) … … 403 382 } 404 383 405 # ãã¤ã³ã¿ä¿®é£¾åã追å384 # ポインタ修飾子を追加 406 385 struct_declaration 407 386 : declaration_specifiers struct_declarator_list ';' … … 416 395 result = val[1] 417 396 } 418 # ããããã£ã¼ã«ããèªã¿é£ã°ã397 # ビットフィールドを読み飛ばし 419 398 | declaration_specifiers struct_declarator_list ':' constant_expression ';' 420 399 { … … 427 406 result = val[1] 428 407 } 429 | union_specifier ';' # ç¡å430 | struct_specifier ';' # ç¡å431 432 433 434 # K&R ã®specifier_qualifier_listã¨åã435 # ååãã¾ãããããã£ãã®ã§type_ãä»ãã408 | union_specifier ';' # 無名 409 | struct_specifier ';' # 無名 410 411 412 413 # K&Rのspecifier_qualifier_listと同じ 414 # 名前がまぎらわしかったのでtype_を付けた 436 415 specifier_qualifier_list 437 416 : type_specifier specifier_qualifier_list … … 457 436 { result << val[2] } 458 437 459 # ããããã£ã¼ã«ãã¯ä½¿ããªã438 # ビットフィールドは使えない 460 439 struct_declarator 461 440 : declarator … … 466 445 # : UNION union_tag '{' union_declaration_list '}' 467 446 # | UNION '{' union_declaration_list '}' 468 # | UNION union_tag # mikan struct_tag 㯠namespace 対å¿ãå¿ 469 è¦ 447 # | UNION union_tag # mikan struct_tag は namespace 対応が必要 470 448 : union_term union_tag '{' union_declaration_list '}' 471 449 | union_term '{' union_declaration_list '}' 472 | union_term union_tag # mikan struct_tag 㯠namespace 対å¿ãå¿ 473 è¦ 450 | union_term union_tag # mikan struct_tag は namespace 対応が必要 474 451 475 452 union_term … … 485 462 union_declaration 486 463 : declaration_specifiers union_declarator_list ';' 487 | union_specifier ';' # ç¡å488 | struct_specifier ';' # ç¡å464 | union_specifier ';' # 無名 465 | struct_specifier ';' # 無名 489 466 490 467 union_declarator_list … … 535 512 } 536 513 | direct_declarator 537 | pointer TYPE_NAME # é¢æ°ãã¤ã³ã¿ã® typedef ãäºéå®ç¾©ã®å ´å514 | pointer TYPE_NAME # 関数ポインタの typedef が二重定義の場合 538 515 { 539 516 result = Decl.new( val[1].val ) … … 562 539 result = val[0] 563 540 } 564 | direct_declarator '(' identifier_list ')' # ããã¯ä½ã®ããã«å¿ 565 è¦ï¼ 060211 541 | direct_declarator '(' identifier_list ')' # これは何のために必要? 060211 566 542 | direct_declarator '(' ')' 567 543 { … … 599 575 : parameter_list 600 576 | parameter_list ',' '.' '.' '.' 601 # mikan å¯å¤é·ãã©ã¡ã¼ã¿, ... ã®éã®ã¹ãã¼ã¹ã許ãããï¼ææãï¼577 # mikan 可変長パラメータ, ... の間のスペースが許される(手抜き) 602 578 603 579 parameter_list … … 607 583 # { 608 584 # val[0].add_param( val[2] ) 609 # # result = val[0] ä¸è¦585 # # result = val[0] 不要 610 586 # } 611 587 612 588 613 # ãã©ã¡ã¼ã¿ä¿®é£¾åã追å589 # パラメータ修飾子を追加 614 590 parameter_declaration 615 591 : declaration_specifiers declarator … … 620 596 # } 621 597 622 # 以ä¸ã¯ã¨ã©ã¼ã¨ãã623 # | declaration_specifiers # ä»®å¼æ°ãªãã¯ãã¨ããããæ±ããªã060210598 # 以下はエラーとする 599 # | declaration_specifiers # 仮引数なしは、とりあえず扱わない 060210 624 600 # { 625 601 # unless val[0].kind_of?( VoidType ) then … … 628 604 # result = nil 629 605 # } 630 | declaration_specifiers abstract_declarator # ä»®å¼æ°ãªã631 | declaration_specifiers # ä»®å¼æ°ãªã632 633 634 identifier_list # 060211 ä¸ç¨ã«ãªã£ã606 | declaration_specifiers abstract_declarator # 仮引数なし 607 | declaration_specifiers # 仮引数なし 608 609 610 identifier_list # 060211 不用になった 635 611 : IDENTIFIER 636 612 | identifier_list ',' IDENTIFIER … … 662 638 | direct_abstract_declarator '(' parameter_type_list ')' 663 639 664 # assignment_expression ãconstant_expressionã«å¤æ´640 # assignment_expressionをconstant_expressionに変更 665 641 initializer # mikan 666 642 : assignment_expression … … 685 661 686 662 687 ########################## ããããã¯CDLç¬èª##########################688 689 # ãããã¬ãã«ã®æ§æè¦å663 ########################## ここからはCDL独自 ########################## 664 665 #トップレベルの構文規則 690 666 C_parser 691 667 : … … 703 679 | declaration 704 680 | ';' 705 | error # ã¨ã©ã¼å復ãã¤ã³ã681 | error # エラー回復ポイント 706 682 707 683 typedef … … 792 768 : _ASM { 793 769 while true 794 # ';' ã表ããã¾ã§ããã¼ã¯ã³ãèªã¿é£ã°ãã 795 # gcc ã®æ§ææ¡å¼µã«å¯¾å¿ãã¹ãã ããåç´ãªå®è£ 796 ã¨ãã¦ã';' ã¾ã§èªã¿é£ã°ãã 797 # ãã¼ã¯ã³åä½ã§èªã¿é£ã°ãã¦ããã®ã§ãæååãã³ã¡ã³ãå 798 ã® ';' ã¯å¯¾è±¡ã«ãªããªãã 770 # ';' が表れるまで、トークンを読み飛ばす。 771 # gcc の構文拡張に対応すべきだが、単純な実装として、';' まで読み飛ばす。 772 # トークン単位で読み飛ばしているので、文字列やコメント内の ';' は対象にならない。 799 773 token = next_token 800 774 if token[1].val == ";" … … 906 880 # b_asm = false 907 881 908 # euc ã®ã³ã¡ã³ãã utf8 ã¨ãã¦æ±ãã¨ãã³ã¡ã³ãã®çµããã誤ãåé¡ã®å¯¾ç882 # euc のコメントを utf8 として扱うと、コメントの終わりを誤る問題の対策 909 883 TECS_LANG::set_kcode_binary 910 884 911 # 800U, 0xffLL ãªã© (æ´æ°ãªãã©ã«ã«å 912 ±éã®ä¿®é£¾å) 885 # 800U, 0xffLL など (整数リテラルに共通の修飾子) 913 886 integer_qualifier = "([Uu][Ll][Ll]|[Uu][Ll]|[Uu]|[Ll][Ll]|[Ll])?" 914 887 … … 925 898 if comment 926 899 case line 927 # ã³ã¡ã³ãçµäº900 # コメント終了 928 901 when /\A\*\// 929 902 comment = false … … 933 906 else 934 907 case line 935 # 空ç½ãããªããã»ã¹ãã£ã¬ã¯ãã£ã908 # 空白、プリプロセスディレクティブ 936 909 when /\A\s+/ 937 910 ; 938 # èå¥å911 # 識別子 939 912 when /\A[a-zA-Z_]\w*/ 940 913 word = $& 941 914 @q << [RESERVED[word] || :IDENTIFIER, Token.new(word.intern, file, lineno, col)] 942 # 16 é²æ°å®æ°915 # 16 進数定数 943 916 when /\A0x[0-9A-Fa-f]+#{integer_qualifier}/ 944 917 @q << [:HEX_CONSTANT, Token.new($&, file, lineno, col)] 945 # 8 é²æ°å®æ°918 # 8 進数定数 946 919 when /\A0[0-7]+#{integer_qualifier}/ 947 920 @q << [:OCTAL_CONSTANT, Token.new($&, file, lineno, col)] 948 # æµ®åå°æ°å®æ°921 # 浮動小数定数 949 922 when /\A[0-9]+\.([0-9]*)?([Ee][+-]?[0-9]+)?/ 950 923 @q << [:FLOATING_CONSTANT, Token.new($&, file, lineno, col)] 951 # æ´æ°å®æ°924 # 整数定数 952 925 when /\A\d+#{integer_qualifier}/ 953 926 # when /\A\d+/ 954 927 @q << [:INTEGER_CONSTANT, Token.new($&.to_i, file, lineno, col)] 955 # æå928 # 文字 956 929 when /\A'(?:[^'\\]|\\.)'/ 957 930 @q << [:CHARACTER_LITERAL, Token.new($&, file, lineno, col)] 958 # æåå959 # "#include #include #include \"../systask/logtask.cfg\" æå¾ã® " å¿ã)ã§ç¡éã«ã¼ã931 # 文字列 932 # "#include #include #include \"../systask/logtask.cfg\" 最後の " 忘れ)で無限ループ 960 933 # when /\A"(?:[^"\\]+|\\.)*"/ 961 when /\A"(?:[^"\\]|\\.)*"/ # ããã¯ãã¾ãè¡ãããã934 when /\A"(?:[^"\\]|\\.)*"/ # これはうまく行くようだ 962 935 @q << [:STRING_LITERAL, Token.new($&, file, lineno, col)] 963 # è¡ã³ã¡ã³ã936 # 行コメント 964 937 when /\A\/\/.*$/ 965 # èªã¿é£ã°ãã ã966 # ã³ã¡ã³ãéå§938 # 読み飛ばすだけ 939 # コメント開始 967 940 when /\A\/\*/ 968 941 comment = true … … 995 968 } 996 969 997 # çµäºã®å°970 # 終了の印 998 971 @q << nil 999 972 … … 1022 995 end 1023 996 1024 # TYPE_NAME ãã¼ã¯ã³ã¸ç½®ãæã997 # TYPE_NAME トークンへ置き換え 1025 998 if @b_no_type_name == false 1026 999 if token[0] == :IDENTIFIER && Namespace.is_typename?( token[1].val ) then … … 1031 1004 end 1032 1005 1033 if $debug then # 070107 token ç¡å¹æãããéããªããããã (through å¯¾å¿ -d ã®æã«ä¾å¤çºç)1006 if $debug then # 070107 token 無効時ここを通さないようした (through 対応 -d の時に例外発生) 1034 1007 locale = @@current_locale[@@generator_nest] 1035 1008 if token then … … 1061 1034 @@n_info = 0 1062 1035 1063 # ãã®ã¡ã½ããã¯æ§æ解æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¨ã©ã¼çºçã¯ä¸é©åï¼1036 # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切) 1064 1037 def self.error( msg ) 1065 1038 @@n_error += 1 … … 1073 1046 end 1074 1047 1075 # ãã®ã¡ã½ããã¯æ§æ解æãæå³è§£æããã®ã¿å¼åºãå¯ï¼ã³ã¼ãçæã§ã¦ã©ã¼ãã³ã°çºçã¯ä¸é©åï¼1048 # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でウォーニング発生は不適切) 1076 1049 def self.warning( msg ) 1077 1050 @@n_warning += 1 … … 1080 1053 end 1081 1054 1082 # ãã®ã¡ã½ããã¯æ§æ解æãæå³è§£æããã®ã¿å¼åºãå¯1055 # このメソッドは構文解析、意味解析からのみ呼出し可 1083 1056 def self.info( msg ) 1084 1057 @@n_info += 1 -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.