Mercurial > hg > Members > kono > PLparser
view src/plparser/PLScannerImpl.java @ 11:79d492bce828
clean up
author | one |
---|---|
date | Thu, 02 Sep 2010 11:55:56 +0900 |
parents | 619472ca4742 |
children |
line wrap: on
line source
package plparser; import java.io.FileReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Iterator; public abstract class PLScannerImpl<Node> implements PLScanner<Node> { public int lineno; public Token<Node> nextToken; public Dictionary<Node> dict; public PLScanner<Node> next; public InputStreamReader file; public String filename; public PLScanner<Node> prev; public Token<Node> nullToken; public String prompt; public static final int BufferSize = 4096; /** * Construtor for push Scanner * @param p previous scanner * @param dict dictionary * @param nullToken shared null token */ public PLScannerImpl(PLScanner<Node> p, Dictionary<Node> dict, Token<Node> nullToken) { this.prev = p; this.dict = dict; this.nullToken = nullToken; } public PLScannerImpl() { this.dict = new Dictionary<Node>(); this.nullToken = new Token<Node>("",TokenID.NULL); this.prev = null; } public PLScanner<Node> popScanner() { return prev; } private PLScanner<Node> findFileName() { for(PLScanner<Node> s = this;s!=null ; s = s.prev()) { if (s.filename()!=null) return s; } return null; } /* * Read From String */ public void error(String err) { PLScanner<Node> s = findFileName(); if (s!=null) { System.err.print(s.filename()+":"+s.lineno()+": "); } System.err.println("error: "+err); } public Iterable<Token<Node>> scanToken(String exp) { set(exp); return iterator(); } public Iterable<Token<Node>> scanToken(FileReader file) { set(file); return iterator(); } private Iterable<Token<Node>> iterator() { return new Iterable<Token<Node>>() { public Iterator<Token<Node>> iterator() { return new Iterator<Token<Node>>() { public boolean hasNext() { return hasRemaining(); } public Token<Node> next() { return nextToken(); } public void remove() { } }; } }; } public PLScanner<Node> setFile(InputStream newfile, String prompt) { this.filename = newfile.toString(); nextToken = nullToken; this.prompt = prompt; set(new InputStreamReader(newfile)); return this; } @Override public String filename() { return filename; } @Override public int lineno() { return lineno; } @Override public PLScanner<Node> prev() { return prev; } public Dictionary<Node> dictionary() { return dict; } }