annotate src/plparser/PropertyListParser.java @ 4:29c0866e3a84

text
author one
date Sun, 29 Aug 2010 18:28:38 +0900
parents 1f46c9d09c1e
children 29b5497fc942
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
1 package plparser;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
2
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
3 import java.io.FileNotFoundException;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
4 import java.io.InputStream;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
5 import java.util.LinkedList;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
6
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
7
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
8 public class PropertyListParser<Node extends Property> {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
9 PropertyListNodeFactory<Node> lf;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
10 Token<Node> nextToken;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
11 public PropertyListScanner<Node> scanner;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
12 private Dictionary<Node> dict;
4
one
parents: 3
diff changeset
13 // scope is necessary if you have to parse nested name scope
2
151c7fe6c61a initialize
kono@ie.u-ryukyu.ac.jp
parents: 1
diff changeset
14 // private PropertyListScope<Node> scope;
4
one
parents: 3
diff changeset
15
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
16 public PropertyListParser(String string,
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
17 PropertyListNodeFactory<Node> lf) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
18 this.lf = lf;
2
151c7fe6c61a initialize
kono@ie.u-ryukyu.ac.jp
parents: 1
diff changeset
19 initialize();
3
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
20 scanner.set(string);
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
21 }
2
151c7fe6c61a initialize
kono@ie.u-ryukyu.ac.jp
parents: 1
diff changeset
22
4
one
parents: 3
diff changeset
23 public PropertyListParser(PropertyListNodeFactory<Node> lf) {
one
parents: 3
diff changeset
24 this.lf = lf;
one
parents: 3
diff changeset
25 initialize();
one
parents: 3
diff changeset
26 }
one
parents: 3
diff changeset
27
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
28
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
29 public void initReservedWord() {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
30 dict.reserve("=",TokenID.Assign);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
31 dict.reserve(",",TokenID.Comma);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
32 dict.reserve(";",TokenID.Semicolon);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
33 dict.reserve("(",TokenID.Paren);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
34 dict.reserve(")",TokenID.CloseParen);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
35 dict.reserve("{",TokenID.CurParen);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
36 dict.reserve("}",TokenID.CloseCurParen);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
37 dict.reserve("true",TokenID.True);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
38 dict.reserve("false",TokenID.False);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
39 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
40
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
41 public void initialize() {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
42 dict = new Dictionary<Node>();
2
151c7fe6c61a initialize
kono@ie.u-ryukyu.ac.jp
parents: 1
diff changeset
43 // scope = new PropertyListScope<Node>(null,dict);
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
44 initReservedWord();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
45 scanner = new PropertyListScanner<Node>(dict);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
46 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
47
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
48 public Node parse() {
4
one
parents: 3
diff changeset
49 if (scanner==null) return null; // internal error
one
parents: 3
diff changeset
50 if (scanner.cb==null) return null; // nothing to do
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
51 nextToken();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
52 return term();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
53 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
54
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
55 public Node parse(String exp) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
56 Node n;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
57 scanner = scanner.pushScanner(exp);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
58 n = parse();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
59 scanner = scanner.popScanner();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
60 nextToken = scanner.nextToken;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
61 return n;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
62
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
63 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
64
4
one
parents: 3
diff changeset
65 public Node parseFile(String file) {
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
66 try {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
67 scanner = scanner.pushScannerFile(file);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
68 } catch (FileNotFoundException e) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
69 error("Can't open "+file);
4
one
parents: 3
diff changeset
70 return null;
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
71 }
4
one
parents: 3
diff changeset
72 return doParse();
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
73 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
74
4
one
parents: 3
diff changeset
75 public Node parse(InputStream file) {
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
76 scanner = scanner.pushScannerFile(file,null);
4
one
parents: 3
diff changeset
77 return doParse();
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
78 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
79
4
one
parents: 3
diff changeset
80 public Node parse(InputStream in, String prompt) {
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
81 scanner = scanner.pushScannerFile(in,prompt);
4
one
parents: 3
diff changeset
82 return doParse();
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
83 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
84
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
85 public Node doParse() {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
86 Node n;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
87 do {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
88 n=parse();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
89 } while(scanner.hasRemaining());
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
90 scanner = scanner.popScanner();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
91 nextToken = scanner.nextToken;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
92 return n;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
93 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
94
3
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
95 /**
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
96 * expr1 {} Dictionary
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
97 * @return list of node (key,value,key,value)
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
98 */
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
99 public LinkedList<Node> expr1() {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
100 LinkedList<Node> list = new LinkedList<Node>();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
101 expr2(list);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
102 while(nextToken.type == TokenID.Semicolon) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
103 nextToken();
3
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
104 if (nextToken.type==TokenID.CloseCurParen ) return list;
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
105 expr2(list);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
106 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
107 return list;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
108 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
109
3
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
110 /**
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
111 * expr2
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
112 * key = value
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
113 */
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
114 public void expr2(LinkedList<Node>list) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
115 Node n1 = term();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
116 if (nextToken.type!=TokenID.Assign) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
117 error("needs assignment");
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
118 return;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
119 }
3
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
120 nextToken();
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
121 Node n2 = term();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
122 list.add(n1); list.add(n2);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
123 return;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
124 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
125
3
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
126 /**
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
127 * expr3 Array
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
128 * @return list of node
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
129 */
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
130 public LinkedList<Node> expr3() {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
131 LinkedList<Node>list = new LinkedList<Node>();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
132 Node n1 = term();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
133 list.add(n1);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
134 while (nextToken.type==TokenID.Comma) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
135 Node n2 = term();
3
1f46c9d09c1e Simple Example worked.
kono@ie.u-ryukyu.ac.jp
parents: 2
diff changeset
136 if (nextToken.type==TokenID.CloseParen) return list;
1
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
137 list.add(n2);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
138 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
139 return list;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
140 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
141
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
142 protected Node makeVariable(Token<Node> t) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
143 Node n;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
144 if ((n=t.value())==null) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
145 n = lf.variableNode(t.name(),true);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
146 t.setValue(n);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
147 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
148 // n.token = t;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
149 return n;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
150 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
151
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
152 protected Node term() {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
153 Node n = null;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
154 switch (nextToken.type) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
155 case Paren: // Array
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
156 nextToken();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
157 LinkedList<Node>list1 = expr3();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
158 if (nextToken.type==TokenID.CloseParen) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
159 } else { // syntax error;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
160 scanner.error(") expected but got "+nextToken);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
161 return lf.trueNode();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
162 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
163 return lf.arrayNode(list1);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
164 case CurParen: // Dictionary
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
165 nextToken();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
166 LinkedList<Node> list = expr1();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
167 if (nextToken.type==TokenID.CloseCurParen) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
168 } else { // syntax error;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
169 scanner.error("} expected");
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
170 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
171 return lf.dictionaryNode(list);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
172 case NUMBER:
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
173 n = lf.numberNode(Integer.parseInt(nextToken.name));
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
174 break;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
175 case NULL:
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
176 break;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
177 default:
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
178 if (nextToken.type.isVariable())
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
179 n = makeVariable(nextToken);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
180 else {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
181 // error("Internal ununderstandable term '"+nextToken+"' type: "+nextToken.type+".");
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
182 n = makeVariable(nextToken); // skip any
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
183 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
184 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
185 nextToken();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
186 return n;
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
187 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
188
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
189
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
190 /*
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
191 * Syntactical Short cut for scanner.textToken()
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
192 *
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
193 * It never returns null, to check EOF,
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
194 * nextToken.type==TokenID.NULL
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
195 */
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
196 public Token<Node> nextToken() {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
197 return nextToken = scanner.nextToken();
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
198 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
199
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
200
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
201 public void error(String err) {
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
202 scanner.error(err);
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
203 }
b149a5aa465a Parser is written
kono@ie.u-ryukyu.ac.jp
parents:
diff changeset
204 }