A bottom-up parser traces a rightmost derivation in reverse. Bottom-Up Parsing. Bottom-up parsing is more general than topdown.

Similar documents
Bottom-Up Parsing II (Different types of Shift-Reduce Conflicts) Lecture 10. Prof. Aiken (Modified by Professor Vijay Ganesh.

Review: Shift-Reduce Parsing. Bottom-up parsing uses two actions: Bottom-Up Parsing II. Shift ABC xyz ABCx yz. Lecture 8. Reduce Cbxy ijk CbA ijk

Bottom-Up Parsing II. Lecture 8

Introduction to Bottom-Up Parsing

Outline. The strategy: shift-reduce parsing. Introduction to Bottom-Up Parsing. A key concept: handles

Intro to Bottom-up Parsing. Lecture 9

Review of CFGs and Parsing II Bottom-up Parsers. Lecture 5. Review slides 1

Bottom-Up Parsing. Lecture 11-12

Bottom-Up Parsing. Lecture 11-12

Homework 3 Dragon: 4.6.2, 4.6.3, 4.6.5, 4.6.6, , 4.7.4, , 4.8.2

Top-Down Parsing and Intro to Bottom-Up Parsing. Lecture 7

Top-Down Parsing and Intro to Bottom-Up Parsing. Lecture 7

LR Parsing Techniques

Lecture 8: Deterministic Bottom-Up Parsing

Bottom-Up Parsing LR Parsing

Lecture 7: Deterministic Bottom-Up Parsing

LR Parsing LALR Parser Generators

LR Parsing LALR Parser Generators

S Y N T A X A N A L Y S I S LR

Shift. Reduce. Review: Shift-Reduce Parsing. Bottom-up parsing uses two actions: Bottom-Up Parsing II. ABC xyz ABCx yz. Lecture 8.

Compilers. Bottom-up Parsing. (original slides by Sam

CSE P 501 Compilers. LR Parsing Hal Perkins Spring UW CSE P 501 Spring 2018 D-1

Lexical and Syntax Analysis. Bottom-Up Parsing

Bottom up parsing. The sentential forms happen to be a right most derivation in the reverse order. S a A B e a A d e. a A d e a A B e S.

Formal Languages and Compilers Lecture VII Part 3: Syntactic A

A left-sentential form is a sentential form that occurs in the leftmost derivation of some sentence.

PART 3 - SYNTAX ANALYSIS. F. Wotawa TU Graz) Compiler Construction Summer term / 309

3. Syntax Analysis. Andrea Polini. Formal Languages and Compilers Master in Computer Science University of Camerino

Parsing. Handle, viable prefix, items, closures, goto s LR(k): SLR(1), LR(1), LALR(1)

UNIT-III BOTTOM-UP PARSING

LR Parsing Techniques

CSE 401 Compilers. LR Parsing Hal Perkins Autumn /10/ Hal Perkins & UW CSE D-1

Bottom-up parsing. Bottom-Up Parsing. Recall. Goal: For a grammar G, withstartsymbols, any string α such that S α is called a sentential form

shift-reduce parsing

MIT Parse Table Construction. Martin Rinard Laboratory for Computer Science Massachusetts Institute of Technology

Principles of Programming Languages

LALR Parsing. What Yacc and most compilers employ.

Previous on Computer Networks Class 18. ICMP: Internet Control Message Protocol IP Protocol Actually a IP packet

MODULE 14 SLR PARSER LR(0) ITEMS

Context-free grammars

Parsing Wrapup. Roadmap (Where are we?) Last lecture Shift-reduce parser LR(1) parsing. This lecture LR(1) parsing

Section A. A grammar that produces more than one parse tree for some sentences is said to be ambiguous.

Let us construct the LR(1) items for the grammar given below to construct the LALR parsing table.

Principle of Compilers Lecture IV Part 4: Syntactic Analysis. Alessandro Artale

Bottom-Up Parsing. Parser Generation. LR Parsing. Constructing LR Parser

Bottom Up Parsing. Shift and Reduce. Sentential Form. Handle. Parse Tree. Bottom Up Parsing 9/26/2012. Also known as Shift-Reduce parsing

EDAN65: Compilers, Lecture 06 A LR parsing. Görel Hedin Revised:

Monday, September 13, Parsers

计算机组成原理第二讲 第二章 : 运算方法和运算器 数据与文字的表示方法 (1) 整数的表示方法. 授课老师 : 王浩宇

Lecture Bottom-Up Parsing

CS 4120 Introduction to Compilers

In One Slide. Outline. LR Parsing. Table Construction

Syntax Analysis. Amitabha Sanyal. ( as) Department of Computer Science and Engineering, Indian Institute of Technology, Bombay

Wednesday, August 31, Parsers

CS5371 Theory of Computation. Lecture 8: Automata Theory VI (PDA, PDA = CFG)

UNIT III & IV. Bottom up parsing

Formal Languages and Compilers Lecture VII Part 4: Syntactic A

Parsers. Xiaokang Qiu Purdue University. August 31, 2018 ECE 468

Compiler Construction: Parsing

SLR parsers. LR(0) items


Wednesday, September 9, 15. Parsers

Parsers. What is a parser. Languages. Agenda. Terminology. Languages. A parser has two jobs:

Compiler Design 1. Bottom-UP Parsing. Goutam Biswas. Lect 6

CS143 Handout 20 Summer 2011 July 15 th, 2011 CS143 Practice Midterm and Solution

Parser Generation. Bottom-Up Parsing. Constructing LR Parser. LR Parsing. Construct parse tree bottom-up --- from leaves to the root

Parsing Algorithms. Parsing: continued. Top Down Parsing. Predictive Parser. David Notkin Autumn 2008

CS 2210 Sample Midterm. 1. Determine if each of the following claims is true (T) or false (F).

LR Parsing. Leftmost and Rightmost Derivations. Compiler Design CSE 504. Derivations for id + id: T id = id+id. 1 Shift-Reduce Parsing.

LR Parsing E T + E T 1 T

Compiler Construction 2016/2017 Syntax Analysis

LL(k) Parsing. Predictive Parsers. LL(k) Parser Structure. Sample Parse Table. LL(1) Parsing Algorithm. Push RHS in Reverse Order 10/17/2012

Parsing III. CS434 Lecture 8 Spring 2005 Department of Computer Science University of Alabama Joel Jones

Syntax Analysis, VI Examples from LR Parsing. Comp 412

Syntax Analysis Part I

Command Dictionary CUSTOM

Syntax Analysis, V Bottom-up Parsing & The Magic of Handles Comp 412

CS308 Compiler Principles Syntax Analyzer Li Jiang

CS 164 Programming Languages and Compilers Handout 9. Midterm I Solution

Ambiguity. Grammar E E + E E * E ( E ) int. The string int * int + int has two parse trees. * int

Conflicts in LR Parsing and More LR Parsing Types

Syntax Analysis: Context-free Grammars, Pushdown Automata and Parsing Part - 4. Y.N. Srikant

Ambiguity, Precedence, Associativity & Top-Down Parsing. Lecture 9-10

CSE P 501 Compilers. Parsing & Context-Free Grammars Hal Perkins Winter /15/ Hal Perkins & UW CSE C-1

Downloaded from Page 1. LR Parsing

Outline. Limitations of regular languages Parser overview Context-free grammars (CFG s) Derivations Syntax-Directed Translation

Action Table for CSX-Lite. LALR Parser Driver. Example of LALR(1) Parsing. GoTo Table for CSX-Lite

CSE P 501 Exam 11/17/05 Sample Solution

CS606- compiler instruction Solved MCQS From Midterm Papers

Table-driven using an explicit stack (no recursion!). Stack can be viewed as containing both terminals and non-terminals.

Lecture 14: Parser Conflicts, Using Ambiguity, Error Recovery. Last modified: Mon Feb 23 10:05: CS164: Lecture #14 1

More Bottom-Up Parsing


Parsing II Top-down parsing. Comp 412

CS143 Midterm Fall 2008

Midterm I (Solutions) CS164, Spring 2002

DEPARTMENT OF COMPUTER SCIENCE & ENGINEERING Subject Name: CS2352 Principles of Compiler Design Year/Sem : III/VI

Compilation 2012 Context-Free Languages Parsers and Scanners. Jan Midtgaard Michael I. Schwartzbach Aarhus University

CSE 401 Midterm Exam Sample Solution 2/11/15

PCU50 的整盘备份. 本文只针对操作系统为 Windows XP 版本的 PCU50 PCU50 启动硬件自检完后, 出现下面文字时, 按向下光标键 光标条停在 SINUMERIK 下方的空白处, 如下图, 按回车键 PCU50 会进入到服务画面, 如下图

Transcription:

Bottom-Up Parsing Bottom-Up Parsing Bottom-up parsing is more general than topdown parsing And just as efficient Builds on ideas in top-down parsing Bottom-up is the preferred method Originated from Prof. Aiken CS 13 Modified by Yu Zhang 1 2 An Introductory xample Bottom-up parsers don t need left-factored grammars he Idea Bottom-up parsing reduces a string to the start symbol by inverting productions: Revert to the natural grammar for our example: + ) Consider the string: + + + + + + + 3 Observation Read the productions in reverse from bottom to top) his is a rightmost derivation! + + + + + + Important Fact #1 Important Fact #1 about bottom-up parsing: A bottom-up parser traces a rightmost derivation in reverse 5 6

A Bottom-up Parse A Bottom-up Parse in Detail 1) + + + + + + + + 8 A Bottom-up Parse in Detail 2) A Bottom-up Parse in Detail 3) + + + + + + + 9 10 A Bottom-up Parse in Detail ) A Bottom-up Parse in Detail 5) + + + + + + + + + + + 12

A Bottom-up Parse in Detail 6) A rivial Bottom-Up Parsing Algorithm + + + + + + Let I = input string repeat pick a non-empty substring of I where X is a production if no such, backtrack replace one by X in I until I = S the start symbol) or all possibilities are exhausted 13 1 Questions Does this algorithm terminate? How fast is the algorithm? Does the algorithm handle all cases? How do we choose the substring to reduce at each step? Where Do Reductions Happen? Important Fact #1 has an eresting consequence: Let be a step of a bottom-up parse Assume the next reduction is by X hen is a string of terminals Why? Because X is a step in a rightmost derivation 15 16 Notation Idea: Split string o two substrings Right substring is as yet unexamined by parsing a string of terminals) Left substring has terminals and non-terminals he dividing po is marked by a he is not part of the string Shift-Reduce Parsing Bottom-up parsing uses only two kinds of actions: Shift Reduce Initially, all input is unexamined x 1 x 2... x n 1 18

Shift Shift: Move one place to the right Shifts a terminal to the left string ABC xyz ABCx yz Reduce Apply an inverse production at the right end of the left string If A xy is a production, then Cbxy ijk CbA ijk 19 20 he xample with Reductions Only he xample with Shift-Reduce Parsing + shift + shift + shift + reduce + reduce + reduce + reduce + shift + shift + reduce + reduce + reduce + reduce + reduce + + reduce + 21 22 A Shift-Reduce Parse in Detail 1) + A Shift-Reduce Parse in Detail 2) + + + + 23 2

A Shift-Reduce Parse in Detail 3) + + + A Shift-Reduce Parse in Detail ) + + + + + + 25 26 A Shift-Reduce Parse in Detail 5) A Shift-Reduce Parse in Detail 6) + + + + + + + + + + + + + 2 28 A Shift-Reduce Parse in Detail ) A Shift-Reduce Parse in Detail 8) + + + + + + + + + + + + + + + + + 29 30

A Shift-Reduce Parse in Detail 9) A Shift-Reduce Parse in Detail 10) + + + + + + + + + + + + + + + + + + + + + 31 32 A Shift-Reduce Parse in Detail ) he Stack + + + + + + + + + + + 33 Left string can be implemented by a stack op of the stack is the Shift pushes a terminal on the stack Reduce pops 0 or more symbols off of the stack production rhs) and pushes a nonterminal on the stack production lhs) 3 Conflicts Key Issue In a given state, more than one action shift or reduce) may lead to a valid parse If it is legal to shift or reduce, there is a shiftreduce conflict If it is legal to reduce by two different productions, there is a reduce-reduce conflict 35 How do we decide when to shift or reduce? xample grammar: + ) Consider step + We could shift: + We could reduce by giving + A fatal mistake! No way to reduce to the start symbol 36

移进 归约分析的冲突 1 移进 归约冲突 shift/reduce conflict) 例 stmt if expr then stmt ifexpr then stmt else stmt other 如果移进 归约分析器处于格局 configuration) 栈 输入 if expr then stmt else $ 3 移进 归约分析的冲突 2 归约 归约冲突 reduce/reduce conflict) stmt id parameter_list) expr = expr parameter_list parameter_list, parameter parameter parameter id expr id expr_list) id id ) 是数组元素的引用 expr_list expr_list, expr expr 由 AI, J) 开始的语句 栈 idid 归约成 expr 还是 parameter? 输入,id) 38 移进 归约分析的冲突 2 归约 归约冲突 stmt id parameter_list) expr = expr parameter_list parameter_list, parameter parameter parameter id expr id expr_list) id expr_list expr_list, expr expr 由 AI, J) 开始的语句 词法分析查符号表, 区分第一个 id) 自下而上分析方法和 LL 分析方法的比较 在下面的推导中, 最后一步用的是 A l S rm rm A b w rm l b w 栈 procid id 需要修改上面的文法 输入,id) 39 LL1) 决定用该产生式的位置 0 自下而上分析方法和 LL 分析方法的比较 在下面的推导中, 最后一步用的是 A l S rm rm A b w rm l b w LR1) 决定用该产生式的位置 LL1) 决定用该产生式的位置 1 Handles 句柄 ) Intuition: Want to reduce only if the result can still be reduced to the start symbol Assume a rightmost derivation S X hen X in the position after is a handle 句柄 )of 2

Handles Cont.) Handles formalize the uition A handle is a string that can be reduced and also allows further reductions back to the start symbol using a particular production at a specific spot) Important Fact #2 Important Fact #2 about bottom-up parsing: In shift-reduce parsing, handles appear only at the top of the stack, never inside We only want to reduce at handles Note: We have said what a handle is, not how to find handles 3 Why? Informal induction on # of reduce moves: rue initially, stack is empty Immediately after reducing a handle right-most non-terminal on top of the stack next handle must be to right of right-most nonterminal, because this is a right-most derivation Sequence of shift moves reaches next handle Summary of Handles In shift-reduce parsing, handles always appear at the top of the stack Handles are never to the left of the rightmost non-terminal herefore, shift-reduce moves are sufficient; the need never move left Bottom-up parsing algorithms are based on recognizing handles 5 6 Recognizing Handles Grammars here are no known efficient algorithms to recognize handles Solution: use heuristics to guess which stacks are handles On some CFGs, the heuristics always guess correctly For the heuristics we use here, these are the SLR grammars Other heuristics work for other grammars All CFGs Unambiguous CFGs SLR CFGs will generate conflicts 8

Viable Prefixes 活前缀 ) It is not obvious how to detect handles At each step the parser sees only the stack, not the entire input; start with that... is a viable prefix if there is an such that is a state of a shift-reduce parser 活前缀 : 是右句型的前缀, 该前缀不超过最右句柄的右端 S rm, S 是开始符号, 是右句型 9 Huh? What does this mean? A few things: A viable prefix does not extend past the right end of the handle It s a viable prefix because it is a prefix of the handle As long as a parser has viable prefixes on the stack no parsing error has been detected 50 Important Fact #3 Important Fact #3 about bottom-up parsing: For any grammar, the set of viable prefixes is a regular language Important Fact #3 Cont.) Important Fact #3 is non-obvious We show how to compute automata that accept viable prefixes 51 52 Items 项 ) An item is a production with a. somewhere on the rhs he items for ) are.).).) ). Items Cont.) he only item for X is X. Items are often called LR0) items 53 5

Intuition he problem in recognizing viable prefixes is that the stack has only bits and pieces of the rhs of productions If it had a complete rhs, we could reduce hese bits and pieces are always prefixes of rhs of productions xample Consider the input ) hen ) is a state of a shift-reduce parse is a prefix of the rhs of ) Will be reduced after the next shift Item.) says that so far we have seen of this production and hope to see ) 55 56 Generalization he stack may have many prefixes of rhs s Prefix 1 Prefix 2... Prefix n-1 Prefix n Let Prefix i be a prefix of rhs of X i i Prefix i will eventually reduce to X i he missing part of i-1 starts with X i i.e. there is a X i-1 Prefix i-1 X i for some An xample Consider the string ): ) is a state of a shift-reduce parse is a prefix of the rhs of ) is a prefix of the rhs of is a prefix of the rhs of Recursively, Prefix k+1 Prefix n eventually reduces to the missing part of k 5 58 An xample Cont.) he stack of items.).. Says We ve seen of ) We ve seen of We ve seen of Recognizing Viable Prefixes Idea: o recognize viable prefixes, we must Recognize a sequence of partial rhs s of productions, where ach sequence can eventually reduce to part of the missing suffix of its predecessor 59 60

An NFA Recognizing Viable Prefixes 1. Add a dummy production S S to G 2. he NFA states are the items of G Including the extra production An NFA Recognizing Viable Prefixes Cont.) 5. very state is an accepting state 6. Start state is S.S 3. For item.x add transition.x X X.. For item.x and production X add.x X. 61 62 NFA for Viable Prefixes of the xample ). ).).) ). S. +..+. +. S.. +. NFA for Viable Prefixes in Detail 1) S....... 63 6 NFA for Viable Prefixes in Detail 2) NFA for Viable Prefixes in Detail 3). ) S. S.. + S. S.. +.... 65. 66

NFA for Viable Prefixes in Detail ) NFA for Viable Prefixes in Detail 5). ). ).) S. S.. +..+ S. S.. +..+..... 6. 68 NFA for Viable Prefixes in Detail 6) NFA for Viable Prefixes in Detail ). ) S. S..). +..).+. ) S. S..). +..).+ ) )...... 69. 0 NFA for Viable Prefixes in Detail 8) NFA for Viable Prefixes in Detail 9). ) S. S..). +..).+ ) ). +.. ) S. S..). +..).+ ) ). +. +...... 1. 2

NFA for Viable Prefixes in Detail 10) NFA for Viable Prefixes in Detail ). ) S. S..). +. ).).+. ). +. +.. ) S. S..). +. ).).+. ). +. +....... 3. NFA for Viable Prefixes in Detail 12) NFA for Viable Prefixes in Detail 13). ) S. S..). +. ).).+. ). +. +.. ) S. S..). +. ).).+. ). +. +...... 5...... 6 +. ranslation to the DFA.. +.) S.... +.. S.... +..)...).).. ). ). +.. ).. +.).. Lingo he states of the DFA are canonical collections of items or canonical collections of LR0) items 项目集规范族 ) he Dragon book gives another way of constructing LR0) items 8

Valid Items 有效项目 ) Item X. is valid for a viable prefix if S X by a right-most derivation After parsing, the valid items are the possible tops of the stack of items Items Valid for a Prefix An item I is valid for a viable prefix if the DFA recognizing viable prefixes terminates on input in a state s containing I he items in s describe what the top of the item stack might be after reading input 9 80 +. Valid Items xample An item is often valid for many prefixes xample: he item.) is valid for prefixes... Valid Items for S... +. S.... +.)....).... +.)....) ) ). +.. ).. +.).. 81 82 LR0) Parsing Idea: Assume stack contains next input is t DFA on input terminates in state s Reduce by X if scontains item X. Shift if scontains item X.t equivalent to saying s has a transition labeled t LR0) Conflicts LR0) has a reduce/reduce conflict if: Any state has two reduce items: X. and Y. LR0) has a shift/reduce conflict if: Any state has a reduce item and a shift item: X. and Y.t 83 8

+. LR0) Conflicts S... + S..... +.)....)... +.. +.)... ).. +.) wo. shift/reduce. conflicts with..) LR0) rules ) ). 85 例 S as 1S S. S 0S. S S. as S. a 2S a.s S. as S. S a 3S as. shift/reduce conflicts with LR0) rules 1S S. S S. a 0S. S S. Sa S. S Sa S No shift/reduce conflict a 2S Sa. SLR SLR Parsing L = Left-to-right scan R = Rightmost derivation SLR = Simple LR SLR improves on LR0) shift/reduce heuristics Fewer states have conflicts Idea: Assume stack contains next input is t DFA on input terminates in state s Reduce by X if scontains item X. t FollowX) Shift if scontains item X.t 8 88 SLR Parsing Cont.) If there are conflicts under these rules, the grammar is not SLR he rules amount to a heuristic for detecting handles he SLR grammars are those where the heuristics detect exactly the handles 89 例 S as 1S S. S 0S. S S. as S. a 2S a.s S. as S. S a 3S as. FollowS) = {$} 0, 2: reduce by S if t is $ S Sa 1S S. a S S. a S 2S Sa. 0S. S S. Sa S.

+. SLR Conflicts S... + S..... +.)....)... +.. +.)... ).. + Follow) = { ), $ }.) Follow). = { +, ), $ }.. No.) conflicts with ) SLR rules! ). Precedence Declarations Digression Lots of grammars aren t SLR including all ambiguous grammars We can parse more grammars by using precedence declarations Instructions for resolving conflicts 91 92 Precedence Declarations Cont.) Consider our favorite ambiguous grammar: + ) he DFA for this grammar contains a state with the following items:.. + shift/reduce conflict! Declaring has higher precedence than + resolves this conflict in favor of reducing Precedence Declarations Cont.) he term precedence declaration is misleading hese declarations do not define precedence; they define conflict resolutions Not quite the same thing! 93 9 Notes If there is a conflict in the last step, grammar is not SLRk) k is the amount of lookahead In practice k = 1 Naïve SLR Parsing Algorithm 1. Let M be DFA for viable prefixes of G 2. Let x 1 x n $ be initial configuration 3. Repeat until configuration is S $ Let be current configuration Run M on current stack If M rejects, report parsing error Stack is not a viable prefix If M accepts with items I, let a be next input Shift if X. a I Reduce if X I and a FollowX) Report parsing error if neither applies 95 96

SLR xample Configuration DFA Halt State Action $ 1 shift Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. 9 98 SLR xample Configuration DFA Halt State Action $ 1 shift $ 3 not in Follow) shift Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. 99 100 Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. SLR xample Configuration DFA Halt State Action $ 1 shift $ 3 not in Follow) shift $ shift 101 102

Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. 103 10 Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. 105 SLR xample Configuration DFA Halt State Action $ 1 shift $ 3 not in Follow) shift $ shift $ 3 $ Follow) red. 106 Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. 10 108

Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. 109 0 SLR xample Configuration DFA Halt State Action $ 1 shift $ 3 not in Follow) shift $ shift $ 3 $ Follow) red. $ $ Follow) red. 1 Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. 2 Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. 3

Configuration $ +... +.) 6 2 S.. 5.. +.. S.. 3. 1. +..)...).).. ).. 10 +.. ). 8. +.).. 5 SLR xample Configuration DFA Halt State Action $ 1 shift $ 3 not in Follow) shift $ shift $ 3 $ Follow) red. $ $ Follow) red. $ 5 $ Follow) red. 6 Configuration $ 2 S... + 5. S.. 3. 1. +.)...)... +... +.) 6....) ). 10 +.. ). 8. +.).. Configuration $ 2 S... + 5. S.. 3. 1. +.)...)... +... +.) 6....) ). 10 +.. ). 8. +.).. 8 SLR xample Notes Configuration DFA Halt State Action $ 1 shift $ 3 not in Follow) shift $ shift $ 3 $ Follow) red. $ $ Follow) red. $ 5 $ Follow) red. $ accept Skipped using extra start state S in this example to save space on slides Rerunning the automaton at each step is wasteful Most of the work is repeated 9 120

An Improvement Remember the state of the automaton on each prefix of the stack Change stack to contain pairs Symbol, DFA State An Improvement Cont.) For a stack sym 1, state 1... sym n, state n state n is the final state of the DFA on sym 1 sym n Detail: he bottom of the stack is any,start where anyis any dummy symbol startis the start state of the DFA 121 122 Goto able Define goto[i,a] = j if state i A state j goto is just the transition function of the DFA One of two parsing tables Refined Parser Moves Shift x Push a, x on the stack ais current input xis a DFA state Reduce X As before Accept rror 123 12 Action able For each state s i and terminal a If s i has item X.a and goto[i,a] = j then action[i,a] = shift j If s i has item X. and a FollowX) and X S then action[i,a] = reduce X If s i has item S S. then action[i,$] = accept Otherwise, action[i,a] = error 125 SLR Parsing Algorithm Let I = w$ be initial input Let j = 0 Let DFA state 1 have item S.S Let stack = dummy, 1 repeat case action[top_statestack),i[j]] of shift k: push I[j++], k reduce X A: pop A pairs, push X, goto[top_statestack),x] accept: halt normally error: halt and report error 126

例 S as S S Sa S 1S S. 1S S. 2S a.s S S. a a S S a. as S 0S. S S. 0S. S 2S Sa. S. as S. a S 3S as. S. Sa S. a $ S a $ S 0 s2 r2 1 0 r2 r2 1 1 acc 1 s2 acc 2 s2 r2 3 2 r1 r1 3 r1 例 S as S S Sa S a $ S a $ S 0 s2 r2 1 0 r2 r2 1 1 acc 1 s2 acc 2 s2 r2 3 2 r1 r1 3 r1 aaa$ shift aaa$ reduce a2 aa$ shift S1 aaa$ shift a2a2 a$ shift S1a2 aa$ reduce a2a2a2 $ reduce S1 aa$ shift a2a2a2s3 $ reduce S1a2 a$ reduce a2a2s3 $ reduce S1 a$ shift a2s3 $ reduce S1a2 $ reduce S1 $ accept S1 $ accept Notes on SLR Parsing Algorithm Note that the algorithm uses only the DFA states and the input he stack symbols are never used! However, we still need the symbols for semantic actions More Notes Some common constructs are not SLR1) LR1) is more powerful Build lookahead o the items An LR1) item is a pair: LR0) item x lookahead [, $] means After seeing reduce if lookahead is $ More accurate than just using follow sets ake a look at the LR1) automaton for your parser! 129 130