org.unlaxer.context.ParseContext Maven / Gradle / Ivy
package org.unlaxer.context;
import java.io.Closeable;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.unlaxer.Name;
import org.unlaxer.ParserCursor;
import org.unlaxer.RangedString;
import org.unlaxer.Source;
import org.unlaxer.TransactionElement;
import org.unlaxer.listener.ParserListener;
import org.unlaxer.listener.ParserListenerContainer;
import org.unlaxer.listener.TransactionListener;
import org.unlaxer.parser.GlobalScopeTree;
import org.unlaxer.parser.Parser;
import org.unlaxer.parser.combinator.ChoiceInterface;
import org.unlaxer.parser.combinator.NonOrdered;
public class ParseContext implements
ParseContextBase , Closeable, Source, Transaction,
ParserListenerContainer,
GlobalScopeTree , ParserContextScopeTree{
private static final long serialVersionUID = 1202780890703131636L;
// TODO store successfully token's map
boolean doMemoize;
public final Source source;
boolean createMetaToken = true;
Map parserListenerByName = new LinkedHashMap<>();
Map listenerByName = new LinkedHashMap<>();
final Deque tokenStack = new ArrayDeque();
//FIXME change store to ScopeTree
public Map chosenParserByChoice = new HashMap<>();
//FIXME change store to ScopeTree
public Map> orderedParsersByNonOrdered = new HashMap<>();
Map> scopeTreeMapByParser = new HashMap<>();
Map globalScopeTreeMap = new HashMap<>();
public ParseContext(Source source, ParseContextEffector... parseContextEffectors) {
this.source = source;
tokenStack.add(new TransactionElement(new ParserCursor()));
for (ParseContextEffector parseContextEffector : parseContextEffectors) {
parseContextEffector.effect(this);
}
onOpen(this);
}
@Override
public Deque getTokenStack(){
return tokenStack;
}
@Override
public void close() {
if (tokenStack.size() != 1) {
throw new IllegalStateException("transaction nest is illegal. check source code.");
}
onClose(this);
}
@Override
public int getLength() {
return source.getLength();
}
@Override
public RangedString peek(int startIndexInclusive, int length) {
return source.peek(startIndexInclusive, length);
}
@Override
public Map getTransactionListenerByName() {
return listenerByName;
}
@Override
public Map> getParserContextScopeTreeMap() {
return scopeTreeMapByParser;
}
@Override
public Map getGlobalScopeTreeMap() {
return globalScopeTreeMap;
}
@Override
public Map getParserListenerByName() {
return parserListenerByName;
}
@Override
public ParseContext get() {
return this;
}
@Override
public boolean doCreateMetaToken() {
return createMetaToken;
}
@Override
public Map getChosenParserByChoice() {
return chosenParserByChoice;
}
@Override
public Map> getOrderedParsersByNonOrdered() {
return orderedParsersByNonOrdered;
}
@Override
public Source getSource() {
return source;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy