package fr.umlv.tatoo.tutorial.simpleparser;

import java.io.InputStreamReader;
import java.io.Reader;

import fr.umlv.tatoo.runtime.buffer.impl.ReaderWrapper;
import fr.umlv.tatoo.runtime.lexer.SimpleLexer;
import fr.umlv.tatoo.runtime.tools.AnalyzerListener;
import fr.umlv.tatoo.runtime.tools.builder.Builder;
import fr.umlv.tatoo.tutorial.simpleparser.lexer.LexerDataTable;
import fr.umlv.tatoo.tutorial.simpleparser.lexer.RuleEnum;
import fr.umlv.tatoo.tutorial.simpleparser.parser.NonTerminalEnum;
import fr.umlv.tatoo.tutorial.simpleparser.parser.ParserDataTable;
import fr.umlv.tatoo.tutorial.simpleparser.parser.ProductionEnum;
import fr.umlv.tatoo.tutorial.simpleparser.parser.TerminalEnum;
import fr.umlv.tatoo.tutorial.simpleparser.tools.ToolsDataTable;

public class AnBnAnalyzer {
	public static void main(String[] args) {
			Reader reader = new InputStreamReader(System.in);
		    AnalyzerListener<RuleEnum, ReaderWrapper, TerminalEnum, NonTerminalEnum, ProductionEnum> listener = new AnalyzerListener<RuleEnum, ReaderWrapper, TerminalEnum, NonTerminalEnum, ProductionEnum>(){
				public void accept(NonTerminalEnum arg0) {}
				public void comment(RuleEnum arg0, ReaderWrapper arg1) {}
				public void reduce(ProductionEnum arg0) {}
				public void shift(TerminalEnum arg0, RuleEnum arg1, ReaderWrapper arg2) {}
				public void popNonTerminalOnError(NonTerminalEnum arg0) {}
				public void popTerminalOnError(TerminalEnum arg0) {}		    	
		    };
			SimpleLexer lexer = Builder.analyzer(LexerDataTable.createTable(),
					                                                ParserDataTable.createTable(),
					                                                ToolsDataTable.createToolsTable())
			                                         .reader(reader).listener(listener).create().getLexer();
			lexer.run();
		}		
}
