文法設計、voidの修正

30262 ワード

  1 //                          
  2 //     c       ,               
  3 //  ,           ,  c       ,        ,     
  4 //           ,        。
  5 //           ,                bug      、  、  、       
  6 //          ,  。
  7 //
  8 //
  9 //      ,    。         。
 10 //            
 11 //
 12 //
 13 //     :         ,          ,              ,    ,     
 14 // 15 //        : < > <= >= == + - * & | ! ^ && || /  ~ %
 16 //     : =
 17 //      :$
 18 //     : @
 19 //        : .
 20 //          : ->
 21 //     : [ ]
 22 //     : ( )
 23 //       : sizeof
 24 //     : ;
 25 //      : " "
 26 //     : ' '
 27 //   : 
28 // : \t 29 // : ( ) 30 // : 31 // :\ , , 32 // , , 33 // : { } 34 // 35 // 36 //sizeof , , 37 //for , 38 //while 39 //if 40 //else 41 //break 42 //return 43 // goto switch,case, goto , switch , 44 // for break , , 45 // 46 //int 47 //float 48 //long 49 //double 50 //char 51 //struct 52 //union 53 //unsign 54 //void void c ,void , , void 55 // int , void , , void 56 // , , 57 //typedef , , 58 // 59 // ,8 , 60 // , 64 , , 18 61 // , , , 10 ,, 36 62 // c , , 。 63 // 64 //constant_char:'(a-b)|(A-B)|(0-9)|
|\t|\0| ', ,
65 // 66 // 67 68 // 69 // 70 // 71 72 73 //unsigned : 0x((0-9)|(a-f)|(A-F))+|(0-9)+ 74 //sign_constant_int: -(0-9)+ 75 // 76 //double_constant:(-)?((0-9)+.(0-9)+) 77 //new_name: ((a-z)|(A-Z)|(-))+ , 78 // 79 // 80 // 81 //list_name: new_name|list_name[unsign_constant_int] 82 //data_type_basic_body: int |char|float|double|long|unsigned|void 83 //data_type_basic_pointer: data_type_basic *|data_type_basic_pointer * 84 //data_type_basic:data_type_basic_body|data_type_basic_pointer ( ) 85 //data_type_struct_body: struct struct_direct_name // 86 //data_type_union_body: union union_direct_name 87 //data_type_struct_pointer: data_type_struct_body *|data_type_struct_pointer * 88 //data_type_struct:data_type_struct_body|data_type_struct_pointer 89 //data_type_union_pointer:data_type_union_body * |data_type_union_pointer * 90 //data_type_union:data_type_union_body|data_type_union_pointer 91 //data_type_head:data_type_basic|data_type_struct|data_type_union 92 //data_var_decl: data_type_head list_name; 93 //data_type_struct_anomynous: struct { in_block_def_list } new_name ; 94 //data_type_union_anomynous: union { in_block_def_list } new_name; 95 //in_block_def: data_var_decl|data_type_struct_anomynous|data_type_union_anomynous 96 //in_block_def_list: in_block_def| in_block_def_list in_block_def 97 //data_type_struct_decl: struct new_name { in_block_def_list } ; 98 //data_type_union_decl: union new_name { in_block_def_list }; 99 //data_type_decl_simple: data_type_struct_decl|data_type_union_decl 100 //101 //data_type_com_list:data_type_simple|data_type_com_list data_type_simple 102 103 104 105 // 106 //107 //return_type_basic: data_type_basic_body | struct struct_direct_name | union union_direct_name 108 //return_type_pointer: return_type_basic * | return_type_pointer * 109 //return_type_concrete: return_type_basic_body| return_type_pointer 110 //return_type: void | return_type_concrete 111 // , , 112 // 113 //decl_arg_list_concrete: return_type_concrete new_name | decl_arg_list_concrete ; return_type_concrete new_name 114 //decl_arg_list: void | decl_arg_list_concrete 115 // 116 //function_decl: return_type new_name ( decl_arg_list ) { code_block }// 117 // , 。。。 118 //function_decl_list: function_decl | function_decl_list function_decl 119 //120 121 122 123 124 // 125 //data_var_decl_list: data_instance_decl| data_var_decl_list data_var_decl 126 // 127 // 128 // 129 //0 : [ ] ( ) -> . 130 //1 :! ~ & * - (cast) sizeof , cast 131 //2 : * / % 132 //3 : + - 133 //4 : >> << 134 //5 :> < >= <= 135 //6 : == != 136 //7 : & 137 //8 :^ 138 //9 :| 139 //10 : && 140 //11 : || 141 // 12 , c , , , 142 // , , , , 143 // , , 144 //i=i+1 , 145 146 147 // 148 // 149 // 150 // 151 //expression_0:char_type|constant|name|(expression_11)|expression_0[expression_11]|expression_0.name|expression_0->name |fun_name(fun_arg) 152 //expression_1:expression_0|!expression_0|~expression_0|-expression_0 153 // |&expression_0|*expression_0|(data_type_com)expression_0|sizeof (expression_0 ) 154 //expression_2:expression_1|expression_2 * expression_1|expression_2 / expression_1| expression_2 % expression_1 155 //expression_3:expression_2|expression_3 + expression_2 | expression_3 - expression_2| 156 //expression_4:expression_3|expression_4 >> expression_3| expression_4 << expression_3 157 //expression_5:expression_4|expression_5 > expression_4| expression_5 < expression_4| expression_5 >= expression_4 158 // |expression_5 <= expression_4 159 //expression_6:expression_5|expression_6 == expression_5|expression_6 != expression_5 160 //expression_7:expression_6|expression_7 & expression_6 161 //expression_8: expression_7|expression_8 ^ expression_7 162 //expression_9: expression_8| expression_9 \| expression_8 163 //expression_10:expression_9|expression_10 && expression_9 164 //expression_11:expression_10|expression_11 \|\| expression_10 165 //expression: expression_11 166 //id_0: name |(id)| id_0[constant] | id_0.name | id_0->name |id_0[name] 167 //id_1: id_0 | *id_0 168 //id : id_1 169 //function_arg_type: constant| id 170 //function_use_arg: function_arg_type ;| function_use_arg function_arg_type ; 171 //fun_arg: (void)// | function_use_arg 172 173 //statement_0: id = expression ;|fun_name(fun_arg); 174 // simple_statements: statement_0| simple_statements statement_0 175 //for_statement: for ( statement_0 ; expression ; statement_0 ) { statements } 176 //while_statement: while(expression) { statements } 177 //branch_statement: if (expression) { statements } else { statements } 178 // | if(expression) { statements } 179 //break_statement: break ; 180 //statement: simple_statements | break_statement | branch_statement | while_statement |for_statement 181 //statements: statement | statements statement 182 //code_block:data_type_com_list function_decl_list data_var_decl_list statements 183 // 184 // 185 // , , , , 186 // 187 // , , 188 // , 。 189 // , 。 。 190 // , , 191 // , , 192 //193 // , , 。 194 // , , 195 // , , 。 196 // 197 // 198 // 、 、 , 199 // 200 // 201 //