CS 3723
  Programming Languages  
  DFA Runs   


DFA Runs: First for reference we give the code again for the module dfa.py:

dfa.py: code to simulate DFA
# dfa.py: simulate a dfa
import auto
import sys

auto.read_fa("dfa4.auto")
auto.printfa()
sys.stdout.write("\n")
f = open("dfa4.input",'r')
instr = f.readline()
sys.stdout.write("Input: " + instr + "\n")
sys.stdout.write("Simulation Run ...\n")
s1 = auto.get_start_state()
for ch in instr:
    if ch != '$':
        s2 = auto.lookup(s1, ch)[0]
        sys.stdout.write(str(s1) + " " + 
          ch + " " + str(s2))
        if auto.is_terminal(s2):
            sys.stdout.write(" term")
        sys.stdout.write("\n")
        s1 = s2
    else:
        break


Runs with Four Example DFAs:

First DFA (file: dfa1.auto )

DFA for   /(a|b)*(aa|bb)(a|b)*/
DFA: States 4, Symbols: ab

0s :(1, [('a', 1), ('b', 2)])
1  :(0, [('a', 3), ('b', 2)])
2  :(0, [('a', 1), ('b', 3)])
3 t:(2, [('a', 3), ('b', 3)])
Input: ababaabbabaaa$

Simulation Run ...
0 a 1
1 b 2
2 a 1
1 b 2
2 a 1
1 a 3 term
3 b 3 term
3 b 3 term
3 a 3 term
3 b 3 term
3 a 3 term
3 a 3 term
3 a 3 term

Second DFA (file: dfa2.auto )

DFA for (a|b)*abb
DFA: States 4, Symbols: ab

0s :(1, [('a', 1), ('b', 0)])
1  :(0, [('a', 1), ('b', 2)])
2  :(0, [('a', 1), ('b', 3)])
3 t:(2, [('a', 1), ('b', 0)])
Input: abaababbaabbb$

Simulation Run ...
0 a 1
1 b 2
2 a 1
1 a 1
1 b 2
2 a 1
1 b 2
2 b 3 term
3 a 1
1 a 1
1 b 2
2 b 3 term
3 b 0

Third DFA (file: dfa3.auto )

DFA for C-style Comments
DFA: States 5, Symbols: /*XYZ

0s :(1, [('/', 1), ('*', 0), ('X', 0)])
1  :(0, [('/', 1), ('*', 2), ('X', 0)])
2  :(0, [('/', 2), ('*', 3), ('X', 2)])
3  :(0, [('/', 4), ('*', 3), ('X', 2)])
4 t:(2, [('/', 1), ('*', 0), ('X', 0)])

Input: X/**/XX/*/*/XX/***//*X*X*/XX/X/*X*/XX$

Simulation Run ...
0 X 0
0 / 1
1 * 2
2 * 3
3 / 4 term
4 X 0
0 X 0
0 / 1
1 * 2
2 / 2
2 * 3
3 / 4 term
4 X 0
0 X 0
0 / 1
1 * 2
2 * 3
3 * 3
3 / 4 term
4 / 1
1 * 2
2 X 2
2 * 3
3 X 2
2 * 3
3 / 4 term
4 X 0
0 X 0
0 / 1
1 X 0
0 / 1
1 * 2
2 X 2
2 * 3
3 / 4 term
4 X 0
0 X 0

Fourth DFA (file: dfa4.auto )

FSM for doubles, where "d" stands for any digit
DFA: States 10, Symbols: d.e+-X

0s :(1, [('d', 1), ('.', 2), ('X', 0)])
1  :(0, [('d', 1), ('.', 3), ('e', 6), ('X', 9)])
2  :(0, [('d', 3), ('X', 4)])
3  :(0, [('d', 3), ('e', 6), ('X', 9)])
4 t:(2, [])
5 t:(2, [('d', 1), ('.', 1), ('X', 0)])
6  :(0, [('d', 8), ('+', 7), ('-', 7), ('X', 5)])
7  :(0, [('d', 8), ('X', 5)])
8  :(0, [('d', 8), ('X', 9)])
9 t:(2, [('d', 1), ('.', 1), ('X', 0)])

Input: Xdd.dXdde+dX.ddX.dedXdeddXd.deX.dde+X$

Simulation Run ...
0 X 0
0 d 1
1 d 1
1 . 3
3 d 3
3 X 9 term
9 d 1
1 d 1
1 e 6
6 + 7
7 d 8
8 X 9 term
9 . 1
1 d 1
1 d 1
1 X 9 term
9 . 1
1 d 1
1 e 6
6 d 8
8 X 9 term
9 d 1
1 e 6
6 d 8
8 d 8
8 X 9 term
9 d 1
1 . 3
3 d 3
3 e 6
6 X 5 term
5 . 1
1 d 1
1 d 1
1 e 6
6 + 7
7 X 5 term

(Revision date: 2014-06-17. Please use ISO 8601, the International Standard.)