001package org.maltparser.parser;
002
003import org.maltparser.core.exception.MaltChainedException;
004import org.maltparser.core.symbol.SymbolTableHandler;
005import org.maltparser.core.syntaxgraph.DependencyStructure;
006import org.maltparser.parser.history.GuideUserHistory;
007import org.maltparser.parser.history.History;
008import org.maltparser.parser.history.HistoryList;
009import org.maltparser.parser.history.HistoryStructure;
010import org.maltparser.parser.history.action.GuideUserAction;
011/**
012 * @author Johan Hall
013 *
014 */
015public class ParserState {
016        private final AbstractParserFactory factory;
017        private final GuideUserHistory history;
018        private final TransitionSystem transitionSystem;
019        private final HistoryStructure historyStructure;
020        private final ParserConfiguration config;
021        
022        public ParserState(DependencyParserConfig manager, SymbolTableHandler symbolTableHandler, AbstractParserFactory factory) throws MaltChainedException {
023                this.factory = factory;
024                this.historyStructure = new HistoryList();
025                this.transitionSystem = factory.makeTransitionSystem();
026                String decisionSettings = manager.getOptionValue("guide", "decision_settings").toString().trim();
027                getTransitionSystem().initTableHandlers(decisionSettings, symbolTableHandler);
028                int kBestSize = ((Integer)manager.getOptionValue("guide", "kbest")).intValue();
029                String classitem_separator = manager.getOptionValue("guide", "classitem_separator").toString();
030                this.history = new History(decisionSettings, classitem_separator, getTransitionSystem().getTableHandlers(), kBestSize);
031                getTransitionSystem().initTransitionSystem(history);
032                this.config = factory.makeParserConfiguration();
033        }
034        
035        
036        public void clear() throws MaltChainedException {
037                history.clear();
038                historyStructure.clear();
039        }
040        
041        public GuideUserHistory getHistory() {
042                return history;
043        }
044
045        public TransitionSystem getTransitionSystem() {
046                return transitionSystem;
047        }
048        
049        public HistoryStructure getHistoryStructure() {
050                return historyStructure;
051        }
052        
053        public void initialize(DependencyStructure dependencyStructure) throws MaltChainedException {
054                config.clear();
055                config.setDependencyGraph(dependencyStructure);
056                config.initialize();
057        }
058        
059        public boolean isTerminalState() throws MaltChainedException {
060                return config.isTerminalState();
061        }
062        
063        public boolean permissible(GuideUserAction currentAction) throws MaltChainedException {
064                return transitionSystem.permissible(currentAction, config); 
065        }
066        
067        public void apply(GuideUserAction currentAction) throws MaltChainedException {
068                transitionSystem.apply(currentAction, config);
069        }
070        
071        public int nConfigurations() throws MaltChainedException {
072                return 1;
073        }
074        
075        public ParserConfiguration getConfiguration() {
076                return config;
077        }
078
079        public AbstractParserFactory getFactory() {
080                return factory;
081        }
082}