Mercurial > hg > Members > kono > PLparser
view src/plparser/PLScannerImpl.java @ 7:619472ca4742
Refactoring for multiple implementation of scanner
author | one |
---|---|
date | Wed, 01 Sep 2010 15:23:37 +0900 |
parents | |
children | 79d492bce828 |
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; public PLScannerImpl() { super(); } public PLScannerImpl(PLScannerImpl<Node> plScannerImpl, Dictionary<Node> dict, Token<Node> nullToken) { this.dict = dict; this.nullToken = nullToken; } 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; } }