Semantic Analysis - PowerPoint PPT Presentation

1 / 29
About This Presentation
Title:

Semantic Analysis

Description:

Requires complicated and unnatural context free grammars. Guides subsequent phases ... Problems with Syntax Directed Translations ... – PowerPoint PPT presentation

Number of Views:15
Avg rating:3.0/5.0
Slides: 30
Provided by: thoma423
Category:

less

Transcript and Presenter's Notes

Title: Semantic Analysis


1
Semantic Analysis
  • Mooly Sagiv
  • html//www.cs.tau.ac.il/msagiv/courses/wcc04.html

2
Outline
  • What is Semantic Analysis
  • Why is it needed?
  • Scopes and type checking for imperative languages
    (Chapter 6)
  • Attribute grammars (Chapter 3)

3
Semantic Analysis
  • The meaning of the program
  • Requirements related to the context in which a
    construct occurs
  • Context sensitive requirements - cannot be
    specified using a context free grammar(Context
    handling)
  • Requires complicated and unnatural context free
    grammars
  • Guides subsequent phases

4
Basic Compiler Phases
Source program (string)
Front-End
lexical analysis
Tokens
syntax analysis
Abstract syntax tree
semantic analysis
Back-End
Fin. Assembly
5
Example Semantic Condition
  • In C
  • break statements can only occur inside switch or
    loop statements

6
Partial Grammar for C
Stm ? Exp
Stm ? if (Exp) Stm
StList ? StList Stm
Stm ? if (Exp) Stm else Stm
StList ? ?
Stm ? while (Exp) do Stm
Stm ? break
Stm? StList
7
Refined Grammar for C
Stm?Exp
Stm ? if (Exp) Stm
StList ? StList Stm
Stm ? if (Exp) Stm else Stm
StList ? ?
Stm? while (Exp) do LStm
Stm? StList
8
A Possible Abstract Syntax for C
typedef struct A_St_ A_St struct A_St enum
A_if, A_while, A_break, A_block, ... kind
A_pos pos union struct
A_Exp e A_St st1 A_St st2
if_st struct A_Exp e
A_St st while_st struct
A_St st1 A_St st2 block_st
... u
A_St A_IfStm(A_Exp, A_St, A_St) A_St
A_WhileStm(A_Exp A_St) A_St A_BreakStm(void) A_S
t A_BlockStm(A_St, A_St)
9
Partial Bison Specification
stm IF ( exp ) stm A_IfStm(3, 5,
NULL) IF ( exp ) stm ELSE stm
A_IfStm(3, 5, 7) WHILE ( exp
) stm A_WhileStm(3, 5)
stmList 2 BREAK '
A_BreakStm() stmList
stmList st A_BlockStm(1, 2)
/ empty / NULL
10
A Semantic Check(on the abstract syntax tree)
void check_break(A_St st) switch (st-gtkind)
case A_if check_break(st-gt u.if_st.st1)
check_break(st-gtu.if_st.st2)
break case A_while break case
A_break error(Break must be enclosed within a
loop,
st-gtpos) break case A_block
check_break(st-gtu.block_st.st1)
check_break(st-gtu.block_st.st2)
break
11
Syntax Directed Solution
static int loop_count 0 stm exp
IF ( exp ) stm IF ( exp
) stm ELSE stm WHILE ( exp ) m stm
loop_count-- stmList
BREAK if (!loop_count)
error(Break must be enclosed within a loop,
line_count) stmList
stmList st / empty / m / empty /
loop_count
12
Problems with Syntax Directed Translations
  • Grammar specification may be tedious (e.g., to
    achieve LALR(1))
  • May need to rewrite the grammar to incorporate
    different semantics
  • Modularity is impossible to achieve
  • Some programming languages allow
    forwarddeclarations (Algol, ML and Java)

13
Example Semantic Condition Scope Rules
  • Variables must be defined within scope
  • Dynamic vs. Static Scope rules
  • Cannot be coded using a context free grammar

14
Dynamic vs. Static Scope Rules
procedure p var x integer procedure q
begin q x
end q procedure r var x
integer begin r q end r
begin p q r end p
15
Example Semantic Condition
  • In Pascal Types in assignment must be
    compatible'

16
Partial Grammar for Pascal
Stm? id Assign Exp
Exp ? IntConst
Exp ? RealConst
Exp? Exp Exp
Exp? Exp -Exp
Exp? ( Exp )
17
Refined Grammar for Pascal
Stm? RealId Assign RealExp
Stm?IntExpAssign IntExp
Stm?RealId Assign IntExp
RealExp ? RealConst
IntExp ? IntConst
RealIntExp ? RealId
IntExp ? IntId
RealExp? RealExp RealExp
RealExp? RealExp IntExp
IntExp? IntExp IntExp
RealExp? IntExp RealExp
IntExp? IntExp -IntExp
RealExp? RealExp -RealExp
RealExp? RealExp -RealExp
IntExp? ( IntExp )
RealExp? RealExp -IntExp
RealExp? IntExp -RealExp
RealExp? ( RealExp )
18
Syntax Directed Solution
... stm id Assign exp compat_ass(lookup(1
), 3) exp exp PLUS exp
compat_op(PLUS, 1, 3)
op_type(PLUS, 1, 3) exp
MINUS exp compat_op(MINUS, 1, 3)
op_type(MINUS, 1,
3) ID lookup(1) INCONST
ty_int REALCONST ty_real
( exp ) 2
19
Type Checking (Imperative languages)
  • Identify the type of every expression
  • Usually one or two passes over the syntax tree
  • Handle scope rules

20
Attribute Grammars Knuth 68
  • Generalize syntax directed translations
  • Every grammar symbol can have several attributes
  • Every production is associated with evaluation
    rules
  • Context rules
  • The order of evaluation is automatically
    determined
  • declarative
  • Multiple visits of the abstract syntax tree

21
Attribute Grammar for Types
stm? id Assign exp
compat_ass(id.type, exp.type) exp? exp
PLUS exp compat_op(PLUS,
exp1.type,exp2.type)
exp0.type op_type(PLUS, exp1.type,
exp2.type) exp? exp MINUS exp
compat_op(MINUS, exp1.type, exp2.type)
exp0.type op_type(MINUS, exp1.type,
exp2.type) exp? ID exp.type
lookup(id.repr) exp? INCONST exp.type ty_int
exp? REALCONST exp.type ty_real exp?
( exp ) exp0.type exp1.type

22
Example Binary Numbers
Z ?L Z ?L.L L ?L B L ?B B ?0 B ?1
Compute the numeric value of Z
23
Z ?L Z.v L.v Z ?L.L Z.v
L1.v L2.v
L ?L B L0.v L1.v B.v L ? B
L.v B.v
B ? 0 B.v 0 B ? 1 B.v ?
24
Z ?L Z.v L.v Z ?L.L Z.v
L1.v L2.v
L ?L B L0.v L1.v B.v L ? B
L.v B.v
B ? 0 B.v 0 B ? 1 B.v 2B.s
25
Z ?L Z.v L.v Z ?L.L Z.v
L1.v L2.v
L ?L B L0.v L1.v B.v B.s
L0.s L1.s L0.s 1 L ?
B L.v B.v B.s L.s
B ? 0 B.v 0 B ? 1 B.v 2B.s
26
Z ?L Z.v L.v L.s 0 Z ?L.L
Z.v L1.v L2.v L1.s 0
L2.s?
L ?L B L0.v L1.v B.v B.s
L0.s L1.s L0.s 1 L ?
B L.v B.v B.s L.s
B ? 0 B.v 0 B ? 1 B.v 2B.s
27
Z ?L Z.v L.v L.s 0 Z ?L.L
Z.v L1.v L2.v L1.s 0
L2.s-L2.l
L ?L B L0.v L1.v B.v B.s
L0.s L1.s L0.s 1 L0.l
L1.l 1 L ? B L.v B.v
B.s L.s L.l 1
B ? 0 B.v 0 B ? 1 B.v 2B.s
28
Z.v1.625
Z
L.v0.625
L.v1
L.l3
L.s-3
L
.
L
L.s0
L.l1
L.v0.5
B.s-3
L.l2
B.s0
B
L
L.s-2
B
B.v1
B.v0.125
B.s-2
1
L.s-1
B
L
L.l1
B.v0
L.v0.5
1
0
B
B.v0.5
B.s-1
1
29
Summary
  • Several ways to enforce semantic correctness
    conditions
  • syntax
  • Regular expressions
  • Context free grammars
  • syntax directed
  • traversals on the abstract syntax tree
  • later compiler phases?
  • Runtime?
  • There are tools that automatically generate
    semantic analyzer from specification(Based on
    attribute grammars)
Write a Comment
User Comments (0)
About PowerShow.com