Symbol tables are used by compilers and interpreters to keep track of the symbols that have been declared and to keep information about them. Symbol tables are often built using hash tables since it is important to efficiently retrieve a symbol from the table.
Let's look at an example. Suppose we have the following Python code:
name = "Joe"
age = 27
Here, we have two symbols, name and age. They belong to a namespace, which could be __main__, but it could also be the name of a module if you placed it there. Each symbol has a value; for example, the name symbol has the value, Joe, and the age symbol has the value, 27. A symbol table allows the compiler or the interpreter to look up these values. So, the name and age symbols become keys in the hash table. All of the other information associated with them become the value of the symbol table entry...