Advertisement
Guest User

Untitled

a guest
Oct 27th, 2012
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.95 KB | None | 0 0
  1. import java.io.FileInputStream;
  2. import java.io.InputStreamReader;
  3.  
  4. public class Lexer {
  5.         InputStreamReader reader;
  6.         int buffsize;
  7.         char token;
  8.         int cs; /* state number */
  9.         char[] data;
  10.         public int p = 0, /* start of input */
  11.             pe,  /* end of input */
  12.             eof,
  13.             ts, /* token start */
  14.             te, /* token end */
  15.             act /* used for scanner backtracking */;
  16.  
  17. %%{
  18.   machine simple_lexer;
  19.     a  = 'a';
  20.   main := |*
  21.     a => {token='a'; fbreak;};
  22.     # EOF => {token='e'; fbreak;};
  23.     any;
  24.   *|;
  25. }%%
  26. %% write data;
  27.  
  28.     public static void main(String[] args) throws Exception{
  29.       InputStreamReader reader = new InputStreamReader(new FileInputStream(args[0]), "UTF-8");
  30.       Lexer l = new Lexer(reader);
  31.       long start = System.currentTimeMillis();
  32.           while ( true ) {
  33.             int tok = l.next();
  34.             if ( tok == -1 ) {
  35.               System.out.println("parser: EOF");
  36.               break;
  37.             }
  38.             else if ( tok == -2 ) {
  39.               System.out.println("parser: ERR");
  40.               break;
  41.             }
  42.           }
  43.       long stop = System.currentTimeMillis();
  44.       System.out.println(stop-start);
  45.     }
  46.  
  47.     public Lexer(InputStreamReader reader){
  48.         this.reader = reader;
  49.         buffsize = 4096;
  50.         p=pe=0;
  51.         data=new char[buffsize];
  52.         %% write init;
  53.     }
  54.  
  55.     public int next() throws Exception {
  56.       token = 'n';
  57.       while(true) {
  58.         if ( p==pe ) {
  59.           int size = reader.read(data, 0, buffsize);
  60.           if (size==-1){
  61.             return -1;
  62.           }
  63.           pe = size;
  64.           if (size < buffsize){
  65.             eof=pe=size;
  66.           }
  67.           p=0;
  68.         }
  69.  
  70.         %% write exec;
  71.         if ( token =='e' ) {
  72.           return -1;
  73.         }
  74.         if ( token =='a' ) {
  75.           return 0;
  76.         }
  77.         return 4;
  78.     }
  79.   }
  80.  
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement