lr parsers

25
LR PARSERS CS3230R

Upload: wei

Post on 25-Feb-2016

88 views

Category:

Documents


6 download

DESCRIPTION

CS3230R. LR PARSERS. What is a parser?. What is an LR parser?. A bottom-up parser that efficiently handles deterministic context-free languages in guaranteed linear time. Deterministic context-free what?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: LR PARSERS

LR PARSERSCS3230R

Page 2: LR PARSERS

What is a parser?

Page 3: LR PARSERS

What is an LR parser?

A bottom-up parser that efficiently handles deterministic context-free languages in

guaranteed linear time

Page 4: LR PARSERS

Deterministic context-free what?

Class of context-free languages that can be accepted by a deterministic pushdown

automaton

Page 5: LR PARSERS

Deterministic context-free what? Unambiguous Of great practical use

Page 6: LR PARSERS

Context-sensitive grammars

int x;typedef int x;

Page 7: LR PARSERS

Context-sensitive grammars

MyObject object;MyObject object(parameters);MyObject object(); // ?

Page 8: LR PARSERS

What is an LR parser? Left-to-right, Rightmost derivation Deterministic – single correct parse

without guesswork or backtracking Lookahead to avoid guessing or

backtracking

Page 9: LR PARSERS

What is an LR parser? Bottom-up construction of syntax tree

Page 10: LR PARSERS

What is an LR parser? Unsuited for human languages, which

require more flexible but slower methods Shift-reduce parser

Page 11: LR PARSERS

Shift-reduce Shift

Advances the input stream by one symbolThat symbol becomes a new single-node

parse tree Reduce

Applies a grammar rule to some of the recent parse trees

Joins them into one with a new root symbol

Page 12: LR PARSERS

Shift-reduce Shifts and reduces until all input has

been consumed, or until a syntax error is encountered

Differs from other parsers in when to reduce and breaking ties between rules

Page 13: LR PARSERS

Decisions, decisions… When to shift, when to reduce?

Page 14: LR PARSERS

Decisions, decisions… Naïve approach:

Compare current parse trees against rulesReduce if any matchesShift if no matches

Check all rules every time Parser gets slower and slower for large

input programs

Page 15: LR PARSERS

Decisions, decisions… Observation:

CFGs are unambiguousFinite number of states

Page 16: LR PARSERS

Decisions, decisions… Preprocessing

Encode each state the parser may be in with a number

Goal → Sums EOFSums → Sums + ProductsSums → ProductsProducts → Products * ValueProducts → ValueValue → intValue → id

Page 17: LR PARSERS

Decisions, decisions… Preprocessing

Encode each state the parser may be in with a number

Sums → ●Sums + ProductsSums → Sums ● + ProductsSums → Sums + ● ProductsSums → Sums + Products ●

Page 18: LR PARSERS

Decisions, decisions… Preprocessing

Decide in advance whether to shift or reduce

Note what state the parser will be in afterwards

Build a static parse table with this information

Page 19: LR PARSERS

Decisions, decisions… Parse table

Page 20: LR PARSERS

Decisions, decisions… LR parsers are table-driven FSMs

Page 21: LR PARSERS

Decisions, decisions… LR parsers are table-driven FSMs Tables are large and difficult to compute

by hand LR parsers are generated from

grammars written in DSLs

Page 22: LR PARSERS

Example<expression> ::= <number> | <string> | <boolean> | <pair> | fun (<id>, ...) -> <expression> | <id> | (<expression>) | <unary-op> <expression> | <expression> <binary-op> <expression>

Page 23: LR PARSERS

Example<expression> ::= | if <expression> then <expression> else <expression> | let <id> = <expression> in <expression> | <id>(<expression>, ...)

Page 24: LR PARSERS

Example

Page 25: LR PARSERS

Thanks!