absyntax_utils/search_base_type.cc
changeset 617 43e00c10dc49
parent 596 4efb11e44065
child 619 f8c9ac5c529a
equal deleted inserted replaced
616:0c7663fdc8d3 617:43e00c10dc49
   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,          */
   225 void *search_base_type_c::visit(subrange_specification_c *symbol) {
   225 void *search_base_type_c::visit(subrange_specification_c *symbol) {
   226   return symbol->integer_type_name->accept(*this);
   226   return symbol->integer_type_name->accept(*this);
   227 }
   227 }
   228 
   228 
   229 /*  signed_integer DOTDOT signed_integer */
   229 /*  signed_integer DOTDOT signed_integer */
   230 void *search_base_type_c::visit(subrange_c *symbol) {ERROR; return NULL;} /* should never get called... */
   230 void *search_base_type_c::visit(subrange_c *symbol)                                     {ERROR; return NULL;} /* should never get called... */
   231 
   231 
   232 /*  enumerated_type_name ':' enumerated_spec_init */
   232 /*  enumerated_type_name ':' enumerated_spec_init */
   233 void *search_base_type_c::visit(enumerated_type_declaration_c *symbol) {
   233 void *search_base_type_c::visit(enumerated_type_declaration_c *symbol) {
   234   this->current_type_name = symbol->enumerated_type_name;
   234   this->current_type_name = symbol->enumerated_type_name;
   235   return symbol->enumerated_spec_init->accept(*this);
   235   return symbol->enumerated_spec_init->accept(*this);
   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