| 
 | 
The C language defines a block as a compound statement that begins and ends with braces, ``{'' and ``}''. An inner block is a block that occurs within a function (which is also a block).
For each inner block that has local symbols defined, a special symbol .bb is put in the symbol table immediately before the first local symbol of that block. Also a special symbol .eb is put in the symbol table immediately after the last local symbol of that block. The sequence is shown in ``Special symbols (.bb and .eb)''.
Special symbols (.bb and .eb)
| .bb | 
| local symbols | 
| for that block | 
| .eb | 
Because inner blocks can be nested by several levels, the .bb-.eb pairs and associated symbols may also be nested as shown below:
   {                            /* block 1 */
           int i;
           char c;
           ...
           {                    /* block 2 */
                   long a;
                   ...
               {                /* block 3 */
                         int x;
                         ....
               }                /* block 3 */
   
           }                    /* block 2 */
   
           {                    /* block 4 */
                         long i;
                         ...
           }                    /* block 4 */
   }                            /* block 1 */
The symbol table would look like ``Example of the symbol table''
Example of the symbol table
| .bb for block 1 | 
| i | 
| c | 
| .bb for block 2 | 
| a | 
| .bb for block 3 | 
| x | 
| .eb for block 3 | 
| .eb for block 2 | 
| .bb for block 4 | 
| i | 
| .eb for block 4 | 
| .eb for block 1 |