280 likes | 404 Views
This document discusses the differences between SLR and LR(1) parsing techniques, including the construction of LR(1) parsing tables. It highlights that an SLR grammar is characterized by no conflicting entries in its parsing table, while LR(1) can handle more languages due to its lookahead capabilities. However, LR(1) parsers tend to require more states, leading to increased space consumption. The text further explores the LALR parser, which combines the benefits of lookahead information and reduced state size, offering an efficient alternative for parsing.
E N D
CS 31003: Compilers Difference between SLR and LR(1) Construction of LR(1) parsing table LALR parser Bandi Sumanth 11CS30006 Date : 9/10/2013
SLR , Non SLR and LR(1) grammar • SLR grammar • A grammar is said to be an SLR grammar if the SLR parsing table for the grammar has no conflicting entries
SLR , Non SLR and LR(1) grammar + A → B . + C A → B . A → B + . C Sj Si
SLR , Non SLR and LR(1) grammar • LR(1) grammar • If the current state is Si and + is the next token, a shift is made leading to the state Sj • Reduction cannot be made because the lookahead symbol * and the next token + does not match + A → B . + C , = A → B . , * A → B + . C Sj Si
Constructing LR(1) parsing table Ś → S S → C C C → c C | d • Consider the following augmented grammar
LR(1) vs SLR parser • LR(1) parser is better than SLR parser because LR(1) accepts more languages than SLR • SLR(1) is weak because it has no lookahead information • But the cost is LR(1) has more states than SLR and thus it consumes more space • LR(1) is impractical because its lookaheadinformation makes the automaton too big
Can we retain the LR(1) automaton's lookaheadinformation without all its states?
Review of LR(1) • Each state in an LR(1) automaton is a combination of an LR(0) state and lookaheadinformation. • Two LR(1) items have the same core if they are identical except for lookahead.
A Surprisingly Powerful Idea • In an LR(1) automaton, we have multiple states with the same core but different Lookahead • What if we merge all these states together? • This is called LALR parser Lookahead LR parser
Advantages of LALR(1) Maintains lookahead information Keeps automaton small Resulting automaton has same size as LR(0) automaton