use of org.apache.sysml.parser.ParameterizedBuiltinFunctionExpression in project incubator-systemml by apache.
the class CommonSyntacticValidator method buildForBuiltInFunction.
/** Checks for builtin functions and does Action 'f'.
* <p>
* Constructs the
* appropriate {@link AssignmentStatement} from
* {@link CommonSyntacticValidator#functionCallAssignmentStatementHelper(ParserRuleContext, Set, Set, Expression, StatementInfo, Token, Token, String, String, ArrayList, boolean)}
* or Assign to {@link Expression} from
* DmlSyntacticValidator's exitBuiltinFunctionExpression(BuiltinFunctionExpressionContext).
* </p>
*
* @param ctx antlr rule context
* @param functionName Name of the builtin function
* @param paramExpressions Array of parameter names and values
* @param f action to perform
* @return true if a builtin function was found
*/
protected boolean buildForBuiltInFunction(ParserRuleContext ctx, String functionName, ArrayList<ParameterExpression> paramExpressions, Action f) {
// In global namespace, so it can be a builtin function
// Double verification: verify passed function name is a (non-parameterized) built-in function.
String fileName = currentFile;
int line = ctx.start.getLine();
int col = ctx.start.getCharPositionInLine();
try {
if (functions.contains(functionName)) {
// It is a user function definition (which takes precedence if name same as built-in)
return false;
}
Expression lsf = handleLanguageSpecificFunction(ctx, functionName, paramExpressions);
if (lsf != null) {
setFileLineColumn(lsf, ctx);
f.execute(lsf);
return true;
}
BuiltinFunctionExpression bife = BuiltinFunctionExpression.getBuiltinFunctionExpression(functionName, paramExpressions, fileName, line, col, line, col);
if (bife != null) {
// It is a builtin function
f.execute(bife);
return true;
}
ParameterizedBuiltinFunctionExpression pbife = ParameterizedBuiltinFunctionExpression.getParamBuiltinFunctionExpression(functionName, paramExpressions, fileName, line, col, line, col);
if (pbife != null) {
// It is a parameterized builtin function
f.execute(pbife);
return true;
}
// built-in read, rand ...
DataExpression dbife = DataExpression.getDataExpression(functionName, paramExpressions, fileName, line, col, line, col, errorListener);
if (dbife != null) {
f.execute(dbife);
return true;
}
} catch (Exception e) {
notifyErrorListeners("unable to process builtin function expression " + functionName + ":" + e.getMessage(), ctx.start);
return true;
}
return false;
}
Aggregations