SBP.hs / HaskellHelper cleanups
authoradam <adam@megacz.com>
Mon, 4 Sep 2006 09:48:28 +0000 (05:48 -0400)
committeradam <adam@megacz.com>
Mon, 4 Sep 2006 09:48:28 +0000 (05:48 -0400)
darcs-hash:20060904094828-5007d-c17bb57199c59e78a23c892328de7f7191c0a1f0.gz

src/SBP.hs
src/edu/berkeley/sbp/misc/HaskellHelper.java

index 510a2d4..2fec793 100644 (file)
@@ -58,8 +58,8 @@ module SBP
     ((do class_JHaskellHelper
          class_JTree
          head <- getHead_JTree t ()
-         strx <- toString_JObject ((castTLRef head) :: Jjava_lang_Object) ()
-         str  <- getStringUTF strx
+         isNull <- getIsNothing head
+         str  <- if isNull then (return "") else (toString_JObject ((castTLRef head) :: Jjava_lang_Object) () >>= getStringUTF >>= \x -> return (showUTF8 x))
          numChildren <- size_JTree t()
          children    <- if numChildren == 0
                         then do return []
@@ -68,7 +68,7 @@ module SBP
                                                 $ iterate (+1) 0
                                 h        <- mapM (\c -> haskifyTree (castTLRef c)) children
                                 return h
-         return $ Tree (showUTF8 str) children nullRegion
+         return $ Tree str children nullRegion
       ) :: JVM Tree)
 
 
index b8a6006..d4f43a7 100644 (file)
@@ -10,15 +10,27 @@ import java.io.*;
 
 public class HaskellHelper {
 
-    public static Tree main(String grammarFile, String targetFile) throws Exception {
-
-        System.err.println("parsing " + grammarFile);
-        Tree<String> res = new CharParser(MetaGrammar.newInstance()).parse(new FileInputStream(grammarFile)).expand1();
-        Union meta = Grammar.create(res, "s", new MetaGrammarBindings());
-        
-        System.err.println("parsing " + targetFile);
-        return new CharParser(meta).parse(new FileInputStream(targetFile)).expand1();
-        
+    public static Tree main(String grammarFile, String targetFile) throws Throwable {
+        try {
+            Tree<String> res = new CharParser(MetaGrammar.newInstance()).parse(new FileInputStream(grammarFile)).expand1();
+            Union meta = Grammar.create(res, "s",
+                                        new Grammar.Bindings() {
+                                            /*
+                                            public Sequence createSequence(Production p) {
+                                                Sequence ret = super.createSequence(p);
+                                                if (ret != null) return ret;
+                                                return Sequence.create(p.nonTerminal, p.elements, p.drops, false);
+                                            }
+                                            */
+                                        });
+            Tree ret = new CharParser(meta).parse(new FileInputStream(targetFile)).expand1();
+            if (ret==null) throw new NullPointerException("CharParser returned null");
+            return ret;
+        } catch (Throwable e) {
+            e.printStackTrace();
+            throw e;
+        }
     }
 
+
 }