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}