use of org.apache.sysml.parser.ParameterExpression in project incubator-systemml by apache.
the class PydmlSyntacticValidator method handleLanguageSpecificFunction.
/**
* For Pydml, matrix multiply is invoked using dot (A, B). This is taken from numpy.dot
* For Dml, it is invoked using "%*%". The dot function call in pydml is converted to a
* {@link BinaryExpression} equivalent to what is done in
* DmlSyntacticValidator's exitMatrixMulExpression(MatrixMulExpressionContext).
*/
@Override
protected Expression handleLanguageSpecificFunction(ParserRuleContext ctx, String functionName, ArrayList<ParameterExpression> paramExpression) {
if (functionName.equals("dot") && paramExpression.size() == 2) {
Expression.BinaryOp bop = Expression.getBinaryOp("%*%");
Expression expr = new BinaryExpression(bop);
((BinaryExpression) expr).setLeft(paramExpression.get(0).getExpr());
((BinaryExpression) expr).setRight(paramExpression.get(1).getExpr());
return expr;
}
return null;
}
use of org.apache.sysml.parser.ParameterExpression 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;
}
use of org.apache.sysml.parser.ParameterExpression in project incubator-systemml by apache.
the class DmlSyntacticValidator method exitBuiltinFunctionExpression.
@Override
public void exitBuiltinFunctionExpression(BuiltinFunctionExpressionContext ctx) {
// Double verification: verify passed function name is a (non-parameterized) built-in function.
String[] names = getQualifiedNames(ctx.name.getText());
if (names == null) {
notifyErrorListeners("incorrect function name (only namespace " + namespaceResolutionOp() + " functionName allowed. Hint: If you are trying to use builtin functions, you can skip the namespace)", ctx.name);
return;
}
String namespace = names[0];
String functionName = names[1];
ArrayList<ParameterExpression> paramExpression = getParameterExpressionList(ctx.paramExprs);
castAsScalarDeprecationCheck(functionName, ctx);
ConvertedDMLSyntax convertedSyntax = convertToDMLSyntax(ctx, namespace, functionName, paramExpression, ctx.name);
if (convertedSyntax == null) {
return;
} else {
functionName = convertedSyntax.functionName;
paramExpression = convertedSyntax.paramExpression;
}
final ExpressionInfo info = ctx.info;
Action f = new Action() {
@Override
public void execute(Expression e) {
info.expr = e;
}
};
boolean validBIF = buildForBuiltInFunction(ctx, functionName, paramExpression, f);
if (validBIF)
return;
notifyErrorListeners("only builtin functions allowed as part of expression", ctx.start);
}
Aggregations