A finite-state machine extended with a stack as memory. Recognizes context-free languages. Deterministic and non-deterministic variants have different expressive power (unlike in regular languages or Turing machines). Canonical use case: checking that parentheses in source code are balanced — push on open, pop on close. Underlies the syntactical analysis phase of compilers.