Semantic Analysis I SyntaxDirected Definitions Intro to Semantic Analysis - PowerPoint PPT Presentation

1 / 25
About This Presentation
Title:

Semantic Analysis I SyntaxDirected Definitions Intro to Semantic Analysis

Description:

E.g., type checks. Benefit = efficiency. One single compiler pass for multiple tasks ... Propagate type attributes while building AST from. the bottom to the top - 15 ... – PowerPoint PPT presentation

Number of Views:106
Avg rating:3.0/5.0
Slides: 26
Provided by: scottm3
Category:

less

Transcript and Presenter's Notes

Title: Semantic Analysis I SyntaxDirected Definitions Intro to Semantic Analysis


1
Semantic Analysis ISyntax-Directed
DefinitionsIntro to Semantic Analysis
  • EECS 483 Lecture 9
  • University of Michigan
  • Wednesday, October 1, 2003

2
Abstract Syntax Tree (AST) - Review
S
  • Derivation sequence of applied productions
  • S ? ES ? 1S ? 1E ?12
  • Parse tree graph representation of a derivation
  • Doesnt capture the order of applying the
    productions
  • AST discards unnecessary information from the
    parse tree

E

S
( S )
E


5
5
E S
1

E S
1
2

2
E
3
4
( S )
E S
E
3
4
3
AST Data Structures
  • Abstract class Expr
  • class Add extends Expr
  • Expr left, right
  • Add(Expr L, Expr R)
  • leftL rightR
  • class Num extends Expr
  • int value
  • Num(int v) value v


N
5

N
1

. . .
4
Implicit AST Construction
  • LL/LR parsing techniques implicitly build AST
  • The parse tree is captured in the derivation
  • LL parsing AST represented by applied
    productions
  • LR parsing AST represented by applied reductions
  • We want to explicitly construct the AST during
    the parsing phase

5
AST Construction - LL
S ? ES S ? ? S E ? num (S)
LL parsing extend procedures for non-terminals
Expr parse_S() switch (token)
case num case ( Expr left
parse_E() Expr right parse_S()
if (right NULL) return left
else return new Add(left,right)
default ParseError()
void parse_S() switch (token)
case num case ( parse_E()
parse_S() return
default ParseError()
6
AST Construction - LR
  • We again need to add code for explicit AST
    construction
  • AST construction mechanism
  • Store parts of the tree on the stack
  • For each nonterminal symbol X on stack, also
    store the sub-tree rooted at X on stack
  • Whenever the parser performs a reduce operation
    for a production X ? ?, create an AST node for X

7
AST Construction for LR - Example
S ? E S S E ? num (S)
input string 1 2 3
.
S
Add

Num(1)
Num(2)
.
S
.
E
Add
Num(3)
. . .
. . .
. . .
. . .
Num(1)
Add
stack
Num(2)
Num(3)
Before reduction S ? E S
After reduction S ? E S
8
Problems
  • Unstructured code mixing parsing code with AST
    construction code
  • Automatic parser generators
  • The generated parser needs to contain AST
    construction code
  • How to construct a customized AST data structure
    using an automatic parser generator?
  • May want to perform other actions concurrently
    with parsing phase
  • E.g., semantic checks
  • This can reduce the number of compiler passes

9
Syntax-Directed Definition
  • Solution Syntax-directed definition
  • Extends each grammar production with an
    associated semantic action (code)
  • S ? E S action
  • The parser generator adds these actions into the
    generated parser
  • Each action is executed when the corresponding
    production is reduced

10
Semantic Actions
  • Actions C code (for bison/yacc)
  • The actions access the parser stack
  • Parser generators extend the stack of symbols
    with entries for user-defined structures (e.g.,
    parse trees)
  • The action code should be able to refer to the
    grammar symbols in the productions
  • Need to refer to multiple occurences of the same
    non-terminal symbol, distinguish RHS vs LHS
    occurrence
  • E ? E E
  • Use dollar variables in yacc/bison (, 1, 2,
    etc.)
  • expr expr PLUS expr 1 3

11
Building the AST
  • Use semantic actions to build the AST
  • AST is built bottom-up along with parsing

Recall User-defined type for objects on the
stack (union)
expr NUM new Num(1.val) expr
expr PLUS expr new Add(1, 3) expr
expr MULT expr new Mul(1, 3) expr
LPAR expr RPAR 2
12
Class Problem
E ? num (E) E E E E
Perform a LR derivation of the string
(12)3 Show where each part of the AST is
constructed
13
Other Syntax-Directed Definitions
  • Can use syntax-directed definitions to perform
    semantic checks during parsing
  • E.g., type checks
  • Benefit efficiency
  • One single compiler pass for multiple tasks
  • Disadvantage unstructured code
  • Mixes parsing and semantic checking phases
  • Performs checks while AST is changing

14
Type Declaration Example
this really looks like
AddType(2, 1.type) .type 1.type
D ? T id AddType(id, T.type) D.type
T.type D ? D1, id AddType(id,
D1.type) D.type D1.type T ?
int T.type intType T ? float T.type
floatType
15
Propagation of Values
Propagate type attributes while building AST
from the bottom to the top
int a, b
D.type
D
D.type
AddType(id, D.type)
D
,
id
T.type
AddType(id, T.type)
id
T
intType
int
16
Type Declaration Example 2
D ? TL AddType(id, T.type) D.type
T.type L.type D.type T ?
int T.type intType T ? float T.type
floatType L ? L1, id AddType(id,
L1.type) ??? L ? id AddType(id,
???)
17
Propagation of Values 2
Propagate values both bottom-up and top-down
int a, b
D.type
D
AddType(id, L.type)
T.type
L.type
L
T
intType
L.type
int
L
,
id
id
AddType(id, L.type)
18
AST Attributes
  • Each node in AST decorated with attributes
    describing properties of the node
  • Semantic analysis compute the attributes of the
    tree and check the consistency of definitions
  • 2 kinds of attributes
  • Inherited attributes carry contextual
    information (variable position info LHS vs RHS,
    etc)
  • Synthesized attributes modify context (by
    declaring variables, etc.) and produce code lists
    (instructions representing operations performed
    in sub-tree)

19
AST Attributes (2)
  • An attribute for a node in the AST depends on
    values from parent nodes, sibling nodes and
    children nodes for evaluation
  • Values from parents and siblings inherited
  • Values from children synthesized
  • Terminals compute only synthesized attrs
  • Non-terminals may compute either
  • May compute inherited attrs from its children and
    pass these values down the parse tree
  • May compute synthesized attribute and pass these
    values up the parse tree
  • Constant values called intrinsic attributes

20
Strategies for Attribute Evaluation
  • Walk dependence tree
  • Construct AST, use that to establish the
    dependence relationships to guide attribute
    evaluation
  • Most flexible, but may fail if get cycle
  • Build dep graph, topo sort determines order
  • Rules based
  • Order of evaluation of attributes established
    when the compiler is constructed
  • On-the-fly
  • Order determined by order nodes are visited
    (e.g., parsing method, top-down or bottom-up)

21
On-the-fly Evaluation
  • Most efficient, but only works with restrictive
    forms of attributes
  • L-attributed RHS symbol depends only upon
    inherited symbols of LHS and synthesized
    attributes of symbols to the left of it in the
    production, and synthesized attributes of the LHS
    depend only upon inherited attributes of LHS and
    attributes of RHS
  • Attribute info flows from Left to right
  • Depth-first traversal will suffice
  • S-attributed Only synthesized attributes,
    nodes attributes only dependent on attributes on
    stack
  • Evaluate bottom-up

22
Multi-Pass Approach
  • Separate AST construction from semantic checking
    phase
  • Traverse the AST and perform semantic checks (or
    other actions) only after the tree has been built
    and its structure is stable
  • This approach is less error-prone
  • It is better when efficiency is not a critical
    issue
  • Attribute evaluation proceeds as tree-walk of the
    AST

23
Semantic Analysis
  • Lexically and syntactically correct programs may
    still contain other errors
  • Lexical and syntax analyses are not power enough
    to ensure the correct usage of variables,
    objects, functions, ...
  • Semantic analysis Ensure that the program
    satisfies a set of rules regarding the usage of
    programming constructs (variables, objects,
    expressions, statements)

24
Class Problem
Classify each error as lexical, syntax, or
semantic?
int a a 1 a 2
in a a 1
int foo(int a) foo 3
int a a 1.0
int a b b a
25
Categories of Semantic Analysis
  • Examples of semantic rules
  • Variables must be defined before being used
  • A variable should not be defined multiple times
  • In an assignment stmt, the variable and the
    expression must have the same type
  • The test expr. of an if statement must have
    boolean type
  • 2 major categories
  • Semantic rules regarding types
  • Semantic rules regarding scopes
Write a Comment
User Comments (0)
About PowerShow.com