1 // Simple Example Scanner Class
3 package java_cup.simple_calc;
5 import java_cup.runtime.Symbol;
7 public class scanner implements java_cup.runtime.Scanner {
8 final java.io.InputStream instream;
10 public scanner(java.io.InputStream is) throws java.io.IOException {
13 public scanner() throws java.io.IOException { this(System.in); }
15 /* single lookahead character */
16 protected int next_char = -2;
18 /* advance input by one character */
19 protected void advance()
20 throws java.io.IOException
21 { next_char = instream.read(); }
23 /* initialize the scanner */
25 throws java.io.IOException
28 /* recognize and return the next complete token */
29 public Symbol next_token()
30 throws java.io.IOException
32 if (next_char==-2) init(); // set stuff up first time we are called.
36 case '0': case '1': case '2': case '3': case '4':
37 case '5': case '6': case '7': case '8': case '9':
38 /* parse a decimal integer */
41 i_val = i_val * 10 + (next_char - '0');
43 } while (next_char >= '0' && next_char <= '9');
44 return new Symbol(sym.NUMBER, new Integer(i_val));
46 case ';': advance(); return new Symbol(sym.SEMI);
47 case '+': advance(); return new Symbol(sym.PLUS);
48 case '-': advance(); return new Symbol(sym.MINUS);
49 case '*': advance(); return new Symbol(sym.TIMES);
50 case '/': advance(); return new Symbol(sym.DIVIDE);
51 case '%': advance(); return new Symbol(sym.MOD);
52 case '(': advance(); return new Symbol(sym.LPAREN);
53 case ')': advance(); return new Symbol(sym.RPAREN);
55 case -1: return new Symbol(sym.EOF);
58 /* in this simple scanner we just ignore everything else */