Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.FileInputStream;
- import java.io.InputStreamReader;
- public class Lexer {
- InputStreamReader reader;
- int buffsize;
- char token;
- int cs; /* state number */
- char[] data;
- public int p = 0, /* start of input */
- pe, /* end of input */
- eof,
- ts, /* token start */
- te, /* token end */
- act /* used for scanner backtracking */;
- %%{
- machine simple_lexer;
- a = 'a';
- main := |*
- a => {token='a'; fbreak;};
- # EOF => {token='e'; fbreak;};
- any;
- *|;
- }%%
- %% write data;
- public static void main(String[] args) throws Exception{
- InputStreamReader reader = new InputStreamReader(new FileInputStream(args[0]), "UTF-8");
- Lexer l = new Lexer(reader);
- long start = System.currentTimeMillis();
- while ( true ) {
- int tok = l.next();
- if ( tok == -1 ) {
- System.out.println("parser: EOF");
- break;
- }
- else if ( tok == -2 ) {
- System.out.println("parser: ERR");
- break;
- }
- }
- long stop = System.currentTimeMillis();
- System.out.println(stop-start);
- }
- public Lexer(InputStreamReader reader){
- this.reader = reader;
- buffsize = 4096;
- p=pe=0;
- data=new char[buffsize];
- %% write init;
- }
- public int next() throws Exception {
- token = 'n';
- while(true) {
- if ( p==pe ) {
- int size = reader.read(data, 0, buffsize);
- if (size==-1){
- return -1;
- }
- pe = size;
- if (size < buffsize){
- eof=pe=size;
- }
- p=0;
- }
- %% write exec;
- if ( token =='e' ) {
- return -1;
- }
- if ( token =='a' ) {
- return 0;
- }
- return 4;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement