本文整理汇总了C++中AST_Expression::getAsCall方法的典型用法代码示例。如果您正苦于以下问题:C++ AST_Expression::getAsCall方法的具体用法?C++ AST_Expression::getAsCall怎么用?C++ AST_Expression::getAsCall使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AST_Expression
的用法示例。
在下文中一共展示了AST_Expression::getAsCall方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: check_expression
Type TypeCheck_::check_expression(AST_Expression e)
{
Type ct,t1,t2,t;
switch (e->expressionType()) {
case EXPBINOP:
{
AST_Expression_BinOp b = e->getAsBinOp();
return check_binop(b->left() , b->right() , b->binopType());
}
case EXPUMINUS:
{
AST_Expression_UMinus b = e->getAsUMinus();
t = check_expression(b->exp());
if ( check_equal(t , T("Integer")) or check_equal(t , T("Real")) ) return t;
throw "Type Error (3)";
}
case EXPOUTPUT :
{
AST_Expression_Output b = e->getAsOutput();
return check_expression(b->expressionList()->front() );
}
case EXPIF:
{
AST_Expression_If b = e->getAsIf();
ct = check_expression(b->condition() );
t1 = check_expression(b->then() );
t2 = check_expression(b->else_exp()); // Falta el elseIF
if ( !check_equal(ct, T("Boolean")) ) throw "Type Error (4)";
if ( !check_equal(t1,t2) ) throw "Type Error (5)";
return t1;
}
case EXPCALL:
{
// Añadir las funciones en la listaaaa de variables
AST_Expression_Call c = e->getAsCall();
if ( toStr(c->name()) == "sample" ) return T("Boolean");
if ( toStr(c->name()) == "pre" )
return check_expression(c->arguments()->front());
return T("Real");
}
case EXPCOMPREF:
{
AST_Expression_ComponentReference b = e->getAsComponentReference();
VarInfo tt = varEnv->lookup( toStr(b->names()->front()) );
if (tt == NULL) {
cerr << "Var:" << b->names()->front() << ":";
throw "Variable no existe (8)";
}
if (b->indexes()->front()->size() == 0)
return tt->type();
else {
Type t = tt->type();
AST_ExpressionListIterator exit;
foreach(exit , b->indexes()->front() )
if (t->getType() == TYARRAY)
t = t->getAsArray()->arrayOf();
else throw "Type Error (7)";
return t;
}
break;
}
case EXPDERIVATIVE:
return T("Real");
case EXPBOOLEAN:
return T("Boolean");
case EXPSTRING:
return T("String");
case EXPREAL:
return T("Real");
case EXPINTEGER:
return T("Integer");
case EXPBOOLEANNOT:
{
AST_Expression_BooleanNot b = e->getAsBooleanNot();
t = check_expression(b->exp());
if ( !check_equal(t, T("Boolean")) ) throw "Type Error (6)";
return t;
}
default:
throw "No implrementado aun! (check_expression)";
}
}