Lecture 05 Syntax analysis Semantic Analysis THEORY OF
- Slides: 70
Lecture 05 – Syntax analysis & Semantic Analysis THEORY OF COMPILATION Eran Yahav 1
You are here Compiler txt Source text Lexical Analysis Syntax Analysis Parsing Semantic Analysis Inter. Rep. (IR) Code exe Gen. Executable code 2
Last week: LR Parsing with Pushdown Automaton input stack q 0 i lookahead q 5 top symbol state (current state) ACTION Table GOTO Table output 3
Last week: LR Parsing with Pushdown Automaton s = top of stack, t = next token, use ACTION[s][t] to determine what is the next move Shift move Remove first token t from input Push t on the stack Compute next state s’ = GOTO[s][t] table Push new state s’ on the stack If new state is error – report error Reduce move Using a rule N α Symbols in α and their following states are removed from stack. Let q denote the state on top of stack after their removal Push N on the stack Compute next state s’ = GOTO[q][N] table Push new state s’ on the stack (on top of N) 4
Last week: shift move input i stack q 0 + i $ stack input 3+ 4 + stack State i q 0 q 5 + ( q 7 input 1+2 q 0 ) $ i i + q 0 i $ q 5 1. Remove first token t from input 2. Push t on the stack 3. Compute s’= GOTO[s][t] table E T action 4. Push s’ state on the stack q 1 q 6 shift 5. If new state is error – report error 5
Last week: reduce move input + stack q 0 i i q 5 input 3 + stack 1+2 input Reduce T i stack $ q 0 i $ 4+5 How we picked next state State i q 0 q 5 + ( ) $ q 7 E T action q 1 q 6 shift … q 5 how we decided on a reduce r 4 i $ + i $ q 0 input stack T + q 0 T q 6 1. Using a rule N α (ACTION[s][t]) 2. Symbols in α and their following states are removed from stack. q = top afterwards. 3. Push N on the stack 4. New state s’= GOTO[q][N] table 5. Push new state s’ on top of N 6
Constructing Parse Table: LR(0) Automaton Example q 6 E T T q 0 Z E$ E T E E + T T i T (E) T q 7 T ( E) E T E E + T T i T (E) ( q 5 i i T i E E q 1 q 2 Z E $ E E + T $ Z E$ + q 3 q 4 E E+ T T i T (E) T + T (E ) E E +T ) ( q 8 q 9 T (E) E E + T 7
Last week: GOTO/ACTION Table State i q 0 s 5 q 1 + ( ) $ s 7 s 3 T s 1 s 6 r 1 s 2 q 2 r 1 q 3 s 5 q 4 r 3 r 3 q 5 r 4 r 4 q 6 r 2 r 2 q 7 s 5 s 8 s 6 r 5 q 8 q 9 (1) Z (2) E (3) E (4) T (5) T r 1 E r 1 E $ T E + T i ( E ) r 1 s 7 s 4 s 7 s 3 r 5 r 1 r 5 s 9 r 5 r 5 Warning: numbers mean different things! rn = reduce using rule number n sm = shift to state m 8
LR Parsing with Pushdown Automaton (superimposed GOTO/ACTION) s = top of stack, t = next token, move=GOTO/ACTION[s][t] to determine what is the next move If (move = Sm) Remove first token t from input Push t on the stack Push new state m on the stack If (move = rn) use rule number n: N α Symbols in α and their following states are removed from stack. Let q denote the state on top of stack after their removal Push N on the stack Compute next state s’ = GOTO/ACTION[q][N] table Push new state s’ on the stack (on top of N) If (move = empty) report ERROR 9
GOTO/ACTION Table top is on the right st i q 0 s 5 q 1 + ( ) $ s 7 s 3 T Stack Input Action s 1 s 6 q 0 i + i $ s 5 r 1 q 0 i q 5 +i$ r 4 q 0 T q 6 +i$ r 2 s 2 q 2 r 1 q 3 s 5 q 4 r 3 r 3 q 0 E q 1 +i$ s 3 q 5 r 4 r 4 q 0 E q 1 + q 3 i$ s 5 q 6 r 2 r 2 q 7 s 5 s 8 s 6 q 0 E q 1 + q 3 i q 5 $ r 4 q 0 E q 1 + q 3 T q 4 $ r 3 r 5 q 0 E q 1 s 2 q 8 q 9 r 1 E r 1 (1) Z (2) E (3) E (4) T (5) T r 1 s 7 s 4 s 7 s 3 r 5 r 1 r 5 s 9 r 5 E $ T E + T i ( E ) r 5 q 0 E q 1 $ q 2 $ r 1 q 0 Z 10
Are we done? Can make a transition diagram for any grammar Can make a GOTO table for every grammar Cannot make a deterministic ACTION table for every grammar 11
LR(0) Conflicts T q 0 Z E$ E T E E + T T i T (E) T i[E] E Z E E T T T … ( i … … q 5 T i [E] Shift/reduce conflict E $ T E + T i ( E ) i[E] 12
LR(0) Conflicts q 0 T Z E$ E T E E + T T i T (E) V i E Z E E T V T … ( i … … q 5 T i V i reduce/reduce conflict E $ T E + T i i ( E ) 13
LR(0) Conflicts Any grammar with an -rule cannot be LR(0) Inherent shift/reduce conflict A - reduce item P α Aβ – shift item A can always be predicted from P α Aβ 14
Back to the GOTO/ACTIONS tables ACTION Table GOTO Table State i q 0 q 5 q 1 + ( ) $ q 7 q 3 E T action q 1 q 6 shift q 2 shift Z E$ q 2 q 3 q 5 q 7 q 4 Shift q 4 E E+T q 5 T i q 6 E T q 7 q 8 q 5 q 7 q 3 q 8 q 6 q 9 ACTION table determined only by transition diagram, ignores input shift T E 15
SLR Grammars Don’t reduce if it will get you into trouble on the next token A handle should not be reduced to a nonterminal N if the look-ahead is a token that cannot follow N A reduce item N α is applicable only when the look-ahead is in FOLLOW(N) Differs from LR(0) only on the ACTION table 16
LR(0) Conflicts T q 0 Z E$ E T E E + T T i T (E) T i[E] E Z E E T T T E $ T E + T i ( E ) i[E] … ( i … q 5 T i [E] Shift/reduce conflict … A[x]$ input FOLLOW(Z) = { $ } FOLLOW(E)= { ) + $ } FOLLOW(T)= { ) + $ } 17
SLR ACTION Table State i q 0 shift q 1 + ( ) shift Z E$ q 2 q 3 $ shift q 4 E E+T q 5 T i T i q 6 E T E T q 7 shift E E+T shift q 8 shift q 9 T (E) (1) Z (2) E (3) E (4) T (5) T E $ T E + T i ( E ) Look-ahead token from the input Remember: In contrast, GOTO table is indexed by state and a grammar symbol from the stack T (E) FOLLOW(Z) = { $ } FOLLOW(E)= { ) + $ } FOLLOW(T)= { ) + $ } 18
SLR ACTION Table State i q 0 shift q 1 + ( ) [ shift state E E+T q 5 T i shift q 1 shift Z E$ q 2 Z E$ q 3 Shift q 4 E E+T q 5 T i q 6 E T shift q 7 shift q 8 shift q 9 T E E E+T shift T i E T shift q 8 shift q 9 T (E) SLR – use 1 token look-ahead … as before… T i[E] FOLLOW(Z) = { $ } FOLLOW(E)= { ) + $ } FOLLOW(T)= { ) + $ } action q 0 shift q 4 q 7 $ shift q 2 q 3 ] T (E) vs. LR(0) – no look-ahead 19
Are we done? (0) S’ → S (1) S → L = R (2) S → R (3) L → * R (4) L → id (5) R → L 20
q 3 R q 0 S S’ → S S→ L=R S→ R L→ *R L → id R→ L S’ → S q 9 S→L=R L q 2 S→L =R R→L L → id q 4 L→* R R→ L L→ *R L → id = q 6 q 5 id * * q 1 S→R id S→L= R R→ L L→ *R L → id * q 8 L R L→*R R L R→L q 7 21
Shift/reduce conflict (0) S’ → S (1) S → L = R (2) S → R (3) L → * R (4) L → id (5) R → L q 2 S→L =R R→L = q 6 S→L= R R→ L L→ *R L → id S → L = R vs. R → L FOLLOW(R) contains = S⇒L=R⇒*R=R SLR cannot resolve the conflict either 22
LR(1) Grammars In SLR: a reduce item N α is applicable only when the look-ahead is in FOLLOW(N) But FOLLOW(N) merges look-ahead for all alternatives for N LR(1) keeps look-ahead with each LR item Idea: a more refined notion of follows computed per item 23
LR(1) Item LR(1) item is a pair LR(0) item Look-ahead token Meaning We matched the part left of the dot, looking to match the part on the right of the dot, followed by the look-ahead token. Example The production L id yields the following LR(1) items (0) S’ → S (1) S → L = R (2) S → R (3) L → * R (4) L → id (5) R → L [L → ● id, *] [L → ● id, =] [L → ● id, id] [L → ● id, $] [L → id ●, *] [L → id ●, =] [L → id ●, id] [L → id ●, $] 24
-closure for LR(1) For every [A → α ● Bβ , c] in S for every production B→δ and every token b in the grammar such that b FIRST(βc) Add [B → ● δ , b] to S 25
Back to the conflict q 2 (S → L ∙ = R , $) (R → L ∙ , $) q 6 = (S → L = ∙ R , $) (R → ∙ L , $) (L → ∙ * R , $) (L → ∙ id , $) Is there a conflict now? 27
LALR LR tables have large number of entries Often don’t need such refined observation (and cost) LALR idea: find states with the same LR(0) component and merge their look-ahead component as long as there are no conflicts LALR not as powerful as LR(1) 28
Summary: LR Grammars LR parsing techniques use item sets of proposed handles Shift behavior similar Differ on when to reduce LR(0) - any reduce item causes a reduction SLR – a reduce item N α causes a reduction only if the look-ahead token is in the FOLLOW set of N LR(1) - a reduce item N α { } causes a reduction only if the look-ahead token is in the set (the lookahead set computed for the item) 29
Summary: LR Grammars ACTION table determines whether to shift or reduce On a shift, new state found using the GOTO table LR-parser with 1 token look-ahead, the ACTION and GOTO tables can be superimposed 30
Summary Bottom up LR Items LR parsing with pushdown automata LR(0), SLR, LR(1) – different kinds of LR items, same basic algorithm 31
You are here… txt Source text Process text input characters Lexical Analysis tokens Syntax Analysis AST Sem. Analysis Annotated AST Intermediate code generation IR Intermediate code optimization Code generation IR Back End Symbolic Instructions Target code optimization SI Machine code generation MI Write executable output exe Executable code 32
What we want Potato potato; Carrot carrot; x = tomato + potato + carrot Lexical analyzer <id, tomato>, <PLUS>, <id, potato>, <PLUS>, <id, carrot>, EOF Parser Add. Expr left right Location. Expr id=tomato is undefined potato used before initialized Cannot add Potato and Carrot Location. Expr id=potato Location. Expr id=carrot symbol kind type x var ? tomato var ? potato var Potato carrot var Carrot properties 33
Syntax vs. Semantics Syntax Program structure Formally described via context free grammars Semantics Program meaning Formally defined as various forms of semantics (e. g. , operational, denotational) It is actually NOT what “semantic analysis” phase does Better name – “contextual analysis” 34
Contextual Analysis Often called “Semantic analysis” Properties that cannot be formulated via CFG Type checking Declare before use Identifying the same word “w” re-appearing – wbw Initialization … Properties that are hard to formulate via CFG “break” only appears inside a loop … Processing of the AST 35
Abstract Syntax Tree (AST) Abstract away some syntactic details of the source language S if E then S else S | … if (x>0) then { y = 42} else { y = 73 } 36
Parse tree (concrete syntax tree) S if E ) ( then S { S } id = num S else E x > 0 37
Abstract Syntax Tree (AST) if Rel-op op: > x Assign 0 id Assign num id num 38
Syntax Directed Translation Semantic attributes Attributes attached to grammar symbols Semantic actions (already mentioned when we did recursive descent) How to update the attributes Attribute grammars 39
Attribute grammars Attributes Every grammar symbol has attached attributes Example: Expr. type Semantic actions Every production rule can define how to assign values to attributes Example: Expr + Term Expr. type = Expr 1. type when (Expr 1. type == Term. type) Error otherwise 40
Indexed symbols Add indexes to distinguish repeated grammar symbols Does not affect grammar Used in semantic actions Expr + Term Becomes Expr 1 + Term 41
Example float x, y, z D float T L float id 1 float id 2 L Production Semantic Rule D TL L. in = T. type T int T. type = integer T float T. type = float L L 1, id L 1. in = L. in add. Type(id. entry, L. in) L id add. Type(id. entry, L. in) id 3 42
Dependencies A semantic equation a = b 1, …, bm requires computation of b 1, …, bm to determine the value of a The value of a depends on b 1, …, bm We write a bi 43
Attribute Evaluation Build the AST Fill attributes of terminals with values derived from their representation Execute evaluation rules of the nodes to assign values until no new values can be assigned In the right order such that No attribute value is used before its available Each attribute will get a value only once 44
Cycles Cycle in the dependence graph May not be able to compute attribute values E E. s E. S = T. i = E. s + 1 T T. i AST Dependence graph 45
Attribute Evaluation Build the AST Build dependency graph Compute evaluation order using topological ordering Execute evaluation rules based on topological ordering Works as long as there are no cycles 46
Building Dependency Graph All semantic equations take the form attr 1 = func 1(attr 1. 1, attr 1. 2, …) attr 2 = func 2(attr 2. 1, attr 2. 2, …) Actions with side effects use a dummy attribute Build a directed dependency graph G For every attribute a of a node n in the AST create a node n. a For every node n in the AST and a semantic action of the form b = f(c 1, c 2, …ck) add edges of the form (ci, b) 47
Example float x, y, z D T type dmy L in Prod. Semantic Rule D TL L. in = T. type T int T. type = integer T float T. type = float L L 1, id L 1. in = L. in add. Type(id. entry, L. in) in float in L L dmy id 1 id 2 dmy id 3 entry L id add. Type(id. entry, L. in) entry 48
Example float x, y, z D T type dmy L in Prod. Semantic Rule D TL L. in = T. type T int T. type = integer T float T. type = float L L 1, id L 1. in = L. in add. Type(id. entry, L. in) in float in L L dmy id 1 id 2 dmy id 3 entry L id add. Type(id. entry, L. in) entry 49
Topological Order For a graph G=(V, E), |V|=k Ordering of the nodes v 1, v 2, …vk such that for every edge (vi, vj) E, i < j 4 2 3 5 1 Example topological orderings: 1 4 3 2 5, 4 1 3 5 2 50
Example float x, y, z 1 float 5 float 6 type in dmy float 7 float ent 1 2 10 float in dmy entry 9 float 8 in entry dmy entry 4 3 ent 2 ent 3 51
But what about cycles? For a given attribute grammar hard to detect if it has cyclic dependencies Exponential cost Special classes of attribute grammars Our “usual trick” sacrifice generality for predictable performance 52
Inherited vs. Synthesized Attributes Synthesized attributes Computed from children of a node Inherited attributes Computed from parents and siblings of a node Attributes of tokens are technically considered as synthesized attributes 53
example float x, y, z Production Semantic Rule D TL L. in = T. type float T int T. type = integer L T float T. type = float L L 1, id L 1. in = L. in add. Type(id. entry, L. in) L id add. Type(id. entry, L. in) D float T float L float id 1 float id 2 L id 3 inherited synthesized 54
S-attributed Grammars Special class of attribute grammars Only uses synthesized attributes (S-attributed) No use of inherited attributes Can be computed by any bottom-up parser during parsing Attributes can be stored on the parsing stack Reduce operation computes the (synthesized) attribute from attributes of children 55
S-attributed Grammar: example Production Semantic Rule S E ; print(E. val) E E 1 + T E. val = E 1. val + T. val E T E. val = T. val T T 1 * F T. val = T 1. val * F. val T F T. val = F. val F (E) F. val = E. val F digit F. val = digit. lexval 56
example S 31 E+ E* val=31 val=28 T val=7 T val=4 T val=3 F val=7 F val=4 F val=3 7 Lexval=7 4 Lexval=4 3 Lexval=3 57
L-attributed grammars L-attributed attribute grammar when every attribute in a production A X 1…Xn is A synthesized attribute, or An inherited attribute of Xj, 1 <= j <=n that only depends on Attributes of X 1…Xj-1 to the left of Xj, or Inherited attributes of A 58
Summary Contextual analysis can move information between nodes in the AST Even when they are not “local” Attribute grammars Attach attributes and semantic actions to grammar Attribute evaluation Build dependency graph, topological sort, evaluate Special classes with pre-determined evaluation order: S-attributed, L-attributed 59
The End 60
Identification 61
Scopes 62
Semantic Checks Scope rules Use symbol table to check that Identifiers defined before used No multiple definition of same identifier Program conforms to scope rules Type checking Check that types in the program are consistent How? 63
Type Checking Type rules specify which types can be combined with certain operator Assignment of expression to variable Formal and actual parameters of a method call Examples string “drive” + “drink” string int string 42 + “the answer” ERROR 64
Type Checking Rules Specify for each operator Types of operands Type of result Basic Types Building blocks for the type system (type rules) e. g. , int, boolean, string Type Expressions Array types Function types Record types / Classes 65
Typing Rules If E 1 has type int and E 2 has type int, then E 1 + E 2 has type int E 1 : int E 2 : int E 1 + E 2 : int (Generally, also use a context A) 66
More Typing Rules A true : boolean A false : boolean A int-literal : int A string-literal : string A E 1 : int A E 2 : int A E 1 op E 2 : int A E 1 : int A E 2 : int A E 1 rop E 2 : boolean A E 1 : T A E 2 : T A E 1 rop E 2 : boolean op { +, -, /, *, %} rop { <=, <, >, >=} rop { ==, !=} 67
And Even More Typing Rules A E 1 : boolean A E 2 : boolean A E 1 lop E 2 : boolean lop { &&, || } A E 1 : int A E 1 : boolean A - E 1 : int A ! E 1 : boolean A E 1 : T[] A E 1. length : int A E 1 : T[] A E 2 : int A E 1[E 2] : T A T in C id : T A A new T() : T A id : T A E 1 : int A new T[E 1] : T[] 68
Type Checking Our approach --- Traverse AST bottom-up and assign types for AST nodes Use typing rules to compute node types More complicated alternative --- type-check during parsing But naturally also more efficient 69
Example … Binop. Expr op=AND A : - E 1 : boolean A : - E 2 : boolean A : - E 1 lop E 2 : boolean lop { &&, || } A : - E 1 : boolean Binop. Expr : boolean Unop. Expr op=NEG op=GT A : - !E 1 : boolean A : - E 1 : int A : - E 2 : int A : - E 1 rop E 2 : boolean int. Literal val=45 val=32 : int bool. Literal rop { <=, <, >, >=} val=false : boolean A : - int-literal : int 45 > 32 && !false 70
- Syntax directed translation
- Syntax vs semantic
- Syntax vs semantic
- Syntax vs semantics
- 01:640:244 lecture notes - lecture 15: plat, idah, farad
- Lexical and syntax analysis
- X bar theory exercises with answers
- Trace theory in syntax
- The scope of semantics
- Semantic theory
- Semantic and communicative translation
- Accounting theory godfrey
- Natural language processing nlp - theory lecture
- Bayesian decision theory lecture notes
- Sargur srihari
- Natural language processing nlp - theory lecture
- Syntax analysis in compiler design
- English syntax analyzer
- Analisa sintaks
- Lexical and syntax analysis
- Define syntax analysis
- Syntax the analysis of sentence structure
- The boy saw the man with the telescope tree diagram
- Lexical and syntax analysis
- Gj6 parsing
- Syntax analysis generator
- Lexical and syntax analysis
- Rule of inference
- Semantic feature analysis example
- Latent semantic indexing tutorial
- Semantic analysis compiler
- Static semantic analysis
- Nlp semantic analysis
- Semantic analysis definition
- Semantic fields examples
- Exploratory data analysis lecture notes
- Sensitivity analysis lecture notes
- Factor analysis lecture notes
- Analysis of algorithms lecture notes
- Streak plate
- Power system analysis lecture notes
- Syntax xml
- Dtd syntax
- Vety podľa rozvitosti
- Didls analysis example
- Use case syntax
- Simple object access protocol
- Probability syntax
- Probability syntax
- Diction syntax
- členenie textu
- Syntax vs semantics
- Syntax vs grammar
- Syntax rules definition
- Syntax symbols and meanings
- Syntax refers to:
- Syntax error handling
- Syntax directed defination
- Syntax vs semantics
- The things they carried syntax
- What are switch statements in c
- Syntax editor spss
- Grammar vs syntax vs semantics
- Nevyjadrený podmet priklady
- Grammar vs syntax
- Beat beat drums poetic devices
- Syntax and grammar
- Pseudo code syntax
- Is java case sensitive
- Ekspresi a + = 8 setara dengan
- Nlp syntax