101 get_datatype_id_c *get_datatype_id_c::singleton = NULL; |
101 get_datatype_id_c *get_datatype_id_c::singleton = NULL; |
102 |
102 |
103 |
103 |
104 |
104 |
105 |
105 |
|
106 /***********************************************************************/ |
|
107 /***********************************************************************/ |
|
108 |
|
109 |
|
110 /* A small helper class, to transform elementary data type to string. |
|
111 * this allows us to generate more relevant error messages... |
|
112 */ |
|
113 |
|
114 class get_datatype_id_str_c: public null_visitor_c { |
|
115 protected: |
|
116 get_datatype_id_str_c(void) {}; |
|
117 ~get_datatype_id_str_c(void) {}; |
|
118 |
|
119 private: |
|
120 /* singleton class! */ |
|
121 static get_datatype_id_str_c *singleton; |
|
122 |
|
123 public: |
|
124 static const char *get_id_str(symbol_c *symbol) { |
|
125 if (NULL == singleton) singleton = new get_datatype_id_str_c; |
|
126 if (NULL == singleton) ERROR; |
|
127 const char *res = (const char *)symbol->accept(*singleton); |
|
128 if (NULL == res) ERROR; |
|
129 return res; |
|
130 } |
|
131 |
|
132 |
|
133 /*************************/ |
|
134 /* B.1 - Common elements */ |
|
135 /*************************/ |
|
136 /*******************************************/ |
|
137 /* B 1.1 - Letters, digits and identifiers */ |
|
138 /*******************************************/ |
|
139 void *visit(identifier_c *symbol) {return (void *)symbol->value;}; |
|
140 |
|
141 /***********************************/ |
|
142 /* B 1.3.1 - Elementary Data Types */ |
|
143 /***********************************/ |
|
144 void *visit(time_type_name_c *symbol) {return (void *)"TIME"; }; |
|
145 void *visit(bool_type_name_c *symbol) {return (void *)"BOOL"; }; |
|
146 void *visit(sint_type_name_c *symbol) {return (void *)"SINT"; }; |
|
147 void *visit(int_type_name_c *symbol) {return (void *)"INT"; }; |
|
148 void *visit(dint_type_name_c *symbol) {return (void *)"DINT"; }; |
|
149 void *visit(lint_type_name_c *symbol) {return (void *)"LINT"; }; |
|
150 void *visit(usint_type_name_c *symbol) {return (void *)"USINT"; }; |
|
151 void *visit(uint_type_name_c *symbol) {return (void *)"UINT"; }; |
|
152 void *visit(udint_type_name_c *symbol) {return (void *)"UDINT"; }; |
|
153 void *visit(ulint_type_name_c *symbol) {return (void *)"ULINT"; }; |
|
154 void *visit(real_type_name_c *symbol) {return (void *)"REAL"; }; |
|
155 void *visit(lreal_type_name_c *symbol) {return (void *)"LREAL"; }; |
|
156 void *visit(date_type_name_c *symbol) {return (void *)"DATE"; }; |
|
157 void *visit(tod_type_name_c *symbol) {return (void *)"TOD"; }; |
|
158 void *visit(dt_type_name_c *symbol) {return (void *)"DT"; }; |
|
159 void *visit(byte_type_name_c *symbol) {return (void *)"BYTE"; }; |
|
160 void *visit(word_type_name_c *symbol) {return (void *)"WORD"; }; |
|
161 void *visit(lword_type_name_c *symbol) {return (void *)"LWORD"; }; |
|
162 void *visit(dword_type_name_c *symbol) {return (void *)"DWORD"; }; |
|
163 void *visit(string_type_name_c *symbol) {return (void *)"STRING"; }; |
|
164 void *visit(wstring_type_name_c *symbol) {return (void *)"WSTRING"; }; |
|
165 |
|
166 void *visit(safetime_type_name_c *symbol) {return (void *)"SAFETIME"; }; |
|
167 void *visit(safebool_type_name_c *symbol) {return (void *)"SAFEBOOL"; }; |
|
168 void *visit(safesint_type_name_c *symbol) {return (void *)"SAFESINT"; }; |
|
169 void *visit(safeint_type_name_c *symbol) {return (void *)"SAFEINT"; }; |
|
170 void *visit(safedint_type_name_c *symbol) {return (void *)"SAFEDINT"; }; |
|
171 void *visit(safelint_type_name_c *symbol) {return (void *)"SAFELINT"; }; |
|
172 void *visit(safeusint_type_name_c *symbol) {return (void *)"SAFEUSINT"; }; |
|
173 void *visit(safeuint_type_name_c *symbol) {return (void *)"SAFEUINT"; }; |
|
174 void *visit(safeudint_type_name_c *symbol) {return (void *)"SAFEUDINT"; }; |
|
175 void *visit(safeulint_type_name_c *symbol) {return (void *)"SAFEULINT"; }; |
|
176 void *visit(safereal_type_name_c *symbol) {return (void *)"SAFEREAL"; }; |
|
177 void *visit(safelreal_type_name_c *symbol) {return (void *)"SAFELREAL"; }; |
|
178 void *visit(safedate_type_name_c *symbol) {return (void *)"SAFEDATE"; }; |
|
179 void *visit(safetod_type_name_c *symbol) {return (void *)"SAFETOD"; }; |
|
180 void *visit(safedt_type_name_c *symbol) {return (void *)"SAFEDT"; }; |
|
181 void *visit(safebyte_type_name_c *symbol) {return (void *)"SAFEBYTE"; }; |
|
182 void *visit(safeword_type_name_c *symbol) {return (void *)"SAFEWORD"; }; |
|
183 void *visit(safelword_type_name_c *symbol) {return (void *)"SAFELWORD"; }; |
|
184 void *visit(safedword_type_name_c *symbol) {return (void *)"SAFEDWORD"; }; |
|
185 void *visit(safestring_type_name_c *symbol) {return (void *)"SAFESTRING"; }; |
|
186 void *visit(safewstring_type_name_c *symbol) {return (void *)"SAFEWSTRING"; }; |
|
187 |
|
188 /********************************/ |
|
189 /* B 1.3.3 - Derived data types */ |
|
190 /********************************/ |
|
191 /* simple_type_name ':' simple_spec_init */ |
|
192 void *visit(simple_type_declaration_c *symbol) {return symbol->simple_type_name->accept(*this);} |
|
193 /* subrange_type_name ':' subrange_spec_init */ |
|
194 void *visit(subrange_type_declaration_c *symbol) {return symbol->subrange_type_name->accept(*this);} |
|
195 /* enumerated_type_name ':' enumerated_spec_init */ |
|
196 void *visit(enumerated_type_declaration_c *symbol) {return symbol->enumerated_type_name->accept(*this);} |
|
197 /* identifier ':' array_spec_init */ |
|
198 void *visit(array_type_declaration_c *symbol) {return symbol->identifier->accept(*this);} |
|
199 /* structure_type_name ':' structure_specification */ |
|
200 void *visit(structure_type_declaration_c *symbol) {return symbol->structure_type_name->accept(*this);} |
|
201 /* string_type_name ':' elementary_string_type_name string_type_declaration_size string_type_declaration_init */ |
|
202 void *visit(string_type_declaration_c *symbol) {return symbol->string_type_name->accept(*this);} |
|
203 |
|
204 /*****************************/ |
|
205 /* B 1.5.2 - Function Blocks */ |
|
206 /*****************************/ |
|
207 /* FUNCTION_BLOCK derived_function_block_name io_OR_other_var_declarations function_block_body END_FUNCTION_BLOCK */ |
|
208 void *visit(function_block_declaration_c *symbol) {return symbol->fblock_name->accept(*this);} |
|
209 }; |
|
210 |
|
211 get_datatype_id_str_c *get_datatype_id_str_c::singleton = NULL; |
|
212 |
106 |
213 |
107 |
214 |
108 /**********************************************************/ |
215 /**********************************************************/ |
109 /**********************************************************/ |
216 /**********************************************************/ |
110 /**********************************************************/ |
217 /**********************************************************/ |