X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Ftib%2FTib.java;h=4805d1e8f543cbf16fcfef674552e391f72e3788;hb=ac3843911c47a601ffd679d2e075b519d3a18d6a;hp=4b4a24793da8664aaac1c32138f94abffeac0690;hpb=e42e16515f4392017a8109922d37dcd0926f915a;p=sbp.git diff --git a/src/edu/berkeley/sbp/tib/Tib.java b/src/edu/berkeley/sbp/tib/Tib.java index 4b4a247..4805d1e 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,7 +42,7 @@ 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 Input.Location.Cartesian(_col, _row); } private BufferedReader br; char left = CharRange.left; @@ -52,17 +53,17 @@ public class Tib implements Token.Stream { boolean indenting = true; int indentation = 0; private ArrayList istack = new ArrayList(); - public Character next(int numstates, int resets, int waits) throws IOException { - Character ret = nextc(numstates, resets); - if (ret==left) System.out.print("\033[31m{\033[0m"); + public Character next() throws IOException { + Character ret = nextc(); + 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 if (ret==null) return null; else System.out.print(ret); return ret; } Character waitingBrace = null; - public Character nextc(int numstates, int resets) throws IOException { + public Character nextc() throws IOException { char c; if (waitingBrace != null) { Character ret = waitingBrace; @@ -82,12 +83,12 @@ public class Tib implements Token.Stream { return null; } c = (char)i; + if (c=='\n') { _row++; _col=0; } + else _col++; } - if (c=='\n') { _row++; _col=0; } - else _col++; if (indenting) { if (c==' ') { indentation++; return done(c); } - if (c=='\n') { indentation = 0; if (blank) return nextc(numstates, resets); blank = true; waiting = true; waitingChar='\n'; return '\n'; } + if (c=='\n') { indentation = 0; if (blank) return nextc(); blank = true; waiting = true; waitingChar='\n'; return '\n'; } int last = istack.size()==0 ? -1 : istack.get(istack.size()-1); if (indentation==last) { if (blank) { @@ -134,31 +135,27 @@ public class Tib implements Token.Stream { // Grammar ////////////////////////////////////////////////////////////////////////////// - public static class Grammar extends MetaGrammar { + public static class Grammar extends ReflectiveGrammar { private int anon = 0; - private final Element ws = Repeat.maximal0(nonTerminal("w")); - public Grammar() { dropAll.add(ws); } + private final Element ws = Sequence.maximal0(getNonTerminal("w")); + public Grammar(Class c) { super(c); 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[] { CharRange.leftBrace, - ws, - u2, - ws, - CharRange.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); }