文法設計、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 //