// robert bradshaw 11/98import java.util.StringTokenizer;public class TuringRule {  private int  curState;  private int  newState;  private char curTapeChar;  private char newTapeChar;  private char moveDir;    public TuringRule(int cs, char ct, int ns, char nt, char md) {    setRule(cs, ct, ns, nt, md);  }    public TuringRule(String s) {    // assumes state <= 9    try {      setRule(Integer.parseInt(""+s.charAt(0)),            s.charAt(1),           Integer.parseInt(""+s.charAt(2)),           s.charAt(3),           s.charAt(4));    }    catch (Exception e) { setRule(0,' ',0,' ','0'); }  }    private void setRule(int cs, char ct, int ns, char nt, char md) {    curState    = cs;    curTapeChar = ct;    newState    = ns;    newTapeChar = nt;    moveDir     = md;  }    public static TuringRule[] parseRules(String s) {    StringTokenizer st=new StringTokenizer(s, "\n,");    TuringRule[] rules = new TuringRule[st.countTokens()];    for(int i=0; i<rules.length; i++)      rules[i]=new TuringRule(st.nextToken());    return rules;  }      public boolean apply(TuringMachine m) {    if (m.getState()!=curState || m.tape.read()!=curTapeChar) return false;    else {      m.setState(newState);      m.tape.write(newTapeChar);      m.tape.move(moveDir);      return true;    }  }      public int  getCurState()      { return curState; }  public void setCurState(int i) { curState = i; }    public int  getNewState()      { return newState; }  public void setNewState(int i) { newState = i; }    public char getCurTapeChar()       { return curTapeChar; }  public void setCurTapeChar(char c) { curTapeChar = c; }    public char getNewTapeChar()       { return newTapeChar; }  public void getNewTapeChar(char c) { newTapeChar = c; }    public char getMoveDir()           { return moveDir; }  public void setMoveDir(char c)     { moveDir = c; }    public String toString() {    return ""+curState+curTapeChar+newState+newTapeChar+moveDir;  }  }