CS 31003: Compilers Difference between SLR and LR(1) Construction of LR(1) parsing table LALR parser Bandi Sumanth 11CS30006 Date : 9/10/2013 Differences between SLR and LR(1) ● 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 Sj + A→B.+C A→B. Si SLR , Non SLR and LR(1) grammar ● LR(1) grammar A→B+.C Sj + A→B.+C,= A→B.,* Si 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 Construction of LR(1) parsing table ● Constructing LR(1) parsing table ● Consider the following augmented grammar Ś → S S → CC C → cC|d LR(1) sets of items LR(1) parsing table for the 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 lookahead information makes the automaton too big Can we retain the LR(1) automaton's lookahead information without all its states? Review of LR(1) ● Each state in an LR(1) automaton is a combination of an LR(0) state and lookahead information. ● 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 The End