home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2001 December / dppcpro1201.iso / Extras / maple / Viewer / WebEQ / MMLViewerInstall.cab / MMLViewerApplet.cab / webeq3 / parser / mathml / Tokenizer.class (.txt) < prev   
Encoding:
Java Class File  |  2001-05-24  |  3.2 KB  |  168 lines

  1. package webeq3.parser.mathml;
  2.  
  3. import java.io.IOException;
  4. import java.io.StringReader;
  5. import java.util.Vector;
  6. import webeq3.util.ErrorHandler;
  7. import webeq3.util.OutputHandler;
  8.  
  9. public class Tokenizer {
  10.    Vector tokens = null;
  11.    int token_ptr = 0;
  12.    private StringReader input;
  13.    private int peekc = 32;
  14.    private byte[] ctype = new byte[256];
  15.    private static final byte CT_ALPHA = 4;
  16.    private static final byte CT_WHITE = 8;
  17.    public int ttype;
  18.    public String sval;
  19.    public static final int TT_EOF = -1;
  20.    public static final int TT_WHITE = -2;
  21.    public static final int TT_WORD = -3;
  22.  
  23.    public Tokenizer(StringReader var1) {
  24.       this.input = var1;
  25.       this.tokens = new Vector();
  26.       this.setChars(97, 122, 4);
  27.       this.setChars(65, 90, 4);
  28.       byte[] var10000 = this.ctype;
  29.       var10000[45] = (byte)(var10000[45] | 4);
  30.       this.setChars(0, 20, 8);
  31.       this.setChars(32, 32, 8);
  32.       this.lex();
  33.    }
  34.  
  35.    private void setChars(int var1, int var2, int var3) {
  36.       if (var1 < 0) {
  37.          var1 = 0;
  38.       }
  39.  
  40.       if (var2 > this.ctype.length) {
  41.          var2 = this.ctype.length;
  42.       }
  43.  
  44.       while(var1 <= var2) {
  45.          byte[] var10000 = this.ctype;
  46.          int var10001 = var1++;
  47.          var10000[var10001] = (byte)(var10000[var10001] | var3);
  48.       }
  49.  
  50.    }
  51.  
  52.    private void lex() {
  53.       try {
  54.          this.peekc = this.input.read();
  55.       } catch (IOException var4) {
  56.          this.peekc = -1;
  57.       }
  58.  
  59.       Token var1;
  60.       do {
  61.          try {
  62.             var1 = this.makeToken();
  63.             this.tokens.addElement(var1);
  64.          } catch (IOException var3) {
  65.             var1 = new Token(-1, (String)null);
  66.          }
  67.       } while(var1.ttype != -1);
  68.  
  69.    }
  70.  
  71.    public Token nextTokenOrSep() {
  72.       return this.token_ptr < this.tokens.size() ? (Token)this.tokens.elementAt(this.token_ptr++) : null;
  73.    }
  74.  
  75.    public Token nextToken() {
  76.       Token var1 = this.nextTokenOrSep();
  77.       if (this.token_ptr < this.tokens.size() && var1.ttype == -2) {
  78.          var1 = this.nextTokenOrSep();
  79.       }
  80.  
  81.       return var1;
  82.    }
  83.  
  84.    public void pushBack() {
  85.       --this.token_ptr;
  86.    }
  87.  
  88.    private Token makeToken() throws IOException {
  89.       StringReader var1 = this.input;
  90.       byte[] var2 = this.ctype;
  91.       int var3 = this.peekc;
  92.       char[] var4 = new char[10];
  93.       if (var3 < 0) {
  94.          return new Token(-1, (String)null);
  95.       } else {
  96.          byte var5 = var3 < 256 ? var2[var3] : 4;
  97.          if ((var5 & 4) != 0) {
  98.             int var13 = 0;
  99.  
  100.             do {
  101.                if (var13 >= var4.length) {
  102.                   char[] var7 = new char[var4.length * 2];
  103.                   System.arraycopy(var4, 0, var7, 0, var4.length);
  104.                   var4 = var7;
  105.                }
  106.  
  107.                var4[var13++] = (char)var3;
  108.                var3 = var1.read();
  109.                var5 = var3 < 0 ? -1 : (var3 < 256 ? var2[var3] : 4);
  110.             } while(var5 == 4);
  111.  
  112.             this.peekc = var3;
  113.             return new Token(-3, String.copyValueOf(var4, 0, var13));
  114.          } else if ((var5 & 8) != 0) {
  115.             boolean var12 = false;
  116.  
  117.             do {
  118.                var3 = var1.read();
  119.                var5 = var3 < 0 ? -1 : (var3 < 256 ? var2[var3] : 4);
  120.             } while(var5 == 8);
  121.  
  122.             this.peekc = var3;
  123.             return new Token(-2, " ");
  124.          } else {
  125.             int var8 = var1.read();
  126.             this.peekc = var8;
  127.             return new Token(var3, "" + (char)var3);
  128.          }
  129.       }
  130.    }
  131.  
  132.    public void print() {
  133.       while(this.token_ptr < this.tokens.size()) {
  134.          System.out.println(this.nextTokenOrSep());
  135.       }
  136.  
  137.       this.token_ptr = 0;
  138.    }
  139.  
  140.    public void printError(ErrorHandler var1) {
  141.       this.token_ptr = this.token_ptr < this.tokens.size() ? this.token_ptr : this.tokens.size() - 1;
  142.       int var2 = this.token_ptr - 30 > 0 ? this.token_ptr - 30 : 0;
  143.       int var3 = this.token_ptr + 20 < this.tokens.size() - 1 ? this.token_ptr + 20 : this.tokens.size() - 1;
  144.       int var4 = 0;
  145.       var1.print(">>  ");
  146.  
  147.       for(int var5 = var2; var5 < this.token_ptr; ++var5) {
  148.          String var6 = ((Token)this.tokens.elementAt(var5)).sval;
  149.          var1.print(var6);
  150.          var4 += var6.length();
  151.       }
  152.  
  153.       ((OutputHandler)var1).println();
  154.       var1.print(">>  ");
  155.  
  156.       for(int var8 = 0; var8 < var4; ++var8) {
  157.          var1.print(" ");
  158.       }
  159.  
  160.       for(int var7 = this.token_ptr; var7 < var3; ++var7) {
  161.          var1.print(((Token)this.tokens.elementAt(var7)).sval);
  162.       }
  163.  
  164.       ((OutputHandler)var1).println("\n");
  165.       this.token_ptr = 0;
  166.    }
  167. }
  168.