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