When an input string (source code or a program in some language) is given to a compiler, the compiler processes it in several phases, starting from lexical analysis (scans the input and divides it into tokens) to target code generation.
Syntax Analysis or Parsing is the second phase, i.e. after lexical analysis. It checks the syntactical structure of the given input, i.e. whether the given input is in the correct syntax (of the language in which the input has been written) or not. It does so by building a data structure, called a Parse tree or Syntax tree. The parse tree is constructed by using the pre-defined Grammar of the language and the input string. If the given input string can be produced with the help of the syntax tree (in the derivation process), the input string is found to be in the correct syntax. if not, error is reported by syntax analyzer.
The Grammar for a Language consists of Production rules.
Suppose Production rules for the Grammar of a language are:
S -> cAd A -> bc|a And the input string is “cad”.
Now the parser attempts to construct syntax tree from this grammar for the given input string. It uses the given production rules and applies those as needed to generate the string. To generate string “cad” it uses the rules as shown in the given diagram:
In the step iii above, the production rule A->bc was not a suitable one to apply (because the string produced is “cbcd” not “cad”), here the parser needs to backtrack, and apply the next production rule available with A which is shown in the step iv, and the string “cad” is produced.
Thus, the given input can be produced by the given grammar, therefore the input is correct in syntax.
But backtrack was needed to get the correct syntax tree, which is really a complex process to implement.
There can be an easier way to solve this, which we shall see in the next article “Concepts of FIRST and FOLLOW sets in Compiler Design”.
This article is compiled by Vaibhav Bajpai. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.
- Compiler Design | Syntax Directed Definition
- Syntax Directed Translation in Compiler Design
- Semantic Analysis in Compiler Design
- Introduction of Compiler Design
- Introduction of Object Code in Compiler Design
- FIRST Set in Syntax Analysis
- FOLLOW Set in Syntax Analysis
- Data flow analysis in Compiler
- Why FIRST and FOLLOW in Compiler Design?
- Bootstrapping in Compiler Design
- Input Buffering in Compiler Design
- Peephole Optimization in Compiler Design
- Loop Optimization in Compiler Design
- Basic Blocks in Compiler Design
- Types of Parsers in Compiler Design
- Runtime Environments in Compiler Design
- Code Optimization in Compiler Design
- Labeling Algorithm in Compiler Design
- Error Handling in Compiler Design
- Intermediate Code Generation in Compiler Design
Improved By : VaibhavRai3