RECURSIVE DESCENT PARSING

JothiLakshmi26 38,164 views 9 slides Oct 05, 2016
Slide 1
Slide 1 of 9
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9

About This Presentation

COMPILER DESIGN


Slide Content

Recursive Descent Parsing

Parsing The process to determine whether the start symbol can derive the program. If successful, the program is a valid program. If failed, the program is invalid. Two approaches in general. Expanding from the start symbol to the whole program (top down) Reduction from the whole program to start symbol (bottom up).

Parsing methods Top-down parsing build the parse tree from root to leave (using leftmost derivation, why?). Recursive descent, and LL parser Bottom-up parsing build the parse tree from leaves to root. Operator precedence parsing, LR (SLR, canonical LR, LALR).

Recursive Descent Parsing Recursive descent parsing is a top-down method of syntax analysis in which a set recursive procedures to process the input is executed. A procedure is associated with each nonterminal of a grammar. Top-down parsing can be viewed as an attempt to find a leftmost derivation for an input string. Equivalently, it attempts to construct a parse tree for the input starting from the root and creating the nodes of the parse tree in preorder . Recursive descent parsing involves backtracking.  

Example (backtracking) Consider the grammar S → cAd         A→ab|a                                                              and the input string w = cad To construct a parse tree for this string using top-down approach, initially create a tree consisting of a single node labeled S.

Procedure S procedure S() begin       if input symbol = ‘c’ then             begin                   ADVANCE( );                    if A( ) then                        if input symbol = ‘d’ then                                 begin ADSVANCE( ); return true end               end;       return false end

Procedure A procedure A( ) begin       isave := input-pointer;       if input symbol = ‘a’ then              begin                    ADVANCE( );                     if input symbol = ‘b’ then                           begin ADVANCE( ); return true end              end        input-pointer := isave ;              /* failure to find ab */        if input symbol = ‘a’ then                begin ADVANCE( ); return true end        else return false end
Tags