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.*;
* experimentation with the TIB spec. Once the spec is finalized it
* should probably be rewritten.
*/
-public class Tib implements Token.Stream<Character> {
+public class Tib implements Input<Character> {
public Tib(String s) throws IOException { this(new StringReader(s)); }
public Tib(Reader r) throws IOException { this(new BufferedReader(r)); }
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;
private ArrayList<Integer> istack = new ArrayList<Integer>();
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");
+ 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;
}
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<String> 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);
}