Code Generation

Code Generation

Code generation can be considered as the final phase of compilation. Through post code generation, optimization process can be applied on the code, but that can be seen as a…
Stack Allocation of Space

Stack Allocation of Space

1 Activation Trees 2 Activation Records 3 Calling Sequences 4 Variable-Length Data on the Stack  Almost all compilers for languages that use procedures, functions, or methods as units of user-defined…
Storage Organization

Storage Organization

From the perspective of the compiler writer, the executing target program runs in its own logical address space in which each program value has a location. The management and organization…
Translation of Expressions

Translation of Expressions

 1 Operations Within Expressions  2 Incremental Translation  3 Addressing Array Elements  4 Translation of Array References  The rest of this chapter explores issues that arise during the translation of ex-pressions…
Declarations

Declarations

When we encounter declarations, we need to lay out storage for the declared variables. For every local name in a procedure, we create a ST(Symbol Table) entry containing: The type…
YACC

YACC

YACC stands for Yet Another Compiler Compiler. YACC provides a tool to produce a parser for a given grammar. YACC is a program designed to compile a LALR (1) grammar. It…
LALR (1) Parsing

LALR (1) Parsing

LALR refers to the lookahead LR. To construct the LALR (1) parsing table, we use the canonical collection of LR (1) items. In the LALR (1) parsing, the LR (1)…
Parse tree and Syntax tree

Parse tree and Syntax tree

When you create a parse tree then it contains more details than actually needed. So, it is very difficult to compiler to parse the parse tree. Take the following parse…
Three-address code

Three-address code

Three-address code is a sequence of statements of the general form x : = y op z where x, y and z are names, constants, or compiler-generated temporaries; op stands…