Datatypes 

> InternalStates:={q0,q1,q2}:
Alphabet:={0,1}:
delta:=table():
delta[(q0,0)]:=q0:
delta[(q0,1)]:=q1:
delta[(q1,0)]:=q0:
delta[(q1,1)]:=q2:
delta[(q2,0)]:=q2:
delta[(q2,1)]:=q1:
InitialState:=q0:
FinalStates:={q1}:
dfa:=mkDFA(InternalStates,Alphabet,op(delta),InitialState,FinalStates);
 

`:=`(dfa, DFA({q0, q1, q2}, {0, 1}, TABLE([(q0, 1) = q1, (q2, 0) = q2, (q2, 1) = q1, (q0, 0) = q0, (q1, 1) = q2, (q1, 0) = q0]), q0, {q1}))
`:=`(dfa, DFA({q0, q1, q2}, {0, 1}, TABLE([(q0, 1) = q1, (q2, 0) = q2, (q2, 1) = q1, (q0, 0) = q0, (q1, 1) = q2, (q1, 0) = q0]), q0, {q1}))
(4.1)
 

> type(dfa,DFA);
 

true (4.2)
 

> nfa:=randomNFA(5,3,2);
 

`:=`(nfa, NFA({q0, q1, q2, q3, q4}, {a3, a1, a2}, TABLE([(q1, lambda) = {q4}, (q1, a1) = {q0, q1}, (q0, lambda) = {q3}, (q0, a3) = {q1, q3}, (q1, a3) = {q1, q3, q4}, (q2, lambda) = {q2}, (q2, a3) = {q...
`:=`(nfa, NFA({q0, q1, q2, q3, q4}, {a3, a1, a2}, TABLE([(q1, lambda) = {q4}, (q1, a1) = {q0, q1}, (q0, lambda) = {q3}, (q0, a3) = {q1, q3}, (q1, a3) = {q1, q3, q4}, (q2, lambda) = {q2}, (q2, a3) = {q...
`:=`(nfa, NFA({q0, q1, q2, q3, q4}, {a3, a1, a2}, TABLE([(q1, lambda) = {q4}, (q1, a1) = {q0, q1}, (q0, lambda) = {q3}, (q0, a3) = {q1, q3}, (q1, a3) = {q1, q3, q4}, (q2, lambda) = {q2}, (q2, a3) = {q...
(4.3)
 

> type(nfa,NFA);
 

true (4.4)
 

> cfg:=randomCFG(5,3);
 

`:=`(cfg, CFG({V4, V3, V2, V0, V1}, {a3, a1, a2}, V0, TABLE([V1 = {[lambda]}, V0 = {[V4], [V3, V2, V4]}, V3 = {[a1, a2, V0], [lambda]}, V4 = {[V4]}])))
`:=`(cfg, CFG({V4, V3, V2, V0, V1}, {a3, a1, a2}, V0, TABLE([V1 = {[lambda]}, V0 = {[V4], [V3, V2, V4]}, V3 = {[a1, a2, V0], [lambda]}, V4 = {[V4]}])))
(4.5)
 

> type(cfg,'CFG');
 

true (4.6)
 

> type(cfg,'LL1');
 

true (4.7)
 

> parsingTableLL1(cfg);
 

TABLE([(V3, a1) = {[a1, a2, V0]}, (V0, a1) = {[V3, V2, V4]}]) (4.8)