As Stated by Mr. Hal Abelson
“if you don’t understand compilers, you can still write programs- you can even be a competent programmer- but you can’t be a master”
If you think about how our world operates, you will realize that animate and inanimate objects interact by sending a message to one another. All messages are expressed in some language and usually, there is a protocol (set of rules) for any situation where such messages are exchanged. Various races of human being have developed a number of languages for communicating over thousands of years such as Sanskrit, Chinese, English, Tamil, French, in fact, few thousands of them. These are called as natural languages.
When the era of computers and computer-like devices started during the 1940s, as the need arose for communicating with the computing machine. This need is fulfilled by compilers.
In B. S. Anangpuria Institute of Technology & Management at our department of Computer Science & Engineering, we start our student with basic knowledge of Information about a compiler in our compiler design lab.
A Compiler is a program that translates from one language into another. The compilation process is a sequence of various phases. This lab course provides the students hands-on experience with crafting a simple compiler, working on a sizeable software engineering project, using modern software tools, and most importantly correlating theory with practice.
The first module we start is with a detailed look at the internals of compilers, which shares the detail of all of its phases and how these phases operate in sequence, each phase taking the output from the previous phase as its input.
Upon understanding each phase students will be able to implement some phases like the implementation of the symbol table, recognize few patterns in C (ex. Identifiers, constants, operators, comments etc.)
The second part, of course, will focus on the classic techniques of lexical analysis and scanning/screening, syntactic analysis like bottom-up and top-down parsing techniques, semantic analysis, type-checking, abstract syntax tree and code generation.
The latter part will focus on intermediate representations and simple optimizations like register allocation and instruction scheduling. The language of implementation would be in C/C++ languages.
As we all know that compilers are among the most important tool for a software developer. It is important for a computer scientist to understand the process by which programs written in high-level languages are translated and executed. Among other things, this will help you write better programs, and enable you to make more effective use of available compiler technology
We at Department of Computer Science & Engineering make sure that our student attending these labs not only get equipped with all necessary information but also able to utilize this knowledge in day to day Lives and provide deeper insights into the more advanced semantics aspects of programming languages, code generation, machine independent optimizations, dynamic memory allocation, and object orientation.