A push-down automaton (PDA) is a finite automaton with an unbounded stack. Formally P=(Q,Σ,Γ,δ,q0,Z0,F): states Q, input alphabet Σ, stack alphabet Γ, start state q0, initial stack symbol Z0 and accepting states F. The transition function is δ:Q×(Σ∪{ε})×Γ→ finite subsets of Q×Γ∗. A move δ(q,a,X)∋(p,γ) reads a (or nothing when a=ε), pops X, pushes the string γ (leftmost symbol on top) and goes to p. A configuration (instantaneous description) is written (q,x,γ): current state, input still unread, stack contents with the top on the left; the move above takes (q,ax,Xβ) to (p,x,γβ).
For non-deterministic PDAs the two modes accept exactly the same class of languages, and each can be converted to the other. A PDA is deterministic (DPDA) if for each (q,a,X) there is at most one move, and if δ(q,ε,X) is non-empty then δ(q,a,X) is empty for every a∈Σ. A DPDA may still have ε-moves; the rule only forbids a choice between an ε-move and an input move. Convention in these notes: a missing transition means that computation halts and rejects.
The table is a DPDA for {anbn∣n≥1} by final state: push one A per a, pop one per b, and accept when the stack is back to Z0. Traces: ab ends in q2 (accepted); aab ends in q1 with AZ0 (rejected); abb reaches q2 with a b unread and halts (rejected); ε stays in q0 (rejected). For {wwR} the machine pushes w, then must guess the middle and pop while matching wR. That guess is the non-determinism.