X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fchr%2FCharParser.java;fp=src%2Fedu%2Fberkeley%2Fsbp%2Fchr%2FCharParser.java;h=db235cd1e928682d06313f9e79d21640e15506ff;hb=6a2ea790f843e058c7e67d3c7d1deebadcfe1fd5;hp=0000000000000000000000000000000000000000;hpb=3468ad83256a1b996f5ddc4406a040ee72f0274a;p=sbp.git diff --git a/src/edu/berkeley/sbp/chr/CharParser.java b/src/edu/berkeley/sbp/chr/CharParser.java new file mode 100644 index 0000000..db235cd --- /dev/null +++ b/src/edu/berkeley/sbp/chr/CharParser.java @@ -0,0 +1,47 @@ +package edu.berkeley.sbp.chr; +import java.io.*; +import java.util.*; +import java.lang.reflect.*; +import java.lang.ref.*; +import edu.berkeley.sbp.*; +import edu.berkeley.sbp.util.*; +import edu.berkeley.sbp.misc.*; +import edu.berkeley.sbp.Input.Location; + +public class CharParser extends Parser { + public Forest parse(InputStream is) throws IOException, ParseFailed { + return super.parse(new Stream(is)); + } + public Forest parse(Reader r) throws IOException, ParseFailed { + return super.parse(new Stream(r)); + } + + public CharParser(Union u) { + super(u, new CharTopology()); + pt.optimize(new CharTopology()); + } + public Forest shiftToken(Character ct, Location loc) { + return Forest.create(loc, ct.toString(), null, false, false); + } + + private static class Stream extends CartesianInput { + private final Reader r; + + public Stream(String s) { this(new StringReader(s)); } + public Stream(Reader r) { this(r, null); } + public Stream(Reader r, String s) { this.r = r; } + public Stream(InputStream i) { this(i, null); } + public Stream(InputStream i, String s) { this(new InputStreamReader(i), s); } + + boolean cr = false; + public boolean isCR() { return cr; } + public Character next() throws IOException { + cr = false; + int i = r.read(); + if (i==-1) return null; + char c = (char)i; + cr = c=='\n'; + return c; + } + } +}