The Gateway to Computer Science Excellence

+1 vote

+3 votes

The basic difference between the parser tables generated with SLR vs LR, is that reduce actions are based on the Follows set for SLR tables. This can be overly restrictive, ultimately causing a shift-reduce conflict.

An LR parser, on the other hand, bases reduce decisions only on the set of terminals which can actually follow the non-terminal being reduced. This set of terminals is often a proper subset of the Follows set of such a non-terminal, and therefore has less chance of conflicting with shift actions.

LR parsers are more powerful for this reason.

An LR parser, on the other hand, bases reduce decisions only on the set of terminals which can actually follow the non-terminal being reduced. This set of terminals is often a proper subset of the Follows set of such a non-terminal, and therefore has less chance of conflicting with shift actions.

LR parsers are more powerful for this reason.

+1 vote

+1 vote

LALR(1) because it have more blank enteries

LALR(1) uses canonical collection of LR(1) items which works on lookahead

LALR(1) uses canonical collection of LR(1) items which works on lookahead

+1 vote

When the input has a syntax error, the LALR parser may do some additional (harmless) reductions before detecting the error than would the canonical LR parser. And the SLR parser may do even more.

- Wikipedia(https://en.wikipedia.org/wiki/LR_parser#Lookahead_sets)

Hence, the error detecting capabilities of LALR parser (in general) is superior to that of SLR parsers. The LR(0) parsing table has fewer number of blank spaces than both LALR and SLR parsing tables, thereby making LR(0) parsers occupy the last position when comparing with the other two.

Thus, in the decreasing order of error detecting capabilities we have:

*LALR(1) > SLR(1) >> LR(0)*

52,345 questions

60,497 answers

201,863 comments

95,320 users