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; }
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,""); } }
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",""); }