Example for LL(1) Grammar which is NOT LALR?

后端 未结 2 994
灰色年华
灰色年华 2020-12-29 14:44

I am learning now about parsers on my Theory Of Compilation course. I need to find an example for grammar which is in LL(1) but not in LALR. I know it should be exist. ple

相关标签:
2条回答
  • 2020-12-29 15:03

    From the Dragon book (Second Edition, p. 242):

    The class of grammars that can be parsed using LR methods is a proper superset of the class of grammars that can be parsed with predictive or LL methods. For a grammar to be LR(k), we must be able to recognize the occurrence of the right side of a production in a right-sentential form, with k input symbols of lookahead. This requirement is far less stringent than that for LL(k) grammars where we must be able to recognize the use of a production seeing only the first k symbols of what the right side derives. Thus, it should not be surprising that LR grammars can describe more languages than LL grammars.

    0 讨论(0)
  • 2020-12-29 15:17

    Some googling brings up this example for a non-LALR(1) grammar, which is LL(1):

    S ::= '(' X 
        | E ']' 
        | F ')'
    X ::= E ')' 
        | F ']'
    E ::= A
    F ::= A
    A ::= ε
    

    The LALR(1) construction fails, because there is a reduce-reduce conflict between E and F. In the set of LR(0) states, there is a state made up of

    E ::= A . ;
    F ::= A . ;
    

    which is needed for both S and X contexts. The LALR(1) lookahead sets for these items thus mix up tokens originating from the S and X productions. This is different for LR(1), where there are different states for these cases.

    With LL(1), decisions are made by looking at FIRST sets of the alternatives, where ')' and ']' always occur in different alternatives.

    0 讨论(0)
提交回复
热议问题