Example #1
0
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;
}
Example #3
0
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());
  		}
	}
Example #4
0
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);
	}
Example #5
0
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.");
                }
            }
        }
    }
Example #7
0
 foreach(component_it, _components)
   {
     current_element(component_it)->accept (visitor);
   }