stage4/generate_iec/generate_iec.cc
changeset 257 90782e241346
parent 202 da1a8186f86f
child 267 0a1204bcc9af
equal deleted inserted replaced
204:8ffa211b7f9a 257:90782e241346
    69 void *print_token(token_c *token) {
    69 void *print_token(token_c *token) {
    70   return s4o.print(token->value);
    70   return s4o.print(token->value);
    71 }
    71 }
    72 
    72 
    73 void *print_literal(symbol_c *type, symbol_c *value) {
    73 void *print_literal(symbol_c *type, symbol_c *value) {
    74   type->accept(*this);
    74   if (NULL != type) {
    75   s4o.print("#");
    75     type->accept(*this);
       
    76     s4o.print("#");
       
    77   }
    76   value->accept(*this);
    78   value->accept(*this);
    77   return NULL;
    79   return NULL;
    78 }
    80 }
    79 
    81 
    80 void *print_list(list_c *list,
    82 void *print_list(list_c *list,
   166 /*********************/
   168 /*********************/
   167 
   169 
   168 /******************************/
   170 /******************************/
   169 /* B 1.2.1 - Numeric Literals */
   171 /* B 1.2.1 - Numeric Literals */
   170 /******************************/
   172 /******************************/
   171 void *visit(real_c *symbol) {return print_token(symbol);}
   173 void *visit(real_c *symbol)               {return print_token(symbol);}
   172 void *visit(integer_c *symbol) {return print_token(symbol);}
   174 void *visit(neg_real_c *symbol)           {return print_unary_expression(symbol->exp, "-");}
   173 void *visit(binary_integer_c *symbol) {return print_token(symbol);}
   175 void *visit(integer_c *symbol)            {return print_token(symbol);}
   174 void *visit(octal_integer_c *symbol) {return print_token(symbol);}
   176 void *visit(neg_integer_c *symbol)        {return print_unary_expression(symbol->exp, "-");}
   175 void *visit(hex_integer_c *symbol) {return print_token(symbol);}
   177 void *visit(binary_integer_c *symbol)     {return print_token(symbol);}
   176 
   178 void *visit(octal_integer_c *symbol)      {return print_token(symbol);}
   177 void *visit(integer_literal_c *symbol) {return print_literal(symbol->type, symbol->value);}
   179 void *visit(hex_integer_c *symbol)        {return print_token(symbol);}
   178 void *visit(real_literal_c *symbol) {return print_literal(symbol->type, symbol->value);}
   180 
       
   181 void *visit(integer_literal_c *symbol)    {return print_literal(symbol->type, symbol->value);}
       
   182 void *visit(real_literal_c *symbol)       {return print_literal(symbol->type, symbol->value);}
   179 void *visit(bit_string_literal_c *symbol) {return print_literal(symbol->type, symbol->value);}
   183 void *visit(bit_string_literal_c *symbol) {return print_literal(symbol->type, symbol->value);}
   180 void *visit(boolean_literal_c *symbol) {return print_literal(symbol->type, symbol->value);}
   184 void *visit(boolean_literal_c *symbol)    {return print_literal(symbol->type, symbol->value);}
   181 void *visit(neg_literal_c *symbol) {return print_unary_expression(symbol->exp, "-");}
       
   182 
       
   183 
   185 
   184 /* helper class for boolean_literal_c */
   186 /* helper class for boolean_literal_c */
   185 void *visit(boolean_true_c *symbol) {s4o.print(/*"TRUE"*/"1"); return NULL;}
   187 void *visit(boolean_true_c *symbol)       {s4o.print(/*"TRUE"*/"1"); return NULL;}
   186 void *visit(boolean_false_c *symbol) {s4o.print(/*"FALSE"*/"0"); return NULL;}
   188 void *visit(boolean_false_c *symbol)      {s4o.print(/*"FALSE"*/"0"); return NULL;}
   187 
   189 
   188 /*******************************/
   190 /*******************************/
   189 /* B.1.2.2   Character Strings */
   191 /* B.1.2.2   Character Strings */
   190 /*******************************/
   192 /*******************************/
   191 void *visit(double_byte_character_string_c *symbol) {return print_token(symbol);}
   193 void *visit(double_byte_character_string_c *symbol) {return print_token(symbol);}
   295 
   297 
   296 
   298 
   297 /***********************************/
   299 /***********************************/
   298 /* B 1.3.1 - Elementary Data Types */
   300 /* B 1.3.1 - Elementary Data Types */
   299 /***********************************/
   301 /***********************************/
   300 void *visit(time_type_name_c *symbol) {s4o.print("TIME"); return NULL;}
   302 void *visit(time_type_name_c *symbol)        {s4o.print("TIME");        return NULL;}
   301 void *visit(bool_type_name_c *symbol) {s4o.print("BOOL"); return NULL;}
   303 void *visit(bool_type_name_c *symbol)        {s4o.print("BOOL");        return NULL;}
   302 /******************************************************/
   304 void *visit(sint_type_name_c *symbol)        {s4o.print("SINT");        return NULL;}
   303 /* whether we are suporting safe extensions           */
   305 void *visit(int_type_name_c *symbol)         {s4o.print("INT");         return NULL;}
   304 /* as defined in PLCopen - Technical Committee 5      */
   306 void *visit(dint_type_name_c *symbol)        {s4o.print("DINT");        return NULL;}
   305 /* Safety Software Technical Specification,           */
   307 void *visit(lint_type_name_c *symbol)        {s4o.print("LINT");        return NULL;}
   306 /* Part 1: Concepts and Function Blocks,              */
   308 void *visit(usint_type_name_c *symbol)       {s4o.print("USINT");       return NULL;}
   307 /* Version 1.0 – Official Release                     */
   309 void *visit(uint_type_name_c *symbol)        {s4o.print("UINT");        return NULL;}
   308 /******************************************************/
   310 void *visit(udint_type_name_c *symbol)       {s4o.print("UDINT");       return NULL;}
   309 void *visit(safebool_type_name_c *symbol) {s4o.print("SAFEBOOL"); return NULL;}
   311 void *visit(ulint_type_name_c *symbol)       {s4o.print("ULINT");       return NULL;}
   310 void *visit(sint_type_name_c *symbol) {s4o.print("SINT"); return NULL;}
   312 void *visit(real_type_name_c *symbol)        {s4o.print("REAL");        return NULL;}
   311 void *visit(int_type_name_c *symbol) {s4o.print("INT"); return NULL;}
   313 void *visit(lreal_type_name_c *symbol)       {s4o.print("LREAL");       return NULL;}
   312 void *visit(dint_type_name_c *symbol) {s4o.print("DINT"); return NULL;}
   314 void *visit(date_type_name_c *symbol)        {s4o.print("DATE");        return NULL;}
   313 void *visit(lint_type_name_c *symbol) {s4o.print("LINT"); return NULL;}
   315 void *visit(tod_type_name_c *symbol)         {s4o.print("TOD");         return NULL;}
   314 void *visit(usint_type_name_c *symbol) {s4o.print("USINT"); return NULL;}
   316 void *visit(dt_type_name_c *symbol)          {s4o.print("DT");          return NULL;}
   315 void *visit(uint_type_name_c *symbol) {s4o.print("UINT"); return NULL;}
   317 void *visit(byte_type_name_c *symbol)        {s4o.print("BYTE");        return NULL;}
   316 void *visit(udint_type_name_c *symbol) {s4o.print("UDINT"); return NULL;}
   318 void *visit(word_type_name_c *symbol)        {s4o.print("WORD");        return NULL;}
   317 void *visit(ulint_type_name_c *symbol) {s4o.print("ULINT"); return NULL;}
   319 void *visit(lword_type_name_c *symbol)       {s4o.print("LWORD");       return NULL;}
   318 void *visit(real_type_name_c *symbol) {s4o.print("REAL"); return NULL;}
   320 void *visit(dword_type_name_c *symbol)       {s4o.print("DWORD");       return NULL;}
   319 void *visit(lreal_type_name_c *symbol) {s4o.print("LREAL"); return NULL;}
   321 void *visit(string_type_name_c *symbol)      {s4o.print("STRING");      return NULL;}
   320 void *visit(date_type_name_c *symbol) {s4o.print("DATE"); return NULL;}
   322 void *visit(wstring_type_name_c *symbol)     {s4o.print("WSTRING");     return NULL;}
   321 void *visit(tod_type_name_c *symbol) {s4o.print("TOD"); return NULL;}
   323 
   322 void *visit(dt_type_name_c *symbol) {s4o.print("DT"); return NULL;}
   324 void *visit(safetime_type_name_c *symbol)    {s4o.print("SAFETIME");    return NULL;}
   323 void *visit(byte_type_name_c *symbol) {s4o.print("BYTE"); return NULL;}
   325 void *visit(safebool_type_name_c *symbol)    {s4o.print("SAFEBOOL");    return NULL;}
   324 void *visit(word_type_name_c *symbol) {s4o.print("WORD"); return NULL;}
   326 void *visit(safesint_type_name_c *symbol)    {s4o.print("SAFESINT");    return NULL;}
   325 void *visit(lword_type_name_c *symbol) {s4o.print("LWORD"); return NULL;}
   327 void *visit(safeint_type_name_c *symbol)     {s4o.print("SAFEINT");     return NULL;}
   326 void *visit(dword_type_name_c *symbol) {s4o.print("DWORD"); return NULL;}
   328 void *visit(safedint_type_name_c *symbol)    {s4o.print("SAFEDINT");    return NULL;}
   327 void *visit(string_type_name_c *symbol) {s4o.print("STRING"); return NULL;}
   329 void *visit(safelint_type_name_c *symbol)    {s4o.print("SAFELINT");    return NULL;}
   328 void *visit(wstring_type_name_c *symbol) {s4o.print("WSTRING"); return NULL;}
   330 void *visit(safeusint_type_name_c *symbol)   {s4o.print("SAFEUSINT");   return NULL;}
   329 /*
   331 void *visit(safeuint_type_name_c *symbol)    {s4o.print("SAFEUINT");    return NULL;}
   330 void *visit(constant_int_type_name_c *symbol) {return NULL;}
   332 void *visit(safeudint_type_name_c *symbol)   {s4o.print("SAFEUDINT");   return NULL;}
   331 void *visit(constant_real_type_name_c *symbol) {return NULL;}
   333 void *visit(safeulint_type_name_c *symbol)   {s4o.print("SAFEULINT");   return NULL;}
   332 */
   334 void *visit(safereal_type_name_c *symbol)    {s4o.print("SAFEREAL");    return NULL;}
       
   335 void *visit(safelreal_type_name_c *symbol)   {s4o.print("SAFELREAL");   return NULL;}
       
   336 void *visit(safedate_type_name_c *symbol)    {s4o.print("SAFEDATE");    return NULL;}
       
   337 void *visit(safetod_type_name_c *symbol)     {s4o.print("SAFETOD");     return NULL;}
       
   338 void *visit(safedt_type_name_c *symbol)      {s4o.print("SAFEDT");      return NULL;}
       
   339 void *visit(safebyte_type_name_c *symbol)    {s4o.print("SAFEBYTE");    return NULL;}
       
   340 void *visit(safeword_type_name_c *symbol)    {s4o.print("SAFEWORD");    return NULL;}
       
   341 void *visit(safelword_type_name_c *symbol)   {s4o.print("SAFELWORD");   return NULL;}
       
   342 void *visit(safedword_type_name_c *symbol)   {s4o.print("SAFEDWORD");   return NULL;}
       
   343 void *visit(safestring_type_name_c *symbol)  {s4o.print("SAFESTRING");  return NULL;}
       
   344 void *visit(safewstring_type_name_c *symbol) {s4o.print("SAFEWSTRING"); return NULL;}
       
   345 
   333 
   346 
   334 /********************************/
   347 /********************************/
   335 /* B 1.3.3 - Derived data types */
   348 /* B 1.3.3 - Derived data types */
   336 /********************************/
   349 /********************************/
   337 /*  TYPE type_declaration_list END_TYPE */
   350 /*  TYPE type_declaration_list END_TYPE */