Post URL:what-is-the-difference-between-lexical-analysis-and-parsing
Symbol Table in Compiler:
Symbol Table is an important data structure created and maintained by the compiler in order to keep track of semantics of variables i.e. it stores information about the scope and binding information about names, information about instances of various entities such as variable and function names, classes, objects, etc.
It is built-in lexical and syntax analysis phases.
The information is collected by the analysis phases of the compiler and is used by the synthesis phases of the compiler to generate code.
It is used by the compiler to achieve compile-time efficiency.
It is used by various phases of the compiler as follows:-
Lexical Analysis: Creates new table entries in the table, for example like entries about tokens.
Syntax Analysis: Adds information regarding attribute type, scope, dimension, line of reference, use, etc in the table.
Semantic Analysis: Uses available information in the table to check for semantics i.e. to verify that expressions and assignments are semantically correct(type checking) and update it accordingly.
Intermediate Code generation: Refers symbol table for knowing how much and what type of run-time is allocated and table helps in adding temporary variable information.
Code Optimization: Uses information present in the symbol table for machine-dependent optimization.
Target Code generation: Generates code by using address information of identifier present in the table.
Symbol Table entries – Each entry in the symbol table is associated with attributes that support the compiler in different phases.
Items stored in Symbol table:
Variable names and constants
Procedure and function names
Literal constants and strings
Compiler generated temporaries
Labels in source languages
Information used by the compiler from Symbol table:
Data type and name
Declaring procedures
Offset in storage
If structure or record then, a pointer to structure table.
For parameters, whether parameter passing by value or by reference
Number and type of arguments passed to function
Base Address
Implementation of Symbol table – Following are commonly used data structures for implementing symbol table:-
List –
In this method, an array is used to store names and associated information.
A pointer “available” is maintained at end of all stored records and new names are added in the order as they arrive
To search for a name we start from the beginning of the list till available pointer and if not found we get an error “use of the undeclared name”
While inserting a new name we must ensure that it is not already present otherwise an error occurs i.e. “Multiple defined names”
Insertion is fast O(1), but lookup is slow for large tables – O(n) on average
The advantage is that it takes a minimum amount of space.