f2204df7d77c1013b0202d2ea7c12ec70f839fc9
				
			
			
		
	IN620
Build and run all examples (pushdown automaton, ab, bubble sort, test)
make
build and run specific example
make automaton
make bubble_sort
make a_pow_b
make test
Assembly
registries
- in : input registry n, n integer (read only)
- i@in, i@rn, i@on for indirections
i@rn input registry, address is the integer in rn work registry 
 - i@in, i@rn, i@on for indirections
 - rn : work registry n, n integer
- r@in, r@rn, r@on for indirections
 
 - on : output registry n, n integer (write only)
- o@in, o@rn, o@on for indirections
 
 
arithmetic instructions
- ADD(r1, r2, r3)
 - SUB(r1, r2, r3)
 - MULT(r1, r2, r3)
 - DIV(r1, r2, r3)
 
r3 = r1 OP r2
r1, r2 can be integers instead of registries.
control instructions
- JUMP(z)
current instruction += z - JE(r1, r2, z)
if r1=r2 then JUMP(z) - JL(r1, r2, z) if r1>r2 then JUMP(z)
 
r3 = r1 OP r2
r1, r2 can be integers instead of registries.
Pushdown automaton
Input word = i0, I, K
- i0 total length of input word
 - I = i1, J
- i1, size of automaton input word
 - J automaton input, list of integers
 
 - K, list of transitions
 
transition (q, a, A, w, q')
- q : state before
 - q' : state after
- 0 : start state
 - 1 : accepting state
 
 - a : symbol in input
- 2 : ε
 
 - A : symbol on stack (pop operation)
- 2 : ε (no pop)
 - 3 : stack start symbol
 
 - w : word to push on stack
- w = u, V
u : length of V, 0 if nothing to push
V : list of integers to push (Vn, Vn-1... V0)
Leftmost element of the list will be at the top of the stack after the transition (Vn here). 
 - w = u, V
 
output:
- 0 : accept
 - 1 : reject
 
examples :
transition (q, a, A, w, q') = (0, 3, 4, 54, 1)
(0, 3, 4, 2, 5, 4, 1)
transition (q, a, A, w, q') = (0, ε, 1, ε, 1)
(0, 2, 1, 2, 0, 1)
0n1n
0n1n automaton:
(0, 0, 3, 2, 1, 3, 0)	// stack empty, read 0, push 1, stay in state 0
(0, 0, 1, 2, 1, 1, 0)	// stack with 1 on top, read 0, push 1, stay in state 0
(0, 1, 1, 0, 2)		// stack with 1 on top, read 1, pop 1, go to state 2
(2, 1, 1, 0, 2)		// stack with 1 on top, read 1, pop 1, stay in state 2
(2, 2, 3, 1, 3, 1)	// stack empty in state 2, go to accepting state
0n1n inputs
0n1n
input 000111 (output should be 0)
(37, 6, 0, 0, 0, 1, 1, 1, 0, 0, 3, 2, 1, 3, 0, 0, 0, 1, 2, 1, 1, 0, 0, 1, 1, 0, 2, 2, 1, 1, 0, 2, 2, 2, 3, 1, 3, 1)
0n1m n<m
input 001111 (output should be 1)
(37, 6, 0, 0, 1, 1, 1, 1, 0, 0, 3, 2, 1, 3, 0, 0, 0, 1, 2, 1, 1, 0, 0, 1, 1, 0, 2, 2, 1, 1, 0, 2, 2, 2, 3, 1, 3, 1)
0n1m n>m
input 000011 (output should be 1)
(37, 6, 0, 0, 0, 0, 1, 1, 0, 0, 3, 2, 1, 3, 0, 0, 0, 1, 2, 1, 1, 0, 0, 1, 1, 0, 2, 2, 1, 1, 0, 2, 2, 2, 3, 1, 3, 1)
!=0n1m
input 001011 (output should be 1)
(37, 6, 0, 0, 1, 0, 1, 1, 0, 0, 3, 2, 1, 3, 0, 0, 0, 1, 2, 1, 1, 0, 0, 1, 1, 0, 2, 2, 1, 1, 0, 2, 2, 2, 3, 1, 3, 1)
Description
				
					Languages
				
				
								
								
									Python
								
								48.6%
							
						
							
								
								
									Assembly
								
								25.7%
							
						
							
								
								
									Yacc
								
								14.6%
							
						
							
								
								
									Makefile
								
								8%
							
						
							
								
								
									Lex
								
								3.1%