    001    package org.maltparser.parser;
    002
    003    import org.maltparser.core.exception.MaltChainedException;
    004    import org.maltparser.core.symbol.SymbolTableHandler;
    005    import org.maltparser.core.syntaxgraph.DependencyStructure;
    006    import org.maltparser.parser.history.GuideUserHistory;
    007    import org.maltparser.parser.history.History;
    008    import org.maltparser.parser.history.HistoryList;
    009    import org.maltparser.parser.history.HistoryStructure;
    010    import org.maltparser.parser.history.action.GuideUserAction;
    011    /**
    012     * @author Johan Hall
    013     *
    014     */
    015    public class ParserState {
    016            private final AbstractParserFactory factory;
    017            private final Algorithm algorithm;
    018            private SymbolTableHandler symboltables;
    019            private GuideUserHistory history;
    020            private TransitionSystem transitionSystem;
    021            private HistoryStructure historyStructure;
    022            private ParserConfiguration config;
    023
    024            public ParserState(Algorithm algorithm, AbstractParserFactory factory) throws MaltChainedException {
    025                    this(algorithm, factory, 1);
    026            }
    027
    028            public ParserState(Algorithm algorithm, AbstractParserFactory factory, int k) throws MaltChainedException {
    029                    this.algorithm = algorithm;
    030                    this.factory = factory;
    031                    setSymboltables(algorithm.getManager().getSymbolTables());
    032                    setHistoryStructure(new HistoryList());
    033                    setTransitionSystem(factory.makeTransitionSystem());
    034                    String decisionSettings = algorithm.getManager().getOptionValue("guide", "decision_settings").toString().trim();
    035                    getTransitionSystem().initTableHandlers(decisionSettings, symboltables);
    036                    setHistory(new History(decisionSettings, algorithm.getManager().getOptionValue("guide", "classitem_separator").toString(), getTransitionSystem().getTableHandlers()));
    037                    getTransitionSystem().initTransitionSystem(history);
    038                    config = getFactory().makeParserConfiguration();
    039            }
    040
    041
    042            public void clear() throws MaltChainedException {
    043                    history.clear();
    044                    historyStructure.clear();
    045            }
    046
    047            public Algorithm getAlgorithm() {
    048                    return algorithm;
    049            }
    050
    051            public SymbolTableHandler getSymboltables() {
    052                    return symboltables;
    053            }
    054
    055            protected void setSymboltables(SymbolTableHandler symboltables) {
    056                    this.symboltables = symboltables;
    057            }
    058
    059            public GuideUserHistory getHistory() {
    060                    return history;
    061            }
    062
    063            protected void setHistory(GuideUserHistory history) {
    064                    this.history = history;
    065            }
    066
    067            public TransitionSystem getTransitionSystem() {
    068                    return transitionSystem;
    069            }
    070
    071            protected void setTransitionSystem(TransitionSystem transitionSystem) {
    072                    this.transitionSystem = transitionSystem;
    073            }
    074
    075            public HistoryStructure getHistoryStructure() {
    076                    return historyStructure;
    077            }
    078
    079            protected void setHistoryStructure(HistoryStructure historyStructure) {
    080                    this.historyStructure = historyStructure;
    081            }
    082
    083            public void initialize(DependencyStructure dependencyStructure) throws MaltChainedException {
    084                    config.clear();
    085                    config.setDependencyGraph(dependencyStructure);
    086                    config.initialize(null);
    087            }
    088
    089            public boolean isTerminalState() throws MaltChainedException {
    090                    return config.isTerminalState();
    091            }
    092
    093            public boolean permissible(GuideUserAction currentAction) throws MaltChainedException {
    094                    return transitionSystem.permissible(currentAction, config);
    095            }
    096
    097            public void apply(GuideUserAction currentAction) throws MaltChainedException {
    098                    transitionSystem.apply(currentAction, config);
    099            }
    100
    101            public int nConfigurations() throws MaltChainedException {
    102                    return 1;
    103            }
    104
    105            public ParserConfiguration getConfiguration() {
    106                    return config;
    107            }
    108
    109            public AbstractParserFactory getFactory() {
    110                    return factory;
    111            }
    112    }