expr_rec gen_infix(expr_rec e1, op_rec op, expr_rec e2)
{
	expr_rec e_rec;
	/*An expr_rec with temp variant set.*/
	e_rec.kind = TEMPEXPR;
	/*Generate code for infix operation.
		Get result temp and set up semantic record for result*/
	strcpy(e_rec.name,get_temp());
	char uno[33];
	strcpy(uno,extract2(e2));

    generate(extract(op), extract2(e1),uno, e_rec.name);
	return e_rec;
}
Exemplo n.º 2
0
std::wstring::size_type OMLItem::extract(const std::wstring& text, const std::wstring& textLower, std::wstring::size_type posStart, std::wstring::size_type posEnd)
{
	std::wstring::size_type pos = extract2(text, textLower, posStart, posEnd);

	// Gestione del 'noparse'.
	// Gestione dei tag ad hoc 'code', 'parse', '?', e 'url'.
	// da sistemare...
	if(!m_directClose)
	{
		bool noparse = false;

		if(m_tagName == _S("noparse")) noparse = true;
		if(m_tagName == _S("code")) noparse = true;
		if(m_tagName == _S("codebox")) noparse = true;
		if(m_tagName == _S("?")) noparse = true;
		if( (m_tagName == _S("url")) && (!hasParam(OMLItem::ITEM_PARAM_DEFAULT)) && (!hasParam(_S("href")))) noparse = true;
		if( (m_tagName == _S("iurl")) && (!hasParam(OMLItem::ITEM_PARAM_DEFAULT)) && (!hasParam(_S("href")))) noparse = true;

		if(noparse)
		{
			// Cerco direttamente la chiusura, e considero come testo tutto quello tra l'apertura e la chiusura del tag.
			std::wstring::size_type posEnd = textLower.find(_W("[/") + getTagName().to_wide() + _W("]"), pos);
			if(posEnd == std::wstring::npos)
				return posEnd;

			//String insideText = text.substr(pos,posEnd-pos);
			shared_ptr<OMLItem> t = shared_ptr<OMLItem>(OS_NEW OMLItem());
			t->extract(text, textLower, pos, posEnd);
			add(t);
			pos = posEnd;
		}
	}

	return pos;
}
void assign(expr_rec target, expr_rec source)
{
	/*Generate code for assigment. */
	if (source.kind==LITERALEXPR){
		generate("Store",extract2(source), target.name,"");
	}
	else{
		generate("Store",source.name, target.name,"");
	}
}
Exemplo n.º 4
0
int main(int argc, char *argv[])
{
	if( argc == 2 )
	{
		if(strcmp(argv[1],"-h") == 0 || strcmp(argv[1],"--output") == 0)
			helpScreen();
		else
			extract(argv[1]);	
  	}
  	else if(argc == 4)
  	{
  		if(strcmp(argv[1],"-o") == 0 || strcmp(argv[1],"--output") == 0)
  			extract2(argv[3],argv[2]);
  		else if(strcmp(argv[2],"-o") == 0 || strcmp(argv[2],"--output") == 0)
  			extract2(argv[1],argv[3]);  			
  		else helpScreen();
  	}
  	else
  	{
  		helpScreen();
  	}
}
void write_expr(expr_rec out_expr)
{
	generate("Write", extract2(out_expr),"Integer","");
}