package dev.peerat.parser; import java.io.BufferedReader; import java.io.BufferedWriter; import dev.peerat.parser.state.StateTree; public class Parser{ private Tokenizer tokenizer; private StateTree state; public Parser(){} public void setTokenizer(Tokenizer tokenizer){ this.tokenizer = tokenizer; } public void setStateTree(StateTree stateTree){ this.state = stateTree; } public final void parse(BufferedReader reader, E container) throws Exception{ this.tokenizer.reset(); this.tokenizer.parse(reader); this.state.seed(new TokenValidator(tokenizer.getTokens().toArray(new Token[0])), container); } public final void parse(String line, E container) throws Exception{ this.tokenizer.reset(); this.tokenizer.parse(line); this.state.seed(new TokenValidator(tokenizer.getTokens().toArray(new Token[0])), container); } public final void parseStream(BufferedReader reader, E container) throws Exception{ } //tmp public void build(BufferedWriter writer) throws Exception{ Token[] confirmed = new Token[TokenValidator.MAX_VALIDATE]; System.arraycopy(tokenizer.getTokens().toArray(), 0, confirmed, 0, confirmed.length); int line = 1; int character = 1; for(Token token : confirmed){ while(token.getLineNumber() != line){ writer.write("\n"+(++line)); character = 1; } while(token.getCharacterNumber() != character){ writer.write(" "); character++; } writer.write(token.getValue()); character+=token.getValue().length(); } writer.flush(); writer.close(); } }