62 lines
1.5 KiB
Java
62 lines
1.5 KiB
Java
package dev.peerat.parser;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.BufferedWriter;
|
|
|
|
import dev.peerat.parser.state.StateTree;
|
|
|
|
public class Parser<E>{
|
|
|
|
private Tokenizer tokenizer;
|
|
private StateTree<E> state;
|
|
|
|
public Parser(){}
|
|
|
|
public void setTokenizer(Tokenizer tokenizer){
|
|
this.tokenizer = tokenizer;
|
|
}
|
|
|
|
public void setStateTree(StateTree<E> 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();
|
|
}
|
|
}
|