list<string> MMO_FunctionData_::print (string indent) { list<string> ret; stringstream buffer; if (!_var.empty ()) { buffer << _var << " = "; } buffer << _name << "("; if (_args != NULL) { VarSymbolTable vt = _data->symbols (); vt->setPrintEnvironment (VST_FUNCTION); AST_ExpressionListIterator it; int count = 0; foreach(it,_args) { MMO_Expression e = newMMO_Expression (current_element(it), _data); buffer << e->print (indent); if (++count < _args->size ()) { buffer << ","; } list<string> code = e->getCode (); ret.insert (ret.end (), code.begin (), code.end ()); }
RangeIterator::RangeIterator(AST_Expression_Range range, VarSymbolTable symbolTable) { _rangeElements = range->expressionList(); AST_ExpressionListIterator iter = _rangeElements->begin(); _rangeBegin = eval(current_element(iter), symbolTable); iter++; AST_Real temp = eval(current_element(iter), symbolTable); iter++; if (iter == _rangeElements->end()) { _rangeStep = 1; _rangeEnd = temp; } else { _rangeStep = temp; _rangeEnd = eval(current_element(iter), symbolTable); } _current = _rangeBegin; }
int main(int argc, char** argv){ int opt; int r; AST_Class modelica_class; while((opt = getopt(argc, argv, "d:")) != -1){ switch(opt){ case 'd': if(optarg != NULL && isDebugParam(optarg)){ debugInit(optarg); }else{ ERROR("Command line option d requires an argument\n"); } break; } } if(optind < argc){ modelica_class = parseClass(argv[optind],&r); }else{ /* si no se especifico un archivo leo de stdin*/ modelica_class = parseClass("", &r); } if(r!=0){ return -1; } /* creamos la clase MicroModelica */ TypeSymbolTable ty = newTypeSymbolTable(); MMO_Class mmo_class = newMMO_Class(modelica_class, ty); ReducedGraphBuilder *gb = new ReducedGraphBuilder(mmo_class); CausalizationGraph g = gb->makeGraph(); //para debuggeo: crea archivo grafo.dot if(debugIsEnabled('g')){ GraphPrinter gp(g); gp.printGraph(); } CausalizationStrategy2 *cs = new CausalizationStrategy2(g); if(cs->causalize()){ if(debugIsEnabled('c')){ cout << "Result of causalization (variable, [range,] equationID):" << endl; cs->print(); } }else{ //si no anduvo, probamos con la estrategia clasica DEBUG('c', "Executing the classic strategy\n"); CausalizationStrategy *cs_clasica = new CausalizationStrategy(mmo_class); AST_ClassList cl = newAST_ClassList(); cs_clasica->causalize(mmo_class->name(), cl); DEBUG('c', "Causalized Equations:\n"); MMO_EquationList causalEqs = mmo_class->getEquations(); MMO_EquationListIterator causalEqsIter; foreach(causalEqsIter, causalEqs) { DEBUG('c', "%s", current_element(causalEqsIter)->print().c_str()); } }
void MMO_PrintExp_::_getIndexList (AST_Expression_ComponentReference cr, Index index, list<Index> *idxs) { AST_ExpressionListList ell = cr->indexes (); AST_ExpressionListListIterator ellit; ExpressionIndex_ ei (_vt); foreach(ellit,ell) { AST_ExpressionList el = current_element(ellit); AST_ExpressionListIterator elit; foreach(elit,el) { Index iet = ei.index (current_element(elit)); iet.setOffset (index.offset ()); iet.setArray (); idxs->push_back (iet); }
void AST_Class_::accept (AST_Visitor visitor) { visitor->visit (this); AST_ClassListIterator class_it; foreach(class_it, _sub_classes) { current_element(class_it)->accept (visitor); }
void AST_MicroModelica_::visit (AST_Composition x) { if (_classPrefix == CP_FUNCTION || _classPrefix == CP_PURE || _classPrefix == CP_IMPURE) { if (x->hasCompositionList ()) { AST_CompositionElementListIterator it; AST_CompositionElementList cl = x->compositionList (); foreach(it,cl) { if (current_element(it)->hasEquations ()) { Error::getInstance ()->add ( x->lineNum (), EM_AST | EM_CLASS_DEFINITION, ER_Error, "Equation section inside function definition."); } } } }
foreach(component_it, _components) { current_element(component_it)->accept (visitor); }