; ** p13.stax ************************************************ ; STAX program to add two base-2 integers, e.g., 100101+111= ; NOTE: If input string is valid this program returns 1, with ; the sum of the addition left on stack #2, most significant ; bit at the top of the stack. ; ; John Haskins, Jr., Ph.D. ; predator@cs.virginia.edu ; ----------------------------------------------------------- .input_alphabet "01+=" .stack_alphabet "01+" qinit0: accept -, -, push[0]:$, qinit1 qinit1: deny -, -, push[1]:$, qinit2 qinit2: deny -, -, push[2]:$, q0 q0: deny '0', -, push[0]:'0', q1 '1', -, push[0]:'1', q1 q1: deny '0', -, push[0]:'0', q1 '1', -, push[0]:'1', q1 '+', -, nop, q2 q2: deny '0', -, push[1]:'0', q3 '1', -, push[1]:'1', q3 q3: deny '0', -, push[1]:'0', q3 '1', -, push[1]:'1', q3 '=', -, nop, q_0 q4: deny -, '+'[0], pop[0], q5 q5: deny -, '='[1], pop[1], q_0 q_0: deny -, '0'[0], pop[0], q_00 -, '1'[0], pop[0], q_01 -, $[0], nop, q_0a q_0a: deny -, '0'[1], nop, q_00 -, '1'[1], nop, q_00 -, $[1], nop, qdone q_00: deny -, '0'[1], pop[1], q_000 -, '1'[1], pop[1], q_001 -, $[1], nop, q_000 q_01: deny -, '0'[1], pop[1], q_001 -, '1'[1], pop[1], q_011 -, $[1], nop, q_001 q_000: deny -, -, push[2]:'0', q_0 q_001: deny -, -, push[2]:'1', q_0 q_011: deny -, -, push[2]:'0', q_1 q_1: deny -, '0'[0], pop[0], q_01 -, '1'[0], pop[0], q_11 -, $[0], nop, q_01 q_11: deny -, '0'[1], pop[1], q_011 -, '1'[1], pop[1], q_111 -, $[1], nop, q_011 q_111: deny -, -, push[2]:'1', q_1 qdone: accept halt qerror: deny halt