package fr.umlv.tatoo.tutorial.simplelexer;

import fr.umlv.tatoo.tutorial.simplelexer.lexer.LexerDataTable;
import fr.umlv.tatoo.tutorial.simplelexer.lexer.RuleEnum;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;

import fr.umlv.tatoo.runtime.buffer.TokenBuffer;
import fr.umlv.tatoo.runtime.lexer.LexerListener;
import fr.umlv.tatoo.runtime.lexer.LexerTable;
import fr.umlv.tatoo.runtime.lexer.SimpleLexer;
import fr.umlv.tatoo.runtime.tools.builder.Builder;

public class TutorialLexer {

	public static void main(String[] args) {
	
		LexerListener<RuleEnum, TokenBuffer<?>> listener = new LexerListener<RuleEnum, TokenBuffer<?>>(){						
			public void ruleVerified(RuleEnum arg0, int arg1, TokenBuffer<?> arg2) {
				System.out.println(arg0+" "+arg2.view());
				arg2.discard();
			}
		};
		try{
			Reader reader = new InputStreamReader(System.in,"UTF-8");
			LexerTable<RuleEnum> table = LexerDataTable.createTable();
			SimpleLexer lexer = Builder.lexer(table).reader(reader).listener(listener).create();
			lexer.run();
		}
		catch(IOException e){
		}
	}

}
