001 package org.maltparser.parser.transition;
002
003 import java.util.HashMap;
004 import java.util.SortedMap;
005 import java.util.TreeMap;
006
007 import org.maltparser.core.exception.MaltChainedException;
008 import org.maltparser.core.symbol.Table;
009 import org.maltparser.parser.history.container.DecisionPropertyTable;
010 /**
011 *
012 * @author Johan Hall
013 * @since 1.1
014 **/
015 public class TransitionTable implements Table, DecisionPropertyTable {
016 private String name;
017 private final SortedMap<Integer,Transition> code2transitionMap;
018 private final HashMap<String,Transition> symbol2transitionMap;
019 private final HashMap<Transition,TransitionTable> childrenTables;
020
021 public TransitionTable(String tableName) {
022 setName(name);
023 code2transitionMap = new TreeMap<Integer,Transition>();
024 symbol2transitionMap = new HashMap<String,Transition>();
025 childrenTables = new HashMap<Transition,TransitionTable>();
026 }
027
028 public void addTransition(int code, String symbol, boolean labeled, TransitionTable childrenTable) {
029 final Transition transition = new Transition(code, symbol, labeled);
030 code2transitionMap.put(code,transition);
031 symbol2transitionMap.put(symbol, transition);
032 if (childrenTable != null) {
033 childrenTables.put(transition, childrenTable);
034 }
035 }
036
037 public boolean continueWithNextDecision(int code) throws MaltChainedException {
038 if (code2transitionMap.containsKey(code)) {
039 return code2transitionMap.get(code).isLabeled();
040 }
041 return true;
042 }
043
044 public boolean continueWithNextDecision(String symbol) throws MaltChainedException {
045 if (symbol2transitionMap.containsKey(symbol)) {
046 return symbol2transitionMap.get(symbol).isLabeled();
047 }
048 return true;
049 }
050
051 public Table getTableForNextDecision(int code) throws MaltChainedException {
052 if (code2transitionMap.containsKey(code)) {
053 return childrenTables.get(code2transitionMap.get(code));
054 }
055 return null;
056 }
057
058 public Table getTableForNextDecision(String symbol) throws MaltChainedException {
059 if (symbol2transitionMap.containsKey(symbol)) {
060 return childrenTables.get(symbol2transitionMap.get(symbol));
061 }
062 return null;
063 }
064
065 public Transition getTransition(String symbol) {
066 return symbol2transitionMap.get(symbol);
067 }
068
069 public Transition getTransition(int code) {
070 return code2transitionMap.get(code);
071 }
072
073 public int addSymbol(String symbol) throws MaltChainedException {
074 return -1;
075 }
076
077 public String getName() {
078 return name;
079 }
080
081
082 public String getSymbolCodeToString(int code) throws MaltChainedException {
083 if (code < 0) {
084 return null;
085 }
086 return code2transitionMap.get(code).getSymbol();
087 }
088
089 public int getSymbolStringToCode(String symbol) throws MaltChainedException {
090 if (symbol == null) {
091 return -1;
092 }
093 return symbol2transitionMap.get(symbol).getCode();
094 }
095
096 protected void setName(String name) {
097 this.name = name;
098 }
099
100 public int size() {
101 return code2transitionMap.size();
102 }
103
104 }