X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Ftib%2FTib.java;h=7b3270f933dab95fd91659035765b1cb802aa900;hp=9a546e9d149978da05c19ae6eadbc574b9b1864b;hb=695b95cf0b6140177098a5a2d7117aec4017e470;hpb=80602d89ede55b9ca1669b6222a1bf80fc0c41d2 diff --git a/src/edu/berkeley/sbp/tib/Tib.java b/src/edu/berkeley/sbp/tib/Tib.java index 9a546e9..7b3270f 100644 --- a/src/edu/berkeley/sbp/tib/Tib.java +++ b/src/edu/berkeley/sbp/tib/Tib.java @@ -3,8 +3,8 @@ // You may not use this file except in compliance with the License. package edu.berkeley.sbp.tib; -//import org.ibex.util.*; -//import org.ibex.io.*; +import edu.berkeley.sbp.*; +import edu.berkeley.sbp.misc.*; import java.util.*; import java.io.*; @@ -25,37 +25,47 @@ import java.io.*; * possible (it is unclear whether or not the associated grammar is * context-free). */ -public class Tib /*implements Token.Stream*/ { - /* - public Tib(String s) { this(new StringReader(s)); } - public Tib(Reader r) { this(new BufferedReader(r)); } - public Tib(InputStream is) { this(new BufferedReader(new InputStreamReader(is))); } - public Tib(BufferedReader br) { cur = parse(br).toString(0,-1); } +public class Tib implements Token.Stream { + + public Tib(String s) throws IOException, Invalid { this(new StringReader(s)); } + public Tib(Reader r) throws IOException, Invalid { this(new BufferedReader(r)); } + public Tib(InputStream is) throws IOException, Invalid { this(new BufferedReader(new InputStreamReader(is))); } + public Tib(BufferedReader br) throws IOException, Invalid { cur = parse(br); } - boolean left = false; - boolean right = false; private Block cur; + private String s = null; int pos = 0; + int spos = 0; - public Token next() throws IOException { - if (left) { left = false; return new CharToken(-3); } - if (right) { right = false; return new CharToken(-4); } - + public CharToken next() throws IOException { if (pos >= cur.size()) { pos = cur.iip+1; cur = cur.parent; - return new CharToken(-4); + return CharToken.right; } + if (s != null) { + if (spos < s.length()) + return new CharToken(s.charAt(spos++), 0, 0); + s = null; + } Object o = cur.child(pos++); - if (o instanceof String) return new StringToken((String)o); - if (o.isLiteral()) return ((Block.Literal)o).text(); - cur = (Block)b; + if (o instanceof String) { + spos = 0; + s = (String)o; + return next(); + } + if (((Block)o).isLiteral()) { + spos = 0; + s = ((Block.Literal)o).text(); + return next(); + } + cur = (Block)o; pos = 0; - return new CharToken(-3); + return CharToken.left; } - public static Block parse(BufferedReader br) throws Invalid { + public static Block parse(BufferedReader br) throws Invalid, IOException { int row=0, col=0; try { boolean blankLine = false; @@ -104,21 +114,15 @@ public class Tib /*implements Token.Stream*/ { } } - public static class Block implements Token { + public static class Block /*implements Token*/ { Block parent; public final int row; public final int col; public final int iip; - private final Vec children = new Vec(); + private final Vector children = new Vector(); private String pending = ""; - public Tree result() { - // FIXME - } - - public Location getLocation() { return new Location.Cartesian(row, col); } - public boolean isEOF() { return false; } - + //public Location getLocation() { return /*new Location.Cartesian(row, col)*/null; } public int size() { return children.size(); } public Object child(int i) { return children.elementAt(i); } public boolean isLiteral() { return false; } @@ -237,7 +241,7 @@ public class Tib /*implements Token.Stream*/ { // Exceptions ////////////////////////////////////////////////////////////////////////////// private static class InternalException extends RuntimeException { public InternalException(String s) { super(s); } } - public static class Invalid extends IOException { + public static class Invalid extends /*IOException*/RuntimeException { public Invalid(InternalException ie, int row, int col) { super(ie.getMessage() + " at " + row + ":" + col); } @@ -245,7 +249,7 @@ public class Tib /*implements Token.Stream*/ { // Testing ////////////////////////////////////////////////////////////////////////////// - public static void main(String[] s) throws Exception { System.out.println(parse(new Stream(System.in)).toString(-1)); } + public static void main(String[] s) throws Exception { System.out.println(parse(new BufferedReader(new InputStreamReader(System.in))).toString(-1)); } // Utilities ////////////////////////////////////////////////////////////////////////////// @@ -268,6 +272,6 @@ public class Tib /*implements Token.Stream*/ { } return ret.toString(); } - */ + }