package sample; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /** * Dfa 状态 * * @author liufengkai * Created by liufengkai on 16/7/10. */ public class DfaState implements Comparable { private static int DFA_ID_COUNT = 0; /** * state id */ private int stateId; /** * transition set * char / set of dfaState */ private Map transitionSet; private DfaState parentState; private Integer parentInput; /** * 构造方法 * * @param input 输入串 * @param parentState 父节点 */ public DfaState(Integer input, DfaState parentState) { this.parentInput = input; this.parentState = parentState; this.stateId = DFA_ID_COUNT++; this.transitionSet = new HashMap<>(); } /** * 添加一条转移语句 * * @param input 输入字符 * @param state 下一个状态 * @return 返回添加状态 */ public DfaState addTransition(int input, DfaState state) { if (!transitionSet.containsKey(input)) { transitionSet.put(input, state); } return state; } public DfaState getTransitionInput(int input) { return getTransitionSet().get(input); } public int getStateId() { return stateId; } public static int getTotalNumber() { return DFA_ID_COUNT; } public Map getTransitionSet() { return transitionSet; } public DfaState getParentState() { return parentState; } @Override public int compareTo(DfaState o) { return 0; } public int getParentInput() { return parentInput; } /** * 打印状态 */ public void printState() { System.out.println("state : " + getStateId()); for (Integer integer : transitionSet.keySet()) { System.out.println("symbol: " + (char) integer.intValue() + " to :" + transitionSet.get(integer).getStateId()); transitionSet.get(integer).printState(); } } /** * 返回结束状态 * * @param list 传入结束状态 */ public void returnEndList(ArrayList list) { for (Integer key : transitionSet.keySet()) { DfaState cur = transitionSet.get(key); if (cur.getTransitionSet().isEmpty()) { list.add(cur); } else { cur.returnEndList(list); } } } }