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 }