 
 
 
 
 
 
 
 
 
 










 
| 1 | p  b | 
| 2 | b  ds  ss | 
| 3 | b  ss | 
| 4 | ds  d  ';'  ds | 
| 5 | ds  d ';' | 
| 6 | d  INT  il | 
| 7 | d  STRING  il | 
| 8 | ss  s  ';'  ss | 
| 9 | ss  s | 
| 10 | s  ID '=' e | 
| 11 | s  '{' b '}' | 
| 12 | s  P  e | 
| 13 | s   | 
| 14 | e  e1 '+' t | 
| 15 | e  e1 '-' t | 
| 16 | e  t | 
| 17 | t  t1 '*' f | 
| 18 | t  t '/' f | 
| 19 | t  f | 
| 20 | f  '(' e ')' | 
| 21 | f  ID | 
| 22 | f  NUM | 
| 23 | f  STR | 
| 24 | il  ID ',' il | 
| 25 | il  ID | 
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
a la que pertenece. Guarde como un atributo del nodo bloque ( ) 
la referencia a la tabla de símbolos asociada.
) 
la referencia a la tabla de símbolos asociada.
 
 
 
 
 
 
 
 
 
 










