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    }