Potenziamo l’automa non deterministico a stati finiti (NFA) in modo da ottenere un automa equivalente alla CFG. Sarà non deterministico, ma avrà in aggiunta una pila, in cui può fare:

  • push e pop di simboli in modalità LIFO;
  • sovrascrizione del simbolo in cima.

La notazione vuol dire: “se l’input è e sulla cima della pila c’è , allora fai pop e pusha “.

Definizioni

Definizione formale: un automa a pila (PDA), anche detto pushdown automaton, è una sestupla dove:

  • è un insieme finito di stati;
  • è un insieme finito dei simboli dell’alfabeto che compongono tutti gli input possibili;
  • è l’alfabeto finito di pila;
  • è la funzione di transizione;
  • è lo stato iniziale;
  • è l’insieme degli stati finali.

Definizione di come computa: Sia . accetta se e stringhe :

( è la pila, è la sua vecchia cima, è la sua nuova cima)

Se le seguenti condizioni sono vere:

Allora , cioè accetta .

Al posto di definirlo come abbiamo fatto, cioè con gli stati intermedi, si può definirlo più facilmente con le configurazioni.

N.B.: Sarà utile semplificare (senza perdita di generalità) che un PDA svuota sempre la pila prima di accettare: .

Esempio: PDA per .

Idea:

  • fino a che leggo ‘0’, push ‘0’.
  • quando inizio a leggere ‘1’, pop ‘0’.
  • accetto se e solo se ho finito con la pila vuota. Una tecnica comune per poter capire se è vuota è mettere un “simbolo marcatore”, che segna l’inizio ($ nell’esempio).