94 |
94 |
95 void reset_transition_number(void) {transition_number = 0;} |
95 void reset_transition_number(void) {transition_number = 0;} |
96 |
96 |
97 void generate(symbol_c *symbol, sfcgeneration_t generation_type) { |
97 void generate(symbol_c *symbol, sfcgeneration_t generation_type) { |
98 wanted_sfcgeneration = generation_type; |
98 wanted_sfcgeneration = generation_type; |
|
99 transition_number = 0; |
99 switch (wanted_sfcgeneration) { |
100 switch (wanted_sfcgeneration) { |
100 case transitiontest_sg: |
101 case transitiontest_sg: |
101 { |
102 { |
102 std::list<TRANSITION>::iterator pt; |
103 std::list<TRANSITION>::iterator pt; |
103 for(pt = transition_list.begin(); pt != transition_list.end(); pt++) { |
104 for(pt = transition_list.begin(); pt != transition_list.end(); pt++) { |
257 symbol->from_steps->accept(*this); |
258 symbol->from_steps->accept(*this); |
258 s4o.print(") {\n"); |
259 s4o.print(") {\n"); |
259 s4o.indent_right(); |
260 s4o.indent_right(); |
260 |
261 |
261 // Calculate transition value |
262 // Calculate transition value |
262 if (symbol->transition_condition_il != NULL) { |
263 symbol->transition_condition->accept(*this); |
263 generate_c_il->declare_backup_variable(); |
264 |
264 s4o.print(s4o.indent_spaces); |
|
265 symbol->transition_condition_il->accept(*generate_c_il); |
|
266 print_variable_prefix(); |
|
267 s4o.print("transition_list["); |
|
268 print_transition_number(); |
|
269 s4o.print("] = "); |
|
270 generate_c_il->print_backup_variable(); |
|
271 s4o.print(";\n"); |
|
272 } |
|
273 if (symbol->transition_condition_st != NULL) { |
|
274 s4o.print(s4o.indent_spaces); |
|
275 print_variable_prefix(); |
|
276 s4o.print("transition_list["); |
|
277 print_transition_number(); |
|
278 s4o.print("] = "); |
|
279 symbol->transition_condition_st->accept(*generate_c_st); |
|
280 s4o.print(";\n"); |
|
281 } |
|
282 if (symbol->integer != NULL) { |
265 if (symbol->integer != NULL) { |
283 s4o.print(s4o.indent_spaces + "if ("); |
266 s4o.print(s4o.indent_spaces + "if ("); |
284 print_variable_prefix(); |
267 print_variable_prefix(); |
285 s4o.print("transition_list["); |
268 s4o.print("transition_list["); |
286 print_transition_number(); |
269 print_transition_number(); |
326 symbol->from_steps->accept(*this); |
309 symbol->from_steps->accept(*this); |
327 s4o.indent_left(); |
310 s4o.indent_left(); |
328 s4o.print(s4o.indent_spaces + "}\n"); |
311 s4o.print(s4o.indent_spaces + "}\n"); |
329 } |
312 } |
330 transition_number++; |
313 transition_number++; |
|
314 break; |
|
315 default: |
|
316 break; |
|
317 } |
|
318 return NULL; |
|
319 } |
|
320 |
|
321 void *visit(transition_condition_c *symbol) { |
|
322 switch (wanted_sfcgeneration) { |
|
323 case transitiontest_sg: |
|
324 // Transition condition is in IL |
|
325 if (symbol->transition_condition_il != NULL) { |
|
326 generate_c_il->declare_backup_variable(); |
|
327 s4o.print(s4o.indent_spaces); |
|
328 symbol->transition_condition_il->accept(*generate_c_il); |
|
329 print_variable_prefix(); |
|
330 s4o.print("transition_list["); |
|
331 print_transition_number(); |
|
332 s4o.print("] = "); |
|
333 generate_c_il->print_backup_variable(); |
|
334 s4o.print(";\n"); |
|
335 } |
|
336 // Transition condition is in ST |
|
337 if (symbol->transition_condition_st != NULL) { |
|
338 s4o.print(s4o.indent_spaces); |
|
339 print_variable_prefix(); |
|
340 s4o.print("transition_list["); |
|
341 print_transition_number(); |
|
342 s4o.print("] = "); |
|
343 symbol->transition_condition_st->accept(*generate_c_st); |
|
344 s4o.print(";\n"); |
|
345 } |
331 break; |
346 break; |
332 default: |
347 default: |
333 break; |
348 break; |
334 } |
349 } |
335 return NULL; |
350 return NULL; |