cymoca
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
compiler.cc
Go to the documentation of this file.
1 #include "compiler.h"
2 
3 namespace cymoca {
4 
5 Compiler::Compiler(std::ifstream &text)
6  : ModelicaBaseListener(),
7  m_parser(nullptr),
8  m_input(text),
9  m_lexer(&m_input),
10  m_token_stream(&m_lexer),
11  m_root(nullptr),
12  m_verbose(false),
13  m_ast() {
14  m_token_stream.fill();
15  m_parser = std::make_unique<ModelicaParser>(&m_token_stream);
16  antlr4::tree::ParseTree *tree = m_parser->stored_definition();
17  antlr4::tree::ParseTreeWalker::DEFAULT.walk(this, tree);
18 }
19 
20 std::string Compiler::indent(int n) {
21  std::string s;
22 
23  for (int i = 0; i < n; i++) {
24  s.append(" ");
25  }
26 
27  return s;
28 }
29 
30 void Compiler::visitTerminal(antlr4::tree::TerminalNode *node) {
31  if (m_verbose) {
32  std::cout << "terminal: " << node->getText() << std::endl;
33  }
34 }
35 
36 void Compiler::visitErrorNode(antlr4::tree::ErrorNode * /*node*/) {}
37 
38 void Compiler::enterEveryRule(antlr4::ParserRuleContext *ctx) {
39  if (m_verbose) {
40  std::cout << indent(ctx->depth()) << ">> "
41  << m_parser->getRuleNames()[ctx->getRuleIndex()] << std::endl;
42  }
43 }
44 
45 void Compiler::exitEveryRule(antlr4::ParserRuleContext *ctx) {
46  if (m_verbose) {
47  std::cout << indent(ctx->depth()) << "<< "
48  << m_parser->getRuleNames()[ctx->getRuleIndex()] << std::endl;
49  }
50 }
51 
52 //-----------------------------------------------------------------------------
53 // model
54 //-----------------------------------------------------------------------------
55 
56 //-----------------------------------------------------------------------------
57 // condition
58 //-----------------------------------------------------------------------------
59 
60 void Compiler::exitCond_bool(ModelicaParser::Cond_boolContext *ctx) {
61  auto res = std::make_unique<ast::condition::Boolean>(false);
62  if (ctx->TRUE()) {
63  res->setValue(true);
64  } else if (ctx->FALSE()) {
65  res->setValue(false);
66  } else {
67  assert(false);
68  }
69  setAst(ctx, std::move(res));
70 }
71 
72 void Compiler::exitCond_binary(ModelicaParser::Cond_binaryContext *ctx) {
73  std::string op = ctx->op->getText();
74  auto left = cloneAst<ast::condition::Base>(ctx->condition(0));
75  auto right = cloneAst<ast::condition::Base>(ctx->condition(1));
76  if (op == "and") {
77  setAst(ctx, std::make_unique<ast::condition::And>(std::move(left),
78  std::move(right)));
79  } else if (op == "or") {
80  setAst(ctx, std::make_unique<ast::condition::Or>(std::move(left),
81  std::move(right)));
82  } else {
83  assert(false);
84  }
85 }
86 
87 void Compiler::exitCond_unary(ModelicaParser::Cond_unaryContext *ctx) {
88  assert(ctx->op->getText() == "-");
89  auto e = cloneAst<ast::condition::Base>(ctx->condition());
90  setAst(ctx, std::make_unique<ast::condition::Not>(std::move(e)));
91 }
92 
93 void Compiler::exitCond_compare(ModelicaParser::Cond_compareContext *ctx) {
94  auto left = cloneAst<ast::expression::Base>(ctx->expr(0));
95  auto right = cloneAst<ast::expression::Base>(ctx->expr(1));
96  std::string op = ctx->op->getText();
97  if (op == "<") {
98  setAst(ctx, std::make_unique<ast::condition::LessThan>(std::move(left),
99  std::move(right)));
100  } else if (op == "<=") {
101  setAst(ctx, std::make_unique<ast::condition::LessThanOrEqual>(
102  std::move(left), std::move(right)));
103  } else if (op == ">") {
104  setAst(ctx, std::make_unique<ast::condition::GreaterThan>(
105  std::move(left), std::move(right)));
106  } else if (op == ">=") {
107  setAst(ctx, std::make_unique<ast::condition::GreaterThanOrEqual>(
108  std::move(left), std::move(right)));
109  } else if (op == "==") {
110  setAst(ctx, std::make_unique<ast::condition::Equal>(std::move(left),
111  std::move(right)));
112  } else if (op == "<>") {
113  setAst(ctx, std::make_unique<ast::condition::NotEqual>(std::move(left),
114  std::move(right)));
115  } else {
116  throw compiler_exception(std::string("unhandled operator") + op);
117  }
118 }
119 void Compiler::exitCond_func(ModelicaParser::Cond_funcContext *ctx) {
120  throw compiler_exception("not implemented");
121 }
122 void Compiler::exitCond_ref(ModelicaParser::Cond_refContext *ctx) {
123  throw compiler_exception("not implemented");
124 }
125 
126 //-----------------------------------------------------------------------------
127 // equations
128 //-----------------------------------------------------------------------------
129 
130 void Compiler::exitEq_simple(ModelicaParser::Eq_simpleContext *ctx) {
131  auto left = cloneAst<ast::expression::Base>(ctx->expr());
132  auto right = cloneAst<ast::expression::Base>(ctx->expression());
133  setAst(ctx, std::make_unique<ast::equation::Simple>(std::move(left),
134  std::move(right)));
135 }
136 
137 void Compiler::exitEq_block(ModelicaParser::Eq_blockContext *ctx) {
138  auto res = std::make_unique<ast::equation::List>();
139  for (auto eq : ctx->equation()) {
140  res->append(cloneAst<ast::equation::Base>(eq));
141  }
142  setAst(ctx, std::move(res));
143 }
144 
145 void Compiler::exitEq_if(ModelicaParser::Eq_ifContext *ctx) {
146  throw compiler_exception("not implemented");
147 }
148 void Compiler::exitEq_for(ModelicaParser::Eq_forContext *ctx) {
149  throw compiler_exception("not implemented");
150 }
151 void Compiler::exitEq_connect(ModelicaParser::Eq_connectContext *ctx) {
152  throw compiler_exception("not implemented");
153 }
154 void Compiler::exitEq_when(ModelicaParser::Eq_whenContext *ctx) {
155  assert(ctx->condition().size() == ctx->eq_block().size());
156  auto when = std::make_unique<ast::equation::When>();
157  for (size_t i = 0; i < ctx->condition().size(); i++) {
158  auto block = std::make_unique<ast::equation::Block>(
159  cloneAst<ast::condition::Base>(ctx->condition(i)),
160  cloneAst<ast::equation::List>(ctx->eq_block(i)));
161  when->append(std::move(block));
162  }
163  setAst(ctx, std::move(when));
164 }
165 void Compiler::exitEq_func(ModelicaParser::Eq_funcContext *ctx) {
166  throw compiler_exception("not implemented");
167 }
168 
169 //-----------------------------------------------------------------------------
170 // statements
171 //-----------------------------------------------------------------------------
172 
173 void Compiler::exitStmt_ref(ModelicaParser::Stmt_refContext *ctx) {
174  throw compiler_exception("not implemented");
175 }
176 void Compiler::exitStmt_func(ModelicaParser::Stmt_funcContext *ctx) {
177  throw compiler_exception("not implemented");
178 }
179 void Compiler::exitStmt_key(ModelicaParser::Stmt_keyContext *ctx) {
180  throw compiler_exception("not implemented");
181 }
182 void Compiler::exitStmt_if(ModelicaParser::Stmt_ifContext *ctx) {
183  throw compiler_exception("not implemented");
184 }
185 void Compiler::exitStmt_for(ModelicaParser::Stmt_forContext *ctx) {
186  throw compiler_exception("not implemented");
187 }
188 void Compiler::exitStmt_while(ModelicaParser::Stmt_whileContext *ctx) {
189  throw compiler_exception("not implemented");
190 }
191 void Compiler::exitStmt_when(ModelicaParser::Stmt_whenContext *ctx) {
192  throw compiler_exception("not implemented");
193 }
194 void Compiler::exitFor_indices(ModelicaParser::For_indicesContext *ctx) {
195  throw compiler_exception("not implemented");
196 }
197 void Compiler::exitFor_index(ModelicaParser::For_indexContext *ctx) {
198  throw compiler_exception("not implemented");
199 }
200 
201 //-----------------------------------------------------------------------------
202 // expressions
203 //-----------------------------------------------------------------------------
204 
205 void Compiler::exitExpr_number(ModelicaParser::Expr_numberContext *ctx) {
206  std::stringstream ss(ctx->getText());
207  double value = 0;
208  ss >> value;
209  auto num = std::make_unique<ast::expression::Number>(value);
210  setAst(ctx, std::move(num));
211 }
212 
213 void Compiler::exitExpr_ref(ModelicaParser::Expr_refContext *ctx) {
214  std::vector<std::string> ids;
215  for (auto id : ctx->component_reference()->IDENT()) {
216  ids.push_back(id->getText());
217  }
218  // TODO handle more than one string
219  setAst(ctx, std::make_unique<ast::expression::Reference>(ids[0]));
220 }
221 
222 void Compiler::exitExpr_simple(ModelicaParser::Expr_simpleContext *ctx) {
223  linkAst(ctx, ctx->expr());
224 }
225 void Compiler::exitExpr_if(ModelicaParser::Expr_ifContext *ctx) {
226  throw compiler_exception("not implemented");
227 }
228 void Compiler::exitExpr_func(ModelicaParser::Expr_funcContext *ctx) {
229  if (ctx->component_reference()) {
230  setAst(ctx,
231  std::make_unique<ast::expression::Function>(
232  cloneAst<ast::expression::Reference>(ctx->component_reference()),
233  cloneAst<ast::expression::List>(ctx->function_call_args())));
234  } else if (ctx->func) {
235  setAst(
236  ctx,
237  std::make_unique<ast::expression::Function>(
238  std::make_unique<ast::expression::Reference>(ctx->func->getText()),
239  cloneAst<ast::expression::List>(ctx->function_call_args())));
240  } else {
241  assert(false);
242  }
243 }
244 void Compiler::exitExpr_string(ModelicaParser::Expr_stringContext *ctx) {
245  throw compiler_exception("not implemented");
246 }
247 void Compiler::exitExpr_range(ModelicaParser::Expr_rangeContext *ctx) {
248  throw compiler_exception("not implemented");
249 }
250 void Compiler::exitExpr_unary(ModelicaParser::Expr_unaryContext *ctx) {
251  setAst(ctx, std::make_unique<ast::expression::Negative>(
252  cloneAst<ast::expression::Base>(ctx->expr())));
253 }
254 void Compiler::exitExpr_binary(ModelicaParser::Expr_binaryContext *ctx) {
255  throw compiler_exception("not implemented");
256 }
257 void Compiler::exitExpr_output(ModelicaParser::Expr_outputContext *ctx) {
258  throw compiler_exception("not implemented");
259 }
260 void Compiler::exitExpr_list(ModelicaParser::Expr_listContext *ctx) {
261  throw compiler_exception("not implemented");
262 }
263 void Compiler::exitExpr_end(ModelicaParser::Expr_endContext *ctx) {
264  throw compiler_exception("not implemented");
265 }
266 void Compiler::exitExpr_array(ModelicaParser::Expr_arrayContext *ctx) {
267  throw compiler_exception("not implemented");
268 }
269 
270 //-----------------------------------------------------------------------------
271 // function arguments
272 //-----------------------------------------------------------------------------
273 
275  ModelicaParser::Function_call_argsContext *ctx) {
276  auto args = std::make_unique<ast::expression::List>();
277  for (auto arg_ctx : ctx->function_argument()) {
278  args->append(cloneAst<ast::expression::Base>(arg_ctx));
279  }
280  setAst(ctx, std::move(args));
281 }
282 void Compiler::exitFunc_arg_expr(ModelicaParser::Func_arg_exprContext *ctx) {
283  setAst(ctx, cloneAst<ast::expression::Base>(ctx->expression()));
284 }
285 void Compiler::exitFunc_arg_for(ModelicaParser::Func_arg_forContext *ctx) {
286  throw compiler_exception("not implemented");
287 }
288 void Compiler::exitFunc_arg_func(ModelicaParser::Func_arg_funcContext *ctx) {
289  throw compiler_exception("not implemented");
290 }
291 void Compiler::exitFunc_arg_named(ModelicaParser::Func_arg_namedContext *ctx) {
292  throw compiler_exception("not implemented");
293 }
294 
295 //-----------------------------------------------------------------------------
296 // elements
297 //-----------------------------------------------------------------------------
298 
299 void Compiler::exitElem_import(ModelicaParser::Elem_importContext *ctx) {
300  throw compiler_exception("not implemented");
301 }
302 void Compiler::exitElem_extends(ModelicaParser::Elem_extendsContext *ctx) {
303  throw compiler_exception("not implemented");
304 }
305 void Compiler::exitElem_class(ModelicaParser::Elem_classContext *ctx) {
306  throw compiler_exception("not implemented");
307 }
308 void Compiler::exitElem_comp(ModelicaParser::Elem_compContext *ctx) {
309  linkAst(ctx, ctx->component_clause());
310 }
311 
312 //-----------------------------------------------------------------------------
313 // misc
314 //-----------------------------------------------------------------------------
315 
316 void Compiler::exitClass_prefixes(ModelicaParser::Class_prefixesContext *ctx) {
317  // pass, just a string, let level above handle this
318 }
319 
321  ModelicaParser::Stored_definitionContext *ctx) {
322  // throw compiler_exception("not implemented");
323  // TODO
324 }
326  ModelicaParser::Enumeration_literalContext *ctx) {
327  throw compiler_exception("not implemented");
328 }
329 void Compiler::exitComposition(ModelicaParser::CompositionContext *ctx) {
330  auto c = std::make_unique<ast::model::Class>(
331  std::make_unique<ast::model::ElementDict>(),
332  std::make_unique<ast::equation::List>());
333 
334  // elements
335  enum class Visibility { PUBLIC, PRIVATE, PROTECTED };
336  for (auto elem_sect :
337  {std::make_pair(Visibility::PUBLIC, ctx->public_elem),
338  std::make_pair(Visibility::PRIVATE, ctx->private_elem),
339  std::make_pair(Visibility::PROTECTED, ctx->protected_elem)}) {
340  for (auto e_ctx : elem_sect.second) {
341  // TODO set visibility for element
342  auto edict = getAst<ast::model::ElementDict>(e_ctx);
343  for (auto &key_val : edict->getMap()) {
344  auto e = key_val.second->cloneAs<ast::element::Base>();
345  c->getElements().set(key_val.first, std::move(e));
346  }
347  }
348  }
349 
350  // equations
351  for (auto eq_sec : ctx->equation_section()) {
352  for (auto eq : eq_sec->equation()) {
353  c->getEquations().append(cloneAst<ast::equation::Base>(eq));
354  }
355  }
356 
357  // statements
358  for (auto algo_sec : ctx->algorithm_section()) {
359  for (auto s_ctx : algo_sec->statement()) {
360  auto s = cloneAst<ast::statement::Base>(s_ctx);
361  c->getStatements().append(std::move(s));
362  }
363  }
364  m_root = c.get();
365  setAst(ctx, std::move(c));
366 }
368  ModelicaParser::External_function_callContext *ctx) {
369  throw compiler_exception("not implemented");
370 }
372  ModelicaParser::Constraining_clauseContext *ctx) {
373  throw compiler_exception("not implemented");
374 }
376  ModelicaParser::Component_clauseContext *ctx) {
377  // TODO handle multi-level names
378  auto elements = std::make_unique<ast::model::ElementDict>();
379  auto type = ctx->type_specifier()->getText();
380  auto prefix_str = ctx->type_prefix()->getText();
381  ast::element::Prefix prefix;
382  if (prefix_str == "parameter") {
384  } else if (prefix_str == "constant") {
386  } else if (prefix_str == "discrete") {
388  } else if (prefix_str == "") {
390  } else {
391  throw compiler_exception("unhandled type prefix " + type);
392  }
393  for (auto d : ctx->component_declaration()) {
394  std::string name = d->IDENT()->getText();
395  elements->set(
396  name, std::make_unique<ast::element::Component>(name, type, prefix));
397  }
398  setAst(ctx, std::move(elements));
399 }
400 void Compiler::exitType_prefix(ModelicaParser::Type_prefixContext *ctx) {
401  // pass, just text, let level above handle this
402 }
404  ModelicaParser::Component_declarationContext *ctx) {
405  // pass, handle in component_clause
406 }
408  ModelicaParser::Class_modificationContext *ctx) {
409  throw compiler_exception("not implemented");
410 }
411 void Compiler::exitStmt_block(ModelicaParser::Stmt_blockContext *ctx) {
412  throw compiler_exception("not implemented");
413 }
415  ModelicaParser::Equation_sectionContext *ctx) {
416  auto eqs = std::make_unique<ast::equation::List>();
417  for (auto eq : ctx->equation()) {
418  eqs->append(cloneAst<ast::equation::Base>(eq));
419  }
420  setAst(ctx, std::move(eqs));
421 }
423  ModelicaParser::Algorithm_sectionContext *ctx) {
424  throw compiler_exception("not implemented");
425 }
426 void Compiler::exitType_specifier(ModelicaParser::Type_specifierContext *ctx) {
427  // pass, just strings, let level above handle this
428 }
429 void Compiler::exitName(ModelicaParser::NameContext *ctx) {
430  throw compiler_exception("not implemented");
431 }
433  ModelicaParser::Component_referenceContext *ctx) {
434  // TODO, split names
435  setAst(ctx, std::make_unique<ast::expression::Reference>(ctx->getText()));
436 }
437 void Compiler::exitArray_arg_expr(ModelicaParser::Array_arg_exprContext *ctx) {
438  throw compiler_exception("not implemented");
439 }
440 void Compiler::exitArray_arg_for(ModelicaParser::Array_arg_forContext *ctx) {
441  throw compiler_exception("not implemented");
442 }
444  ModelicaParser::Array_argumentsContext *ctx) {
445  throw compiler_exception("not implemented");
446 }
448  ModelicaParser::Named_argumentsContext *ctx) {
449  throw compiler_exception("not implemented");
450 }
451 void Compiler::exitNamed_argument(ModelicaParser::Named_argumentContext *ctx) {
452  throw compiler_exception("not implemented");
453 }
455  ModelicaParser::Output_expression_listContext *ctx) {
456  throw compiler_exception("not implemented");
457 }
459  ModelicaParser::Expression_listContext *ctx) {
460  throw compiler_exception("not implemented");
461 }
463  ModelicaParser::Array_subscriptsContext *ctx) {
464  throw compiler_exception("not implemented");
465 }
466 void Compiler::exitSubscript(ModelicaParser::SubscriptContext *ctx) {
467  throw compiler_exception("not implemented");
468 }
469 void Compiler::exitComment(ModelicaParser::CommentContext *ctx) {
470  throw compiler_exception("not implemented");
471 }
472 void Compiler::exitString_comment(ModelicaParser::String_commentContext *ctx) {
473  throw compiler_exception("not implemented");
474 }
475 void Compiler::exitAnnotation(ModelicaParser::AnnotationContext *ctx) {
476  throw compiler_exception("not implemented");
477 }
478 void Compiler::exitClass_def_long(ModelicaParser::Class_def_longContext *ctx) {
479  // TODO
480  // throw compiler_exception("not implemented");
481 }
482 void Compiler::exitClass_def_der(ModelicaParser::Class_def_derContext *ctx) {
483  throw compiler_exception("not implemented");
484 }
486  ModelicaParser::Class_def_shortContext *ctxt) {
487  throw compiler_exception("not implemented");
488 }
489 void Compiler::exitClass_def_type(ModelicaParser::Class_def_typeContext *ctxt) {
490  throw compiler_exception("not implemented");
491 }
492 void Compiler::exitClass_def_enum(ModelicaParser::Class_def_enumContext *ctxt) {
493  throw compiler_exception("not implemented");
494 }
496  ModelicaParser::Arg_modificationContext *ctxt) {
497  throw compiler_exception("not implemented");
498 }
500  ModelicaParser::Arg_redeclare_classContext *ctxt) {
501  throw compiler_exception("not implemented");
502 }
504  ModelicaParser::Arg_redeclare_elementContext *ctxt) {
505  throw compiler_exception("not implemented");
506 }
508  ModelicaParser::Modification_classContext *ctx) {
509  throw compiler_exception("not implemented");
510 }
512  ModelicaParser::Modification_equationContext *ctx) {
513  auto e = cloneAst<ast::expression::Base>(ctx->expression());
514  // TODO
515 }
517  ModelicaParser::Modification_statementContext *ctx) {
518  auto e = cloneAst<ast::expression::Base>(ctx->expression());
519  // throw compiler_exception("not implemented");
520 }
521 
522 } // namespace cymoca
void exitCond_unary(ModelicaParser::Cond_unaryContext *ctx) override
Definition: compiler.cc:87
void exitExpression_list(ModelicaParser::Expression_listContext *ctx) override
Definition: compiler.cc:458
void exitCond_binary(ModelicaParser::Cond_binaryContext *ctx) override
Definition: compiler.cc:72
void exitName(ModelicaParser::NameContext *ctx) override
Definition: compiler.cc:429
void exitElem_comp(ModelicaParser::Elem_compContext *ctx) override
Definition: compiler.cc:308
void exitStmt_if(ModelicaParser::Stmt_ifContext *ctx) override
Definition: compiler.cc:182
void exitComposition(ModelicaParser::CompositionContext *ctx) override
Definition: compiler.cc:329
void exitFor_indices(ModelicaParser::For_indicesContext *ctx) override
Definition: compiler.cc:194
void exitClass_modification(ModelicaParser::Class_modificationContext *ctx) override
Definition: compiler.cc:407
void exitClass_def_short(ModelicaParser::Class_def_shortContext *ctxt) override
Definition: compiler.cc:485
void exitSubscript(ModelicaParser::SubscriptContext *ctx) override
Definition: compiler.cc:466
void exitCond_ref(ModelicaParser::Cond_refContext *ctx) override
Definition: compiler.cc:122
void exitExpr_string(ModelicaParser::Expr_stringContext *ctx) override
Definition: compiler.cc:244
void visitErrorNode(antlr4::tree::ErrorNode *node) override
Definition: compiler.cc:36
void exitComponent_reference(ModelicaParser::Component_referenceContext *ctx) override
Definition: compiler.cc:432
void exitModification_equation(ModelicaParser::Modification_equationContext *ctx) override
Definition: compiler.cc:511
void exitStored_definition(ModelicaParser::Stored_definitionContext *ctx) override
Definition: compiler.cc:320
void exitEq_if(ModelicaParser::Eq_ifContext *ctx) override
Definition: compiler.cc:145
void exitComponent_declaration(ModelicaParser::Component_declarationContext *ctx) override
Definition: compiler.cc:403
void exitModification_class(ModelicaParser::Modification_classContext *ctx) override
Definition: compiler.cc:507
void exitStmt_for(ModelicaParser::Stmt_forContext *ctx) override
Definition: compiler.cc:185
void exitExternal_function_call(ModelicaParser::External_function_callContext *ctx) override
Definition: compiler.cc:367
void exitElem_import(ModelicaParser::Elem_importContext *ctx) override
Definition: compiler.cc:299
void exitExpr_output(ModelicaParser::Expr_outputContext *ctx) override
Definition: compiler.cc:257
void exitEnumeration_literal(ModelicaParser::Enumeration_literalContext *ctx) override
Definition: compiler.cc:325
void exitCond_func(ModelicaParser::Cond_funcContext *ctx) override
Definition: compiler.cc:119
void exitClass_prefixes(ModelicaParser::Class_prefixesContext *ctx) override
Definition: compiler.cc:316
void exitType_prefix(ModelicaParser::Type_prefixContext *ctx) override
Definition: compiler.cc:400
void exitStmt_func(ModelicaParser::Stmt_funcContext *ctx) override
Definition: compiler.cc:176
void exitExpr_number(ModelicaParser::Expr_numberContext *ctx) override
Definition: compiler.cc:205
void exitType_specifier(ModelicaParser::Type_specifierContext *ctx) override
Definition: compiler.cc:426
void exitFunc_arg_named(ModelicaParser::Func_arg_namedContext *ctx) override
Definition: compiler.cc:291
void exitEveryRule(antlr4::ParserRuleContext *ctx) override
Definition: compiler.cc:45
void exitExpr_simple(ModelicaParser::Expr_simpleContext *ctx) override
Definition: compiler.cc:222
void exitExpr_if(ModelicaParser::Expr_ifContext *ctx) override
Definition: compiler.cc:225
void exitEq_for(ModelicaParser::Eq_forContext *ctx) override
Definition: compiler.cc:148
void exitAnnotation(ModelicaParser::AnnotationContext *ctx) override
Definition: compiler.cc:475
void exitEq_simple(ModelicaParser::Eq_simpleContext *ctx) override
Definition: compiler.cc:130
void exitExpr_list(ModelicaParser::Expr_listContext *ctx) override
Definition: compiler.cc:260
std::unique_ptr< ModelicaParser > m_parser
Definition: compiler.h:47
void exitEq_connect(ModelicaParser::Eq_connectContext *ctx) override
Definition: compiler.cc:151
void exitConstraining_clause(ModelicaParser::Constraining_clauseContext *ctx) override
Definition: compiler.cc:371
void exitComment(ModelicaParser::CommentContext *ctx) override
Definition: compiler.cc:469
void linkAst(antlr4::ParserRuleContext *to, antlr4::ParserRuleContext *from)
Definition: compiler.h:102
void exitNamed_argument(ModelicaParser::Named_argumentContext *ctx) override
Definition: compiler.cc:451
void exitArray_arg_for(ModelicaParser::Array_arg_forContext *ctx) override
Definition: compiler.cc:440
void exitClass_def_der(ModelicaParser::Class_def_derContext *ctxt) override
Definition: compiler.cc:482
void exitAlgorithm_section(ModelicaParser::Algorithm_sectionContext *ctx) override
Definition: compiler.cc:422
void exitEq_func(ModelicaParser::Eq_funcContext *ctx) override
Definition: compiler.cc:165
void enterEveryRule(antlr4::ParserRuleContext *ctx) override
Definition: compiler.cc:38
void exitClass_def_long(ModelicaParser::Class_def_longContext *ctxt) override
Definition: compiler.cc:478
void exitArg_modification(ModelicaParser::Arg_modificationContext *ctxt) override
Definition: compiler.cc:495
void exitExpr_func(ModelicaParser::Expr_funcContext *ctx) override
Definition: compiler.cc:228
void exitOutput_expression_list(ModelicaParser::Output_expression_listContext *ctx) override
Definition: compiler.cc:454
void exitStmt_key(ModelicaParser::Stmt_keyContext *ctx) override
Definition: compiler.cc:179
void exitModification_statement(ModelicaParser::Modification_statementContext *ctx) override
Definition: compiler.cc:516
void exitClass_def_enum(ModelicaParser::Class_def_enumContext *ctxt) override
Definition: compiler.cc:492
void exitFor_index(ModelicaParser::For_indexContext *ctx) override
Definition: compiler.cc:197
void exitFunc_arg_for(ModelicaParser::Func_arg_forContext *ctx) override
Definition: compiler.cc:285
void exitArray_arguments(ModelicaParser::Array_argumentsContext *ctx) override
Definition: compiler.cc:443
void exitArg_redeclare_class(ModelicaParser::Arg_redeclare_classContext *ctxt) override
Definition: compiler.cc:499
void exitFunction_call_args(ModelicaParser::Function_call_argsContext *ctx) override
Definition: compiler.cc:274
void exitStmt_ref(ModelicaParser::Stmt_refContext *ctx) override
Definition: compiler.cc:173
void exitElem_extends(ModelicaParser::Elem_extendsContext *ctx) override
Definition: compiler.cc:302
void exitStmt_when(ModelicaParser::Stmt_whenContext *ctx) override
Definition: compiler.cc:191
void setAst(antlr4::ParserRuleContext *ctx, std::unique_ptr< ast::INode > node)
Definition: compiler.h:93
void exitClass_def_type(ModelicaParser::Class_def_typeContext *ctxt) override
Definition: compiler.cc:489
void exitExpr_unary(ModelicaParser::Expr_unaryContext *ctx) override
Definition: compiler.cc:250
void exitArg_redeclare_element(ModelicaParser::Arg_redeclare_elementContext *ctxt) override
Definition: compiler.cc:503
void exitFunc_arg_func(ModelicaParser::Func_arg_funcContext *ctx) override
Definition: compiler.cc:288
ast::model::Class * m_root
Definition: compiler.h:51
void exitExpr_ref(ModelicaParser::Expr_refContext *ctx) override
Definition: compiler.cc:213
void exitArray_arg_expr(ModelicaParser::Array_arg_exprContext *ctx) override
Definition: compiler.cc:437
void exitEq_when(ModelicaParser::Eq_whenContext *ctx) override
Definition: compiler.cc:154
void exitExpr_binary(ModelicaParser::Expr_binaryContext *ctx) override
Definition: compiler.cc:254
void exitStmt_block(ModelicaParser::Stmt_blockContext *ctx) override
Definition: compiler.cc:411
void exitString_comment(ModelicaParser::String_commentContext *ctx) override
Definition: compiler.cc:472
void exitCond_bool(ModelicaParser::Cond_boolContext *ctx) override
Definition: compiler.cc:60
void exitElem_class(ModelicaParser::Elem_classContext *ctx) override
Definition: compiler.cc:305
void exitFunc_arg_expr(ModelicaParser::Func_arg_exprContext *ctx) override
Definition: compiler.cc:282
void exitComponent_clause(ModelicaParser::Component_clauseContext *ctx) override
Definition: compiler.cc:375
void exitEq_block(ModelicaParser::Eq_blockContext *ctx) override
Definition: compiler.cc:137
Compiler(std::ifstream &text)
Definition: compiler.cc:5
void exitExpr_array(ModelicaParser::Expr_arrayContext *ctx) override
Definition: compiler.cc:266
#define compiler_exception(arg)
Definition: compiler.h:30
void exitNamed_arguments(ModelicaParser::Named_argumentsContext *ctx) override
Definition: compiler.cc:447
void exitExpr_range(ModelicaParser::Expr_rangeContext *ctx) override
Definition: compiler.cc:247
void visitTerminal(antlr4::tree::TerminalNode *node) override
Definition: compiler.cc:30
void exitEquation_section(ModelicaParser::Equation_sectionContext *ctx) override
Definition: compiler.cc:414
std::string indent(int n)
Definition: compiler.cc:20
void exitStmt_while(ModelicaParser::Stmt_whileContext *ctx) override
Definition: compiler.cc:188
void exitCond_compare(ModelicaParser::Cond_compareContext *ctx) override
Definition: compiler.cc:93
void exitExpr_end(ModelicaParser::Expr_endContext *ctx) override
Definition: compiler.cc:263
antlr4::CommonTokenStream m_token_stream
Definition: compiler.h:50
void exitArray_subscripts(ModelicaParser::Array_subscriptsContext *ctx) override
Definition: compiler.cc:462