Repository: systemml Updated Branches: refs/heads/master cf556f207 -> 1f63b09cd
[MINOR] Cleanup unnecessary indirections in dml/pydml parsers Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/727e69e2 Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/727e69e2 Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/727e69e2 Branch: refs/heads/master Commit: 727e69e2893fc376d721915dff4831261a6d90f8 Parents: cf556f2 Author: Matthias Boehm <[email protected]> Authored: Mon Mar 5 13:12:59 2018 -0800 Committer: Matthias Boehm <[email protected]> Committed: Mon Mar 5 15:12:45 2018 -0800 ---------------------------------------------------------------------- .../parser/common/CommonSyntacticValidator.java | 56 ++++++-------------- .../sysml/parser/dml/DmlSyntacticValidator.java | 20 +++---- .../parser/pydml/PydmlSyntacticValidator.java | 21 +++----- 3 files changed, 31 insertions(+), 66 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/727e69e2/src/main/java/org/apache/sysml/parser/common/CommonSyntacticValidator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/common/CommonSyntacticValidator.java b/src/main/java/org/apache/sysml/parser/common/CommonSyntacticValidator.java index 67fbaf0..cc67ebe 100644 --- a/src/main/java/org/apache/sysml/parser/common/CommonSyntacticValidator.java +++ b/src/main/java/org/apache/sysml/parser/common/CommonSyntacticValidator.java @@ -573,63 +573,51 @@ public abstract class CommonSyntacticValidator { */ protected abstract Expression handleLanguageSpecificFunction(ParserRuleContext ctx, String functionName, ArrayList<ParameterExpression> paramExpressions); - /** 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> + /** Creates a builtin function expression. * * @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 + * @return expression if found otherwise null */ - protected boolean buildForBuiltInFunction(ParserRuleContext ctx, String functionName, ArrayList<ParameterExpression> paramExpressions, Action f) { + protected Expression buildForBuiltInFunction(ParserRuleContext ctx, String functionName, ArrayList<ParameterExpression> paramExpressions) { // In global namespace, so it can be a builtin function // Double verification: verify passed function name is a (non-parameterized) built-in function. try { if (functions.contains(functionName)) { // It is a user function definition (which takes precedence if name same as built-in) - return false; + return null; } Expression lsf = handleLanguageSpecificFunction(ctx, functionName, paramExpressions); - if (lsf != null){ + if (lsf != null) { setFileLineColumn(lsf, ctx); - f.execute(lsf); - return true; + return lsf; } BuiltinFunctionExpression bife = BuiltinFunctionExpression.getBuiltinFunctionExpression(ctx, functionName, paramExpressions, currentFile); - if (bife != null){ + if (bife != null) { // It is a builtin function - f.execute(bife); - return true; + return bife; } ParameterizedBuiltinFunctionExpression pbife = ParameterizedBuiltinFunctionExpression .getParamBuiltinFunctionExpression(ctx, functionName, paramExpressions, currentFile); if (pbife != null){ // It is a parameterized builtin function - f.execute(pbife); - return true; + return pbife; } // built-in read, rand ... DataExpression dbife = DataExpression.getDataExpression(ctx, functionName, paramExpressions, currentFile, errorListener); if (dbife != null){ - f.execute(dbife); - return true; + return dbife; } - } catch(Exception e) { + } + catch(Exception e) { notifyErrorListeners("unable to process builtin function expression " + functionName + ":" + e.getMessage(), ctx.start); - return true; } - return false; + return null; } @@ -670,13 +658,11 @@ public abstract class CommonSyntacticValidator { // For builtin functions with LHS if(namespace.equals(DMLProgram.DEFAULT_NAMESPACE) && !functions.contains(functionName)){ - final DataIdentifier ftarget = target; - Action f = new Action() { - @Override public void execute(Expression e) { setAssignmentStatement(ctx, info , ftarget, e); } - }; - boolean validBIF = buildForBuiltInFunction(ctx, functionName, paramExpression, f); - if (validBIF) + Expression e = buildForBuiltInFunction(ctx, functionName, paramExpression); + if( e != null ) { + setAssignmentStatement(ctx, info, target, e); return; + } } // handle user-defined functions @@ -695,14 +681,6 @@ public abstract class CommonSyntacticValidator { return functCall; } - /** - * To allow for different actions in - * {@link CommonSyntacticValidator#functionCallAssignmentStatementHelper(ParserRuleContext, Set, Set, Expression, StatementInfo, Token, Token, String, String, ArrayList, boolean)} - */ - public static interface Action { - public void execute(Expression e); - } - protected void setMultiAssignmentStatement(ArrayList<DataIdentifier> target, Expression expression, ParserRuleContext ctx, StatementInfo info) { info.stmt = new MultiAssignmentStatement(target, expression); info.stmt.setCtxValuesAndFilename(ctx, currentFile); http://git-wip-us.apache.org/repos/asf/systemml/blob/727e69e2/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidator.java b/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidator.java index 4a1d6c3..a5169fb 100644 --- a/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidator.java +++ b/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidator.java @@ -530,18 +530,14 @@ public class DmlSyntacticValidator extends CommonSyntacticValidator implements D functionName = convertedSyntax.functionName; paramExpression = convertedSyntax.paramExpression; } - final ExpressionInfo info = ctx.info; - Action f = new Action() { - @Override public void execute(Expression e) { info.expr = e; } - }; // handle built-in functions - boolean validBIF = buildForBuiltInFunction(ctx, functionName, paramExpression, f); - if (validBIF) + ctx.info.expr = buildForBuiltInFunction(ctx, functionName, paramExpression); + if( ctx.info.expr != null ) return; // handle user-defined functions - info.expr = createFunctionCall(ctx, namespace, functionName, paramExpression); + ctx.info.expr = createFunctionCall(ctx, namespace, functionName, paramExpression); } @@ -583,13 +579,11 @@ public class DmlSyntacticValidator extends CommonSyntacticValidator implements D } if(namespace.equals(DMLProgram.DEFAULT_NAMESPACE)) { - final FunctionCallMultiAssignmentStatementContext fctx = ctx; - Action f = new Action() { - @Override public void execute(Expression e) { setMultiAssignmentStatement(targetList, e, fctx, fctx.info); } - }; - boolean validBIF = buildForBuiltInFunction(ctx, functionName, paramExpression, f); - if (validBIF) + Expression e = buildForBuiltInFunction(ctx, functionName, paramExpression); + if( e != null ) { + setMultiAssignmentStatement(targetList, e, ctx, ctx.info); return; + } } // Override default namespace for imported non-built-in function http://git-wip-us.apache.org/repos/asf/systemml/blob/727e69e2/src/main/java/org/apache/sysml/parser/pydml/PydmlSyntacticValidator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/pydml/PydmlSyntacticValidator.java b/src/main/java/org/apache/sysml/parser/pydml/PydmlSyntacticValidator.java index 858eca6..5060ebd 100644 --- a/src/main/java/org/apache/sysml/parser/pydml/PydmlSyntacticValidator.java +++ b/src/main/java/org/apache/sysml/parser/pydml/PydmlSyntacticValidator.java @@ -1144,19 +1144,14 @@ public class PydmlSyntacticValidator extends CommonSyntacticValidator implements functionName = convertedSyntax.functionName; paramExpression = convertedSyntax.paramExpression; } - - final ExpressionInfo info = ctx.info; - Action f = new Action() { - @Override public void execute(Expression e) { info.expr = e; } - }; //handle builtin functions - boolean validBIF = buildForBuiltInFunction(ctx, functionName, paramExpression, f); - if (validBIF) + ctx.info.expr= buildForBuiltInFunction(ctx, functionName, paramExpression); + if( ctx.info.expr != null ) return; // handle user-defined functions - info.expr = createFunctionCall(ctx, namespace, functionName, paramExpression); + ctx.info.expr = createFunctionCall(ctx, namespace, functionName, paramExpression); } @Override @@ -1199,13 +1194,11 @@ public class PydmlSyntacticValidator extends CommonSyntacticValidator implements } if(namespace.equals(DMLProgram.DEFAULT_NAMESPACE)) { - final FunctionCallMultiAssignmentStatementContext fctx = ctx; - Action f = new Action() { - @Override public void execute(Expression e) { setMultiAssignmentStatement(targetList, e, fctx, fctx.info); } - }; - boolean validBIF = buildForBuiltInFunction(ctx, functionName, paramExpression, f); - if (validBIF) + Expression e = buildForBuiltInFunction(ctx, functionName, paramExpression); + if( e != null ) { + setMultiAssignmentStatement(targetList, e, ctx, ctx.info); return; + } } // Override default namespace for imported non-built-in function
