

| 1 | p
|
| 2 | b
|
| 3 | b
|
| 4 | ds
|
| 5 | ds
|
| 6 | d
|
| 7 | d
|
| 8 | ss
|
| 9 | ss
|
| 10 | s
|
| 11 | s
|
| 12 | s
|
| 13 | s
|
| 14 | e
|
| 15 | e
|
| 16 | e
|
| 17 | t
|
| 18 | t
|
| 19 | t
|
| 20 | f
|
| 21 | f
|
| 22 | f
|
| 23 | f
|
| 24 | il
|
| 25 | il
|
int a;
a = 4;
{
int a;
a = 5;
p a
}; /* el ; es necesario */
p a
Imprimiría 5 y 4. Para traducir esta sentencia es necesario usar una lista/pila de referencias a tablas de símbolos. Cada sentencia compuesta o bloque tendrá su propia tabla de símbolos. Los identificadores se búscan en la lista de referencias a tablas de símbolos, primero en la última tabla de símbolos insertada y sino se encuentra se busca en la penúltima insertada, etc.
Guarde como un atributo del identificador (
)
la referencia a la tabla de símbolos
a la que pertenece. Guarde como un atributo del nodo bloque (
)
la referencia a la tabla de símbolos asociada.

