| 148 | } |
| 149 | |
| 150 | public Token nextToken() throws LexerException { |
| 151 | int d; |
| 152 | |
| 153 | Token token = null; |
| 154 | |
| 155 | loop: while (token == null) { |
| 156 | int c = la(); |
| 157 | switch (c) { |
| 158 | case -1: |
| 159 | token = newToken(EOF, null); |
| 160 | break loop; |
| 161 | case '{': |
| 162 | consume(); |
| 163 | token = newToken(LEFT_BRACE, "{"); |
| 164 | break loop; |
| 165 | case '}': |
| 166 | consume(); |
| 167 | token = newToken(RIGHT_BRACE, "}"); |
| 168 | break loop; |
| 169 | case '(': |
| 170 | consume(); |
| 171 | token = newToken(LEFT_PAREN, "("); |
| 172 | break loop; |
| 173 | case ')': |
| 174 | consume(); |
| 175 | token = newToken(RIGHT_PAREN, ")"); |
| 176 | break loop; |
| 177 | case '[': |
| 178 | consume(); |
| 179 | token = newToken(LEFT_BRACKET, "["); |
| 180 | break loop; |
| 181 | case ']': |
| 182 | consume(); |
| 183 | token = newToken(RIGHT_BRACKET, "["); |
| 184 | break loop; |
| 185 | case '.': |
| 186 | d = la(2); |
| 187 | if (d >= '0' && d <= '9') { |
| 188 | token = decimalLiteral(); |
| 189 | break loop; |
| 190 | } |
| 191 | consume(); |
| 192 | token = newToken(DOT, "."); |
| 193 | break loop; |
| 194 | case ';': |
| 195 | consume(); |
| 196 | token = newToken(SEMICOLON, ";"); |
| 197 | break loop; |
| 198 | case ',': |
| 199 | consume(); |
| 200 | token = newToken(COMMA, ","); |
| 201 | break loop; |
| 202 | case ':': |
| 203 | consume(); |
| 204 | token = newToken(COLON, ":"); |
| 205 | break loop; |
| 206 | case '?': |
| 207 | consume(); |