Download as pdf or txt
Download as pdf or txt
You are on page 1of 19

BE - SEMESTER–VII (NEW)

EXAMINATION – WINTER 2021


Subject Code:3170701
Date:22/12/2021
Subject Name: Complier Design

Q.1
(a)Define following terms:
i.Compiler
ii.Interpreter
iii.Token

(b)Explain activation tree?


(c)Explain a rule of Left factoring a grammar and give Example.

Q.2
(a)Explain input buffering methods.

(b)Define the following terms and give suitable example for it.
i. Augmented Grammar
ii.LR(0) Item
iii.LR(1) Item
(c)Draw the DFA for the regular expression (a|b)*abb using set
construction method only.
OR

(c)Draw NFA from regular expression using Thomson’s


construction and convert it into DFA. (a | b)* a b* a
Q.3
(a)Describe Ambiguous Grammar with example.
(b)Design FIRST and FOLLOW set for the following grammar.
S→ 1AB | ε
A→1AC | 0C
B→0S
C→1

(c)Explain operator grammar. Generate precedence function


table for following grammar.
E -> EAE | id
A -> + | *
OR
Q.3
(a)Differentiate Top Down Parsing and Bottom up parsing
(REPEAT)
Top-Down Parsing Bottom-Up Parsing
It is a parsing strategy that first looks It is a parsing strategy that first looks at
at the highest level of the parse tree the lowest level of the parse tree and
and works down the parse tree by works up the parse tree by using the
using the rules of grammar. rules of grammar.
Top-down parsing attempts to find the Bottom-up parsing can be defined as an
left most derivations for an input attempt to reduce the input string to the
string. start symbol of a grammar.
In this parsing technique we start In this parsing technique we start
parsing from the top (start symbol of parsing from the bottom (leaf node of
parse tree) to down (the leaf node of the parse tree) to up (the start symbol of
parse tree) in a top-down manner. the parse tree) in a bottom-up manner.
This parsing technique uses Left Most This parsing technique uses Right Most
Derivation. Derivation.
The main leftmost decision is to select The main decision is to select when to
what production rule to use in order to use a production rule to reduce the
construct the string. string to get the starting symbol.
Example: Recursive Descent parser. Example: Shift Reduce parser.

(b)Explain error recovery strategies used by parser.


(c)Construct CLR parsing table for following grammar.
S -> aSA | €
A -> bS | c
OR
Q.4
(a) Explain various issues in design of code generator.(REPEAT)
Issues in the Design of Code Generator
➢ The most important criterion is that it produces correct code.
➢ Input to the code generator
• IR + Symbol table
• We assume front end produces low-level IR, i.e. values of names
in it can be directly manipulated by the machine instructions.
• Syntactic and semantic errors have been already detected.
➢ The target program:
• Common target architectures are: RISC, CISC and Stack based
machines.
➢ The level of the IR.
➢ The nature of the instruction-set architecture.
➢ The desired quality of the generated code.
➢ Two subproblems of Registers:
• Register allocation: selecting the set of variables that will reside in
registers at each point in the program
• Resister assignment: selecting specific register that a variable
resides in
➢ Complications imposed by the hardware architecture.

(b)Explain the following parameter passing methods.


1.Call-by-value 2. Call-by-reference
3.Copy-Restore 4. Call-by-Name
(c)Explain Peephole Optimization.(REPEAT)
Peephole optimization is a simple and effective technique for locally improving target
code.
➢ This technique is applied to improve the performance of the target program by
examining the short sequence of target instructions (called the peephole) and
replace these instructions replacing by shorter or faster sequence whenever
possible.
➢ Peephole is a small, moving window on the target program.

Peephole Optimization Techniques are:


1.Redundant instruction elimination: In this technique, redundancy is
eliminated.
Consider the following:
Initial code:
y = x + 5;
i = y;
z = i;
Optimized code:
y = x + 5;
i = y;

2.Constant folding: The code that can be simplified by the user itself, is
simplified.
Consider the following:
Initial code:
x = 2 * 3;
Optimized code:
x = 6;

3.Algebraic Simplifications: The code that can be simplified by the user


itself, is simplified.
Consider the following intermediate code instructions
x = x + 0
x = x* 1
which can be eliminated

4.Reduction in Strength: The operators that consume higher execution


time are replaced by the operators consuming less execution time.
Consider the following:
Initial code:
y = x * 2;
y = x / 2;
Optimized code:
y = x + x;
y = x - 1;

5.Use of Machine Idioms: Target instructions can be replaced by


equivalent machine instructions in order to improve the efficiency.
For example, some machines may have auto increment and auto
decrements addressing modes that can be used in code for statements
such as x = x+1.

Q.4
(a)Draw a DAG for expression: a + a * (b – c) + (b – c) * d.
(b)Compare: Static v/s Dynamic Memory Allocation.
Static Memory Allocation Dynamic Memory Allocation
In the static memory allocation, In the Dynamic memory allocation,
variables get allocated permanently, till variables get allocated only if your
the program executes or function call program unit gets active.
finishes.
Static Memory Allocation is done Dynamic Memory Allocation is done
before program execution. during program execution.
It uses stack for managing the static It uses heap for managing the dynamic
allocation of memory allocation of memory
It is less efficient It is more efficient
In Static Memory Allocation, there is no In Dynamic Memory Allocation, there is
memory re-usability memory re-usability and memory can be
freed when not required
In static memory allocation, once the In dynamic memory allocation, when
memory is allocated, the memory size memory is allocated the memory size
can’t change. can be changed.
In this memory allocation scheme, we This allows reusing the memory. The
cannot reuse the unused memory. user can allocate more memory when
required. Also, the user can release the
memory when the user needs it.
execution is faster than dynamic execution is slower than static memory
memory allocation. allocation.
memory is allocated at compile time. memory is allocated at run time.
In this allocated memory remains from In this allocated memory can be
start to end of the program. released at any time during the program.
Example: This static memory Example: This dynamic memory
allocation is generally used for array. allocation is generally used for linked list.

(c)Translate following arithmetic expression-


(a*b) + (c+d) - (a+b+c+d) into
1] Quadruples 2] Triple 3] Indirect Triple
Q.5
(a) Explain symbol table. For what purpose , compiler uses
symbol table?
(b) Explain Basic-Block Scheduling.
ANSWER: Basic block scheduling is the clean but least effective code scheduling technique.
Therefore, only instructions inside a basic block are acceptable for reordering.
Basic-Block Scheduling:
1 Data-Dependence Graphs
2 List Scheduling of Basic Blocks
3 Prioritized Topological Orders

1 Data-Dependence Graphs:

2 List Scheduling of Basic Blocks:


A list scheduler is list-based and schedules items in steps. In each step, it first generates a
list of items that are acceptable for the next schedule by using a selection rule and then uses
a second rule to create the best option for the next schedule as displayed in the figure. In
each step, one or more elements are scheduled.
3 Prioritized Topological Orders:
A Prioritized Topological Orders computes a priority value for each eligible instruction as
per the chosen heuristics. In the method of basic blocklist schedulers for pipelined and
superscalar processors, the ‘priority value’ of an eligible node is generally implicit as the
length of the path consistent from the node under application to the end of the basic block.

(c) Explain synthesized attributes with the help of an example.

OR
Q.5
(a)Define a following: i.Basic block ii.Constant folding iii.Handle.
i. Basic block:

ii. Constant folding: The code that can be simplified by the user itself, is
simplified.
Consider the following:
Initial code:
x = 2 * 3;
Optimized code:
x = 6;

iii. Handle:
A handle is a substring that connects a right-hand side of the production rule in the grammar
and whose reduction to the non-terminal on the left-hand side of that grammar rule is a step
along with the reverse of a rightmost derivation.

(b)Write difference(s) between stack and heap memory allocation.

(c)Explain Pass structure of assembler.


Assembler is a program for converting instructions written in low-level assembly code into
relocatable machine code and generating along information for the loader.

It generates instructions by evaluating the mnemonics (symbols) in operation field and find the value
of symbol and literals to produce machine code. Now, if assembler do all this work in one scan then it
is called single pass assembler, otherwise if it does in multiple scans then called multiple pass
assembler. Here assembler divide these tasks in two passes:
• Pass-1:
1. Define symbols and literals and remember them in symbol table and literal table respectively.
2. Keep track of location counter
3. Process pseudo-operations
• Pass-2:
1. Generate object code by converting symbolic op-code into respective numeric op-code
2. Generate data for literals and look for values of symbols

You might also like