- 107 Views
- Uploaded on
- Presentation posted in: General

Parsing

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Parsing

Recognition of strings in a language

L7Parse

- Represents leftmost derivations of a CFG.
- A path from node S to a node w is a leftmost derivation.

L7Parse

S

aS

bB

a

baB

bbC

aaS

abB

bbS

…

L7Parse

- Every node has a finite number of children.
- Simple breadth-first enumeration feasible.

- Typical case.

- Loops in depth-first traversals.

L7Parse

(Illustrates ambiguity in the grammar.)

Directed

Acyclic

Graph

S

aS

Sb

ab

Sbb

aaS

aab

aSb

abb

…

L7Parse

(Illustrates ambiguous grammar with cycles.)

S

Cyclic structure

SS

SSS

L7Parse

- Parser
A program that determines if a string

by constructing a derivation. Equivalently,

it searches the graph of G.

- Top-down parsers
- Constructs the derivation tree from root to leaves.
- Leftmost derivation.

- Bottom-up parsers
- Constructs the derivation tree from leaves to root.
- Rightmost derivation in reverse.

- Top-down parsers

L7Parse

S

S

S

S

S

S

S

S

S

a

a

b

S

Derivation

Trees

Leftmost

derivation

L7Parse

S

S

S

S

S

S

S

S

S

b

a

b

Rightmost

derivation

S

Derivation

Trees

S

S

S

S

Rightmost

Derivation

in Reverse

S

S

a

b

L7Parse

Search the graph of a grammar breadth-first

Uses: Queue

(+) Always terminates with shortest derivation

(-) Inefficient in general.

Search the graph of a grammar depth-first

Uses: Stack

(-) Can get into infinite loops

(e.g., left recursion)

(+) Efficient in general.

L7Parse

- Number of terminals in sentential form
>length of w

- Prefix of sentential form preceding the leftmost non-terminal not a prefix of w.
- No rules applicable to sentential form.

L7Parse

L7Parse

Queue-up left

sentential forms

level by level

Parse

successful

S

A

T

A+T

b

(A)

A+T+T

T+T

(A)+T

T+T+T

(T)

(A+T)

…

A+T+T+T

…

(T)+T

…

…

(b)

((A))

(b)+T

…

(b)+b

L7Parse

Use stack to

pursue entire

path from left

Parse

fails

S

A

T

A+T

b

(A)

A+T+T

T+T

Backtrack

On failure

(T)

(A+T)

T+T+T

A+T+T+T

…

…

…

(b)

((A))

L7Parse

- In BFTD version, all left derivations investigated in parallel.
- In DFTD version, one specific derivation is pursued to completion.
- Done, if succeeds.
- Otherwise, backtrack and investigate another path.
(Incomplete strategy)

(Used by Prolog interpreter)

L7Parse

T+b

A+b

A+T

(b)+b

Parse

successful

(T)+b

(b)+T

(A)+b

(T)+T

(T)+T

Not

allowed

(b)+A

…

(S)+b

(A)+T

…

A

S

L7Parse

- Language/Grammar designed to enable deterministic (directed and backtrack-free) searches.
- Uses lookahead tokens and/or exploits the context in the sentential form constructed so far.
“Look before you leap.” vs “Procrastination principle.”

- Uses lookahead tokens and/or exploits the context in the sentential form constructed so far.
- Top-down parsers : LL(k) languages
- E.g., Pascal, Ada, etc.
- Better error diagnosis and recovery.

- Bottom-up parsers : LALR(1), LR(k) languages
- E.g., C/C++, Java, etc.
- Handles left recursion in the grammar.

- Backtracking parsers
- E.g., Prolog interpreter.

L7Parse