Compilers - Syntax Analysis
Compilers - Syntax Analysis
تقرير مقدم الى قسم علوم الحاسبات /كلية بغداد للعلوم االقتصادية الجامعة
إعداد الطالب
مازن هيثم محمد
مدرس المادة
م.م .اسراء
اسم المادة
مترجمات
2020م
1.1 Introduction
However, there are many different types of compilers. If the compiled program
can run on a computer whose CPU or operating system is different from the one
on which the compiler runs, the compiler is a cross-compiler. A bootstrap
compiler is written in the language that it intends to compile. A program that
translates from a low-level language to a higher level one is a decompiler. A
program that translates between high-level languages is usually called a source-
to-source compiler or transcompiler. A language rewriter is usually a program
that translates the form of expressions without a change of language. The term
compiler-compiler refers to tools used to create parsers that perform syntax
analysis.[1]
1.2 Phases of a Compiler
There are two major phases of compilation, which in turn have many parts.
Each of them take input from the output of the previous level and work in a
coordinated way. [2]
1- Lexical Analyzer
2- Syntax Analyzer
3- Semantic Analyzer
4- Intermediate Code Generator
Lexical analyzer divides the program into “tokens”, Syntax analyzer recognizes
“sentences” in the program using syntax of language and Semantic analyzer
checks static semantics of each construct. Intermediate Code Generator
generates “abstract” code.[1]
1.2 Introduction to Syntax Analysis in Compiler Design
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. [3]
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”.
REFERENCES
[1] Compilers: Principles, Techniques, and Tools by Alfred V. Aho, Ravi Sethi,
Jeffrey D. Ullman - Second Edition, 2007