Repository: incubator-systemml
Updated Branches:
  refs/heads/master 8c3f97276 -> c27e74547


Better error messages in case of parse errors.

Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/c27e7454
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/c27e7454
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/c27e7454

Branch: refs/heads/master
Commit: c27e74547b954a413002e75bd90b6f15b2ee189b
Parents: 8c3f972
Author: Niketan Pansare <[email protected]>
Authored: Tue Dec 8 12:57:29 2015 -0800
Committer: Niketan Pansare <[email protected]>
Committed: Tue Dec 8 12:57:29 2015 -0800

----------------------------------------------------------------------
 .../sysml/parser/antlr4/DMLParserWrapper.java   | 22 +++++++++++++++++---
 .../sysml/parser/python/PyDMLParserWrapper.java | 22 +++++++++++++++++---
 2 files changed, 38 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/c27e7454/src/main/java/org/apache/sysml/parser/antlr4/DMLParserWrapper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/antlr4/DMLParserWrapper.java 
b/src/main/java/org/apache/sysml/parser/antlr4/DMLParserWrapper.java
index 5aa8776..ff16c0d 100644
--- a/src/main/java/org/apache/sysml/parser/antlr4/DMLParserWrapper.java
+++ b/src/main/java/org/apache/sysml/parser/antlr4/DMLParserWrapper.java
@@ -26,6 +26,8 @@ import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -38,7 +40,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
-
 import org.apache.sysml.api.DMLScript;
 import org.apache.sysml.conf.ConfigurationManager;
 import org.apache.sysml.parser.AParserWrapper;
@@ -229,7 +230,7 @@ public class DMLParserWrapper extends AParserWrapper
                        }
                }
                catch(Exception e) {
-                       throw new ParseException("ERROR: Cannot parse the 
program:" + fileName);
+                       throw getParseException(e, "ERROR: Cannot parse the 
program:" + fileName);
                }
                
 
@@ -249,11 +250,26 @@ public class DMLParserWrapper extends AParserWrapper
                        dmlPgm = createDMLProgram(ast);
                }
                catch(Exception e) {
-                       throw new ParseException("ERROR: Cannot translate the 
parse tree into DMLProgram:" + e.getMessage());
+                       throw getParseException(e, "ERROR: Cannot translate the 
parse tree into DMLProgram");
                }
                
                return dmlPgm;
        }
+       
+       // Alternative is to uncomment the try/catch. But this method is 
preferred as it allows throwing "ParseException" as
+       // well as providing a given message (such as "Cannot translate the 
parse tree").
+       private ParseException getParseException(Exception e, String message) {
+               String stackTrace = null;
+               try {
+                       PrintWriter printWriter = new PrintWriter(new 
StringWriter());
+                       e.printStackTrace(printWriter);
+                       stackTrace = printWriter.toString();
+               } catch(Exception e1) {}
+               if(stackTrace != null)
+                       return new ParseException(message + ":\n" + stackTrace);
+               else
+                       return new ParseException(message);
+       }
 
        private DMLProgram createDMLProgram(DmlprogramContext ast) {
 

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/c27e7454/src/main/java/org/apache/sysml/parser/python/PyDMLParserWrapper.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/parser/python/PyDMLParserWrapper.java 
b/src/main/java/org/apache/sysml/parser/python/PyDMLParserWrapper.java
index cbed5a4..72a9f0a 100644
--- a/src/main/java/org/apache/sysml/parser/python/PyDMLParserWrapper.java
+++ b/src/main/java/org/apache/sysml/parser/python/PyDMLParserWrapper.java
@@ -23,6 +23,8 @@ import java.io.ByteArrayInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -36,7 +38,6 @@ import org.antlr.v4.runtime.tree.ParseTree;
 import org.antlr.v4.runtime.tree.ParseTreeWalker;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
 import org.apache.sysml.api.DMLScript;
 import org.apache.sysml.parser.AParserWrapper;
 import org.apache.sysml.parser.DMLProgram;
@@ -204,7 +205,7 @@ public class PyDMLParserWrapper extends AParserWrapper
                        }
                }
                catch(Exception e) {
-                       throw new ParseException("ERROR: Cannot parse the 
program:" + fileName);
+                       throw getParseException(e, "ERROR: Cannot parse the 
program:" + fileName);
                }
                
 
@@ -224,11 +225,26 @@ public class PyDMLParserWrapper extends AParserWrapper
                        dmlPgm = createDMLProgram(ast);
                }
                catch(Exception e) {
-                       throw new ParseException("ERROR: Cannot translate the 
parse tree into DMLProgram:" + e.getMessage());
+                       throw getParseException(e, "ERROR: Cannot translate the 
parse tree into DMLProgram");
                }
                
                return dmlPgm;
        }
+       
+       // Alternative is to uncomment the try/catch. But this method is 
preferred as it allows throwing "ParseException" as
+       // well as providing a given message (such as "Cannot translate the 
parse tree").
+       private ParseException getParseException(Exception e, String message) {
+               String stackTrace = null;
+               try {
+                       PrintWriter printWriter = new PrintWriter(new 
StringWriter());
+                       e.printStackTrace(printWriter);
+                       stackTrace = printWriter.toString();
+               } catch(Exception e1) {}
+               if(stackTrace != null)
+                       return new ParseException(message + ":\n" + stackTrace);
+               else
+                       return new ParseException(message);
+       }
 
        private DMLProgram createDMLProgram(PmlprogramContext ast) {
 

Reply via email to