Exemple #1
0
//////////////////////////////////
// Cast an expression to a type //
//////////////////////////////////
TNode *CastNode::translate( Codegen *g ){
	TNode *t=expr->translate( g );
	if( expr->sem_type==Type::float_type && sem_type==Type::int_type ){
		//float->int
		return d_new TNode( IR_CAST,t,0 );
	}
	if( expr->sem_type==Type::int_type && sem_type==Type::float_type ){
		//int->float
		return d_new TNode( IR_FCAST,t,0 );
	}
	if( expr->sem_type==Type::string_type && sem_type==Type::int_type ){
		//str->int
		return call( "__bbStrToInt",t );
	}
	if( expr->sem_type==Type::int_type && sem_type==Type::string_type ){
		//int->str
		return strcall( "__bbStrFromInt",t );
	}
	if( expr->sem_type==Type::string_type && sem_type==Type::float_type ){
		//str->float
		return fcall( "__bbStrToFloat",t );
	}
	if( expr->sem_type==Type::float_type && sem_type==Type::string_type ){
		//float->str
		return strcall( "__bbStrFromFloat",t );
	}
	if( expr->sem_type->structType() && sem_type==Type::string_type ){
		//obj->str
		return strcall( "__bbObjToStr",t );
	}
	return t;
}
Exemple #2
0
TNode *CallNode::translate( Codegen *g ){

	FuncType *f=sem_decl->type->funcType();

	TNode *t;
	TNode *l=global( "_f"+ident );
	TNode *r=exprs->translate( g,f->userlib );

	if( f->userlib ){
		l=d_new TNode( IR_MEM,l );
		usedfuncs.insert( ident );
	}

	if( sem_type==Type::float_type ){
		t=d_new TNode( IR_FCALL,l,r,exprs->size()*4 );
	}else{
		t=d_new TNode( IR_CALL,l,r,exprs->size()*4 );
	}

	if( f->returnType->stringType() ){
		if( f->userlib ){
			t=strcall( "__bbStrFromCStr",t );
		}else{
			t=strcall( "__bbStrTmp",t );
		}
	}
	return t;
}
Exemple #3
0
/////////////////////////////////////////////////
// Bipartite graph
int TBPGraph::AddNode(int NId, const bool& LeftNode) {
  if (NId == -1) { NId = MxNId;  MxNId++; }
  else if (IsLNode(NId)) { IAssertR(LeftNode, TStr::Fmt("Node with id %s already exists on the 'left'.", NId));  return NId; }
  else if (IsRNode(NId)) { IAssertR(! LeftNode, TStr::Fmt("Node with id %s already exists on the 'right'.", NId));  return NId; }
  else { MxNId = TMath::Mx(NId+1, MxNId()); }
  if (LeftNode) { LeftH.AddDat(NId, TNode(NId)); }
  else { RightH.AddDat(NId, TNode(NId)); }
  return NId;
}
Exemple #4
0
// add a node with a list of neighbors
// (use TNGraphMP::IsOk to check whether the graph is consistent)
void TNEANetMP::AddNodeWithEdges(const TInt& NId, TIntV& InEIdV, TIntV& OutEIdV) {
    int NodeIdx = abs((NId.GetPrimHashCd()) % Reserved());
    int NodeKeyId = NodeH.AddKey13(NodeIdx, NId);
    NodeH[NodeKeyId] = TNode(NId);
    NodeH[NodeKeyId].InEIdV.MoveFrom(InEIdV);
    NodeH[NodeKeyId].OutEIdV.MoveFrom(OutEIdV);
}
Exemple #5
0
int TUNGraph::AddNode(int NId) {
  if (NId == -1) { NId = MxNId;  MxNId++; }
  else if (IsNode(NId)) { return NId; } // already a node
  else { MxNId = TMath::Mx(NId+1, MxNId()); }
  NodeH.AddDat(NId, TNode(NId));
  return NId;
}
Exemple #6
0
const TNode ArrayInfo::getModelRep(const TNode a) const
{
  CNodeInfoMap::const_iterator it = info_map.find(a);

  if(it!= info_map.end()) {
    return (*it).second->modelRep;
  }
  return TNode();
}
Exemple #7
0
void NodeValue::toStream(std::ostream& out, int toDepth, bool types, size_t dag,
                         OutputLanguage language) const {
  // Ensure that this node value is live for the length of this call.
  // It really breaks things badly if we don't have a nonzero ref
  // count, even just for printing.
  RefCountGuard guard(this);

  Printer::getPrinter(language)->toStream(out, TNode(this), toDepth, types, dag);
}
Exemple #8
0
// Add a node of ID NId to the graph.
int TUNGraph::AddNode(int NId) {
  if (NId == -1) {
    NId = MxNId;  MxNId++;
  } else {
    IAssertR(!IsNode(NId), TStr::Fmt("NodeId %d already exists", NId));
    MxNId = TMath::Mx(NId+1, MxNId());
  }
  NodeH.AddDat(NId, TNode(NId));
  return NId;
}
void
CSlmBuilder::AddNGram(TSIMWordId* ngram, FREQ_TYPE fr)
{
    int ch;
    bool brk = isExcludeId(*ngram);

    for (int i = 1; i < nlevel; ++i) {
        TNodeLevel* pnl = (TNodeLevel*)(level[i]);
        if (pnl->capacity() == pnl->size()) {
            size_t newsz = 2 * pnl->capacity();
            if (pnl->capacity() > 1024 * 1024)
                newsz = pnl->capacity() + 1024 * 1024;
            pnl->reserve(newsz);
        }
    }
    TLeafLevel* pll = (TLeafLevel*)(level[nlevel]);
    if (pll->capacity() == pll->size()) {
        size_t newsz = 2 * pll->capacity();
        if (pll->capacity() > 1024 * 1024)
            newsz = pll->capacity() + 1024 * 1024;
        pll->reserve(newsz);
    }

    if (!brk)
        (*(TNodeLevel*)(level[0]))[0].freq += fr;

    bool branch = false;
    for (int i = 1; (!brk && i < nlevel); ++i) {
        std::vector<TNode> & pv = *(TNodeLevel*)(level[i - 1]);
        std::vector<TNode> & v = *(TNodeLevel*)(level[i]);
        branch = branch || (pv.back().child >= (int) v.size()) ||
                 (v.back().id != ngram[i - 1]);
        if (branch) {
            if (i == nlevel - 1)
                ch = ((TLeafLevel*)(level[i + 1]))->size();
            else
                ch = ((TNodeLevel*)(level[i + 1]))->size();
            v.push_back(TNode(ngram[i - 1], ch, fr));
        } else {
            v.back().freq += fr;
        }
        brk = (i > 1 && isBreakId(ngram[i - 1])) || isExcludeId(ngram[i]);
    }

    // Insert to the leaf level
    if (!brk) {
        if (fr > cut[nlevel]) {
            TLeafLevel& v = *(TLeafLevel*)(level[nlevel]);
            v.push_back(TLeaf(ngram[nlevel - 1], fr));
        } else {
            nr[nlevel][0] += fr;
            nr[nlevel][fr] += fr;
        }
    }
}
void*
CSlmBuilder::FindChild(int lvl, TNode* root, TSIMWordId id)
{
    int chh = root->child, cht = (root + 1)->child;
    if (lvl == nlevel - 1) {
        TLeaf* pleaf = &((*(TLeafLevel*)level[lvl + 1])[0]);
        return (void*)binary_find(pleaf, chh, cht, TLeaf(id));
    } else {
        TNode* pnode = &((*(TNodeLevel*)level[lvl + 1])[0]);
        return (void*)binary_find(pnode, chh, cht, TNode(id));
    }
}
Exemple #11
0
TNode *ExprSeqNode::translate( Codegen *g,bool userlib ){
	TNode *t=0,*l=0;
	for( int k=0;k<exprs.size();++k ){

		TNode *q=exprs[k]->translate(g);

		//USERLIB!
		if( userlib ){
			Type *ty=exprs[k]->sem_type;
			if( ty->stringType() ){
				q=call( "__bbStrToCStr",q );
			}else if( ty->structType() ){
				q=d_new TNode( IR_MEM,q );
			}else if( ty==Type::void_type ){
				q=d_new TNode( IR_MEM,add(q,iconst(28)) );
			}
		}

		TNode *p;
		p=d_new TNode( IR_ARG,0,0,k*4 );
		p=d_new TNode( IR_MEM,p,0 );
		p=d_new TNode( IR_MOVE,q,p );
		p=d_new TNode( IR_SEQ,p,0 );
		if( l ) l->r=p;
		else t=p;
		l=p;
	}
	return t;
}
Exemple #12
0
int TNEANetMP::AddNode(int NId) {
    int i;
    if (NId == -1) {
        NId = MxNId;
        MxNId++;
    } else {
        IAssertR(!IsNode(NId), TStr::Fmt("NodeId %d already exists", NId));
        MxNId = TMath::Mx(NId+1, MxNId());
    }
    // update attribute columns
    NodeH.AddDat(NId, TNode(NId));
    for (i = 0; i < VecOfIntVecsN.Len(); i++) {
        TVec<TInt>& IntVec = VecOfIntVecsN[i];
        IntVec.Ins(NodeH.GetKeyId(NId), TInt::Mn);
    }
    TVec<TStr> DefIntVec = TVec<TStr>();
    IntDefaultsN.GetKeyV(DefIntVec);
    for (i = 0; i < DefIntVec.Len(); i++) {
        TStr attr = DefIntVec[i];
        TVec<TInt>& IntVec = VecOfIntVecsN[KeyToIndexTypeN.GetDat(DefIntVec[i]).Val2];
        IntVec[NodeH.GetKeyId(NId)] = GetIntAttrDefaultN(attr);
    }
    for (i = 0; i < VecOfStrVecsN.Len(); i++) {
        TVec<TStr>& StrVec = VecOfStrVecsN[i];
        StrVec.Ins(NodeH.GetKeyId(NId), TStr::GetNullStr());
    }
    TVec<TStr> DefStrVec = TVec<TStr>();
    IntDefaultsN.GetKeyV(DefStrVec);
    for (i = 0; i < DefStrVec.Len(); i++) {
        TStr attr = DefStrVec[i];
        TVec<TStr>& StrVec = VecOfStrVecsN[KeyToIndexTypeN.GetDat(DefStrVec[i]).Val2];
        StrVec[NodeH.GetKeyId(NId)] = GetStrAttrDefaultN(attr);
    }
    for (i = 0; i < VecOfFltVecsN.Len(); i++) {
        TVec<TFlt>& FltVec = VecOfFltVecsN[i];
        FltVec.Ins(NodeH.GetKeyId(NId), TFlt::Mn);
    }
    TVec<TStr> DefFltVec = TVec<TStr>();
    FltDefaultsN.GetKeyV(DefFltVec);
    for (i = 0; i < DefFltVec.Len(); i++) {
        TStr attr = DefFltVec[i];
        TVec<TFlt>& FltVec = VecOfFltVecsN[KeyToIndexTypeN.GetDat(DefFltVec[i]).Val2];
        FltVec[NodeH.GetKeyId(NId)] = GetFltAttrDefaultN(attr);
    }
    return NId;
}
void
CSlmBuilder::AppendTails()
{
    printf("\nAppending psuedo tail node for each level..."); fflush(stdout);
    for (int lvl = 0; lvl < nlevel; ++lvl) {
        int child_size = 0;
        if (lvl == nlevel - 1) {
            child_size = ((TLeafLevel*)(level[lvl + 1]))->size();
        } else {
            child_size = ((TNodeLevel*)(level[lvl + 1]))->size();
        }
        TNodeLevel& v = *(TNodeLevel*)(level[lvl]);
        v.push_back(TNode(0x00FFFFFF, child_size, 1));
    }
    //also make a psuedo tail node for the leaf level
    ((TLeafLevel*)(level[nlevel]))->push_back(TLeaf(0, 1));
    printf("\n"); fflush(stdout);
}
Exemple #14
0
TNode *UniExprNode::translate( Codegen *g ){
	int n=0;
	TNode *l=expr->translate( g );
	if( sem_type==Type::int_type ){
		switch( op ){
		case '+':return l;
		case '-':n=IR_NEG;break;
		case ABS:return call( "__bbAbs",l );
		case SGN:return call( "__bbSgn",l );
		}
	}else{
		switch( op ){
		case '+':return l;
		case '-':n=IR_FNEG;break;
		case ABS:return fcall( "__bbFAbs",l );
		case SGN:return fcall( "__bbFSgn",l );
		}
	}
	return d_new TNode( n,l,0 );
}
// n=1 for unigram, n=2 for bigram;
// level[0] is for psuedo 0 gram, ...
void
CSlmBuilder::Create(int n)
{
    assert(n != 0);
    nlevel = n;
    level = new void * [n + 1];
    for (int i = 0; i < n; ++i) {
        level[i] = new std::vector<TNode>;
        if (i) ((TNodeLevel*)level[i])->reserve(1024);
    }
    //Add leaf level
    level[n] = new std::vector<TLeaf>;
    ((TLeafLevel*)level[n])->reserve(1024);

    //Add psuedo root node
    ((TNodeLevel*)level[0])->push_back(TNode(0, 0, 0));

    //Initialize the nr[n+1][SLM_MAX_R] 2-D array
    nr = new FREQ_TYPE[n + 1][SLM_MAX_R];
    for (int lvl = 0; lvl < n + 1; ++lvl)
        for (int r = 0; r < SLM_MAX_R; ++r)
            nr[lvl][r] = 0;
}
Exemple #16
0
TNode TNode::ConstructProgramTNode(string name) {
	return TNode(TNode::PROGRAM, ":" + EnumToString(TNode::PROGRAM));
}
Exemple #17
0
TNode TNode::ConstructStmtListTNode(string name) {
	return TNode(TNode::STMT_LIST, name +":" + EnumToString(TNode::STMT_LIST));
}
Exemple #18
0
int TNGraph::AddNodeUnchecked(int NId) {
  if (IsNode(NId)) { return NId;}
  MxNId = TMath::Mx(NId+1, MxNId());
  NodeH.AddDat(NId, TNode(NId));
  return NId;
}
Exemple #19
0
TNode *IntConstNode::translate( Codegen *g ){
	return d_new TNode( IR_CONST,0,0,value );
}
Exemple #20
0
TNode *FloatConstNode::translate( Codegen *g ){
	return d_new TNode( IR_CONST,0,0,*(int*)&value );
}