×
Home Discussions Write at Opengenus IQ
×
  • DSA Cheatsheet
  • HOME
  • Track your progress
  • Deep Learning (FREE)
  • Join our Internship 🎓
  • RANDOM
  • One Liner

Compiler Design

Compiler Design is the study of designing efficient compilers that convert code in a High Level Programming Language to Machine level code. It is one of the most important subjects to design efficient code.

Compiler Design

Syntax Directed Definitions

SDDs specify values of attributes by associating the semantic rules of a programming language with the grammar productions. In this article, learn about SDDs, different types of attributes, and how SDDs are evaluated in a parse tree.

Erick Lumunge
Compiler Design

Data-flow analysis in Compiler Design

All optimizations in a compiler depend on data-flow analysis. We discuss three instances of data-flow problems, reaching definitions, live variables and available expressions.

Erick Lumunge
Compiler Design

Sethi Ullman algorithm

The Sethi-Ullman algorithm is an optimal algorithm used for finding an optimal ordering of a computation tree. We discuss two generalizations that increase its applicability without increasing the cost.

Erick Lumunge
Compiler Design

L-Attributed and S-Attributed definitions and grammar

We have discussed two classes of definitions that can efficiently be implemented in connection to top-down or bottom-up parsing in compilers and corresponding attribute grammars that result from serious restrictions.

Erick Lumunge
Compiler Design

Instruction selection by tree-rewriting

Instruction selection involves choosing target-language instructions for each IR statement. In this article we discuss how it can be done by a tree-rewriting process whereby tree patterns that correspond to machine instructions are used to tile a syntax tree.

Erick Lumunge
Compiler Design

Activation trees and records

An activation tree is a tree structure that represents function calls made by a program during execution. When a function is called the a new activation record is pushed to the stack and popped from the stack when the function returns.

Erick Lumunge
Compiler Design

Dynamic programming for Code generation

Dynamic programming not only applies to a broad class of register machines but its application results in the generation of optimal code that runs in linear time.

Erick Lumunge
Compiler Design

Attribute Dependence Graph and Evaluation in Semantic Analysis

In this article we discuss attribute dependency graphs and attribute evaluation during semantic analysis phase in compiler design.

Erick Lumunge
Compiler Design

Machine independent Optimizations

Code written in high-level programming languages has a lot of overhead, in this article we discuss low-level techniques used to optimize this code for efficiency.

Erick Lumunge
Compiler Design

Backpatching

During the code generation phase, the compiler has to make jumps, however, the values needed for these jumps may not be known in a single pass therefore it improvises by filling up values which are replaced when the real values are known, a process known as backpatching.

Erick Lumunge
Compiler Design

Types of compilers

A compiler is a program that translates source code into machine code that can be executed by a computer. In this article we explore various types of compilers.

Erick Lumunge
Compiler Design

Pumping Lemma For Context Free Languages

The pumping lemma is used as a way to prove if a language is context-free or not. In this article we have discussed this lemma for CFLs.

Erick Lumunge
Compiler Design

Basics of YACC and Bison

In this article we discuss YACC and Bison, both tools used to generate parsers for context free languages that are LALR(1).

Erick Lumunge
Compiler Design

Types of Programming Languages

In this article, we discuss the different major types of programming languages, how they are used, and their pros and cons.

Erick Lumunge
Compiler Design

Introduction to Compiler Design

A compiler is responsible for translating high-level source code into low-level code. In this article, we go over a brief overview of the compiler design domain, a very successful field in computer science.

Erick Lumunge
Compiler Design

Decompilation

Decompilation is the process of converting executable machine code into human readable code. In this article we discuss the steps involved in the decompilation process.

Erick Lumunge
Compiler Design

Disassembly

Disassembly involves recreating assembly code from binary machine code. In this article we discuss concepts surrounding disassembly and a basic algorithm used for disassembly.

Erick Lumunge
Compiler Design

Assembler, Linker and Loader

An assembler is responsible for converting source code into target code. In this article we discuss the tasks of an assembler, linker and loader. We also discuss the design issues faced by both assemblers and linkers.

Erick Lumunge
Compiler Design

Three address code

Three address code is generated by a compiler for code optimization, it uses a maximum of three addresses to represent any statement. In this article we discuss it.

Erick Lumunge
Compiler Design

Compiler Architecture

Compiler architecture differs based on the granularity of data passing through the compiler and the flow of control between compiler modules. In this article we discuss these two factors, properties of good compiler, portability and retargetability.

Erick Lumunge
Compiler Design

Interpreters (Recursive & Iterative) in Compiler Design

Intermediate code can either be directly executed by an interpreter which involves little preprocessing or by a compiler which requires a lot of preprocessing followed by code generation. In this article we discuss interpretation and the types of interpreters.

Erick Lumunge
Compiler Design

Compiling logic programs

In this article, we discuss the general compilation technique for a full recursive backtracking search over clauses combined with a full unification of terms.

Erick Lumunge
Compiler Design

Introduction to Logic programming model

In logic programming, the user only has to specify the problem and the system will find the solution based on the provided information however substantial effort is needed to implement a logic language compiler. In this article we discuss how we go about this.

Erick Lumunge
Compiler Design

Run-time environment: Accessing non-local data on Stack

How do we find data within a procedure that does not belong to that procedure, In this article we discuss how to access data that is not local to a procedure on the stack.

Erick Lumunge
Compiler Design

Trace-Based garbage collection

Trace-based collection is garbage collection whereby garbage is collected periodically unlike basic gc where garbage is collected as it is created. In this article we discuss four algorithms for garbage collections and their properties.

Erick Lumunge
OpenGenus IQ © 2025 All rights reserved â„¢
Contact - Email: team@opengenus.org
Primary Address: JR Shinjuku Miraina Tower, Tokyo, Shinjuku 160-0022, JP
Office #2: Commercial Complex D4, Delhi, Delhi 110017, IN
Top Posts LinkedIn Twitter
Android App
Apply for Internship