http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/6017f069/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 798ab40..4def772 100644
--- a/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidator.java
+++ b/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidator.java
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -22,21 +22,42 @@ package org.apache.sysml.parser.dml;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
+import java.util.Set;
 
 import org.antlr.v4.runtime.ParserRuleContext;
 import org.antlr.v4.runtime.Token;
 import org.antlr.v4.runtime.tree.ErrorNode;
 import org.antlr.v4.runtime.tree.TerminalNode;
+import org.apache.sysml.parser.AParserWrapper;
+import org.apache.sysml.parser.AssignmentStatement;
 import org.apache.sysml.parser.ConditionalPredicate;
 import org.apache.sysml.parser.DMLProgram;
 import org.apache.sysml.parser.DataIdentifier;
-import org.apache.sysml.parser.DoubleIdentifier;
 import org.apache.sysml.parser.Expression;
-import org.apache.sysml.parser.Expression.DataOp;
 import org.apache.sysml.parser.Expression.DataType;
 import org.apache.sysml.parser.Expression.ValueType;
+import org.apache.sysml.parser.ExternalFunctionStatement;
+import org.apache.sysml.parser.ForStatement;
+import org.apache.sysml.parser.FunctionCallIdentifier;
+import org.apache.sysml.parser.FunctionStatement;
+import org.apache.sysml.parser.IfStatement;
+import org.apache.sysml.parser.ImportStatement;
+import org.apache.sysml.parser.IntIdentifier;
+import org.apache.sysml.parser.IterablePredicate;
+import org.apache.sysml.parser.LanguageException;
+import org.apache.sysml.parser.ParForStatement;
+import org.apache.sysml.parser.ParameterExpression;
+import org.apache.sysml.parser.ParseException;
+import org.apache.sysml.parser.PathStatement;
+import org.apache.sysml.parser.Statement;
+import org.apache.sysml.parser.StatementBlock;
+import org.apache.sysml.parser.WhileStatement;
+import org.apache.sysml.parser.common.CommonSyntacticValidator;
+import 
org.apache.sysml.parser.common.SyntacticErrorListener.CustomErrorListener;
+import org.apache.sysml.parser.common.ExpressionInfo;
+import org.apache.sysml.parser.common.StatementInfo;
 import org.apache.sysml.parser.dml.DmlParser.AddSubExpressionContext;
 import org.apache.sysml.parser.dml.DmlParser.AssignmentStatementContext;
 import org.apache.sysml.parser.dml.DmlParser.AtomicExpressionContext;
@@ -53,7 +74,6 @@ import 
org.apache.sysml.parser.dml.DmlParser.ConstStringIdExpressionContext;
 import org.apache.sysml.parser.dml.DmlParser.ConstTrueExpressionContext;
 import org.apache.sysml.parser.dml.DmlParser.DataIdExpressionContext;
 import org.apache.sysml.parser.dml.DmlParser.DataIdentifierContext;
-import org.apache.sysml.parser.dml.DmlParser.DmlprogramContext;
 import org.apache.sysml.parser.dml.DmlParser.ExpressionContext;
 import 
org.apache.sysml.parser.dml.DmlParser.ExternalFunctionDefExpressionContext;
 import org.apache.sysml.parser.dml.DmlParser.ForStatementContext;
@@ -76,6 +96,7 @@ import 
org.apache.sysml.parser.dml.DmlParser.ParForStatementContext;
 import org.apache.sysml.parser.dml.DmlParser.ParameterizedExpressionContext;
 import org.apache.sysml.parser.dml.DmlParser.PathStatementContext;
 import org.apache.sysml.parser.dml.DmlParser.PowerExpressionContext;
+import org.apache.sysml.parser.dml.DmlParser.ProgramrootContext;
 import org.apache.sysml.parser.dml.DmlParser.RelationalExpressionContext;
 import 
org.apache.sysml.parser.dml.DmlParser.SimpleDataIdentifierExpressionContext;
 import org.apache.sysml.parser.dml.DmlParser.StatementContext;
@@ -85,85 +106,31 @@ import 
org.apache.sysml.parser.dml.DmlParser.TypedArgNoAssignContext;
 import org.apache.sysml.parser.dml.DmlParser.UnaryExpressionContext;
 import org.apache.sysml.parser.dml.DmlParser.ValueTypeContext;
 import org.apache.sysml.parser.dml.DmlParser.WhileStatementContext;
-import org.apache.sysml.parser.AParserWrapper;
-import org.apache.sysml.parser.AssignmentStatement;
-import org.apache.sysml.parser.BinaryExpression;
-import org.apache.sysml.parser.BooleanExpression;
-import org.apache.sysml.parser.BooleanIdentifier;
-import org.apache.sysml.parser.BuiltinFunctionExpression;
-import org.apache.sysml.parser.ConstIdentifier;
-import org.apache.sysml.parser.DataExpression;
-import org.apache.sysml.parser.ExternalFunctionStatement;
-import org.apache.sysml.parser.ForStatement;
-import org.apache.sysml.parser.FunctionCallIdentifier;
-import org.apache.sysml.parser.FunctionStatement;
-import org.apache.sysml.parser.IfStatement;
-import org.apache.sysml.parser.ImportStatement;
-import org.apache.sysml.parser.IndexedIdentifier;
-import org.apache.sysml.parser.IntIdentifier;
-import org.apache.sysml.parser.IterablePredicate;
-import org.apache.sysml.parser.LanguageException;
-import org.apache.sysml.parser.MultiAssignmentStatement;
-import org.apache.sysml.parser.OutputStatement;
-import org.apache.sysml.parser.ParForStatement;
-import org.apache.sysml.parser.ParameterExpression;
-import org.apache.sysml.parser.ParameterizedBuiltinFunctionExpression;
-import org.apache.sysml.parser.ParseException;
-import org.apache.sysml.parser.PathStatement;
-import org.apache.sysml.parser.PrintStatement;
-import org.apache.sysml.parser.RelationalExpression;
-import org.apache.sysml.parser.Statement;
-import org.apache.sysml.parser.StatementBlock;
-import org.apache.sysml.parser.StringIdentifier;
-import org.apache.sysml.parser.WhileStatement;
 
-/**
- * TODO: Refactor duplicated parser code dml/pydml (entire package).
- *
- */
-public class DmlSyntacticValidator implements DmlListener
-{      
-       private DmlSyntacticValidatorHelper helper = null;
-
-       private String _workingDir = ".";   //current working directory 
-       private String _currentPath = null; //current file path
-       private HashMap<String,String> argVals = null;
-       
-       public DmlSyntacticValidator(DmlSyntacticValidatorHelper helper, String 
currentPath, HashMap<String,String> argVals) {
-               this.helper = helper;
-               this.argVals = argVals;
-               
-               _currentPath = currentPath;
+
+public class DmlSyntacticValidator extends CommonSyntacticValidator implements 
DmlListener {
+
+       public DmlSyntacticValidator(CustomErrorListener errorListener, 
HashMap<String,String> argVals) {
+               super(errorListener, argVals);
+       }
+
+       @Override public String namespaceResolutionOp() { return "::"; }
+       @Override public String trueStringLiteral() { return "TRUE"; }
+       @Override public String falseStringLiteral() { return "FALSE"; }
+
+       protected ArrayList<ParameterExpression> 
getParameterExpressionList(List<ParameterizedExpressionContext> paramExprs) {
+               ArrayList<ParameterExpression> retVal = new 
ArrayList<ParameterExpression>();
+               for(ParameterizedExpressionContext ctx : paramExprs) {
+                       String paramName = null;
+                       if(ctx.paramName != null && ctx.paramName.getText() != 
null && !ctx.paramName.getText().isEmpty()) {
+                               paramName = ctx.paramName.getText();
+                       }
+                       ParameterExpression myArg = new 
ParameterExpression(paramName, ctx.paramVal.info.expr);
+                       retVal.add(myArg);
+               }
+               return retVal;
        }
-       
-       // Functions we have to implement but don't really need it
-       @Override
-       public void enterAddSubExpression(AddSubExpressionContext ctx) { }
-       @Override
-       public void enterAssignmentStatement(AssignmentStatementContext ctx) {}
-       @Override
-       public void enterAtomicExpression(AtomicExpressionContext ctx) { }
-       @Override
-       public void enterBooleanAndExpression(BooleanAndExpressionContext ctx) 
{ }
-       @Override
-       public void enterBooleanNotExpression(BooleanNotExpressionContext ctx) 
{ }
-       @Override
-       public void enterBooleanOrExpression(BooleanOrExpressionContext ctx) { }
-       @Override
-       public void 
enterCommandlineParamExpression(CommandlineParamExpressionContext ctx) { }
-       @Override
-       public void 
enterCommandlinePositionExpression(CommandlinePositionExpressionContext ctx) { 
}    
-       @Override
-       public void enterConstDoubleIdExpression(ConstDoubleIdExpressionContext 
ctx) { }
-       @Override
-       public void enterConstIntIdExpression(ConstIntIdExpressionContext ctx) 
{ }
-       @Override
-       public void enterConstStringIdExpression(ConstStringIdExpressionContext 
ctx) { }
-       @Override
-       public void enterDataIdExpression(DataIdExpressionContext ctx) { }
 
-       @Override
-       public void enterDmlprogram(DmlprogramContext ctx) { }
        @Override
        public void enterEveryRule(ParserRuleContext arg0) {
                if(arg0 instanceof StatementContext) {
@@ -187,330 +154,107 @@ public class DmlSyntacticValidator implements 
DmlListener
                        }
                }
        }
-       @Override
-       public void 
enterExternalFunctionDefExpression(ExternalFunctionDefExpressionContext ctx) { }
-       @Override
-       public void enterForStatement(ForStatementContext ctx) {}
-       @Override
-       public void 
enterFunctionCallAssignmentStatement(FunctionCallAssignmentStatementContext 
ctx) { }
-       @Override
-       public void 
enterFunctionCallMultiAssignmentStatement(FunctionCallMultiAssignmentStatementContext
 ctx) { }
-       @Override
-       public void enterIfStatement(IfStatementContext ctx) { }
-       @Override
-       public void enterImportStatement(ImportStatementContext ctx) { }
-       @Override
-       public void enterIndexedExpression(IndexedExpressionContext ctx) { }
-       @Override
-       public void 
enterInternalFunctionDefExpression(InternalFunctionDefExpressionContext ctx) { }
-       public void enterMatrixMulExpression(MatrixMulExpressionContext ctx) { }
-       @Override
-       public void enterMl_type(Ml_typeContext ctx) { }
-       @Override
-       public void enterModIntDivExpression(ModIntDivExpressionContext ctx) { }
-       @Override
-       public void enterMultDivExpression(MultDivExpressionContext ctx) { }
-       @Override
-       public void enterParameterizedExpression(ParameterizedExpressionContext 
ctx) { }
-       @Override
-       public void enterParForStatement(ParForStatementContext ctx) { }
-       @Override
-       public void enterPathStatement(PathStatementContext ctx) { }
-       @Override
-       public void enterPowerExpression(PowerExpressionContext ctx) { }
-       @Override
-       public void enterRelationalExpression(RelationalExpressionContext ctx) 
{ }
-       @Override
-       public void 
enterSimpleDataIdentifierExpression(SimpleDataIdentifierExpressionContext ctx) 
{ }
-       @Override
-       public void 
enterStrictParameterizedExpression(StrictParameterizedExpressionContext ctx) { }
-       @Override
-       public void enterTypedArgNoAssign(TypedArgNoAssignContext ctx) { }
-       @Override
-       public void enterUnaryExpression(UnaryExpressionContext ctx) { }
-       @Override
-       public void enterValueType(ValueTypeContext ctx) { }
-       @Override
-       public void enterWhileStatement(WhileStatementContext ctx) { }
-       
-       @Override
-       public void visitErrorNode(ErrorNode arg0) { }
-       @Override
-       public void visitTerminal(TerminalNode arg0) { }
-       @Override
-       public void exitEveryRule(ParserRuleContext arg0) {}
-       // --------------------------------------------------------------------
-       private void setFileLineColumn(Expression expr, ParserRuleContext ctx) {
-               // expr.setFilename(helper.getCurrentFileName());
-               String txt = ctx.getText();
-               expr.setFilename(_currentPath);
-               expr.setBeginLine(ctx.start.getLine());
-               expr.setBeginColumn(ctx.start.getCharPositionInLine());
-               expr.setEndLine(ctx.stop.getLine());
-               expr.setEndColumn(ctx.stop.getCharPositionInLine());
-               if(expr.getBeginColumn() == expr.getEndColumn() && 
expr.getBeginLine() == expr.getEndLine() && txt.length() > 1) {
-                       expr.setEndColumn(expr.getBeginColumn() + txt.length() 
- 1);
-               }
-       }
-       
-       private void setFileLineColumn(Statement stmt, ParserRuleContext ctx) {
-               String txt = ctx.getText();
-               stmt.setFilename(helper.getCurrentFileName());
-               stmt.setBeginLine(ctx.start.getLine());
-               stmt.setBeginColumn(ctx.start.getCharPositionInLine());
-               stmt.setEndLine(ctx.stop.getLine());
-               stmt.setEndColumn(ctx.stop.getCharPositionInLine());
-               if(stmt.getBeginColumn() == stmt.getEndColumn() && 
stmt.getBeginLine() == stmt.getEndLine() && txt.length() > 1) {
-                       stmt.setEndColumn(stmt.getBeginColumn() + txt.length() 
- 1);
-               }
-       }
-       
+
+       // -----------------------------------------------------------------
+       //                      Binary, Unary & Relational Expressions
+       // -----------------------------------------------------------------
+
        // For now do no type checking, let validation handle it.
        // This way parser doesn't have to open metadata file
        @Override
        public void exitAddSubExpression(AddSubExpressionContext ctx) {
-               if(ctx.left.info.expr != null && ctx.right.info.expr != null) {
-                       Expression.BinaryOp bop = 
Expression.getBinaryOp(ctx.op.getText());
-                       ctx.info.expr = new BinaryExpression(bop);
-                       
((BinaryExpression)ctx.info.expr).setLeft(ctx.left.info.expr);
-                       
((BinaryExpression)ctx.info.expr).setRight(ctx.right.info.expr);
-                       setFileLineColumn(ctx.info.expr, ctx);
-               }
+               binaryExpressionHelper(ctx, ctx.left.info, ctx.right.info, 
ctx.info, ctx.op.getText());
        }
+
        @Override
        public void exitModIntDivExpression(ModIntDivExpressionContext ctx) {
-               if(ctx.left.info.expr != null && ctx.right.info.expr != null) {
-                       Expression.BinaryOp bop = 
Expression.getBinaryOp(ctx.op.getText());
-                       ctx.info.expr = new BinaryExpression(bop);
-                       
((BinaryExpression)ctx.info.expr).setLeft(ctx.left.info.expr);
-                       
((BinaryExpression)ctx.info.expr).setRight(ctx.right.info.expr);
-                       setFileLineColumn(ctx.info.expr, ctx);
-               }
+               binaryExpressionHelper(ctx, ctx.left.info, ctx.right.info, 
ctx.info, ctx.op.getText());
        }
-       
+
        @Override
        public void exitUnaryExpression(UnaryExpressionContext ctx) {
-               if(ctx.left.info.expr != null) {
-                       String fileName = helper.getCurrentFileName();
-                       int line = ctx.start.getLine();
-                       int col = ctx.start.getCharPositionInLine();
-                       
-                       if(ctx.left.info.expr instanceof IntIdentifier) {
-                               if(ctx.op.getText().compareTo("-") == 0) {
-                                       ((IntIdentifier) 
ctx.left.info.expr).multiplyByMinusOne();
-                               }
-                               ctx.info.expr = ctx.left.info.expr;
-                       }
-                       else if(ctx.left.info.expr instanceof DoubleIdentifier) 
{
-                               if(ctx.op.getText().compareTo("-") == 0) {
-                                       ((DoubleIdentifier) 
ctx.left.info.expr).multiplyByMinusOne();
-                               }
-                               ctx.info.expr = ctx.left.info.expr;
-                       }
-                       else {
-                               Expression right = new IntIdentifier(1, 
fileName, line, col, line, col);
-                               if(ctx.op.getText().compareTo("-") == 0) {
-                                       right = new IntIdentifier(-1, fileName, 
line, col, line, col);
-                               }
-                               
-                               Expression.BinaryOp bop = 
Expression.getBinaryOp("*");
-                               ctx.info.expr = new BinaryExpression(bop);
-                               
((BinaryExpression)ctx.info.expr).setLeft(ctx.left.info.expr);
-                               
((BinaryExpression)ctx.info.expr).setRight(right);
-                       }
-                       setFileLineColumn(ctx.info.expr, ctx);
-               }
+               unaryExpressionHelper(ctx, ctx.left.info, ctx.info, 
ctx.op.getText());
        }
-       
+
        @Override
        public void exitMultDivExpression(MultDivExpressionContext ctx) {
-               Expression.BinaryOp bop = 
Expression.getBinaryOp(ctx.op.getText());
-               ctx.info.expr = new BinaryExpression(bop);
-               ((BinaryExpression)ctx.info.expr).setLeft(ctx.left.info.expr);
-               ((BinaryExpression)ctx.info.expr).setRight(ctx.right.info.expr);
-               setFileLineColumn(ctx.info.expr, ctx);
+               binaryExpressionHelper(ctx, ctx.left.info, ctx.right.info, 
ctx.info, ctx.op.getText());
        }
        @Override
        public void exitPowerExpression(PowerExpressionContext ctx) {
-               Expression.BinaryOp bop = 
Expression.getBinaryOp(ctx.op.getText());
-               ctx.info.expr = new BinaryExpression(bop);
-               ((BinaryExpression)ctx.info.expr).setLeft(ctx.left.info.expr);
-               ((BinaryExpression)ctx.info.expr).setRight(ctx.right.info.expr);
-               setFileLineColumn(ctx.info.expr, ctx);
+               binaryExpressionHelper(ctx, ctx.left.info, ctx.right.info, 
ctx.info, ctx.op.getText());
        }
-       
+
        @Override
        public void exitMatrixMulExpression(MatrixMulExpressionContext ctx) {
-               Expression.BinaryOp bop = 
Expression.getBinaryOp(ctx.op.getText());
-               ctx.info.expr = new BinaryExpression(bop);
-               ((BinaryExpression)ctx.info.expr).setLeft(ctx.left.info.expr);
-               ((BinaryExpression)ctx.info.expr).setRight(ctx.right.info.expr);
-               setFileLineColumn(ctx.info.expr, ctx);
+               binaryExpressionHelper(ctx, ctx.left.info, ctx.right.info, 
ctx.info, ctx.op.getText());
        }
 
-       // --------------------------------------------------------------------
-
        @Override
        public void exitRelationalExpression(RelationalExpressionContext ctx) {
-               if(ctx.left.info.expr != null && ctx.right.info.expr != null) {
-//                     String fileName = helper.getCurrentFileName();
-//                     int line = ctx.start.getLine();
-//                     int col = ctx.start.getCharPositionInLine();
-//                     ArrayList<ParameterExpression> paramExpression = new 
ArrayList<ParameterExpression>();
-//                     paramExpression.add(new ParameterExpression(null, 
ctx.left.info.expr));
-//                     paramExpression.add(new ParameterExpression(null, 
ctx.right.info.expr));
-//                     ParameterExpression operator = new 
ParameterExpression(null, new StringIdentifier(ctx.op.getText(), fileName, 
line, col, line, col));
-//                     paramExpression.add(operator);
-//                     
-//                     try {
-//                             BuiltinFunctionExpression bife = 
BuiltinFunctionExpression.getBuiltinFunctionExpression("ppred", 
paramExpression, fileName, line, col, line, col);
-//                             if (bife != null){
-//                                     // It is a builtin function
-//                                     ctx.info.expr = bife;
-//                                     return;
-//                             }
-//                     }
-//                     catch(Exception e) {}
-//                     helper.notifyErrorListeners("Cannot parse relational 
expression", ctx.getStart());
-                       
-                       Expression.RelationalOp rop = 
Expression.getRelationalOp(ctx.op.getText());
-                       ctx.info.expr = new RelationalExpression(rop);
-                       
((RelationalExpression)ctx.info.expr).setLeft(ctx.left.info.expr);
-                       
((RelationalExpression)ctx.info.expr).setRight(ctx.right.info.expr);
-                       setFileLineColumn(ctx.info.expr, ctx);
-               }
+               relationalExpressionHelper(ctx, ctx.left.info, ctx.right.info, 
ctx.info, ctx.op.getText());
        }
-       
-       // --------------------------------------------------------------------
-       
+
        @Override
        public void exitBooleanAndExpression(BooleanAndExpressionContext ctx) {
-               if(ctx.left.info.expr != null && ctx.right.info.expr != null) {
-                       Expression.BooleanOp bop = 
Expression.getBooleanOp(ctx.op.getText());
-                       ctx.info.expr = new BooleanExpression(bop);
-                       
((BooleanExpression)ctx.info.expr).setLeft(ctx.left.info.expr);
-                       
((BooleanExpression)ctx.info.expr).setRight(ctx.right.info.expr);
-                       setFileLineColumn(ctx.info.expr, ctx);
-               }
+               booleanExpressionHelper(ctx, ctx.left.info, ctx.right.info, 
ctx.info, ctx.op.getText());
        }
-       
+
        @Override
        public void exitBooleanOrExpression(BooleanOrExpressionContext ctx) {
-               if(ctx.left.info.expr != null && ctx.right.info.expr != null) {
-                       Expression.BooleanOp bop = 
Expression.getBooleanOp(ctx.op.getText());
-                       ctx.info.expr = new BooleanExpression(bop);
-                       
((BooleanExpression)ctx.info.expr).setLeft(ctx.left.info.expr);
-                       
((BooleanExpression)ctx.info.expr).setRight(ctx.right.info.expr);
-                       setFileLineColumn(ctx.info.expr, ctx);
-               }
+               booleanExpressionHelper(ctx, ctx.left.info, ctx.right.info, 
ctx.info, ctx.op.getText());
        }
 
        @Override
        public void exitBooleanNotExpression(BooleanNotExpressionContext ctx) {
-               if(ctx.left.info.expr != null) {
-                       Expression.BooleanOp bop = 
Expression.getBooleanOp(ctx.op.getText());
-                       ctx.info.expr = new BooleanExpression(bop);
-                       
((BooleanExpression)ctx.info.expr).setLeft(ctx.left.info.expr);
-                       setFileLineColumn(ctx.info.expr, ctx);
-               }
+               unaryBooleanExpressionHelper(ctx, ctx.left.info, ctx.info, 
ctx.op.getText());
        }
-       
-       // --------------------------------------------------------------------
-       
+
        @Override
        public void exitAtomicExpression(AtomicExpressionContext ctx) {
                ctx.info.expr = ctx.left.info.expr;
                setFileLineColumn(ctx.info.expr, ctx);
        }
-       
-//     @Override
-//     public void 
exitConstBooleanIdExpression(ConstBooleanIdExpressionContext ctx) {
-//             boolean val = false;
-//             if(ctx.getText().compareTo("TRUE") == 0) {
-//                     val = true;
-//             }
-//             else if(ctx.getText().compareTo("FALSE") == 0) {
-//                     val = false;
-//             }
-//             else {
-//                     helper.notifyErrorListeners("cannot parse the boolean 
value: \'" +  ctx.getText() + "\'", ctx.getStart());
-//                     return;
-//             }
-//             int linePosition = ctx.start.getLine();
-//             int charPosition = ctx.start.getCharPositionInLine();
-//             ctx.info.expr = new BooleanIdentifier(val, 
helper.getCurrentFileName(), linePosition, charPosition, linePosition, 
charPosition);
-//             setFileLineColumn(ctx.info.expr, ctx);
-//     }
+
+       // -----------------------------------------------------------------
+       //                      Constant Expressions
+       // -----------------------------------------------------------------
+
+       @Override
+       public void exitConstFalseExpression(ConstFalseExpressionContext ctx) {
+               booleanIdentifierHelper(ctx, false, ctx.info);
+       }
+
+       @Override
+       public void exitConstTrueExpression(ConstTrueExpressionContext ctx) {
+               booleanIdentifierHelper(ctx, true, ctx.info);
+       }
 
        @Override
        public void exitConstDoubleIdExpression(ConstDoubleIdExpressionContext 
ctx) {
-               try {
-                       double val = Double.parseDouble(ctx.getText());
-                       int linePosition = ctx.start.getLine();
-                       int charPosition = ctx.start.getCharPositionInLine();
-                       ctx.info.expr = new DoubleIdentifier(val, 
helper.getCurrentFileName(), linePosition, charPosition, linePosition, 
charPosition);
-                       setFileLineColumn(ctx.info.expr, ctx);
-               }
-               catch(Exception e) {
-                       helper.notifyErrorListeners("cannot parse the double 
value: \'" +  ctx.getText() + "\'", ctx.getStart());
-                       return;
-               }
+               constDoubleIdExpressionHelper(ctx, ctx.info);
        }
 
        @Override
        public void exitConstIntIdExpression(ConstIntIdExpressionContext ctx) {
-               try {
-                       long val = Long.parseLong(ctx.getText());
-                       int linePosition = ctx.start.getLine();
-                       int charPosition = ctx.start.getCharPositionInLine();
-                       ctx.info.expr = new IntIdentifier(val, 
helper.getCurrentFileName(), linePosition, charPosition, linePosition, 
charPosition);
-                       setFileLineColumn(ctx.info.expr, ctx);
-               }
-               catch(Exception e) {
-                       helper.notifyErrorListeners("cannot parse the integer 
value: \'" +  ctx.getText() + "\'", ctx.getStart());
-                       return;
-               }
+               constIntIdExpressionHelper(ctx, ctx.info);
        }
 
        @Override
        public void exitConstStringIdExpression(ConstStringIdExpressionContext 
ctx) {
-               String val = "";
-               String text = ctx.getText();
-               if(     (text.startsWith("\"") && text.endsWith("\"")) ||
-                       (text.startsWith("\'") && text.endsWith("\'"))) {
-                       if(text.length() > 2) {
-                               val = text.substring(1, text.length()-1);
-                       }
-               }
-               else {
-                       helper.notifyErrorListeners("something wrong while 
parsing string ... strange", ctx.start);
-                       return;
-               }
-                       
-               int linePosition = ctx.start.getLine();
-               int charPosition = ctx.start.getCharPositionInLine();
-               ctx.info.expr = new StringIdentifier(val, 
helper.getCurrentFileName(), linePosition, charPosition, linePosition, 
charPosition);
-               setFileLineColumn(ctx.info.expr, ctx);
+               constStringIdExpressionHelper(ctx, ctx.info);
        }
-       
-       // --------------------------------------------------------------------
-       
+
+
+       // -----------------------------------------------------------------
+       //          Identifier Based Expressions
+       // -----------------------------------------------------------------
+
        @Override
        public void exitDataIdExpression(DataIdExpressionContext ctx) {
-               ctx.info.expr = ctx.dataIdentifier().dataInfo.expr;
-               int line = ctx.start.getLine();
-               int col = ctx.start.getCharPositionInLine();
-               ctx.info.expr.setAllPositions(helper.getCurrentFileName(), 
line, col, line, col);
-               setFileLineColumn(ctx.info.expr, ctx);
-//             if(ctx.getChild(0) instanceof DataIdentifierContext) {
-//                     ctx.info.expr = ctx.dataIdentifier().dataInfo.expr;
-//             }
-//             else {
-//                     String msg = "cannot evaluate data expression ... 
strange";
-//                     helper.notifyErrorListeners(msg, ctx.start);
-//             }
+               exitDataIdExpressionHelper(ctx, ctx.info, 
ctx.dataIdentifier().dataInfo);
        }
-       
+
        @Override
        public void 
exitSimpleDataIdentifierExpression(SimpleDataIdentifierExpressionContext ctx) {
                // This is either a function, or variable with namespace
@@ -518,180 +262,26 @@ public class DmlSyntacticValidator implements DmlListener
                ctx.dataInfo.expr = new DataIdentifier(ctx.getText());
                setFileLineColumn(ctx.dataInfo.expr, ctx);
        }
-       
+
        @Override
        public void exitIndexedExpression(IndexedExpressionContext ctx) {
-               ctx.dataInfo.expr = new IndexedIdentifier(ctx.name.getText(), 
false, false);
-               setFileLineColumn(ctx.dataInfo.expr, ctx);
-               try {
-                       ArrayList< ArrayList<Expression> > exprList = new 
ArrayList< ArrayList<Expression> >();
-                       
-                       ArrayList<Expression> rowIndices = new 
ArrayList<Expression>();
-                       ArrayList<Expression> colIndices = new 
ArrayList<Expression>();
-                       
-                       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));
-                       
-                       if(!isRowLower && !isRowUpper) {
-                               // both not set
-                               rowIndices.add(null); rowIndices.add(null);
-                       }
-                       else if(isRowLower && isRowUpper) {
-                               // both set
-                               rowIndices.add(ctx.rowLower.info.expr);
-                               rowIndices.add(ctx.rowUpper.info.expr);
-                       }
-                       else if(isRowLower && !isRowUpper) {
-                               // only row set
-                               rowIndices.add(ctx.rowLower.info.expr);
-                       }
-                       else {
-                               helper.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(ctx.colLower.info.expr);
-                               colIndices.add(ctx.colUpper.info.expr);
-                       }
-                       else if(isColLower && !isColUpper) {
-                               colIndices.add(ctx.colLower.info.expr);
-                       }
-                       else {
-                               helper.notifyErrorListeners("incorrect index 
expression for column", ctx.start);
-                               return;
-                       }
-                       
-                       
-//                     boolean rowIndexLowerSet = false;
-//                     boolean colIndexLowerSet = false;
-//                     
-//                     if(ctx.rowLower != null && !ctx.rowLower.isEmpty() && 
(ctx.rowLower.info.expr != null)) {
-//                             rowIndices.add(ctx.rowLower.info.expr);
-//                             rowIndexLowerSet = true;
-//                     }
-//                     else {
-//                             rowIndices.add(null);
-//                     }
-//                     if(ctx.rowUpper != null && !ctx.rowUpper.isEmpty() && 
(ctx.rowUpper.info.expr != null)) {
-//                             rowIndices.add(ctx.rowUpper.info.expr);
-//                             if(!rowIndexLowerSet) {
-//                                     helper.notifyErrorListeners("incorrect 
index expression for row", ctx.start);
-//                                     return;
-//                             }
-//                     }
-//                     if(ctx.colLower != null && !ctx.colLower.isEmpty() && 
(ctx.colLower.info.expr != null)) {
-//                             colIndices.add(ctx.colLower.info.expr);
-//                             colIndexLowerSet = true;
-//                     }
-//                     else {
-//                             colIndices.add(null);
-//                     }
-//                     if(ctx.colUpper != null && !ctx.colUpper.isEmpty() && 
(ctx.colUpper.info.expr != null)) {
-//                             colIndices.add(ctx.colUpper.info.expr);
-//                             if(!colIndexLowerSet) {
-//                                     helper.notifyErrorListeners("incorrect 
index expression for column", ctx.start);
-//                                     return;
-//                             }
-//                     }
-                       exprList.add(rowIndices);
-                       exprList.add(colIndices);
-                       ((IndexedIdentifier) 
ctx.dataInfo.expr).setIndices(exprList);
-               }
-               catch(Exception e) {
-                       helper.notifyErrorListeners("cannot set the indices", 
ctx.start);
-                       return;
-               }
+               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));
+               String name = ctx.name.getText();
+               exitIndexedExpressionHelper(ctx, name, ctx.dataInfo,
+                               isRowLower ? ctx.rowLower.info : null,
+                               isRowUpper ? ctx.rowUpper.info : null,
+                               isColLower ? ctx.colLower.info : null,
+                               isColUpper ? ctx.colUpper.info : null);
        }
-       
-       private ConstIdentifier getConstIdFromString(String varValue, Token 
start) {
-               // Both varName and varValue are correct
-                               int linePosition = start.getLine();
-                               int charPosition = 
start.getCharPositionInLine();
-                               try {
-                                       long val = Long.parseLong(varValue);
-                                       return new IntIdentifier(val, 
helper.getCurrentFileName(), linePosition, charPosition, linePosition, 
charPosition);
-                               }
-                               catch(Exception e) {
-                                       try {
-                                               double val = 
Double.parseDouble(varValue);
-                                               return new 
DoubleIdentifier(val, helper.getCurrentFileName(), linePosition, charPosition, 
linePosition, charPosition);
-                                       }
-                                       catch(Exception e1) {
-                                               try {
-                                                       
if(varValue.compareTo("TRUE") == 0 || varValue.compareTo("FALSE") == 0) {
-                                                               boolean val = 
false;
-                                                               
if(varValue.compareTo("TRUE") == 0) {
-                                                                       val = 
true;
-                                                               }
-                                                               return new 
BooleanIdentifier(val, helper.getCurrentFileName(), linePosition, charPosition, 
linePosition, charPosition);
-                                                       }
-                                                       else {
-                                                               String val = "";
-                                                               String text = 
varValue;
-                                                               if(     
(text.startsWith("\"") && text.endsWith("\"")) ||
-                                                                       
(text.startsWith("\'") && text.endsWith("\'"))) {
-                                                                       
if(text.length() > 2) {
-                                                                               
val = text.substring(1, text.length()-1);
-                                                                       }
-                                                               }
-                                                               else {
-                                                                       val = 
text;
-                                                                       // the 
commandline parameters can be passed without any quotes
-//                                                                     
helper.notifyErrorListeners("something wrong while parsing string ... strange", 
start);
-//                                                                     return 
null;
-                                                               }
-                                                               return new 
StringIdentifier(val, helper.getCurrentFileName(), linePosition, charPosition, 
linePosition, charPosition);
-                                                       }
-                                               }
-                                               catch(Exception e3) {
-                                                       
helper.notifyErrorListeners("unable to cast the commandline parameter into 
int/double/boolean/string", start);
-                                                       return null;
-                                               }
-                                       }
-                               }
-                               
-       }
-       
-       private void fillExpressionInfoCommandLineParameters(String varName, 
ExpressionInfo dataInfo, Token start) {
-               
-               if(!varName.startsWith("$")) {
-                       helper.notifyErrorListeners("commandline param doesnot 
start with $ ... strange", start);
-                       return;
-               }
-               
-               String varValue = null;
-               for(Map.Entry<String, String> arg : this.argVals.entrySet()) {
-                       if(arg.getKey().trim().compareTo(varName) == 0) {
-                               if(varValue != null) {
-                                       helper.notifyErrorListeners("multiple 
values passed for the parameter " + varName + " via commandline", start);
-                                       return;
-                               }
-                               else {
-                                       varValue = arg.getValue().trim();
-                               }
-                       }
-               }
-               
-               if(varValue == null) {
-                       // helper.notifyErrorListeners("the parameter " + 
varName + " either needs to be passed through commandline or initialized to 
default value", start);
-                       return;
-               }
-               
-               // Command line param cannot be empty string
-               // If you want to pass space, please quote it
-               if(varValue.trim().compareTo("") == 0)
-                       return;
-               
-               dataInfo.expr = getConstIdFromString(varValue, start);
-       }
-       
+
+
+       // -----------------------------------------------------------------
+       //          Command line parameters (begin with a '$')
+       // -----------------------------------------------------------------
+
        @Override
        public void 
exitCommandlineParamExpression(CommandlineParamExpressionContext ctx) {
                handleCommandlineArgumentExpression(ctx);
@@ -701,60 +291,59 @@ public class DmlSyntacticValidator implements DmlListener
        public void 
exitCommandlinePositionExpression(CommandlinePositionExpressionContext ctx) {
                handleCommandlineArgumentExpression(ctx);
        }
-       
-       /**
-        * 
-        * @param ctx
-        */
+
        private void handleCommandlineArgumentExpression(DataIdentifierContext 
ctx)
        {
-               String varName = ctx.getText().trim();          
+               String varName = ctx.getText().trim();
                fillExpressionInfoCommandLineParameters(varName, ctx.dataInfo, 
ctx.start);
-               
+
                if(ctx.dataInfo.expr == null) {
                        if(!(ctx.parent instanceof 
IfdefAssignmentStatementContext)) {
                                String msg = "The parameter " + varName + " 
either needs to be passed "
                                                + "through commandline or 
initialized to default value.";
                                if( AParserWrapper.IGNORE_UNSPECIFIED_ARGS ) {
                                        ctx.dataInfo.expr = 
getConstIdFromString(" ", ctx.start);
-                                       helper.raiseWarning(msg, ctx.start);
+                                       raiseWarning(msg, ctx.start);
                                }
                                else {
-                                       helper.notifyErrorListeners(msg, 
ctx.start);
+                                       notifyErrorListeners(msg, ctx.start);
                                }
                        }
                }
        }
-       
-       // --------------------------------------------------------------------
-       
+
+
+       // -----------------------------------------------------------------
+       //                      "src" statment
+       // -----------------------------------------------------------------
+
        @Override
-       public void exitImportStatement(ImportStatementContext ctx) 
+       public void exitImportStatement(ImportStatementContext ctx)
        {
                //prepare import filepath
                String filePath = ctx.filePath.getText();
                String namespace = DMLProgram.DEFAULT_NAMESPACE;
-               if(ctx.namespace != null && ctx.namespace.getText() != null && 
!ctx.namespace.getText().isEmpty()) { 
+               if(ctx.namespace != null && ctx.namespace.getText() != null && 
!ctx.namespace.getText().isEmpty()) {
                        namespace = ctx.namespace.getText();
                }
-               if((filePath.startsWith("\"") && filePath.endsWith("\"")) || 
-                               filePath.startsWith("'") && 
filePath.endsWith("'")) {   
+               if((filePath.startsWith("\"") && filePath.endsWith("\"")) ||
+                               filePath.startsWith("'") && 
filePath.endsWith("'")) {
                        filePath = filePath.substring(1, filePath.length()-1);
                }
-               
+
                //concatenate working directory to filepath
                filePath = _workingDir + File.separator + filePath;
-               
+
                DMLProgram prog = null;
                try {
                        prog = (new DMLParserWrapper()).doParse(filePath, null, 
argVals);
                } catch (ParseException e) {
-                       helper.notifyErrorListeners("Exception found during 
importing a program from file " + filePath, ctx.start);
+                       notifyErrorListeners("Exception found during importing 
a program from file " + filePath, ctx.start);
                        return;
                }
         // Custom logic whether to proceed ahead or not. Better than the 
current exception handling mechanism
                if(prog == null) {
-                       helper.notifyErrorListeners("One or more errors found 
during importing a program from file " + filePath, ctx.start);
+                       notifyErrorListeners("One or more errors found during 
importing a program from file " + filePath, ctx.start);
                        return;
                }
                else {
@@ -766,417 +355,221 @@ public class DmlSyntacticValidator implements 
DmlListener
                        ((ImportStatement) 
ctx.info.stmt).setNamespace(namespace);
                }
        }
-       
+
+       // -----------------------------------------------------------------
+       //                      Assignment Statement
+       // -----------------------------------------------------------------
+
        @Override
        public void exitAssignmentStatement(AssignmentStatementContext ctx) {
-               if(ctx.targetList == null || ctx.targetList.size() != 1) {
-                       helper.notifyErrorListeners("incorrect parsing for 
assignment", ctx.start);
-                       return;
-               }
-               String targetListText = ctx.targetList.get(0).getText(); 
-               if(targetListText.startsWith("$")) {
-                       helper.notifyErrorListeners("assignment of commandline 
parameters is not allowed. (Quickfix: try using someLocalVariable=ifdef(" + 
targetListText + ", default value))", ctx.start);
+               if(ctx.targetList == null) {
+                       notifyErrorListeners("incorrect parsing for 
assignment", ctx.start);
                        return;
                }
-               
-               DataIdentifier target = null; 
-               if(ctx.targetList.get(0).dataInfo.expr instanceof 
DataIdentifier) {
-                       target = (DataIdentifier) 
ctx.targetList.get(0).dataInfo.expr;
-                       Expression source = ctx.source.info.expr;
-                       
-                       int line = ctx.start.getLine();
-                       int col = ctx.start.getCharPositionInLine();
-                       try {
-                               ctx.info.stmt = new AssignmentStatement(target, 
source, line, col, line, col);
-                               setFileLineColumn(ctx.info.stmt, ctx);
-                       } catch (LanguageException e) {
-                               // TODO: extract more meaningful info from this 
exception.
-                               helper.notifyErrorListeners("invalid 
assignment", ctx.targetList.get(0).start);
-                               return;
-                       } 
-               }
-               else {
-                       helper.notifyErrorListeners("incorrect lvalue ... 
strange", ctx.targetList.get(0).start);
-                       return;
-               }
-               
+               exitAssignmentStatementHelper(ctx, ctx.targetList.getText(), 
ctx.targetList.dataInfo, ctx.targetList.start, ctx.source.info, ctx.info);
        }
 
-       
-       private void setAssignmentStatement(DataIdentifier target, Expression 
expression, StatementContext ctx) {
-               try {
-                       ctx.info.stmt = new AssignmentStatement(target, 
expression, ctx.start.getLine(), ctx.start.getCharPositionInLine(), 
ctx.start.getLine(), ctx.start.getCharPositionInLine());
-                       setFileLineColumn(ctx.info.stmt, ctx);
-               } catch (LanguageException e) {
-                       // TODO: extract more meaningful info from this 
exception.
-                       helper.notifyErrorListeners("invalid function call", 
ctx.start);
-                       return;
-               }
-       }
-       
-       private void setPrintStatement(FunctionCallAssignmentStatementContext 
ctx, String functionName) {
-               ArrayList<ParameterExpression> paramExpression = 
helper.getParameterExpressionList(ctx.paramExprs);
-               if(paramExpression.size() != 1) {
-                       helper.notifyErrorListeners(functionName + "() has only 
one parameter", ctx.start);
-                       return;
-               }
-               Expression expr = paramExpression.get(0).getExpr();
-               if(expr == null) {
-                       helper.notifyErrorListeners("cannot process " + 
functionName + "() function", ctx.start);
-                       return;
-               }
-               try {
-                       int line = ctx.start.getLine();
-                       int col = ctx.start.getCharPositionInLine();
-                       ctx.info.stmt = new PrintStatement(functionName, expr, 
line, col, line, col);
-                       setFileLineColumn(ctx.info.stmt, ctx);
-               } catch (LanguageException e) {
-                       helper.notifyErrorListeners("cannot process " + 
functionName + "() function", ctx.start);
-                       return;
-               }
+
+       // -----------------------------------------------------------------
+       //                      Control Statements - Guards & Loops
+       // -----------------------------------------------------------------
+
+       @Override
+       public ConvertedDMLSyntax convertToDMLSyntax(ParserRuleContext ctx, 
String namespace, String functionName, ArrayList<ParameterExpression> 
paramExpression, Token fnName) {
+               return new ConvertedDMLSyntax(namespace, functionName, 
paramExpression);
        }
-       
-       private void setOutputStatement(FunctionCallAssignmentStatementContext 
ctx) {
-               ArrayList<ParameterExpression> paramExpression = 
helper.getParameterExpressionList(ctx.paramExprs);
-               if(paramExpression.size() < 2){
-                       helper.notifyErrorListeners("incorrect usage of write 
function (atleast 2 arguments required)", ctx.start);
-                       return;
-               }
-               if(paramExpression.get(0).getExpr() instanceof DataIdentifier) {
-                       //  && paramExpression.get(0).getName() == null
-                       // correct usage of identifier
-                       // if(paramExpression.get(1).getName() == null) {
-                               String fileName = helper.getCurrentFileName();
-                               int line = ctx.start.getLine();
-                               int col = ctx.start.getCharPositionInLine();
-                               HashMap<String, Expression> varParams = new 
HashMap<String, Expression>();
-                               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(DataOp.WRITE, varParams, fileName, line, col, line, col);
-                               ctx.info.stmt = new  
OutputStatement((DataIdentifier) paramExpression.get(0).getExpr(), 
DataOp.WRITE, fileName, line, col, line, col);
-                               setFileLineColumn(ctx.info.stmt, ctx);
-                               
((OutputStatement)ctx.info.stmt).setExprParams(dataExpression);
-                               return;
-                       //}
-               }
-               
-               helper.notifyErrorListeners("incorrect usage of write 
function", ctx.start);
-               return;
-               
+
+
+       @Override
+       protected Expression handleLanguageSpecificFunction(ParserRuleContext 
ctx, String functionName,
+                       ArrayList<ParameterExpression> paramExpressions) {
+               return null;
        }
-       
+
+
        @Override
        public void 
exitFunctionCallAssignmentStatement(FunctionCallAssignmentStatementContext ctx) 
{
-               String fullyQualifiedFunctionName = ctx.name.getText();
-               String [] fnNames = fullyQualifiedFunctionName.split("::");
-               String functionName = "";
-               String namespace = "";
-               if(fnNames.length == 1) {
-                       namespace = DMLProgram.DEFAULT_NAMESPACE;
-                       functionName = fnNames[0].trim();
-               }
-               else if(fnNames.length == 2) {
-                       namespace = fnNames[0].trim();
-                       functionName = fnNames[1].trim();
-               }
-               else {
-                       helper.notifyErrorListeners("incorrect function name", 
ctx.name);
-                       return;
-               }
-               
-               if((functionName.compareTo("print") == 0 || 
functionName.compareTo("stop") == 0 ) && 
namespace.compareTo(DMLProgram.DEFAULT_NAMESPACE) == 0) {
-                       setPrintStatement(ctx, functionName);
-                       return;
-               }
-               else if(functionName.compareTo("write") == 0
-                               && 
namespace.compareTo(DMLProgram.DEFAULT_NAMESPACE) == 0) {
-                       setOutputStatement(ctx);
-                       return;
-               }
-               
-               boolean ignoreLValue = false;
-               if(ctx.targetList == null || ctx.targetList.size() == 0 || 
ctx.targetList.get(0).isEmpty()) {
-                       helper.notifyErrorListeners("function call needs to 
have lvalue (Quickfix: change it to \'tmpVar = " + functionName + "(...)\')", 
ctx.name);
+
+               Set<String> printStatements = new  HashSet<String>();
+               printStatements.add("print");
+               printStatements.add("stop");
+
+               Set<String> outputStatements = new HashSet<String>();
+               outputStatements.add("write");
+
+               String [] fnNames = getQualifiedNames (ctx.name.getText());
+               if (fnNames == null) {
+                       String errorMsg = "incorrect function name (only 
namespace " + namespaceResolutionOp() + " functionName allowed. Hint: If you 
are trying to use builtin functions, you can skip the namespace)";
+                       notifyErrorListeners(errorMsg, ctx.name);
                        return;
                }
-               String fileName = helper.getCurrentFileName();
-               int line = ctx.start.getLine();
-               int col = ctx.start.getCharPositionInLine();
-               
-               ArrayList<ParameterExpression> paramExpression = 
helper.getParameterExpressionList(ctx.paramExprs);
-//             if(functionName.compareTo("read") == 0 && 
paramExpression.size() > 0 && paramExpression.get(0).getName() == null) {
-//                     
paramExpression.get(0).setName(DataExpression.IO_FILENAME);
-//             }
-               
-               FunctionCallIdentifier functCall = new 
FunctionCallIdentifier(paramExpression);
-               try {
-                       functCall.setFunctionName(functionName);
-                       functCall.setFunctionNamespace(namespace);
-               } catch (ParseException e1) {
-                       helper.notifyErrorListeners("unable to process function 
" + functionName, ctx.start);
-                        return;
-               }
-               
-               DataIdentifier target = null; 
-               if(!ignoreLValue) {
-                       if(ctx.targetList.get(0).dataInfo.expr instanceof 
DataIdentifier) {
-                               target = (DataIdentifier) 
ctx.targetList.get(0).dataInfo.expr;
-                       }
-                       else {
-                               helper.notifyErrorListeners("incorrect lvalue 
... strange", ctx.targetList.get(0).start);
-                               //target = new DataIdentifier(); // so as not 
to avoid null pointer
-                               return;
-                       }
-               }
-               
-               if(!functionName.contains("::") || 
functionName.startsWith(DMLProgram.DEFAULT_NAMESPACE)) {
-                       // In global namespace, so it can be a builtin function
-                       if(!helper.validateBuiltinFunctions(ctx)) {
-                               return; // it is a built-in function and 
validation failed, so donot proceed ahead.
-                       }
-                       // Double verification: verify passed function name is 
a (non-parameterized) built-in function.
-                       try {
-                               BuiltinFunctionExpression bife = 
BuiltinFunctionExpression.getBuiltinFunctionExpression(functionName, 
functCall.getParamExprs(), fileName, line, col, line, col);
-                               if (bife != null){
-                                       // It is a builtin function
-                                       setAssignmentStatement(target, bife, 
ctx);
-                                       return;
-                               }
-                               
-                               ParameterizedBuiltinFunctionExpression pbife = 
ParameterizedBuiltinFunctionExpression.getParamBuiltinFunctionExpression(functionName,
 functCall.getParamExprs(), fileName, line, col, line, col);
-                               if (pbife != null){
-                                       // It is a parameterized builtin 
function
-                                       setAssignmentStatement(target, pbife, 
ctx);
-                                       return;
-                               }
-                               
-                               // built-in read, rand ...
-                               DataExpression dbife = 
DataExpression.getDataExpression(functionName, functCall.getParamExprs(), 
fileName, line, col, line, col);
-                               if (dbife != null){
-                                       setAssignmentStatement(target, dbife, 
ctx);
-                                       return;
-                               }
-                       } catch(Exception e) {
-                               helper.notifyErrorListeners("unable to process 
builtin function expression " + functionName  + ":" + e.getMessage(), 
ctx.start);
-                               return ;
-                       }
-               }
-               
-               setAssignmentStatement(target, functCall, ctx);
+               String namespace = fnNames[0];
+               String functionName = fnNames[1];
+               ArrayList<ParameterExpression> paramExpression = 
getParameterExpressionList(ctx.paramExprs);
+
+               boolean hasLHS = ctx.targetList != null;
+               functionCallAssignmentStatementHelper(ctx, printStatements, 
outputStatements, hasLHS ? ctx.targetList.dataInfo.expr : null, ctx.info, 
ctx.name,
+                               hasLHS ? ctx.targetList.start : null, 
namespace, functionName, paramExpression, hasLHS);
        }
-       
+
+
+
        @Override
        public void 
exitBuiltinFunctionExpression(BuiltinFunctionExpressionContext ctx) {
-//             if(!helper.validateBuiltinFunctions(ctx)) {
-//                     return; // it is a built-in function and validation 
failed, so donot proceed ahead.
-//             }
                // Double verification: verify passed function name is a 
(non-parameterized) built-in function.
-               String functionName = ctx.name.getText();
-               String fileName = helper.getCurrentFileName();
-               int line = ctx.start.getLine();
-               int col = ctx.start.getCharPositionInLine();
-               ArrayList<ParameterExpression> paramExpression = 
helper.getParameterExpressionList(ctx.paramExprs);
-//             if(functionName.compareTo("read") == 0 && 
paramExpression.size() > 0 && paramExpression.get(0).getName() == null) {
-//                     
paramExpression.get(0).setName(DataExpression.IO_FILENAME);
-//             }
-               
-               try {
-                       BuiltinFunctionExpression bife = 
BuiltinFunctionExpression.getBuiltinFunctionExpression(functionName, 
paramExpression, fileName, line, col, line, col);
-                       if (bife != null){
-                               // It is a builtin function
-                               ctx.info.expr = bife;
-                               setFileLineColumn(ctx.info.expr, ctx);
-                               return;
-                       }
-                       
-                       ParameterizedBuiltinFunctionExpression pbife = 
ParameterizedBuiltinFunctionExpression.getParamBuiltinFunctionExpression(functionName,
 paramExpression, fileName, line, col, line, col);
-                       if (pbife != null){
-                               // It is a parameterized builtin function
-                               ctx.info.expr = pbife;
-                               setFileLineColumn(ctx.info.expr, ctx);
-                               return;
-                       }
-                       
-                       // built-in read, rand ...
-                       DataExpression dbife = 
DataExpression.getDataExpression(functionName, paramExpression, fileName, line, 
col, line, col);
-                       if (dbife != null){
-                               ctx.info.expr = dbife;
-                               setFileLineColumn(ctx.info.expr, ctx);
-                               return;
-                       }
-                       
-               } catch(Exception e) {
-                       helper.notifyErrorListeners("unable to process builtin 
function expression " + functionName + ":" + e.getMessage(), ctx.start);
-                       return ;
+               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;
                }
-               helper.notifyErrorListeners("only builtin functions allowed as 
part of expression", ctx.start);
-       }
-       
-       private void setMultiAssignmentStatement(ArrayList<DataIdentifier> 
target, Expression expression, StatementContext ctx) {
-               ctx.info.stmt = new MultiAssignmentStatement(target, 
expression);
-               ctx.info.stmt.setAllPositions(helper.getCurrentFileName(), 
ctx.start.getLine(), ctx.start.getCharPositionInLine(), ctx.start.getLine(), 
ctx.start.getCharPositionInLine());
-               setFileLineColumn(ctx.info.stmt, ctx);
+               String namespace = names[0];
+               String functionName = names[1];
+
+               ArrayList<ParameterExpression> paramExpression = 
getParameterExpressionList(ctx.paramExprs);
+
+               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);
        }
 
+
        @Override
        public void exitFunctionCallMultiAssignmentStatement(
                        FunctionCallMultiAssignmentStatementContext ctx) {
-               String fullyQualifiedFunctionName = ctx.name.getText();
-               String [] fnNames = fullyQualifiedFunctionName.split("::");
-               String functionName = "";
-               String namespace = "";
-               if(fnNames.length == 1) {
-                       namespace = DMLProgram.DEFAULT_NAMESPACE;
-                       functionName = fnNames[0].trim();
+               String[] names = getQualifiedNames(ctx.name.getText());
+               if(names == null) {
+                       notifyErrorListeners("incorrect function name (only 
namespace.functionName allowed. Hint: If you are trying to use builtin 
functions, you can skip the namespace)", ctx.name);
+                       return;
                }
-               else if(fnNames.length == 2) {
-                       namespace = fnNames[0].trim();
-                       functionName = fnNames[1].trim();
+               String namespace = names[0];
+               String functionName = names[1];
+
+               ArrayList<ParameterExpression> paramExpression = 
getParameterExpressionList(ctx.paramExprs);
+               ConvertedDMLSyntax convertedSyntax = convertToDMLSyntax(ctx, 
namespace, functionName, paramExpression, ctx.name);
+               if(convertedSyntax == null) {
+                       return;
                }
                else {
-                       helper.notifyErrorListeners("incorrect function name", 
ctx.name);
-                       return;
+                       namespace = convertedSyntax.namespace;
+                       functionName = convertedSyntax.functionName;
+                       paramExpression = convertedSyntax.paramExpression;
                }
-               
-               String fileName = helper.getCurrentFileName();
-               int line = ctx.start.getLine();
-               int col = ctx.start.getCharPositionInLine();
-               
-               ArrayList<ParameterExpression> paramExpression = 
helper.getParameterExpressionList(ctx.paramExprs);
-//             if(functionName.compareTo("read") == 0 && 
paramExpression.size() > 0 && paramExpression.get(0).getName() == null) {
-//                     
paramExpression.get(0).setName(DataExpression.IO_FILENAME);
-//             }
-               
+
                FunctionCallIdentifier functCall = new 
FunctionCallIdentifier(paramExpression);
-               try {
-                       functCall.setFunctionName(functionName);
-                       functCall.setFunctionNamespace(namespace);
-               } catch (ParseException e1) {
-                       helper.notifyErrorListeners("unable to process function 
" + functionName, ctx.start);
-                       return;
-               }
-               
-               ArrayList<DataIdentifier> targetList = new 
ArrayList<DataIdentifier>();
+               functCall.setFunctionName(functionName);
+               functCall.setFunctionNamespace(namespace);
+
+
+               final ArrayList<DataIdentifier> targetList = new 
ArrayList<DataIdentifier>();
                for(DataIdentifierContext dataCtx : ctx.targetList) {
                        if(dataCtx.dataInfo.expr instanceof DataIdentifier) {
                                targetList.add((DataIdentifier) 
dataCtx.dataInfo.expr);
                        }
                        else {
-                               helper.notifyErrorListeners("incorrect lvalue 
... strange", dataCtx.start);
-                               //target = new DataIdentifier(); // so as not 
to avoid null pointer
+                               notifyErrorListeners("incorrect type for 
variable ", dataCtx.start);
                                return;
                        }
                }
-               
-               if(!functionName.contains("::") || 
functionName.startsWith(DMLProgram.DEFAULT_NAMESPACE)) {
-                       // In global namespace, so it can be a builtin function
-//                     if(!helper.validateBuiltinFunctions(ctx)) {
-//                             return; // it is a built-in function and 
validation failed, so donot proceed ahead.
-//                     }
-                       // Double verification: verify passed function name is 
a (non-parameterized) built-in function.
-                       try {
-                               BuiltinFunctionExpression bife = 
BuiltinFunctionExpression.getBuiltinFunctionExpression(functionName, 
functCall.getParamExprs(), fileName, line, col, line, col);
-                               if (bife != null){
-                                       // It is a builtin function
-                                       setMultiAssignmentStatement(targetList, 
bife, ctx);
-                                       return;
-                               }
-                               
-                               ParameterizedBuiltinFunctionExpression pbife = 
ParameterizedBuiltinFunctionExpression.getParamBuiltinFunctionExpression(functionName,
 functCall.getParamExprs(), fileName, line, col, line, col);
-                               if (pbife != null){
-                                       // It is a parameterized builtin 
function
-                                       setMultiAssignmentStatement(targetList, 
pbife, ctx);
-                                       return;
-                               }
-                               
-                               // built-in read, rand ...
-                               DataExpression dbife = 
DataExpression.getDataExpression(functionName, functCall.getParamExprs(), 
fileName, line, col, line, col);
-                               if (dbife != null){
-                                       setMultiAssignmentStatement(targetList, 
dbife, ctx);
-                                       return;
-                               }
-                       } catch(Exception e) {
-                               helper.notifyErrorListeners("unable to process 
builtin function expression " + functionName  + ":" + e.getMessage(), 
ctx.start);
+
+               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)
                                return;
-                       }
                }
-               
-               setMultiAssignmentStatement(targetList, functCall, ctx);
+
+               setMultiAssignmentStatement(targetList, functCall, ctx, 
ctx.info);
        }
-       
+
+
+       // -----------------------------------------------------------------
+       //                      Control Statements - Guards & Loops
+       // -----------------------------------------------------------------
+
        private StatementBlock getStatementBlock(Statement current) {
                return DMLParserWrapper.getStatementBlock(current);
        }
-       
+
        @Override
        public void exitIfStatement(IfStatementContext ctx) {
                IfStatement ifStmt = new IfStatement();
                ConditionalPredicate predicate = new 
ConditionalPredicate(ctx.predicate.info.expr);
                ifStmt.setConditionalPredicate(predicate);
-               String fileName = helper.getCurrentFileName();
+               String fileName = currentFile;
                int line = ctx.start.getLine();
                int col = ctx.start.getCharPositionInLine();
                ifStmt.setAllPositions(fileName, line, col, line, col);
-               
+
                if(ctx.ifBody.size() > 0) {
                        for(StatementContext stmtCtx : ctx.ifBody) {
                                
ifStmt.addStatementBlockIfBody(getStatementBlock(stmtCtx.info.stmt));
                        }
                        ifStmt.mergeStatementBlocksIfBody();
                }
-               
+
                if(ctx.elseBody.size() > 0) {
                        for(StatementContext stmtCtx : ctx.elseBody) {
                                
ifStmt.addStatementBlockElseBody(getStatementBlock(stmtCtx.info.stmt));
                        }
                        ifStmt.mergeStatementBlocksElseBody();
                }
-               
+
                ctx.info.stmt = ifStmt;
                setFileLineColumn(ctx.info.stmt, ctx);
        }
-       
+
        @Override
        public void exitWhileStatement(WhileStatementContext ctx) {
                WhileStatement whileStmt = new WhileStatement();
                ConditionalPredicate predicate = new 
ConditionalPredicate(ctx.predicate.info.expr);
                whileStmt.setPredicate(predicate);
-               String fileName = helper.getCurrentFileName();
                int line = ctx.start.getLine();
                int col = ctx.start.getCharPositionInLine();
-               whileStmt.setAllPositions(fileName, line, col, line, col);
-               
+               whileStmt.setAllPositions(currentFile, line, col, line, col);
+
                if(ctx.body.size() > 0) {
                        for(StatementContext stmtCtx : ctx.body) {
                                
whileStmt.addStatementBlock(getStatementBlock(stmtCtx.info.stmt));
                        }
                        whileStmt.mergeStatementBlocks();
                }
-               
+
                ctx.info.stmt = whileStmt;
                setFileLineColumn(ctx.info.stmt, ctx);
        }
-       
+
        @Override
        public void exitForStatement(ForStatementContext ctx) {
                ForStatement forStmt = new ForStatement();
-               String fileName = helper.getCurrentFileName();
                int line = ctx.start.getLine();
                int col = ctx.start.getCharPositionInLine();
-               
+
                DataIdentifier iterVar = new 
DataIdentifier(ctx.iterVar.getText());
                HashMap<String, String> parForParamValues = null;
-               Expression incrementExpr = new IntIdentifier(1, fileName, line, 
col, line, col);
+               Expression incrementExpr = new IntIdentifier(1, currentFile, 
line, col, line, col);
                if(ctx.iterPred.info.increment != null) {
                        incrementExpr = ctx.iterPred.info.increment;
                }
-               IterablePredicate predicate = new IterablePredicate(iterVar, 
ctx.iterPred.info.from, ctx.iterPred.info.to, incrementExpr, parForParamValues, 
fileName, line, col, line, col);
+               IterablePredicate predicate = new IterablePredicate(iterVar, 
ctx.iterPred.info.from, ctx.iterPred.info.to, incrementExpr, parForParamValues, 
currentFile, line, col, line, col);
                forStmt.setPredicate(predicate);
-               
+
                if(ctx.body.size() > 0) {
                        for(StatementContext stmtCtx : ctx.body) {
                                
forStmt.addStatementBlock(getStatementBlock(stmtCtx.info.stmt));
@@ -1190,10 +583,9 @@ public class DmlSyntacticValidator implements DmlListener
        @Override
        public void exitParForStatement(ParForStatementContext ctx) {
                ParForStatement parForStmt = new ParForStatement();
-               String fileName = helper.getCurrentFileName();
                int line = ctx.start.getLine();
                int col = ctx.start.getCharPositionInLine();
-               
+
                DataIdentifier iterVar = new 
DataIdentifier(ctx.iterVar.getText());
                HashMap<String, String> parForParamValues = new HashMap<String, 
String>();
                if(ctx.parForParams != null && ctx.parForParams.size() > 0) {
@@ -1201,13 +593,13 @@ public class DmlSyntacticValidator implements DmlListener
                                
parForParamValues.put(parForParamCtx.paramName.getText(), 
parForParamCtx.paramVal.getText());
                        }
                }
-               
-               Expression incrementExpr = new IntIdentifier(1, fileName, line, 
col, line, col);
-               
+
+               Expression incrementExpr = new IntIdentifier(1, currentFile, 
line, col, line, col);
+
                if( ctx.iterPred.info.increment != null ) {
                        incrementExpr = ctx.iterPred.info.increment;
                }
-               IterablePredicate predicate = new IterablePredicate(iterVar, 
ctx.iterPred.info.from, ctx.iterPred.info.to, incrementExpr, parForParamValues, 
fileName, line, col, line, col);
+               IterablePredicate predicate = new IterablePredicate(iterVar, 
ctx.iterPred.info.from, ctx.iterPred.info.to, incrementExpr, parForParamValues, 
currentFile, line, col, line, col);
                parForStmt.setPredicate(predicate);
                if(ctx.body.size() > 0) {
                        for(StatementContext stmtCtx : ctx.body) {
@@ -1218,88 +610,100 @@ public class DmlSyntacticValidator implements 
DmlListener
                ctx.info.stmt = parForStmt;
                setFileLineColumn(ctx.info.stmt, ctx);
        }
-       
-       
-       @Override
-       public void exitDmlprogram(DmlprogramContext ctx) { }
-       
 
-       // 
----------------------------------------------------------------------
-       @Override
-       public void exitValueType(ValueTypeContext ctx) { }
-       @Override
-       public void exitMl_type(Ml_typeContext ctx) { }
-       
        private ArrayList<DataIdentifier> 
getFunctionParameters(List<TypedArgNoAssignContext> ctx) {
                ArrayList<DataIdentifier> retVal = new 
ArrayList<DataIdentifier>();
                for(TypedArgNoAssignContext paramCtx : ctx) {
                        DataIdentifier dataId = new 
DataIdentifier(paramCtx.paramName.getText());
                        String dataType = null;
                        String valueType = null;
-                       
-                       if(paramCtx.paramType == null || 
paramCtx.paramType.dataType() == null 
+
+                       if(paramCtx.paramType == null || 
paramCtx.paramType.dataType() == null
                                        || 
paramCtx.paramType.dataType().getText() == null || 
paramCtx.paramType.dataType().getText().isEmpty()) {
                                dataType = "scalar";
                        }
                        else {
                                dataType = 
paramCtx.paramType.dataType().getText();
                        }
-                       
-                       if(dataType.compareTo("matrix") == 0 || 
dataType.compareTo("Matrix") == 0) {
+
+                       if(dataType.equals("matrix") || 
dataType.equals("Matrix")) {
                                // matrix
                                dataId.setDataType(DataType.MATRIX);
                        }
-                       else if(dataType.compareTo("scalar") == 0 || 
dataType.compareTo("Scalar") == 0) {
+                       else if(dataType.equals("scalar") || 
dataType.equals("Scalar")) {
                                // scalar
                                dataId.setDataType(DataType.SCALAR);
                        }
                        else {
-                               helper.notifyErrorListeners("invalid datatype " 
+ dataType, paramCtx.start);
+                               notifyErrorListeners("invalid datatype " + 
dataType, paramCtx.start);
                                return null;
                        }
-                       
+
                        valueType = paramCtx.paramType.valueType().getText();
-                       if(valueType.compareTo("int") == 0 || 
valueType.compareTo("integer") == 0
-                               || valueType.compareTo("Int") == 0 || 
valueType.compareTo("Integer") == 0) {
+                       if(valueType.equals("int") || 
valueType.equals("integer")
+                               || valueType.equals("Int") || 
valueType.equals("Integer")) {
                                dataId.setValueType(ValueType.INT);
                        }
-                       else if(valueType.compareTo("string") == 0 || 
valueType.compareTo("String") == 0) {
+                       else if(valueType.equals("string") || 
valueType.equals("String")) {
                                dataId.setValueType(ValueType.STRING);
                        }
-                       else if(valueType.compareTo("boolean") == 0 || 
valueType.compareTo("Boolean") == 0) {
+                       else if(valueType.equals("boolean") || 
valueType.equals("Boolean")) {
                                dataId.setValueType(ValueType.BOOLEAN);
                        }
-                       else if(valueType.compareTo("double") == 0 || 
valueType.compareTo("Double") == 0) {
+                       else if(valueType.equals("double") || 
valueType.equals("Double")) {
                                dataId.setValueType(ValueType.DOUBLE);
                        }
-                       else if(valueType.compareTo("bool") == 0) {
-                               helper.notifyErrorListeners("invalid valuetype 
" + valueType + " (Quickfix: use \'boolean\' instead)", paramCtx.start);
+                       else if(valueType.equals("bool")) {
+                               notifyErrorListeners("invalid valuetype " + 
valueType + " (Quickfix: use \'boolean\' instead)", paramCtx.start);
                                return null;
                        }
                        else {
-                               helper.notifyErrorListeners("invalid valuetype 
" + valueType, paramCtx.start);
+                               notifyErrorListeners("invalid valuetype " + 
valueType, paramCtx.start);
                                return null;
                        }
                        retVal.add(dataId);
                }
                return retVal;
        }
-       
+
+       @Override
+       public void 
exitIterablePredicateColonExpression(IterablePredicateColonExpressionContext 
ctx) {
+               ctx.info.from = ctx.from.info.expr;
+               ctx.info.to = ctx.to.info.expr;
+               ctx.info.increment = null;
+       }
+
+       @Override
+       public void 
exitIterablePredicateSeqExpression(IterablePredicateSeqExpressionContext ctx) {
+               if(!ctx.ID().getText().equals("seq")) {
+                       notifyErrorListeners("incorrect function:\'" + 
ctx.ID().getText() + "\'. expected \'seq\'", ctx.start);
+                       return;
+               }
+               ctx.info.from = ctx.from.info.expr;
+               ctx.info.to = ctx.to.info.expr;
+               ctx.info.increment = ctx.increment.info.expr;
+       }
+
+
+       // -----------------------------------------------------------------
+       //                              Internal & External Functions 
Definitions
+       // -----------------------------------------------------------------
+
        @Override
        public void 
exitInternalFunctionDefExpression(InternalFunctionDefExpressionContext ctx) {
                FunctionStatement functionStmt = new FunctionStatement();
-               
+
                ArrayList<DataIdentifier> functionInputs  = 
getFunctionParameters(ctx.inputParams);
                functionStmt.setInputParams(functionInputs);
-               
+
                // set function outputs
                ArrayList<DataIdentifier> functionOutputs = 
getFunctionParameters(ctx.outputParams);
                functionStmt.setOutputParams(functionOutputs);
-               
+
                // set function name
                functionStmt.setName(ctx.name.getText());
-               
-               
+
+
                if(ctx.body.size() > 0) {
                        // handle function body
                        // Create arraylist of one statement block
@@ -1311,29 +715,29 @@ public class DmlSyntacticValidator implements DmlListener
                        functionStmt.mergeStatementBlocks();
                }
                else {
-                       helper.notifyErrorListeners("functions with no 
statements are not allowed", ctx.start);
+                       notifyErrorListeners("functions with no statements are 
not allowed", ctx.start);
                        return;
                }
-               
+
                ctx.info.stmt = functionStmt;
                setFileLineColumn(ctx.info.stmt, ctx);
                ctx.info.functionName = ctx.name.getText();
        }
-       
+
        @Override
        public void 
exitExternalFunctionDefExpression(ExternalFunctionDefExpressionContext ctx) {
                ExternalFunctionStatement functionStmt = new 
ExternalFunctionStatement();
-               
+
                ArrayList<DataIdentifier> functionInputs  = 
getFunctionParameters(ctx.inputParams);
                functionStmt.setInputParams(functionInputs);
-               
+
                // set function outputs
                ArrayList<DataIdentifier> functionOutputs = 
getFunctionParameters(ctx.outputParams);
                functionStmt.setOutputParams(functionOutputs);
-               
+
                // set function name
                functionStmt.setName(ctx.name.getText());
-               
+
                // set other parameters
                HashMap<String, String> otherParams = new 
HashMap<String,String>();
                boolean atleastOneClassName = false;
@@ -1350,74 +754,59 @@ public class DmlSyntacticValidator implements DmlListener
                                // Empty value allowed
                        }
                        else {
-                               helper.notifyErrorListeners("the value of user 
parameter for external function should be of type string", ctx.start);
+                               notifyErrorListeners("the value of user 
parameter for external function should be of type string", ctx.start);
                                return;
                        }
                        otherParams.put(paramName, val);
-                       if(paramName.compareTo("classname") == 0) {
+                       if(paramName.equals("classname")) {
                                atleastOneClassName = true;
                        }
                }
                functionStmt.setOtherParams(otherParams);
                if(!atleastOneClassName) {
-                       helper.notifyErrorListeners("the parameter 
\'className\' needs to be passed for externalFunction", ctx.start);
+                       notifyErrorListeners("the parameter \'className\' needs 
to be passed for externalFunction", ctx.start);
                        return;
                }
-               
-//             if(ctx.body.size() > 0) {
-//                     // handle function body
-//                     // Create arraylist of one statement block
-//                     ArrayList<StatementBlock> body = new 
ArrayList<StatementBlock>();
-//                     for(StatementContext stmtCtx : ctx.body) {
-//                             body.add(getStatementBlock(stmtCtx.info.stmt));
-//                     }
-//                     ((ExternalFunctionStatement) 
functionStmt).setBody(body);
-//                     ((ExternalFunctionStatement) 
functionStmt).mergeStatementBlocks();
-//             }
-//             else {
-//                     helper.notifyErrorListeners("functions with no 
statements are not allowed", ctx.start);
-//                     return;
-//             }
-               
+
                ctx.info.stmt = functionStmt;
                setFileLineColumn(ctx.info.stmt, ctx);
                ctx.info.functionName = ctx.name.getText();
        }
-       
-       
+
+
        @Override
        public void exitPathStatement(PathStatementContext ctx) {
                PathStatement stmt = new PathStatement(ctx.pathValue.getText());
                String filePath = ctx.pathValue.getText();
-               if((filePath.startsWith("\"") && filePath.endsWith("\"")) || 
-                               filePath.startsWith("'") && 
filePath.endsWith("'")) {   
+               if((filePath.startsWith("\"") && filePath.endsWith("\"")) ||
+                               filePath.startsWith("'") && 
filePath.endsWith("'")) {
                        filePath = filePath.substring(1, filePath.length()-1);
                }
-               
+
                _workingDir = filePath;
                ctx.info.stmt = stmt;
        }
-       
+
        @Override
        public void 
exitIfdefAssignmentStatement(IfdefAssignmentStatementContext ctx) {
                if(!ctx.commandLineParam.getText().startsWith("$")) {
-                       helper.notifyErrorListeners("the first argument of 
ifdef function should be a commandline argument parameter (which starts with 
$)", ctx.commandLineParam.start);
+                       notifyErrorListeners("the first argument of ifdef 
function should be a commandline argument parameter (which starts with $)", 
ctx.commandLineParam.start);
                        return;
                }
-               
-               if(ctx.targetList == null || ctx.targetList.size() != 1) {
-                       helper.notifyErrorListeners("incorrect parsing for 
ifdef function", ctx.start);
+
+               if(ctx.targetList == null) {
+                       notifyErrorListeners("ifdef assignment needs an lvalue 
", ctx.start);
                        return;
                }
-               String targetListText = ctx.targetList.get(0).getText(); 
+               String targetListText = ctx.targetList.getText();
                if(targetListText.startsWith("$")) {
-                       helper.notifyErrorListeners("lhs of ifdef function 
cannot be a commandline parameters. Use local variable instead", ctx.start);
+                       notifyErrorListeners("lhs of ifdef function cannot be a 
commandline parameters. Use local variable instead", ctx.start);
                        return;
                }
-               
-               DataIdentifier target = null; 
-               if(ctx.targetList.get(0).dataInfo.expr instanceof 
DataIdentifier) {
-                       target = (DataIdentifier) 
ctx.targetList.get(0).dataInfo.expr;
+
+               DataIdentifier target = null;
+               if(ctx.targetList.dataInfo.expr instanceof DataIdentifier) {
+                       target = (DataIdentifier) ctx.targetList.dataInfo.expr;
                        Expression source = null;
                        if(ctx.commandLineParam.dataInfo.expr != null) {
                                // Since commandline parameter is set
@@ -1429,105 +818,146 @@ public class DmlSyntacticValidator implements 
DmlListener
                        else {
                                source = ctx.source.info.expr;
                        }
-                       
+
                        int line = ctx.start.getLine();
                        int col = ctx.start.getCharPositionInLine();
                        try {
                                ctx.info.stmt = new AssignmentStatement(target, 
source, line, col, line, col);
                                setFileLineColumn(ctx.info.stmt, ctx);
                        } catch (LanguageException e) {
-                               helper.notifyErrorListeners("invalid assignment 
for ifdef function", ctx.targetList.get(0).start);
+                               notifyErrorListeners("invalid assignment for 
ifdef function", ctx.targetList.start);
                                return;
-                       } 
-                       
+                       }
+
                }
                else {
-                       helper.notifyErrorListeners("incorrect lvalue in ifdef 
function... strange", ctx.targetList.get(0).start);
+                       notifyErrorListeners("incorrect lvalue in ifdef 
function ", ctx.targetList.start);
                        return;
                }
-               
        }
-       
-       // 
----------------------------------------------------------------------
-       @Override
-       public void exitParameterizedExpression(ParameterizedExpressionContext 
ctx) { }
 
-
-       @Override
-       public void 
exitStrictParameterizedExpression(StrictParameterizedExpressionContext ctx) { }
-
-       @Override
-       public void exitTypedArgNoAssign(TypedArgNoAssignContext ctx) { }
-       @Override
-       public void 
enterIfdefAssignmentStatement(IfdefAssignmentStatementContext ctx) { }
-       @Override
-       public void enterMatrixDataTypeCheck(MatrixDataTypeCheckContext ctx) { }
        @Override
        public void exitMatrixDataTypeCheck(MatrixDataTypeCheckContext ctx) {
-               if(             ctx.ID().getText().compareTo("matrix") == 0 
-                               || ctx.ID().getText().compareTo("Matrix") == 0 
-                               || ctx.ID().getText().compareTo("Scalar") == 0
-                               || ctx.ID().getText().compareTo("scalar") == 0
-                               ) {
-                       // Do nothing
-               }
-               else {
-                       helper.notifyErrorListeners("incorrect datatype 
(expected matrix or scalar)", ctx.start);
+               boolean validMatrixType = ctx.ID().getText().equals("matrix")
+                                                               || 
ctx.ID().getText().equals("Matrix")
+                                                               || 
ctx.ID().getText().equals("Scalar")
+                                                               || 
ctx.ID().getText().equals("scalar");
+               if(!validMatrixType     ) {
+                       notifyErrorListeners("incorrect datatype (expected 
matrix or scalar)", ctx.start);
                }
        }
-       
-       @Override
-       public void 
enterBuiltinFunctionExpression(BuiltinFunctionExpressionContext ctx) {}
-       @Override
-       public void 
enterStrictParameterizedKeyValueString(StrictParameterizedKeyValueStringContext 
ctx) { }
-       @Override
-       public void 
exitStrictParameterizedKeyValueString(StrictParameterizedKeyValueStringContext 
ctx) {}
-       @Override
-       public void 
enterIterablePredicateColonExpression(IterablePredicateColonExpressionContext 
ctx) {}
-       @Override
-       public void 
enterIterablePredicateSeqExpression(IterablePredicateSeqExpressionContext ctx) 
{ }
-       
-       @Override
-       public void 
exitIterablePredicateColonExpression(IterablePredicateColonExpressionContext 
ctx) {
-               ctx.info.from = ctx.from.info.expr;
-               ctx.info.to = ctx.to.info.expr;
-               ctx.info.increment = null;
-       }
-       
-       @Override
-       public void 
exitIterablePredicateSeqExpression(IterablePredicateSeqExpressionContext ctx) {
-               if(ctx.ID().getText().compareTo("seq") != 0) {
-                       helper.notifyErrorListeners("incorrect function:\'" + 
ctx.ID().getText() + "\'. expected \'seq\'", ctx.start);
-                       return;
-               }
-               ctx.info.from = ctx.from.info.expr;
-               ctx.info.to = ctx.to.info.expr;
-               ctx.info.increment = ctx.increment.info.expr;           
-       }
-       
-       @Override
-       public void enterConstFalseExpression(ConstFalseExpressionContext ctx) 
{ }
-       @Override
-       public void enterConstTrueExpression(ConstTrueExpressionContext ctx) { }
-       
-       @Override
-       public void exitConstFalseExpression(ConstFalseExpressionContext ctx) {
-               boolean val = false;
-               int linePosition = ctx.start.getLine();
-               int charPosition = ctx.start.getCharPositionInLine();
-               ctx.info.expr = new BooleanIdentifier(val, 
helper.getCurrentFileName(), linePosition, charPosition, linePosition, 
charPosition);
-               setFileLineColumn(ctx.info.expr, ctx);
-       }
-       
-       
-       @Override
-       public void exitConstTrueExpression(ConstTrueExpressionContext ctx) {
-               boolean val = true;
-               int linePosition = ctx.start.getLine();
-               int charPosition = ctx.start.getCharPositionInLine();
-               ctx.info.expr = new BooleanIdentifier(val, 
helper.getCurrentFileName(), linePosition, charPosition, linePosition, 
charPosition);
-               setFileLineColumn(ctx.info.expr, ctx);
-       }
-       
-               
+
+
+       // -----------------------------------------------------------------
+       //                      Not overridden
+       // -----------------------------------------------------------------
+
+       @Override public void visitTerminal(TerminalNode node) {}
+
+       @Override public void visitErrorNode(ErrorNode node) {}
+
+       @Override public void exitEveryRule(ParserRuleContext ctx) {}
+
+       @Override public void 
enterModIntDivExpression(ModIntDivExpressionContext ctx) {}
+
+       @Override public void 
enterExternalFunctionDefExpression(ExternalFunctionDefExpressionContext ctx) {}
+
+       @Override public void 
enterBooleanNotExpression(BooleanNotExpressionContext ctx) {}
+
+       @Override public void enterPowerExpression(PowerExpressionContext ctx) 
{}
+
+       @Override public void 
enterInternalFunctionDefExpression(InternalFunctionDefExpressionContext ctx) {}
+
+       @Override public void 
enterBuiltinFunctionExpression(BuiltinFunctionExpressionContext ctx) {}
+
+       @Override public void 
enterConstIntIdExpression(ConstIntIdExpressionContext ctx) {}
+
+       @Override public void enterAtomicExpression(AtomicExpressionContext 
ctx) {}
+
+       @Override public void 
enterIfdefAssignmentStatement(IfdefAssignmentStatementContext ctx) {}
+
+       @Override public void 
enterConstStringIdExpression(ConstStringIdExpressionContext ctx) {}
+
+       @Override public void 
enterConstTrueExpression(ConstTrueExpressionContext ctx) {}
+
+       @Override public void enterParForStatement(ParForStatementContext ctx) 
{}
+
+       @Override public void enterUnaryExpression(UnaryExpressionContext ctx) 
{}
+
+       @Override public void enterImportStatement(ImportStatementContext ctx) 
{}
+
+       @Override public void enterPathStatement(PathStatementContext ctx) {}
+
+       @Override public void enterWhileStatement(WhileStatementContext ctx) {}
+
+       @Override public void 
enterCommandlineParamExpression(CommandlineParamExpressionContext ctx) {}
+
+       @Override public void 
enterFunctionCallAssignmentStatement(FunctionCallAssignmentStatementContext 
ctx) {}
+
+       @Override public void enterAddSubExpression(AddSubExpressionContext 
ctx) {}
+
+       @Override public void enterIfStatement(IfStatementContext ctx) {}
+
+       @Override public void 
enterConstDoubleIdExpression(ConstDoubleIdExpressionContext ctx) {}
+
+       @Override public void 
enterMatrixMulExpression(MatrixMulExpressionContext ctx) {}
+
+       @Override public void 
enterMatrixDataTypeCheck(MatrixDataTypeCheckContext ctx) {}
+
+       @Override public void 
enterCommandlinePositionExpression(CommandlinePositionExpressionContext ctx) {}
+
+       @Override public void 
enterIterablePredicateColonExpression(IterablePredicateColonExpressionContext 
ctx) {}
+
+       @Override public void 
enterAssignmentStatement(AssignmentStatementContext ctx) {}
+
+       @Override public void enterValueType(ValueTypeContext ctx) {}
+
+       @Override public void exitValueType(ValueTypeContext ctx) {}
+
+       @Override public void enterMl_type(Ml_typeContext ctx) {}
+
+       @Override public void exitMl_type(Ml_typeContext ctx) {}
+
+       @Override public void 
enterBooleanAndExpression(BooleanAndExpressionContext ctx) {}
+
+       @Override public void enterForStatement(ForStatementContext ctx) {}
+
+       @Override public void 
enterRelationalExpression(RelationalExpressionContext ctx) {}
+
+       @Override public void enterTypedArgNoAssign(TypedArgNoAssignContext 
ctx) {}
+
+       @Override public void exitTypedArgNoAssign(TypedArgNoAssignContext ctx) 
{}
+
+       @Override public void 
enterStrictParameterizedExpression(StrictParameterizedExpressionContext ctx) {}
+
+       @Override public void 
exitStrictParameterizedExpression(StrictParameterizedExpressionContext ctx) {}
+
+       @Override public void enterMultDivExpression(MultDivExpressionContext 
ctx) {}
+
+       @Override public void 
enterConstFalseExpression(ConstFalseExpressionContext ctx) {}
+
+       @Override public void 
enterStrictParameterizedKeyValueString(StrictParameterizedKeyValueStringContext 
ctx) {}
+
+       @Override public void 
exitStrictParameterizedKeyValueString(StrictParameterizedKeyValueStringContext 
ctx) {}
+
+       @Override public void enterProgramroot(ProgramrootContext ctx) {}
+
+       @Override public void exitProgramroot(ProgramrootContext ctx) {}
+
+       @Override public void enterDataIdExpression(DataIdExpressionContext 
ctx) {}
+
+       @Override public void enterIndexedExpression(IndexedExpressionContext 
ctx) {}
+
+       @Override public void 
enterParameterizedExpression(ParameterizedExpressionContext ctx) {}
+
+       @Override public void 
exitParameterizedExpression(ParameterizedExpressionContext ctx) {}
+
+       @Override public void 
enterFunctionCallMultiAssignmentStatement(FunctionCallMultiAssignmentStatementContext
 ctx) {}
+
+       @Override public void 
enterIterablePredicateSeqExpression(IterablePredicateSeqExpressionContext ctx) 
{}
+
+       @Override public void 
enterSimpleDataIdentifierExpression(SimpleDataIdentifierExpressionContext ctx) 
{}
+
+       @Override public void 
enterBooleanOrExpression(BooleanOrExpressionContext ctx) {}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/6017f069/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidatorHelper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidatorHelper.java 
b/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidatorHelper.java
deleted file mode 100644
index a1bd06f..0000000
--- a/src/main/java/org/apache/sysml/parser/dml/DmlSyntacticValidatorHelper.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sysml.parser.dml;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.antlr.v4.runtime.Token;
-
-import org.apache.sysml.parser.DMLProgram;
-import 
org.apache.sysml.parser.dml.DmlParser.FunctionCallAssignmentStatementContext;
-import org.apache.sysml.parser.dml.DmlParser.ParameterizedExpressionContext;
-import 
org.apache.sysml.parser.dml.DmlSyntacticErrorListener.CustomDmlErrorListener;
-
-public class DmlSyntacticValidatorHelper {
-       
-       private CustomDmlErrorListener _errorListener = null;
-       
-       public DmlSyntacticValidatorHelper(CustomDmlErrorListener 
errorListener) {
-               this._errorListener = errorListener;
-       }
-       
-       public void notifyErrorListeners(String message, int line, int 
charPositionInLine) {
-               this._errorListener.validationError(line, charPositionInLine, 
message);
-       }
-       
-       public void notifyErrorListeners(String message, Token op) {
-               this._errorListener.validationError(op.getLine(), 
op.getCharPositionInLine(), message);
-       }
-       
-       public void raiseWarning(String message, Token op) {
-               this._errorListener.validationWarning(op.getLine(), 
op.getCharPositionInLine(), message);
-       }
-       
-       public String getCurrentFileName() {
-               return _errorListener.peekFileName();
-       }
-       
-//     public static void 
setInfoForArithmeticOp(org.apache.sysml.parser.Expression current, 
-//                     org.apache.sysml.parser.Expression left, 
-//                     org.apache.sysml.parser.Expression right, String opStr) 
{
-//             try {
-//                     // PLUS, MINUS, MULT, DIV, MODULUS, INTDIV, MATMULT, 
POW, INVALID
-//                     org.apache.sysml.parser.Expression.BinaryOp bop = 
org.apache.sysml.parser.Expression.getBinaryOp(opStr);
-//                     current = new 
org.apache.sysml.parser.BinaryExpression(bop);
-//                     
((org.apache.sysml.parser.BinaryExpression)current).setLeft(left);
-//                     
((org.apache.sysml.parser.BinaryExpression)current).setRight(right);
-//                     
((org.apache.sysml.parser.BinaryExpression)current).setFilename(DmlSyntacticErrorListener.currentFileName.peek());
-//             }
-//             catch(Exception e) {
-//                     System.out.println("In setInfoForArithmeticOp>>");
-//                     e.printStackTrace();
-//             }
-//     }
-       
-//     public static void 
setInfoForBooleanOp(org.apache.sysml.parser.Expression current, 
-//                     org.apache.sysml.parser.Expression left, 
-//                     org.apache.sysml.parser.Expression right, String opStr) 
{
-//             org.apache.sysml.parser.Expression.BooleanOp bop = 
org.apache.sysml.parser.Expression.getBooleanOp(opStr);
-//             current = new org.apache.sysml.parser.BooleanExpression(bop);
-//             
((org.apache.sysml.parser.BooleanExpression)current).setLeft(left);
-//             
((org.apache.sysml.parser.BooleanExpression)current).setRight(right);
-//             
((org.apache.sysml.parser.BooleanExpression)current).setFilename(DmlSyntacticErrorListener.currentFileName.peek());
-//     }
-       
-       public boolean 
validateBuiltinFunctions(FunctionCallAssignmentStatementContext ctx) {
-               String functionName = ctx.name.getText().replaceAll(" ", 
"").trim();
-               if(functionName.compareTo("write") == 0 || 
functionName.compareTo(DMLProgram.DEFAULT_NAMESPACE + "::write") == 0) {
-                       return validateBuiltinWriteFunction(ctx);
-               }
-               return true;
-       }
-       
-       private boolean 
validateBuiltinWriteFunction(FunctionCallAssignmentStatementContext ctx) {
-               
-               return true;
-       }
-       
-       public ArrayList<org.apache.sysml.parser.ParameterExpression> 
getParameterExpressionList(List<ParameterizedExpressionContext> paramExprs) {
-               ArrayList<org.apache.sysml.parser.ParameterExpression> retVal = 
new ArrayList<org.apache.sysml.parser.ParameterExpression>();
-               for(ParameterizedExpressionContext ctx : paramExprs) {
-                       String paramName = null;
-                       if(ctx.paramName != null && ctx.paramName.getText() != 
null && !ctx.paramName.getText().isEmpty()) {
-                               paramName = ctx.paramName.getText();
-                       }
-                       org.apache.sysml.parser.ParameterExpression myArg = new 
org.apache.sysml.parser.ParameterExpression(paramName, ctx.paramVal.info.expr);
-                       retVal.add(myArg);
-               }
-               return retVal;
-       }
-}

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/6017f069/src/main/java/org/apache/sysml/parser/dml/ExpressionInfo.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/dml/ExpressionInfo.java 
b/src/main/java/org/apache/sysml/parser/dml/ExpressionInfo.java
deleted file mode 100644
index 436c409..0000000
--- a/src/main/java/org/apache/sysml/parser/dml/ExpressionInfo.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sysml.parser.dml;
-
-
-public class ExpressionInfo {
-       
-       public org.apache.sysml.parser.Expression expr = null;
-
-       // For parfor and for
-       public org.apache.sysml.parser.Expression from = null;
-       public org.apache.sysml.parser.Expression to = null;
-       public org.apache.sysml.parser.Expression increment = null;
-}

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/6017f069/src/main/java/org/apache/sysml/parser/dml/StatementInfo.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/dml/StatementInfo.java 
b/src/main/java/org/apache/sysml/parser/dml/StatementInfo.java
deleted file mode 100644
index fd4c50e..0000000
--- a/src/main/java/org/apache/sysml/parser/dml/StatementInfo.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sysml.parser.dml;
-
-import java.util.HashMap;
-import org.apache.sysml.parser.DMLProgram;
-
-public class StatementInfo {
-
-       public org.apache.sysml.parser.Statement stmt = null;
-       
-       // Valid only for import statements
-       public HashMap<String,DMLProgram> namespaces = null;
-       
-       // Valid only for function statement
-       //public String namespace = DMLProgram.DEFAULT_NAMESPACE;
-       public String functionName = "";
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/6017f069/src/main/java/org/apache/sysml/parser/pydml/ExpressionInfo.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/pydml/ExpressionInfo.java 
b/src/main/java/org/apache/sysml/parser/pydml/ExpressionInfo.java
deleted file mode 100644
index 6cf5773..0000000
--- a/src/main/java/org/apache/sysml/parser/pydml/ExpressionInfo.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sysml.parser.pydml;
-
-/**
- * This class exists solely to prevent compiler warnings.
- * 
- * <p>
- * The ExpressionInfo and StatementInfo classes are shared among both parsers
- * (R-like and Python-like dialects), and Antlr-generated code assumes that
- * these classes are present in the parser's namespace.
- */
-class ExpressionInfo extends org.apache.sysml.parser.dml.ExpressionInfo {
-
-}


Reply via email to