7
|
1 package plparser;
|
|
2
|
|
3 import java.io.FileReader;
|
|
4 import java.io.InputStream;
|
|
5 import java.io.InputStreamReader;
|
|
6 import java.util.Iterator;
|
|
7
|
|
8 public abstract class PLScannerImpl<Node> implements PLScanner<Node> {
|
|
9
|
|
10 public int lineno;
|
|
11 public Token<Node> nextToken;
|
|
12 public Dictionary<Node> dict;
|
|
13 public PLScanner<Node> next;
|
|
14 public InputStreamReader file;
|
|
15 public String filename;
|
|
16 public PLScanner<Node> prev;
|
|
17 public Token<Node> nullToken;
|
|
18 public String prompt;
|
|
19 public static final int BufferSize = 4096;
|
|
20
|
|
21 public PLScannerImpl() {
|
|
22 super();
|
|
23 }
|
|
24
|
|
25 public PLScannerImpl(PLScannerImpl<Node> plScannerImpl,
|
|
26 Dictionary<Node> dict, Token<Node> nullToken) {
|
|
27 this.dict = dict;
|
|
28 this.nullToken = nullToken;
|
|
29 }
|
|
30
|
|
31
|
|
32 public PLScanner<Node> popScanner() {
|
|
33 return prev;
|
|
34 }
|
|
35
|
|
36 private PLScanner<Node> findFileName() {
|
|
37 for(PLScanner<Node> s = this;s!=null ; s = s.prev()) {
|
|
38 if (s.filename()!=null) return s;
|
|
39 }
|
|
40 return null;
|
|
41 }
|
|
42 /*
|
|
43 * Read From String
|
|
44 */
|
|
45
|
|
46 public void error(String err) {
|
|
47 PLScanner<Node> s = findFileName();
|
|
48 if (s!=null) {
|
|
49 System.err.print(s.filename()+":"+s.lineno()+": ");
|
|
50 }
|
|
51 System.err.println("error: "+err);
|
|
52 }
|
|
53
|
|
54 public Iterable<Token<Node>> scanToken(String exp) {
|
|
55 set(exp);
|
|
56 return iterator();
|
|
57 }
|
|
58
|
|
59 public Iterable<Token<Node>> scanToken(FileReader file) {
|
|
60 set(file);
|
|
61 return iterator();
|
|
62 }
|
|
63
|
|
64 private Iterable<Token<Node>> iterator() {
|
|
65 return new Iterable<Token<Node>>() {
|
|
66 public Iterator<Token<Node>> iterator() {
|
|
67 return new Iterator<Token<Node>>() {
|
|
68 public boolean hasNext() {
|
|
69 return hasRemaining();
|
|
70 }
|
|
71 public Token<Node> next() {
|
|
72 return nextToken();
|
|
73 }
|
|
74 public void remove() {
|
|
75 }
|
|
76 };
|
|
77 }
|
|
78 };
|
|
79 }
|
|
80
|
|
81 public PLScanner<Node> setFile(InputStream newfile, String prompt) {
|
|
82 this.filename = newfile.toString();
|
|
83 nextToken = nullToken;
|
|
84 this.prompt = prompt;
|
|
85 set(new InputStreamReader(newfile));
|
|
86 return this;
|
|
87 }
|
|
88
|
|
89 @Override
|
|
90 public String filename() {
|
|
91 return filename;
|
|
92 }
|
|
93
|
|
94 @Override
|
|
95 public int lineno() {
|
|
96 return lineno;
|
|
97 }
|
|
98
|
|
99 @Override
|
|
100 public PLScanner<Node> prev() {
|
|
101 return prev;
|
|
102 }
|
|
103
|
|
104 } |