use of org.apache.sysml.parser.Expression in project systemml by apache.
the class CommonSyntacticValidator method setOutputStatement.
protected void setOutputStatement(ParserRuleContext ctx, ArrayList<ParameterExpression> paramExpression, StatementInfo info) {
if (paramExpression.size() < 2) {
notifyErrorListeners("incorrect usage of write function (at least 2 arguments required)", ctx.start);
return;
}
if (paramExpression.get(0).getExpr() instanceof DataIdentifier) {
HashMap<String, Expression> varParams = new HashMap<>();
varParams.put(DataExpression.IO_FILENAME, paramExpression.get(1).getExpr());
for (int i = 2; i < paramExpression.size(); i++) {
// DataExpression.FORMAT_TYPE, DataExpression.DELIM_DELIMITER, DataExpression.DELIM_HAS_HEADER_ROW, DataExpression.DELIM_SPARSE
varParams.put(paramExpression.get(i).getName(), paramExpression.get(i).getExpr());
}
DataExpression dataExpression = new DataExpression(ctx, DataOp.WRITE, varParams, currentFile);
info.stmt = new OutputStatement(ctx, (DataIdentifier) paramExpression.get(0).getExpr(), DataOp.WRITE, currentFile);
((OutputStatement) info.stmt).setExprParams(dataExpression);
} else {
notifyErrorListeners("incorrect usage of write function", ctx.start);
}
}
use of org.apache.sysml.parser.Expression in project systemml by apache.
the class DmlSyntacticValidator method exitForStatement.
@Override
public void exitForStatement(ForStatementContext ctx) {
ForStatement forStmt = new ForStatement();
DataIdentifier iterVar = new DataIdentifier(ctx.iterVar.getText());
HashMap<String, String> parForParamValues = null;
// 1/-1
Expression incrementExpr = null;
if (ctx.iterPred.info.increment != null) {
incrementExpr = ctx.iterPred.info.increment;
}
IterablePredicate predicate = new IterablePredicate(ctx, iterVar, ctx.iterPred.info.from, ctx.iterPred.info.to, incrementExpr, parForParamValues, currentFile);
forStmt.setPredicate(predicate);
if (ctx.body.size() > 0) {
for (StatementContext stmtCtx : ctx.body) {
forStmt.addStatementBlock(getStatementBlock(stmtCtx.info.stmt));
}
forStmt.mergeStatementBlocks();
}
ctx.info.stmt = forStmt;
}
use of org.apache.sysml.parser.Expression in project systemml by apache.
the class DmlSyntacticValidator method exitIndexedExpression.
/**
* DML uses 1-based indexing.;
*
* @param ctx the parse tree
*/
@Override
public void exitIndexedExpression(IndexedExpressionContext ctx) {
boolean isRowLower = (ctx.rowLower != null && !ctx.rowLower.isEmpty() && (ctx.rowLower.info.expr != null));
boolean isRowUpper = (ctx.rowUpper != null && !ctx.rowUpper.isEmpty() && (ctx.rowUpper.info.expr != null));
boolean isColLower = (ctx.colLower != null && !ctx.colLower.isEmpty() && (ctx.colLower.info.expr != null));
boolean isColUpper = (ctx.colUpper != null && !ctx.colUpper.isEmpty() && (ctx.colUpper.info.expr != null));
ExpressionInfo rowLower = isRowLower ? ctx.rowLower.info : null;
ExpressionInfo rowUpper = isRowUpper ? ctx.rowUpper.info : null;
ExpressionInfo colLower = isColLower ? ctx.colLower.info : null;
ExpressionInfo colUpper = isColUpper ? ctx.colUpper.info : null;
ctx.dataInfo.expr = new IndexedIdentifier(ctx.name.getText(), false, false);
setFileLineColumn(ctx.dataInfo.expr, ctx);
try {
ArrayList<ArrayList<Expression>> exprList = new ArrayList<>();
ArrayList<Expression> rowIndices = new ArrayList<>();
ArrayList<Expression> colIndices = new ArrayList<>();
if (!isRowLower && !isRowUpper) {
// both not set
rowIndices.add(null);
rowIndices.add(null);
} else if (isRowLower && isRowUpper) {
// both set
rowIndices.add(rowLower.expr);
rowIndices.add(rowUpper.expr);
} else if (isRowLower && !isRowUpper) {
// only row set
rowIndices.add(rowLower.expr);
} else {
notifyErrorListeners("incorrect index expression for row", ctx.start);
return;
}
if (!isColLower && !isColUpper) {
// both not set
colIndices.add(null);
colIndices.add(null);
} else if (isColLower && isColUpper) {
colIndices.add(colLower.expr);
colIndices.add(colUpper.expr);
} else if (isColLower && !isColUpper) {
colIndices.add(colLower.expr);
} else {
notifyErrorListeners("incorrect index expression for column", ctx.start);
return;
}
exprList.add(rowIndices);
exprList.add(colIndices);
((IndexedIdentifier) ctx.dataInfo.expr).setIndices(exprList);
} catch (Exception e) {
notifyErrorListeners("cannot set the indices", ctx.start);
return;
}
}
use of org.apache.sysml.parser.Expression in project systemml by apache.
the class DmlSyntacticValidator method exitMultiIdExpression.
@Override
public void exitMultiIdExpression(MultiIdExpressionContext ctx) {
ArrayList<Expression> values = new ArrayList<>();
for (ExpressionContext elem : ctx.targetList) {
values.add(elem.info.expr);
}
ctx.info.expr = new ExpressionList(values);
}
use of org.apache.sysml.parser.Expression in project 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;
}
Aggregations