0% found this document useful (0 votes)
18 views90 pages

Semantic Analysis: Instructor: Venkata Ramana Badarla

The document describes semantic analysis in compilers. It discusses: - Static semantics checks types, declarations, assignments - Dynamic semantics checks for runtime errors like overflows - Syntax directed translation uses grammar rules and actions to implement semantic checks - Attribute grammars link syntax and semantics through node attributes

Uploaded by

KK's Play
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views90 pages

Semantic Analysis: Instructor: Venkata Ramana Badarla

The document describes semantic analysis in compilers. It discusses: - Static semantics checks types, declarations, assignments - Dynamic semantics checks for runtime errors like overflows - Syntax directed translation uses grammar rules and actions to implement semantic checks - Attribute grammars link syntax and semantics through node attributes

Uploaded by

KK's Play
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 90

Semantic Analysis

Instructor: Venkata Ramana Badarla

October 11, 2023

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 1 / 68


Introduction

• Semantic consistency that cannot be handled at the parsing stage is handled here
• Parsers cannot handle context-sensitive features of programming languages
• These are static semantics of programming languages and can be checked by the
semantic analyzer
• Variables are declared before use
• Types match on both sides of assignments
• Parameter types and number match in declaration and use
• Compilers can only generate code to check dynamic semantics of programming
languages at runtime
• whether an overflow will occur during an arithmetic operation
• whether array limits will be crossed during execution
• whether recursion will cross stack limits
• whether heap memory will be insufficient

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 2 / 68


Static Semantics

In main
• Types of p and return type of
dot prod match
int dot_prod (int x[], int y[]) • Number and type of the parameters of
{ dot prod are the same in both its
int d, i; declaration and use
d = 0;
for (i = 0; i < 10; i++) • p is declared before use, same for a
d += x[i] * y[i]; and b
return d; In dot_prod
}
• d and i are declared before use
main ()
{ • Type of d matches the return type of
int p; int a[10], b[10]; dot_prod
p = dot_prod (a, b);
• Type of d matches the result type of *
}
• Elements of arrays x and y are
compatible with *

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 3 / 68


Static Semantics: Error shown by gcc compiler

int dot_product (int a[], int b[]) { ...}


main () {
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
printf ("%d", dot_product (b));
printf ("%d", dot_product (a, b, a));
int p[10];
p = dotproduct (a, b);
printf ("%d", p);
}

In function ’main’
error in 3:too few arguments to fn ‘dot_product’
error in 4:too many arguments to fn ’dot_product’
error in 5:incompatible types in assignment
warning in 5:format ‘%d’ expects type ‘int’,
but argument 2 has type ‘int *’

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 4 / 68


Dynamic Semantics

int dot_prod (int x[], int y[]) {


int d, i;
d = 0;
for (i = 0; i < 10; i++)
d += x[i] * y[i];
return d;
}
main () {
int p; int a[10], b[10];
p = dot_prod (a, b);
}

Samples of dynamic semantic checks in dot_prod


• Value of i does not exceed the declared range of arrays x and y (both lower and
upper)
• There are no overflows during the operations of * and + in d += x[i]*y[i]

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 5 / 68


Syntax Directed Translation Schemes
• Offers the methods for the source language translation which are completely driven
by the parser (i.e., grammar).
• Actions (or code fragments) are attached to the grammar productions
• The fragments attached to the grammar symbols are executed during parsing
• The combined result of all these fragment executions, in the order induced by the
syntax analysis, produces the translation of the program
• Two types of schemes: SDD and SDT
• Syntax directed definition (SDD)
• Specifies production rules without explicitly specifying evaluation order
• Easy to specify
• Syntax directed translation (SDT)
• Specifies semantic actions or program fragments by explicitly specifying the
order of evaluation
• Easy to implement
• Applications: intermediate code generation, type checking and other kinds of
semantic analysis
Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 6 / 68
Syntax Tree and Parse Tree

• Syntax trees - interior nodes represent


language constructs instead of
grammar symbols in parse trees
• Used by many compilers for
intermediate representation of input
• Solid lines – edges of syntax tree.
Dotted lines – edges of parse tree.
• Abstract syntax tree or simply syntax
tree
• Concrete syntax tree or parse tree

Syntax tree: a - 4 + c

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 7 / 68


Attribute Grammar

• Links syntax with semantics


• Adds context sensitive capabilities to CFGs
• Let G = (N, T, P, S) be a CFG and let V = N U T
• Every symbol X of V has associated with it a set of attributes (denoted by
X.a, X.b, etc.)
• Two types of attributes: inherited i and synthesized s
• Each attribute takes values from a specified domain (finite or infinite), which is its
type
• Typical domains of attributes are, integers, reals, characters, strings,
booleans, structures, etc.
• The strings may even be long sequences of code, say code in the
intermediate language used by a compiler

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 8 / 68


Types of Attributes

• A synthesized attribute at a node N in parse tree is defined only in terms of


attribute values at the children of N and at N itself
• An inherited attribute at a node N in parse tree is defined only in terms of
attribute values at N’s parent, N itself, and N’s siblings
• An inherited attribute at node N can’t be defined in terms of attribute values at
the children of node N
• A synthesized attribute at node N can be defined in terms of inherited attribute
values at node N itself
• Terminals can have synthesized attributes, but not inherited attributes
• Attributes for terminals have lexical values that are supplied by the lexical analyzer
• There are no semantic rules in the SDD itself for computing the value of an
attribute for a terminal

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 9 / 68


Types of Attributed Grammars

• A grammar is an S-attributed grammar (SAG) if every attribute is synthesized.


• In L-Attributed grammar (LAG), each attribute must be either
• Synthesized, or
• Inherited, but suppose that there is a production A → X1 , X2 . . . Xn , and that
there is an inherited attribute Xi computed by a rule associated with this
production. Then the rule may use only:
• Inherited attributes associated with the head A
• Either inherited or synthesized attributes associated with the
occurrences of symbols X1 , X2 , . . . , Xi−1 located to the left of Xi
• Inherited or synthesized attributes associated with this occurrence of Xi
itself, but only in such a way that there are no cycles in a dependency
graph formed by the attributes of this Xi

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 10 / 68


Few Data Structures

• Annotated parse tree shows the values of attributes.


• Dependency graph shows an evaluation order for the attributes.

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 11 / 68


SAG/S-SDD for Expression Evaluation

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 12 / 68


LAG/L-SDD for Expression Evaluation

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 13 / 68


LAG/L-SDD for Type Declarations

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 14 / 68


SAG/S-SDD for Construction of a Syntax Tree

Syntax tree: a - 4 + c
Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 15 / 68
LAG/L-SDD for Construction of a Syntax Tree

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 16 / 68


LAG/L-SDD for Translation of Array Type

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 17 / 68


Exercise Problem 1

1 Given a CFG
S → ABC ,
A → aA | a,
B → bB | b,
C → cC | c
which generate L(G) = {am b n c p |m, n, p ≥ 1}. Define an AG (attribute grammar)
based on this CFG to generate L = {an b n c n |n ≥ 1}

Productions Semantic Rules


S → ABC
A → aA1
A→a
B → bB1
B→b
C → cC1
C →c

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 18 / 68


Exercise Problem 1 - Solution

Assume synthesized attributes status with NT S and count with the NTs
A, B, and C .

Productions Semantic Rules


S → ABC if (A.count == B.count && B.count == C .count)
s.status = true
else s.status = false
A → aA1 A.count = A1 .count + 1
A→a A.count = 1
B → bB1 B.count = B1 .count + 1
B→b B.count = 1
C → cC1 C .count = C1 .count + 1
C →c C .count = 1

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 19 / 68


Exercise Problem 2

1 This grammar generates binary numbers with a ”decimal” point:


S → L.L | L
L → LB | B
B→0|1
Design an L-attributed SDD to compute B.val, the decimal-number value of an
input string. For example, the translation of string 1 0 1 . 10 1 should be the
decimal number 5.625. Hint: use an inherited attribute L.side that tells which side
of the decimal point a bit is on.
2 Design an S-attributed SDD for the grammar and translation described in above
problem.

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 20 / 68


SDT

• SDT is a complementary notation to SDD and all of the applications of SDDs can
be implemented using SDTs.
• Unlike in SDDs, the program fragments (also known as semantic actions) can
appear at any position within a production body.
• By convention, we place curly braces around actions; if braces are needed as
grammar symbols, then we quote them.
• Example,
A → XY {action : a}
A → X {action : a}Y
• Implementation:
• An action a should be executed before proceeding with the execution of
Nonterminals that follow it.
• Transform the grammar adding a marker M symbol A → X MY and using an
empty RHS production M → {action : a}

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 21 / 68


SDD vs SDT: Infix to Postfix

SDD SDT

t is a string valued attribute


|| is string concatenation

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 22 / 68


Conversion of SDD into SDT

S-attributed SDD to an SDT


• Write actions at the end of the production body
• Known as postfix SDT

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 23 / 68


Implementation of Postfix SDT
• Use parser stack (of states/symbols) itself in LR parser
• Attach attributes to corresponding state/symbol

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 24 / 68


L-attributed SDD to an SDT

• Embed actions that compute inherited attributes for non-terminal A immediately


before A in the production body
• Place actions that compute synthesized attributes for a head of the production at
the end of the production body
• Evaluate in left-to-right in depth-first-traversal

Procedure dfvisit(n:node)
Begin
Foreach child m of n from left to right do
Evaluate inherited attributes of m;
dfvisit(m);
End
Evaluate synthesized attributes of n
End

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 25 / 68


Elimination of Left-recursion
• Grammar with left recursion, A → AY |X can’t be parsed by top-down parser.
• Already we know to eliminate left recursion i.e., as A → XR, R → YR | 
• But how to transform the actions computing attributes? For Example
A → AY {action : a}
A → X {action : b}
• Consider the following expression grammar with print action
E → E + T {print 0 +0 }
E →T
• The equivalent left recursion free SDT is
E → TR
R → +T {print 0 +0 }R
R→
Note: This is needed when we need to implement SDT with a top-down parser.

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 26 / 68


Elimination of Left-recursion (Cont.)

Non Left-recursive Grammar


Left-recursive Grammar
A → X {R.i = f (X .x)}R{A.a = R.s}
A → AY {A.a = g (A1 .a, Y .y )}
R → Y {R1 .i = g (R.i, Y .y )}R1 {R.s = R1 .s}
A → X {A.a = f (X .x)}
R → {R.s = R.i}

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 27 / 68


Example: SDD and SDT for while-statement

S → while (C) S1

Inherited attributes
• S.next, points to the code that
label L1:
must be executed after S finishes C.code
• C.true, points to the code to be if(C is false)
executed if C is true goto C.false (i.e. S.next)
else
• C.false, points to the code to be
goto C.true (i.e L2)
executed if C is false label L2:
Synthesized attributes S.code
• C.code, denotes the intermediate goto L1
code for the condition
• S.code, denotes the intermediate
code for statement(s)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 28 / 68


Example: SDD and SDT for while-statement (Cont.)
Production
S → while (C) S1
SDD

SDT

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 29 / 68


Intermediate Code
• Developing compilers of M languages for N target machines:
+ With intermediate code generation: M frontends, 1 code optimizer, N code
generators
- Without intermediate code generation: M frontends, MxN code generators,
MxN code optimizers
• Standard representation: Three address code (TAC)
• At most one operator at right hand side
• No built-up arithmetic expressions permitted
• Built from two basic components
• A TAC contains
• Address, may be
• an address of a source program variable
• constant
• compiler generated temprary
• Instruction

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 30 / 68


TAC: Instruction set
Assignment
• x = y op z
• x = op y, like unary minus, negation, typecast etc.
• Copy x = y

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 31 / 68


TAC: Instruction set
Assignment
• x = y op z
• x = op y, like unary minus, negation, typecast etc.
• Copy x = y
Unconditional jumps goto L

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 31 / 68


TAC: Instruction set
Assignment
• x = y op z
• x = op y, like unary minus, negation, typecast etc.
• Copy x = y
Unconditional jumps goto L
Conditional jumps
• if x goto L
• ifFalse x goto L
• if x relop y goto L

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 31 / 68


TAC: Instruction set
Assignment
• x = y op z
• x = op y, like unary minus, negation, typecast etc.
• Copy x = y
Unconditional jumps goto L
Conditional jumps
• if x goto L
• ifFalse x goto L
• if x relop y goto L
Procedure calls p(x1, x2...xn)
param x1
param x2 ...
param xn
call p, n

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 31 / 68


TAC: Instruction set
Assignment
• x = y op z
• x = op y, like unary minus, negation, typecast etc.
• Copy x = y
Unconditional jumps goto L
Conditional jumps
• if x goto L
• ifFalse x goto L
• if x relop y goto L
Procedure calls p(x1, x2...xn)
param x1
param x2 ...
param xn
call p, n
For function calls y = call p, n

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 31 / 68


TAC: Instruction set
Assignment
• x = y op z
• x = op y, like unary minus, negation, typecast etc.
• Copy x = y
Unconditional jumps goto L
Conditional jumps
• if x goto L
• ifFalse x goto L
• if x relop y goto L
Procedure calls p(x1, x2...xn)
param x1
param x2 ...
param xn
call p, n
For function calls y = call p, n
Indexed copy such as x = y[i], a[i] = b

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 31 / 68


TAC: Instruction set
Assignment
• x = y op z
• x = op y, like unary minus, negation, typecast etc.
• Copy x = y
Unconditional jumps goto L
Conditional jumps
• if x goto L
• ifFalse x goto L
• if x relop y goto L
Procedure calls p(x1, x2...xn)
param x1
param x2 ...
param xn
call p, n
For function calls y = call p, n
Indexed copy such as x = y[i], a[i] = b
Address and pointer assignment such as x = &y, x = *y, *x = y

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 31 / 68


Other representations

• Syntax tree (graphical representations)


• DAG

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 32 / 68


Other representations

• Syntax tree (graphical representations)


• DAG
• Quadruples
• Array of records each record having 4 fields [op, opr1, opr2, res]

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 32 / 68


Other representations

• Syntax tree (graphical representations)


• DAG
• Quadruples
• Array of records each record having 4 fields [op, opr1, opr2, res]
• Triples [op, opr1, opr2]
• Result field is not mentioned explicitely
• Result of a tuple is referred by its position in other tuples
• Issue with reordering of instructions
• Alternative is to use indirect tuple representation

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 32 / 68


Other representations

• Syntax tree (graphical representations)


• DAG
• Quadruples
• Array of records each record having 4 fields [op, opr1, opr2, res]
• Triples [op, opr1, opr2]
• Result field is not mentioned explicitely
• Result of a tuple is referred by its position in other tuples
• Issue with reordering of instructions
• Alternative is to use indirect tuple representation
• Indirect triples

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 32 / 68


DAG and TAC

DAG: a + a * (b - c) + (b - c) * d

TAC: do i = i + 1; while (a[i] < v)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 33 / 68


DAG and TAC
DAG: a + a * (b - c) + (b - c) * d

TAC: do i = i + 1; while (a[i] < v)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 33 / 68


Quadruples and Triples

Quadruples: a = b * - c + b * -c

Triples:

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 34 / 68


Quadruples and Triples
Quadruples: a = b * - c + b * -c

Triples:

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 34 / 68


Triples and Indirect triples

Triples:

Indirect triples:

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 35 / 68


Triples and Indirect triples
Triples:

Indirect triples:

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 35 / 68


Static Single Assignment (SSA)

• SSA: All assignments to variables with


distinct names; hence the name.
• Each variable has one definition
(computed only once)
• More values available at any point in
the program
• Facilitates code optimizations

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 36 / 68


φ function

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 37 / 68


φ function

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 37 / 68


φ function

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 37 / 68


Translation

• Arithmetic expressions
• Arrays
• Boolean Expressions
• Selection Statements
• Iterative Statements
• Procedures
• Etc.

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 38 / 68


Translation of Arithmetic Expressions

• S.code and E.code represent three-address codes for symbols S and E


respectively
• E.addr holds the value of (sub-) expression
• SDT – incremental translation – gets rid of holding long strings

Translation of expressions Incremental translation of expressions

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 39 / 68


Expression Evaluation

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 40 / 68


Translation of Control flow statements (1)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 41 / 68


Translation of Control flow statements (2)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 42 / 68


Translation of Boolean Expression (1)
• Boolean expressions are made of boolean operators operating on boolean variables
or relational expressions
• Relational expressions consists of relational operators operting on arithmetic
expressions

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 43 / 68


Translation of Boolean Expression (2)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 44 / 68


Translation of Boolean Expression (3)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 45 / 68


Translation of Boolean Expression (4)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 46 / 68


Avoiding Redundant Gotos (1)

• Use a special label fall to indicate insignificant gotos

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 47 / 68


Avoiding Redundant Gotos (2)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 48 / 68


Avoiding Redundant Gotos (3)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 49 / 68


Computing Labels in Single Pass

• Labels generated should be attached with address of the target three address code
instruction
• Backword jumps (can be done in single pass) and forward jumps (needs two passes)
• Backpatching – technique to attach the labels to addresses in a single pass

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 50 / 68


Implementation of Backpatching

• Two synthesized attributes truelist and falselist


• turelist – list of jump instructions into which jump target address must be
inserted if conditions is true
• Initially jump target address will be left unspecified

100 if x < 100 goto _______


101 goto _______

• makelist (i) – creates a list containining i which is an index into the array of
instructions, and returns pointer to the list.
• merge (p1, p2) – concatenates two lists pointed by p1 and p2, and returns a
pointer to the concatenated list.
• backpactch(p, i) – inserts target label i for each of the instruction on the list
pointed by p.

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 51 / 68


Implementation of Backpatching (Cont.)

• nextinstr holds the index of the next instruction that follows

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 52 / 68


Implementation of Backpatching (Cont.)

• Marker symbol M is introduced into the production body


• M executes a semantic action at appropriate time
• Action here generates the address (aka index) of the next instruction
• B → B1 || M B2
• M →  M.instr = nextinstr

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 53 / 68


Implementation of Backpatching (Cont.)

• Marker symbol M is introduced into the production body


• M executes a semantic action at appropriate time
• Action here generates the address (aka index) of the next instruction
• B → B1 || M B2
• M →  M.instr = nextinstr

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 53 / 68


Implementation of Backpatching (Cont.)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 54 / 68


Implementation of Backpatching (Cont.)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 55 / 68


Implementation of Backpatching (Cont.)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 55 / 68


Implementation of Backpatching (Cont.)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 56 / 68


Implementation of Backpatching (Cont.)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 57 / 68


Multi-way selection statement (Switch) (1)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 58 / 68


Multi-way selection statement (Switch) (2)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 59 / 68


Multi-way selection statement (Switch) (3)

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 60 / 68


Procedure/Function Calls

1 n = f(a[i])
2 t1 = i*4
3 t2 = a[t1]
4 param t2
5 t3 = call f, 1
6 n = t3

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 61 / 68


Types and Declarations

• Applications of Types: Type Checking and Translation


• Type checking
• Logical rules to ensure operand type matches with the type expected by the
operator
• Translation
• To determine the storage requirements, ex. Arrays, Note: the actual
allocation will be done at runtime
• To determine the storage layout (base address) for composite data types
(Relative address – which is an offset from the start of the data area)
• To insert explicit type conversions

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 62 / 68


Type Expressions

• Types follow a structure which is represented with type expression


• Basic types example, integer, char, float, void ...
• Composite data types
• Arrays ex. int[2][3], array (2, array (3, integers) array of two arrays of
each three integers
• Record example: record{float x; int y; char z;} r;

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 63 / 68


Type Hierarchy and Conversion

Type conversion

Introducing type conversion into expression evaluation

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 64 / 68


Grammar for Declaration of Variables

Grammar for declarations

Syntax-directed translation of array types

Computing types and their widths

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 65 / 68


Sequence of Declarations
• Process all declarations in a single procedure as a group
• offset maintains the next available relative address to be used by a declaration
• top refers to topmost symbol table
nested procedures,
nested blocks,
...
• Requires stack of symbol tables

Computing relative address of declared names

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 66 / 68


Translation of Fields in Records/Structures
• Grammar production
T → record ’{’D ’}’
record{float x; int y; char z;} r;
• Two semantic actions

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 67 / 68


Translation of Fields in Records/Structures
• Grammar production
T → record ’{’D ’}’
record{float x; int y; char z;} r;
• Two semantic actions
• Env implements symbols table

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 67 / 68


Translation of Fields in Records/Structures
• Grammar production
T → record ’{’D ’}’
record{float x; int y; char z;} r;
• Two semantic actions
• Env implements symbols table
• Push the current symbol table, p

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 67 / 68


Translation of Fields in Records/Structures
• Grammar production
T → record ’{’D ’}’
record{float x; int y; char z;} r;
• Two semantic actions
• Env implements symbols table
• Push the current symbol table, p
• Create a new symbol table n

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 67 / 68


Translation of Fields in Records/Structures
• Grammar production
T → record ’{’D ’}’
record{float x; int y; char z;} r;
• Two semantic actions
• Env implements symbols table
• Push the current symbol table, p
• Create a new symbol table n
• Find space requirement

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 67 / 68


Translation of Fields in Records/Structures
• Grammar production
T → record ’{’D ’}’
record{float x; int y; char z;} r;
• Two semantic actions
• Env implements symbols table
• Push the current symbol table, p
• Create a new symbol table n
• Find space requirement
• Store the computed value

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 67 / 68


Translation of Fields in Records/Structures
• Grammar production
T → record ’{’D ’}’
record{float x; int y; char z;} r;
• Two semantic actions
• Env implements symbols table
• Push the current symbol table, p
• Create a new symbol table n
• Find space requirement
• Store the computed value
• Restore the previous symbol table, p

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 67 / 68


Translation of Arrays (of M x N)

Operations on Arrays
1 a[i] = x
2 y = a[j]
3 a[i+1] = a[j*2] + 3
Location of ith element in a[i]
Translation
base + i * width
1 t1 = j*2
2 t2 = a[t1] Multidimensional Arrays
3 t3 = t2 + 3 - Find width of each dimension
4 t4 = i + 1 and add recursively
5 a[t4] = t3 - Find total numbers of elements
x width of element
Array indexing b[i][j](array indices
start from 0)
1 base + i * w1 + j * w2 (OR)
2 base + (i* N + j) * elem_width

Instructor: Venkata Ramana Badarla Semantic Analysis October 11, 2023 68 / 68

You might also like