X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Ftib%2FTib.java;h=0cf3aab191d93ee07d1bf1a297b0616f509303b3;hb=2633ae37e220233b3bb8a71632e37a3070be6e97;hp=e4123fcd689e28e092a63e59074a9cb8b4c9c63a;hpb=ad3d28238e215a2dee9224c146a1928671c2ba89;p=sbp.git diff --git a/src/edu/berkeley/sbp/tib/Tib.java b/src/edu/berkeley/sbp/tib/Tib.java index e4123fc..0cf3aab 100644 --- a/src/edu/berkeley/sbp/tib/Tib.java +++ b/src/edu/berkeley/sbp/tib/Tib.java @@ -5,6 +5,7 @@ package edu.berkeley.sbp.tib; import edu.berkeley.sbp.*; import edu.berkeley.sbp.misc.*; +import edu.berkeley.sbp.chr.*; import java.util.*; import java.io.*; @@ -23,7 +24,7 @@ import java.io.*; * experimentation with the TIB spec. Once the spec is finalized it * should probably be rewritten. */ -public class Tib implements Token.Stream { +public class Tib implements Input { public Tib(String s) throws IOException { this(new StringReader(s)); } public Tib(Reader r) throws IOException { this(new BufferedReader(r)); } @@ -41,9 +42,12 @@ public class Tib implements Token.Stream { int _row = 1; int _col = 0; - public Token.Location getLocation() { return new CartesianInput.Location(_row, _col); } + public Input.Location getLocation() { return new CartesianLocation(_row, _col); } private BufferedReader br; + char left = CharRange.left; + char right = CharRange.right; + boolean waiting = false; char waitingChar = ' '; boolean indenting = true; @@ -51,9 +55,9 @@ public class Tib implements Token.Stream { private ArrayList istack = new ArrayList(); public Character next(int numstates, int resets, int waits) throws IOException { Character ret = nextc(numstates, resets); - if (ret==CharToken.left) System.out.print("\033[31m{\033[0m"); - else if (ret==CharToken.right) System.out.print("\033[31m}\033[0m"); - else if (ret==null) return null; + if (ret==null) return null; + else if (ret==left) System.out.print("\033[31m{\033[0m"); + else if (ret==right) System.out.print("\033[31m}\033[0m"); else System.out.print(ret); return ret; } @@ -74,7 +78,7 @@ public class Tib implements Token.Stream { if (i==-1) { if (istack.size() > 1) { istack.remove(istack.size()-1); - return CharToken.right; + return right; } return null; } @@ -91,8 +95,8 @@ public class Tib implements Token.Stream { indenting = false; waitingChar = c; waiting = true; - waitingBrace = CharToken.left; - return CharToken.right; + waitingBrace = left; + return right; //return nextc(numstates); } blank = false; @@ -106,12 +110,12 @@ public class Tib implements Token.Stream { indenting = false; istack.add(indentation); //System.out.print("\033[31m+"+indentation+"+\033[0m"); - return CharToken.left; + return left; } else /*if (indentation < last)*/ { istack.remove(istack.size()-1); //System.out.print("\033[31m-"+last+"-\033[0m"); blank = true; - return CharToken.right; + return right; } } else { blank = false; @@ -122,8 +126,8 @@ public class Tib implements Token.Stream { public Character done(char c) { switch(c) { - case '{': return CharToken.left; - case '}': return CharToken.right; + case '{': return left; + case '}': return right; default: return c; } } @@ -133,29 +137,25 @@ public class Tib implements Token.Stream { public static class Grammar extends MetaGrammar { private int anon = 0; - private final Element ws = Repeat.maximal0(nonTerminal("w")); + private final Element ws = Repeat.maximal0(getNonTerminal("w")); public Grammar() { dropAll.add(ws); } public Object walk(Tree tree) { String head = tree.head(); if (tree.numChildren()==0) return super.walk(tree); if ("{".equals(head)) { - String s = "braced"+(anon++); - Union u = nonTerminal(s); + Union u = new Union("???"); Union u2 = ((PreSequence)walk(tree, 0)).sparse(ws).buildUnion(); - u2.add(Sequence.singleton(new Element[] { u }, 0, null, null)); - return nonTerminal(s, - new PreSequence[][] { - new PreSequence[] { - new PreSequence(new Element[] { CharToken.leftBrace, - ws, - u2, - ws, - CharToken.rightBrace - }) - } - }, - false, - false); + u2.add(Sequence.singleton(new Element[] { u }, 0)); + return anonymousNonTerminal(new Sequence[][] { + new Sequence[] { + Sequence.singleton(new Element[] { CharRange.leftBrace, + ws, + u2, + ws, + CharRange.rightBrace + }, 2) + } + }); } return super.walk(tree); } @@ -164,8 +164,8 @@ public class Tib implements Token.Stream { /* public class Braces extends Union { - private static final Element left = CharToken.string("{"); - private static final Element right = CharToken.string("}"); + private static final Element left = string("{"); + private static final Element right = string("}"); public static String join(Object[] e) { StringBuffer ret = new StringBuffer();