129 * they can be resolved (for example, when using '30+x' where 'x' is a LINT variable, the |
129 * they can be resolved (for example, when using '30+x' where 'x' is a LINT variable, the |
130 * numeric literal '30' must then be considered a LINT so the ADD function may be called |
130 * numeric literal '30' must then be considered a LINT so the ADD function may be called |
131 * with all inputs of the same data type. |
131 * with all inputs of the same data type. |
132 * If 'x' were a SINT, then the '30' would have to be a SINT too! |
132 * If 'x' were a SINT, then the '30' would have to be a SINT too! |
133 */ |
133 */ |
134 void *search_base_type_c::visit(real_c *symbol) {return (void *)symbol;} |
134 void *search_base_type_c::visit(real_c *symbol) {return (void *)symbol;} |
135 void *search_base_type_c::visit(neg_real_c *symbol) {return (void *)symbol;} |
135 void *search_base_type_c::visit(neg_real_c *symbol) {return (void *)symbol;} |
136 void *search_base_type_c::visit(integer_c *symbol) {return (void *)symbol;} |
136 void *search_base_type_c::visit(integer_c *symbol) {return (void *)symbol;} |
137 void *search_base_type_c::visit(neg_integer_c *symbol) {return (void *)symbol;} |
137 void *search_base_type_c::visit(neg_integer_c *symbol) {return (void *)symbol;} |
138 void *search_base_type_c::visit(binary_integer_c *symbol) {return (void *)symbol;} |
138 void *search_base_type_c::visit(binary_integer_c *symbol) {return (void *)symbol;} |
139 void *search_base_type_c::visit(octal_integer_c *symbol) {return (void *)symbol;} |
139 void *search_base_type_c::visit(octal_integer_c *symbol) {return (void *)symbol;} |
140 void *search_base_type_c::visit(hex_integer_c *symbol) {return (void *)symbol;} |
140 void *search_base_type_c::visit(hex_integer_c *symbol) {return (void *)symbol;} |
141 void *search_base_type_c::visit(boolean_true_c *symbol) {return (void *)symbol;} |
141 void *search_base_type_c::visit(boolean_true_c *symbol) {return (void *)symbol;} |
142 void *search_base_type_c::visit(boolean_false_c *symbol) {return (void *)symbol;} |
142 void *search_base_type_c::visit(boolean_false_c *symbol) {return (void *)symbol;} |
143 |
143 |
144 |
144 |
145 /***********************************/ |
145 /***********************************/ |
146 /* B 1.3.1 - Elementary Data Types */ |
146 /* B 1.3.1 - Elementary Data Types */ |
147 /***********************************/ |
147 /***********************************/ |
148 void *search_base_type_c::visit(time_type_name_c *symbol) {return (void *)symbol;} |
148 void *search_base_type_c::visit(time_type_name_c *symbol) {return (void *)symbol;} |
149 void *search_base_type_c::visit(bool_type_name_c *symbol) {return (void *)symbol;} |
149 void *search_base_type_c::visit(bool_type_name_c *symbol) {return (void *)symbol;} |
150 void *search_base_type_c::visit(sint_type_name_c *symbol) {return (void *)symbol;} |
150 void *search_base_type_c::visit(sint_type_name_c *symbol) {return (void *)symbol;} |
151 void *search_base_type_c::visit(int_type_name_c *symbol) {return (void *)symbol;} |
151 void *search_base_type_c::visit(int_type_name_c *symbol) {return (void *)symbol;} |
152 void *search_base_type_c::visit(dint_type_name_c *symbol) {return (void *)symbol;} |
152 void *search_base_type_c::visit(dint_type_name_c *symbol) {return (void *)symbol;} |
153 void *search_base_type_c::visit(lint_type_name_c *symbol) {return (void *)symbol;} |
153 void *search_base_type_c::visit(lint_type_name_c *symbol) {return (void *)symbol;} |
154 void *search_base_type_c::visit(usint_type_name_c *symbol) {return (void *)symbol;} |
154 void *search_base_type_c::visit(usint_type_name_c *symbol) {return (void *)symbol;} |
155 void *search_base_type_c::visit(uint_type_name_c *symbol) {return (void *)symbol;} |
155 void *search_base_type_c::visit(uint_type_name_c *symbol) {return (void *)symbol;} |
156 void *search_base_type_c::visit(udint_type_name_c *symbol) {return (void *)symbol;} |
156 void *search_base_type_c::visit(udint_type_name_c *symbol) {return (void *)symbol;} |
157 void *search_base_type_c::visit(ulint_type_name_c *symbol) {return (void *)symbol;} |
157 void *search_base_type_c::visit(ulint_type_name_c *symbol) {return (void *)symbol;} |
158 void *search_base_type_c::visit(real_type_name_c *symbol) {return (void *)symbol;} |
158 void *search_base_type_c::visit(real_type_name_c *symbol) {return (void *)symbol;} |
159 void *search_base_type_c::visit(lreal_type_name_c *symbol) {return (void *)symbol;} |
159 void *search_base_type_c::visit(lreal_type_name_c *symbol) {return (void *)symbol;} |
160 void *search_base_type_c::visit(date_type_name_c *symbol) {return (void *)symbol;} |
160 void *search_base_type_c::visit(date_type_name_c *symbol) {return (void *)symbol;} |
161 void *search_base_type_c::visit(tod_type_name_c *symbol) {return (void *)symbol;} |
161 void *search_base_type_c::visit(tod_type_name_c *symbol) {return (void *)symbol;} |
162 void *search_base_type_c::visit(dt_type_name_c *symbol) {return (void *)symbol;} |
162 void *search_base_type_c::visit(dt_type_name_c *symbol) {return (void *)symbol;} |
163 void *search_base_type_c::visit(byte_type_name_c *symbol) {return (void *)symbol;} |
163 void *search_base_type_c::visit(byte_type_name_c *symbol) {return (void *)symbol;} |
164 void *search_base_type_c::visit(word_type_name_c *symbol) {return (void *)symbol;} |
164 void *search_base_type_c::visit(word_type_name_c *symbol) {return (void *)symbol;} |
165 void *search_base_type_c::visit(dword_type_name_c *symbol) {return (void *)symbol;} |
165 void *search_base_type_c::visit(dword_type_name_c *symbol) {return (void *)symbol;} |
166 void *search_base_type_c::visit(lword_type_name_c *symbol) {return (void *)symbol;} |
166 void *search_base_type_c::visit(lword_type_name_c *symbol) {return (void *)symbol;} |
167 void *search_base_type_c::visit(string_type_name_c *symbol) {return (void *)symbol;} |
167 void *search_base_type_c::visit(string_type_name_c *symbol) {return (void *)symbol;} |
168 void *search_base_type_c::visit(wstring_type_name_c *symbol) {return (void *)symbol;} |
168 void *search_base_type_c::visit(wstring_type_name_c *symbol) {return (void *)symbol;} |
169 |
169 |
170 |
170 |
171 /******************************************************/ |
171 /******************************************************/ |
172 /* Extensions to the base standard as defined in */ |
172 /* Extensions to the base standard as defined in */ |
173 /* "Safety Software Technical Specification, */ |
173 /* "Safety Software Technical Specification, */ |
241 return symbol->enumerated_specification->accept(*this); |
241 return symbol->enumerated_specification->accept(*this); |
242 } |
242 } |
243 |
243 |
244 /* helper symbol for enumerated_specification->enumerated_spec_init */ |
244 /* helper symbol for enumerated_specification->enumerated_spec_init */ |
245 /* enumerated_value_list ',' enumerated_value */ |
245 /* enumerated_value_list ',' enumerated_value */ |
246 void *search_base_type_c::visit(enumerated_value_list_c *symbol) { |
246 void *search_base_type_c::visit(enumerated_value_list_c *symbol) {return (void *)symbol;} |
247 return (void *)symbol; |
|
248 } |
|
249 |
247 |
250 /* enumerated_type_name '#' identifier */ |
248 /* enumerated_type_name '#' identifier */ |
251 // SYM_REF2(enumerated_value_c, type, value) |
249 // SYM_REF2(enumerated_value_c, type, value) |
252 void *search_base_type_c::visit(enumerated_value_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
250 void *search_base_type_c::visit(enumerated_value_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
253 |
251 |
254 /* identifier ':' array_spec_init */ |
252 /* identifier ':' array_spec_init */ |
255 void *search_base_type_c::visit(array_type_declaration_c *symbol) { |
253 void *search_base_type_c::visit(array_type_declaration_c *symbol) { |
256 this->current_type_name = symbol->identifier; |
254 this->current_type_name = symbol->identifier; |
257 return symbol->array_spec_init->accept(*this); |
255 return symbol->array_spec_init->accept(*this); |
266 */ |
264 */ |
267 return symbol->array_specification->accept(*this); |
265 return symbol->array_specification->accept(*this); |
268 } |
266 } |
269 |
267 |
270 /* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */ |
268 /* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */ |
271 void *search_base_type_c::visit(array_specification_c *symbol) { |
269 void *search_base_type_c::visit(array_specification_c *symbol) {return (void *)symbol;} |
272 return symbol; |
|
273 } |
|
274 |
270 |
275 /* helper symbol for array_specification */ |
271 /* helper symbol for array_specification */ |
276 /* array_subrange_list ',' subrange */ |
272 /* array_subrange_list ',' subrange */ |
277 void *search_base_type_c::visit(array_subrange_list_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
273 void *search_base_type_c::visit(array_subrange_list_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
278 |
274 |
279 /* array_initialization: '[' array_initial_elements_list ']' */ |
275 /* array_initialization: '[' array_initial_elements_list ']' */ |
280 /* helper symbol for array_initialization */ |
276 /* helper symbol for array_initialization */ |
281 /* array_initial_elements_list ',' array_initial_elements */ |
277 /* array_initial_elements_list ',' array_initial_elements */ |
282 void *search_base_type_c::visit(array_initial_elements_list_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
278 void *search_base_type_c::visit(array_initial_elements_list_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
283 |
279 |
284 /* integer '(' [array_initial_element] ')' */ |
280 /* integer '(' [array_initial_element] ')' */ |
285 /* array_initial_element may be NULL ! */ |
281 /* array_initial_element may be NULL ! */ |
286 void *search_base_type_c::visit(array_initial_elements_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
282 void *search_base_type_c::visit(array_initial_elements_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
287 |
283 |
288 /* structure_type_name ':' structure_specification */ |
284 /* structure_type_name ':' structure_specification */ |
289 /* NOTE: structure_specification will point to either a |
285 /* NOTE: structure_specification will point to either a |
290 * initialized_structure_c |
286 * initialized_structure_c |
291 * OR A |
287 * OR A |
303 } |
299 } |
304 |
300 |
305 /* helper symbol for structure_declaration */ |
301 /* helper symbol for structure_declaration */ |
306 /* structure_declaration: STRUCT structure_element_declaration_list END_STRUCT */ |
302 /* structure_declaration: STRUCT structure_element_declaration_list END_STRUCT */ |
307 /* structure_element_declaration_list structure_element_declaration ';' */ |
303 /* structure_element_declaration_list structure_element_declaration ';' */ |
308 void *search_base_type_c::visit(structure_element_declaration_list_c *symbol) { |
304 void *search_base_type_c::visit(structure_element_declaration_list_c *symbol) {return (void *)symbol;} |
309 return (void *)symbol; |
|
310 } |
|
311 |
305 |
312 /* structure_element_name ':' *_spec_init */ |
306 /* structure_element_name ':' *_spec_init */ |
313 void *search_base_type_c::visit(structure_element_declaration_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
307 void *search_base_type_c::visit(structure_element_declaration_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
314 |
308 |
315 /* helper symbol for structure_initialization */ |
309 /* helper symbol for structure_initialization */ |
316 /* structure_initialization: '(' structure_element_initialization_list ')' */ |
310 /* structure_initialization: '(' structure_element_initialization_list ')' */ |
317 /* structure_element_initialization_list ',' structure_element_initialization */ |
311 /* structure_element_initialization_list ',' structure_element_initialization */ |
318 void *search_base_type_c::visit(structure_element_initialization_list_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
312 void *search_base_type_c::visit(structure_element_initialization_list_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
319 |
313 |
320 /* structure_element_name ASSIGN value */ |
314 /* structure_element_name ASSIGN value */ |
321 void *search_base_type_c::visit(structure_element_initialization_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
315 void *search_base_type_c::visit(structure_element_initialization_c *symbol) {ERROR; return NULL;} /* should never get called... */ |
322 |
316 |
323 /* string_type_name ':' elementary_string_type_name string_type_declaration_size string_type_declaration_init */ |
317 /* string_type_name ':' elementary_string_type_name string_type_declaration_size string_type_declaration_init */ |
324 /* |
318 /* |
325 SYM_REF4(string_type_declaration_c, string_type_name, |
319 SYM_REF4(string_type_declaration_c, string_type_name, |
326 elementary_string_type_name, |
320 elementary_string_type_name, |
327 string_type_declaration_size, |
321 string_type_declaration_size, |
328 string_type_declaration_init) // may be == NULL! |
322 string_type_declaration_init) // may be == NULL! |
329 */ |
323 */ |
330 void *search_base_type_c::visit(string_type_declaration_c *symbol) {return symbol;} |
324 void *search_base_type_c::visit(string_type_declaration_c *symbol) {return (void *)symbol;} |
331 |
325 |
332 |
326 |
333 |
327 |
334 /*****************************/ |
328 /*****************************/ |
335 /* B 1.5.2 - Function Blocks */ |
329 /* B 1.5.2 - Function Blocks */ |
336 /*****************************/ |
330 /*****************************/ |
337 /* FUNCTION_BLOCK derived_function_block_name io_OR_other_var_declarations function_block_body END_FUNCTION_BLOCK */ |
331 /* FUNCTION_BLOCK derived_function_block_name io_OR_other_var_declarations function_block_body END_FUNCTION_BLOCK */ |
338 // SYM_REF3(function_block_declaration_c, fblock_name, var_declarations, fblock_body) |
332 // SYM_REF3(function_block_declaration_c, fblock_name, var_declarations, fblock_body) |
339 void *search_base_type_c::visit(function_block_declaration_c *symbol) { |
333 void *search_base_type_c::visit(function_block_declaration_c *symbol) {return (void *)symbol;} |
340 return symbol; |
334 |
341 } |
335 |
342 |
336 |
|
337 |