ICE 3.4.2
[php5-ice-freebsdport.git] / java / demo / Freeze / library / Scanner.java
blob47f7dddb2d07116bab242292485c19e3a34bdcaa
1 // **********************************************************************
2 //
3 // Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
4 //
5 // This copy of Ice is licensed to you under the terms described in the
6 // ICE_LICENSE file included in this distribution.
7 //
8 // **********************************************************************
10 class Scanner
12 Scanner(Parser p)
14 _parser = p;
17 Token
18 nextToken()
20 String s = next();
21 if(s == null)
23 return null;
26 if(s.equals(";"))
28 return new Token(Token.TOK_SEMI);
30 else if(s.equals("help"))
32 return new Token(Token.TOK_HELP);
34 else if(s.equals("exit") || s.equals("quit"))
36 return new Token(Token.TOK_EXIT);
38 else if(s.equals("add"))
40 return new Token(Token.TOK_ADD_BOOK);
42 else if(s.equals("isbn"))
44 return new Token(Token.TOK_FIND_ISBN);
46 else if(s.equals("authors"))
48 return new Token(Token.TOK_FIND_AUTHORS);
50 else if(s.equals("next"))
52 return new Token(Token.TOK_NEXT_FOUND_BOOK);
54 else if(s.equals("current"))
56 return new Token(Token.TOK_PRINT_CURRENT);
58 else if(s.equals("rent"))
60 return new Token(Token.TOK_RENT_BOOK);
62 else if(s.equals("return"))
64 return new Token(Token.TOK_RETURN_BOOK);
66 else if(s.equals("remove"))
68 return new Token(Token.TOK_REMOVE_CURRENT);
70 else if(s.equals("size"))
72 return new Token(Token.TOK_SET_EVICTOR_SIZE);
74 else if(s.equals("shutdown"))
76 return new Token(Token.TOK_SHUTDOWN);
78 else
80 return new Token(Token.TOK_STRING, s);
84 static private class EndOfInput extends Exception
88 private char
89 get()
90 throws EndOfInput
93 // If there is an character in the unget buffer, return it.
95 if(_unget)
97 _unget = false;
98 return _ungetChar;
102 // No current buffer?
104 if(_buf == null)
106 _buf = _parser.getInput();
107 _pos = 0;
108 if(_buf == null)
110 throw new EndOfInput();
115 // At the end-of-buffer?
117 while(_pos >= _buf.length())
119 _buf = null;
120 _pos = 0;
121 return '\n';
124 return _buf.charAt(_pos++);
128 // unget only works with one character.
130 private void
131 unget(char c)
133 assert(!_unget);
134 _unget = true;
135 _ungetChar = c;
138 private String
139 next()
142 // Eat any whitespace.
144 char c;
149 c = get();
151 while(Character.isWhitespace(c) && c != '\n');
153 catch(EndOfInput ignore)
155 return null;
158 StringBuilder buf = new StringBuilder(128);
160 if(c == ';' || c == '\n')
162 buf.append(';');
164 else if(c == '\'')
168 while(true)
170 c = get();
171 if(c == '\'')
173 break;
175 else
177 buf.append(c);
181 catch(EndOfInput e)
183 _parser.warning("EOF in string");
186 else if(c == '\"')
190 while(true)
192 c = get();
193 if(c == '\"')
195 break;
197 else if(c == '\\')
201 char next = get();
202 switch(next)
204 case '\\':
205 case '"':
207 buf.append(next);
208 break;
211 case 'n':
213 buf.append('\n');
214 break;
217 case 'r':
219 buf.append('\r');
220 break;
223 case 't':
225 buf.append('\t');
226 break;
229 case 'f':
231 buf.append('\f');
232 break;
235 default:
237 buf.append(c);
238 unget(next);
242 catch(EndOfInput e)
244 buf.append(c);
247 else
249 buf.append(c);
253 catch(EndOfInput e)
255 _parser.warning("EOF in string");
258 else
261 // Otherwise it's a string.
267 buf.append(c);
268 c = get();
270 while(!Character.isWhitespace(c) && c != ';' && c != '\n');
272 unget(c);
274 catch(EndOfInput ignore)
279 return buf.toString();
282 private Parser _parser;
283 private boolean _unget = false;
284 private char _ungetChar;
285 private String _buf = null;
286 private int _pos;