absyntax_utils/get_sizeof_datatype.cc
changeset 257 90782e241346
parent 202 da1a8186f86f
child 265 4d222f46f8cc
equal deleted inserted replaced
204:8ffa211b7f9a 257:90782e241346
   145   * numeric literal '30' must then be considered a LINT so the ADD function may be called
   145   * numeric literal '30' must then be considered a LINT so the ADD function may be called
   146   * with all inputs of the same data type.
   146   * with all inputs of the same data type.
   147   * If 'x' were a SINT, then the '30' would have to be a SINT too!
   147   * If 'x' were a SINT, then the '30' would have to be a SINT too!
   148   */
   148   */
   149 
   149 
   150 /* NOTE: all integer and real literal tokens will always be positive (i.e. no leading '-')
   150 /* NOTE: all integer_c and real_c tokens will always be positive (i.e. no leading '-')
   151  * due to the way the source code is parsed by iec.flex.
   151  * due to the way the source code is parsed by iec.flex.
   152  */
   152  */
   153 void *get_sizeof_datatype_c::visit(real_c *symbol) {
   153 void *get_sizeof_datatype_c::visit(real_c *symbol) {
   154   return _encode_int(32);
   154   return _encode_int(32);
   155 }
   155 }
   156 
   156 
   157 /* NOTE: all integer and real literal tokens will always be positive (i.e. no leading '-')
   157 void *get_sizeof_datatype_c::visit(neg_real_c *symbol) {
       
   158   return symbol->exp->accept(*this);
       
   159 }
       
   160 
       
   161 
       
   162 /* NOTE: all integer_c and real_c literal tokens will always be positive (i.e. no leading '-')
   158  * due to the way the source code is parsed by iec.flex.
   163  * due to the way the source code is parsed by iec.flex.
   159  */
   164  */
   160 void *get_sizeof_datatype_c::visit(integer_c *symbol) {
   165 void *get_sizeof_datatype_c::visit(integer_c *symbol) {
   161   int bitsize = 0;
   166   int bitsize = 0;
   162 
   167 
   222   free(oval);
   227   free(oval);
   223   return _encode_int(bitsize);
   228   return _encode_int(bitsize);
   224 }
   229 }
   225 
   230 
   226 
   231 
   227 /* NOTE: all integer and real literal tokens will always be positive (i.e. no leading '-')
   232 void *get_sizeof_datatype_c::visit(neg_integer_c *symbol) {
   228  * due to the way the source code is parsed by iec.flex.
   233   return symbol->exp->accept(*this);
       
   234 }
       
   235 
       
   236 
       
   237 /* NOTE: all binary_integer_c tokens will always be positive (i.e. no leading '-')
       
   238  * due to the syntax definition of IEC 61131-3.
   229  */
   239  */
   230 void *get_sizeof_datatype_c::visit(binary_integer_c *symbol) {
   240 void *get_sizeof_datatype_c::visit(binary_integer_c *symbol) {
   231   const char *sval = symbol->value;
   241   const char *sval = symbol->value;
   232   int bitsize = 0;
   242   int bitsize = 0;
   233 
   243 
   253 
   263 
   254   return _encode_int(bitsize);
   264   return _encode_int(bitsize);
   255 }
   265 }
   256 
   266 
   257 
   267 
   258 /* NOTE: all integer and real literal tokens will always be positive (i.e. no leading '-')
   268 /* NOTE: all octal_integer_c tokens will always be positive (i.e. no leading '-')
   259  * due to the way the source code is parsed by iec.flex.
   269  * due to the syntax definition of IEC 61131-3.
   260  */
   270  */
   261 void *get_sizeof_datatype_c::visit(octal_integer_c *symbol) {
   271 void *get_sizeof_datatype_c::visit(octal_integer_c *symbol) {
   262   const char *sval = symbol->value;
   272   const char *sval = symbol->value;
   263   int bitsize = 0;
   273   int bitsize = 0;
   264 
   274 
   285 
   295 
   286   return _encode_int(bitsize);
   296   return _encode_int(bitsize);
   287 }
   297 }
   288 
   298 
   289 
   299 
   290 /* NOTE: all integer and real literal tokens will always be positive (i.e. no leading '-')
   300 /* NOTE: all hex_integer_c tokens will always be positive (i.e. no leading '-')
   291  * due to the way the source code is parsed by iec.flex.
   301  * due to the syntax definition of IEC 61131-3.
   292  */
   302  */
   293 void *get_sizeof_datatype_c::visit(hex_integer_c *symbol) {
   303 void *get_sizeof_datatype_c::visit(hex_integer_c *symbol) {
   294   const char *sval = symbol->value;
   304   const char *sval = symbol->value;
   295   int bitsize = 0;
   305   int bitsize = 0;
   296 
   306 
   325 
   335 
   326 
   336 
   327 /***********************************/
   337 /***********************************/
   328 /* B 1.3.1 - Elementary Data Types */
   338 /* B 1.3.1 - Elementary Data Types */
   329 /***********************************/
   339 /***********************************/
   330 // void *get_sizeof_datatype_c::visit(time_type_name_c *symbol)	{return _encode_int(0); }
   340 // void *get_sizeof_datatype_c::visit(time_type_name_c *symbol) {return _encode_int(0); }
   331 void *get_sizeof_datatype_c::visit(bool_type_name_c *symbol)	{return _encode_int(1); }
   341 void *get_sizeof_datatype_c::visit(bool_type_name_c *symbol)    {return _encode_int(1); }
   332 void *get_sizeof_datatype_c::visit(sint_type_name_c *symbol)	{return _encode_int(8); }
   342 void *get_sizeof_datatype_c::visit(sint_type_name_c *symbol)    {return _encode_int(8); }
   333 void *get_sizeof_datatype_c::visit(int_type_name_c *symbol)	{return _encode_int(16);}
   343 void *get_sizeof_datatype_c::visit(int_type_name_c *symbol)     {return _encode_int(16);}
   334 void *get_sizeof_datatype_c::visit(dint_type_name_c *symbol)	{return _encode_int(32);}
   344 void *get_sizeof_datatype_c::visit(dint_type_name_c *symbol)    {return _encode_int(32);}
   335 void *get_sizeof_datatype_c::visit(lint_type_name_c *symbol)	{return _encode_int(64);}
   345 void *get_sizeof_datatype_c::visit(lint_type_name_c *symbol)    {return _encode_int(64);}
   336 void *get_sizeof_datatype_c::visit(usint_type_name_c *symbol)	{return _encode_int(8); }
   346 void *get_sizeof_datatype_c::visit(usint_type_name_c *symbol)   {return _encode_int(8); }
   337 void *get_sizeof_datatype_c::visit(uint_type_name_c *symbol)	{return _encode_int(16);}
   347 void *get_sizeof_datatype_c::visit(uint_type_name_c *symbol)    {return _encode_int(16);}
   338 void *get_sizeof_datatype_c::visit(udint_type_name_c *symbol)	{return _encode_int(32);}
   348 void *get_sizeof_datatype_c::visit(udint_type_name_c *symbol)   {return _encode_int(32);}
   339 void *get_sizeof_datatype_c::visit(ulint_type_name_c *symbol)	{return _encode_int(64);}
   349 void *get_sizeof_datatype_c::visit(ulint_type_name_c *symbol)   {return _encode_int(64);}
   340 void *get_sizeof_datatype_c::visit(real_type_name_c *symbol)	{return _encode_int(32);}
   350 void *get_sizeof_datatype_c::visit(real_type_name_c *symbol)    {return _encode_int(32);}
   341 void *get_sizeof_datatype_c::visit(lreal_type_name_c *symbol)	{return _encode_int(64);}
   351 void *get_sizeof_datatype_c::visit(lreal_type_name_c *symbol)   {return _encode_int(64);}
   342 // void *get_sizeof_datatype_c::visit(date_type_name_c *symbol)	{return _encode_int(0); }
   352 // void *get_sizeof_datatype_c::visit(date_type_name_c *symbol) {return _encode_int(0); }
   343 // void *get_sizeof_datatype_c::visit(tod_type_name_c *symbol)	{return _encode_int(0); }
   353 // void *get_sizeof_datatype_c::visit(tod_type_name_c *symbol)  {return _encode_int(0); }
   344 // void *get_sizeof_datatype_c::visit(dt_type_name_c *symbol)	{return _encode_int(0); }
   354 // void *get_sizeof_datatype_c::visit(dt_type_name_c *symbol)   {return _encode_int(0); }
   345 void *get_sizeof_datatype_c::visit(byte_type_name_c *symbol)	{return _encode_int(8); }
   355 void *get_sizeof_datatype_c::visit(byte_type_name_c *symbol)    {return _encode_int(8); }
   346 void *get_sizeof_datatype_c::visit(word_type_name_c *symbol)	{return _encode_int(16);}
   356 void *get_sizeof_datatype_c::visit(word_type_name_c *symbol)    {return _encode_int(16);}
   347 void *get_sizeof_datatype_c::visit(dword_type_name_c *symbol)	{return _encode_int(32);}
   357 void *get_sizeof_datatype_c::visit(dword_type_name_c *symbol)   {return _encode_int(32);}
   348 void *get_sizeof_datatype_c::visit(lword_type_name_c *symbol)	{return _encode_int(64);}
   358 void *get_sizeof_datatype_c::visit(lword_type_name_c *symbol)   {return _encode_int(64);}
   349 // void *get_sizeof_datatype_c::visit(string_type_name_c *symbol)	{return _encode_int(0); }
   359 // void *get_sizeof_datatype_c::visit(string_type_name_c *symbol)    {return _encode_int(0); }
   350 // void *get_sizeof_datatype_c::visit(wstring_type_name_c *symbol)	{return _encode_int(0); }
   360 // void *get_sizeof_datatype_c::visit(wstring_type_name_c *symbol)   {return _encode_int(0); }
   351 /******************************************************/
   361 /******************************************************/
   352 /* Extensions to the base standard as defined in      */
   362 /* Extensions to the base standard as defined in      */
   353 /* "Safety Software Technical Specification,          */
   363 /* "Safety Software Technical Specification,          */
   354 /*  Part 1: Concepts and Function Blocks,             */
   364 /*  Part 1: Concepts and Function Blocks,             */
   355 /*  Version 1.0 – Official Release"                   */
   365 /*  Version 1.0 – Official Release"                   */
   356 /* by PLCopen - Technical Committee 5 - 2006-01-31    */
   366 /* by PLCopen - Technical Committee 5 - 2006-01-31    */
   357 /******************************************************/
   367 /******************************************************/
   358 void *get_sizeof_datatype_c::visit(safebool_type_name_c *symbol)	{return _encode_int(1);}
   368 //     void *get_sizeof_datatype_c::visit(safetime_type_name_c *symbol); {return _encode_int(0); }
       
   369 void *get_sizeof_datatype_c::visit(safebool_type_name_c *symbol)         {return _encode_int(1); }
       
   370 void *get_sizeof_datatype_c::visit(safesint_type_name_c *symbol)         {return _encode_int(8); }
       
   371 void *get_sizeof_datatype_c::visit(safeint_type_name_c *symbol)          {return _encode_int(16);}
       
   372 void *get_sizeof_datatype_c::visit(safedint_type_name_c *symbol)         {return _encode_int(32);}
       
   373 void *get_sizeof_datatype_c::visit(safelint_type_name_c *symbol)         {return _encode_int(64);}
       
   374 void *get_sizeof_datatype_c::visit(safeusint_type_name_c *symbol)        {return _encode_int(8); }
       
   375 void *get_sizeof_datatype_c::visit(safeuint_type_name_c *symbol)         {return _encode_int(16);}
       
   376 void *get_sizeof_datatype_c::visit(safeudint_type_name_c *symbol)        {return _encode_int(32);}
       
   377 void *get_sizeof_datatype_c::visit(safeulint_type_name_c *symbol)        {return _encode_int(64);}
       
   378 void *get_sizeof_datatype_c::visit(safereal_type_name_c *symbol)         {return _encode_int(32);}
       
   379 void *get_sizeof_datatype_c::visit(safelreal_type_name_c *symbol)        {return _encode_int(64);}
       
   380 //     void *get_sizeof_datatype_c::visit(safedate_type_name_c *symbol); {return _encode_int(0); }
       
   381 //     void *get_sizeof_datatype_c::visit(safetod_type_name_c *symbol);  {return _encode_int(0); }
       
   382 //     void *get_sizeof_datatype_c::visit(safedt_type_name_c *symbol);   {return _encode_int(0); }
       
   383 void *get_sizeof_datatype_c::visit(safebyte_type_name_c *symbol)         {return _encode_int(8); }
       
   384 void *get_sizeof_datatype_c::visit(safeword_type_name_c *symbol)         {return _encode_int(16);}
       
   385 void *get_sizeof_datatype_c::visit(safedword_type_name_c *symbol)        {return _encode_int(32);}
       
   386 void *get_sizeof_datatype_c::visit(safelword_type_name_c *symbol)        {return _encode_int(64);}
       
   387 //     void *get_sizeof_datatype_c::visit(safestring_type_name_c *symbol);  {return _encode_int(0); }
       
   388 //     void *get_sizeof_datatype_c::visit(safewstring_type_name_c *symbol); {return _encode_int(0); }
       
   389 
   359 
   390 
   360 /********************************/
   391 /********************************/
   361 /* B 1.3.3 - Derived data types */
   392 /* B 1.3.3 - Derived data types */
   362 /********************************/
   393 /********************************/
   363 // Not yet supported...
   394 // Not yet supported...