package test.parser;

import compiler.parser.Token;
import compiler.parser.Tokenizer;

/*
 * Created on 7 Apr 2010
 */

/**
 * @author Anthony Bryant
 * 
 */
public class ExpressionTokenizer extends Tokenizer
{
  
  private int state = 0;
  
  /**
   * @see compiler.parser.Tokenizer#generateToken()
   */
  @Override
  protected Token generateToken()
  {
    state++;
    /*
    switch (state)
    {
    case 1:
      return new Token(ExpressionType.NUMBER, new Number(1));
    case 2:
      return new Token(ExpressionType.TIMES, null);
    case 3:
      return new Token(ExpressionType.NUMBER, new Number(2));
    case 4:
      return new Token(ExpressionType.PLUS, null);
    case 5:
      return new Token(ExpressionType.NUMBER, new Number(3));
    case 6:
      return new Token(ExpressionType.LPAREN, null);
    case 7:
      return new Token(ExpressionType.NUMBER, new Number(5));
    case 8:
      return new Token(ExpressionType.PLUS, null);
    case 9:
      return new Token(ExpressionType.NUMBER, new Number(6));
    case 10:
      return new Token(ExpressionType.RPAREN, null);
    default:
      return null;
    }
    */
    
    switch (state)
    {
    case 1:
      return new Token(ExpressionType.NUMBER, new Number(1));
    case 2:
      return new Token(ExpressionType.TIMES, ExpressionType.TIMES);
    case 3:
      return new Token(ExpressionType.NUMBER, new Number(2));
    case 4:
      return new Token(ExpressionType.PLUS, ExpressionType.PLUS);
    case 5:
      return new Token(ExpressionType.NUMBER, new Number(3));
    case 6:
      return new Token(ExpressionType.TIMES, ExpressionType.TIMES);
    case 7:
      return new Token(ExpressionType.LPAREN, ExpressionType.LPAREN);
    case 8:
      return new Token(ExpressionType.NUMBER, new Number(12));
    case 9:
      return new Token(ExpressionType.MINUS, ExpressionType.MINUS);
    case 10:
      return new Token(ExpressionType.NUMBER, new Number(6));
    case 11:
      return new Token(ExpressionType.RPAREN, ExpressionType.RPAREN);
    default:
      return null;
    }
    
  }
  
}

@@ -241,189 +241,52 @@
  %0A  
-/**%0A   * @see compiler.parser.Tokenizer#generateToken()%0A   */%0A  @Override%0A  protected Token generateToken()%0A  %7B%0A    state++;%0A    /*%0A    switch (state)%0A    %7B%0A    case 1:%0A      return
+private static final Token%5B%5D TEST1 =%0A  %7B%0A   
  new
@@ -333,34 +333,13 @@
 (1))
-;%0A    case 2:%0A      return
+,%0A   
  new
@@ -371,39 +371,34 @@
 ES, 
-null);%0A    case 3:%0A      return
+ExpressionType.TIMES),%0A   
  new
@@ -445,35 +445,14 @@
 (2))
-;
+,
 %0A    
-case 4:%0A      return 
 new 
@@ -482,39 +482,33 @@
 US, 
-null);%0A    case 5:%0A      return
+ExpressionType.PLUS),%0A   
  new
@@ -555,34 +555,72 @@
 (3))
-;
+,
 %0A    
-case 6:%0A      return
+new Token(ExpressionType.TIMES, ExpressionType.TIMES),%0A   
  new
@@ -653,39 +653,35 @@
 EN, 
-null);%0A    case 7:%0A      return
+ExpressionType.LPAREN),%0A   
  new
@@ -725,37 +725,17 @@
 ber(
-5));%0A    case 8:%0A      return
+12)),%0A   
  new
@@ -760,45 +760,41 @@
 ype.
-PL
+MIN
 US, 
-null);%0A    case 9:%0A      return
+ExpressionType.MINUS),%0A   
  new
@@ -841,35 +841,13 @@
 (6))
-;%0A    case 10:%0A      return
+,%0A   
  new
@@ -880,188 +880,85 @@
 EN, 
-null);%0A    default:%0A      return null;%0A  
+ExpressionType.RPAREN)%0A
   %7D
+;
 %0A  
-  */%0A    %0A    switch (state)%0A    %7B%0A    case 1:%0A      return new Token(ExpressionType.NUMBER, new Number(1));%0A    case 2:%0A      return
+%0A  private static final Token%5B%5D TEST2 =%0A  %7B%0A   
  new
@@ -971,37 +971,38 @@
 (ExpressionType.
-TIMES
+LPAREN
 , ExpressionType
@@ -1006,40 +1006,20 @@
 ype.
-TIMES);%0A    case 3:%0A      return
+LPAREN),%0A   
  new
@@ -1063,37 +1063,16 @@
 ber(
-2));%0A    case 4:%0A      return
+6)),%0A   
  new
@@ -1085,35 +1085,36 @@
 (ExpressionType.
-PLU
+TIME
 S, ExpressionTyp
@@ -1119,40 +1119,20 @@
 ype.
-PLUS);
+TIMES),
 %0A    
-case 5:%0A      return 
 new 
@@ -1175,38 +1175,17 @@
 ber(
-3));
+2)),
 %0A    
-case 6:%0A      return 
 new 
@@ -1197,37 +1197,38 @@
 (ExpressionType.
-TIMES
+RPAREN
 , ExpressionType
@@ -1232,426 +1232,276 @@
 ype.
-TIMES);%0A    case 7:%0A      return new Token(ExpressionType.LPAREN, ExpressionType.LPAREN)
+RPAREN)%0A  %7D;%0A  %0A  private Token%5B%5D tokens = TEST2
 ;%0A  
+%0A
   
-case 8:%0A      return new Token(ExpressionType.NUMBER, new Number(12));%0A    case 9:%0A      return new Token(ExpressionType.MINUS, ExpressionType.MINUS);%0A    case 10:%0A      return new Token(ExpressionType.NUMBER, new Number(6));%0A    case 11:%0A      return new Token(ExpressionType.RPAREN, ExpressionType.RPAREN);%0A    default:%0A  
+%0A  %0A  /**%0A   * @see compiler.parser.Tokenizer#generateToken()%0A   */%0A  @Override%0A  protected Token generateToken()%0A  %7B%0A    if (state %3C tokens.length)%0A    %7B%0A      state++;%0A      return tokens%5Bstate - 1%5D;%0A    %7D%0A    %0A
     
@@ -1513,27 +1513,16 @@
 n null;%0A
-    %7D%0A    %0A
   %7D%0A  %0A%7D

Improve token storage and generation in the test expression tokenizer.