0% found this document useful (0 votes)
48 views6 pages

Parsing

Uploaded by

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

Parsing

Uploaded by

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

Syntax Directed Definition in Compiler Design

Syntax Directed Definitions (SDD) are formal methods of attaching


semantic information to the syntactic structure of a programming
language. SDDs improve the means of context-free high-level by
instances, adding a semantic rule set for every production of the
grammar. The rules described in these definitions state how to derive
values such as types, memory locations, or fragments of code from the
structure of an input object.

Syntax Directed Translation (SDT) is the action of translating a high-


level language program into an intermediate language or machine
language according to the semantic rules imposed by SDDs. Semantic
actions in SDT, act in coordination with the parsing process in order to
provide the translation of the input code. These actions are declarative
and they are triggered during the parsing phase of the message to yield
the result.

What is Syntax Directed Translation?

Syntax Directed Translation (SDT), is a technical manner utilized in


semantics and language translation whereby a source language is
translated into an intermediate language or a target language through
semantic actions, and attributes attached to the grammar. The translation
process follows the structure of the grammar, besides the performance of
semantic actions is interwoven with the processes of input parsing.

The semantic actions are normally included in the grammatical rules and
can be either performed synchronously or asynchronously with the
parsing actions. Integrated development systems such as SDT offer tools
to compilers such as code generation, lexical analysis, evaluation of
expressions, definition, grammar, and checking of types among other
services.

What are Annotated Parse Trees?

The parse tree containing the values of attributes at each node for given
input string is called annotated or decorated parse tree.

Features of Annotated Parse Trees

 High level specification

 Hides implementation details

 Explicit order of evaluation is not specified

Types of Attributes

There are two types of attributes:


1. Synthesized Attributes: These are those attributes which derive
their values from their children nodes i.e. value of synthesized attribute at
node is computed from the values of attributes at children nodes in parse
tree.

Example:

E --> E1 + T { E.val = E1.val + T.val}

In this, E.val derive its values from E1.val and T.val

Computation of Synthesized Attributes

 Write the SDD using appropriate semantic rules for each production
in given grammar.

 The annotated parse tree is generated and attribute values are


computed in bottom up manner.

 The value obtained at root node is the final output.

Example: Consider the following grammar

S --> E

E --> E1 + T

E --> T

T --> T1 * F

T --> F

F --> digit

The SDD for the above grammar can be written as follow


Let us assume an input string 4 * 5 + 6 for computing synthesized
attributes. The annotated parse tree for the input string is

For computation of attributes we start from leftmost bottom node. The


rule F –> digit is used to reduce digit to F and the value of digit is obtained
from lexical analyzer which becomes value of F i.e. from semantic action
F.val = digit.lexval. Hence, F.val = 4 and since T is parent node of F so, we
get T.val = 4 from semantic action T.val = F.val. Then, for T –> T1 * F
production, the corresponding semantic action is T.val = T1.val * F.val .
Hence, T.val = 4 * 5 = 20

Similarly, combination of E1.val + T.val becomes E.val i.e. E.val = E1.val +


T.val = 26. Then, the production S –> E is applied to reduce E.val = 26 and
semantic action associated with it prints the result E.val . Hence, the
output will be 26.

2. Inherited Attributes: These are the attributes which derive their


values from their parent or sibling nodes i.e. value of inherited attributes
are computed by value of parent or sibling nodes.
Example:

A --> BCD { C.in = A.in, C.type = B.type }

Computation of Inherited Attributes

 Construct the SDD using semantic actions.

 The annotated parse tree is generated and attribute values are


computed in top down manner.

Example: Consider the following grammar

S --> T L

T --> int

T --> float

T --> double

L --> L1, id

L --> id

The SDD for the above grammar can be written as follow


Let us assume an input string int a, c for computing inherited attributes.
The annotated parse tree for the input string is

The value of L nodes is obtained from T.type (sibling) which is basically


lexical value obtained as int, float or double. Then L node gives type of
identifiers a and c. The computation of type is done in top down manner
or preorder traversal. Using function Enter_type the type of identifiers a
and c is inserted in symbol table at corresponding id.entry.

Conclusion

Syntax Directed Definitions (SDD) and Syntax Directed Translation


(SDT) are essential tools in the design and implementation of compilers
and interpreters. They allow for the generation of intermediate code, type-
checking, and expression evaluation in a modular and structured manner.
By defining attributes and associating them with grammar productions,
we can control the semantic processing of programming languages
efficiently. Synthesized and inherited attributes form the basis of attribute
evaluation, supporting a broad range of programming language features.

You might also like