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 AbstractParserFactory factory;
017            private 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                    setAlgorithm(algorithm);
030                    setFactory(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 void setAlgorithm(Algorithm algorithm) {
052                    this.algorithm = algorithm;
053            }
054    
055            public SymbolTableHandler getSymboltables() {
056                    return symboltables;
057            }
058    
059            protected void setSymboltables(SymbolTableHandler symboltables) {
060                    this.symboltables = symboltables;
061            }
062            
063            public GuideUserHistory getHistory() {
064                    return history;
065            }
066    
067            protected void setHistory(GuideUserHistory history) {
068                    this.history = history;
069            }
070    
071            public TransitionSystem getTransitionSystem() {
072                    return transitionSystem;
073            }
074    
075            protected void setTransitionSystem(TransitionSystem transitionSystem) {
076                    this.transitionSystem = transitionSystem;
077            }
078            
079            public HistoryStructure getHistoryStructure() {
080                    return historyStructure;
081            }
082    
083            protected void setHistoryStructure(HistoryStructure historyStructure) {
084                    this.historyStructure = historyStructure;
085            }
086            
087            public void initialize(DependencyStructure dependencyStructure) throws MaltChainedException {
088                    config.clear();
089                    config.setDependencyGraph(dependencyStructure);
090                    config.initialize(null);
091            }
092            
093            public boolean isTerminalState() throws MaltChainedException {
094                    return config.isTerminalState();
095            }
096            
097            public boolean permissible(GuideUserAction currentAction) throws MaltChainedException {
098                    return transitionSystem.permissible(currentAction, config); 
099            }
100            
101            public void apply(GuideUserAction currentAction) throws MaltChainedException {
102                    transitionSystem.apply(currentAction, config);
103            }
104            
105            public int nConfigurations() throws MaltChainedException {
106                    return 1;
107            }
108            
109            public ParserConfiguration getConfiguration() {
110                    return config;
111            }
112    
113            public AbstractParserFactory getFactory() {
114                    return factory;
115            }
116    
117            public void setFactory(AbstractParserFactory factory) {
118                    this.factory = factory;
119            }
120    }