Example of an LR grammar that cannot be represented by LL?

前端 未结 1 1535
说谎
说谎 2021-01-01 15:56

All LL grammars are LR grammars, but not the other way around, but I still struggle to deal with the distinction. I\'m curious about small examples, if any exist, of LR gram

相关标签:
1条回答
  • 2021-01-01 16:49

    Well, as far as grammars are concerned, its easy -- any simple left-recursive grammar is LR (probably LR(1)) and not LL. So a list grammar like:

    list ::= list ',' element | element
    

    is LR(1) (assuming the production for element is) but not LL. Such grammars can be fairly easily converted into LL grammars by left-factoring and such, so this is not too interesting however.

    Of more interest is LANGUAGES that are LR but not LL -- that is a language for which there exists an LR(1) grammar but no LL(k) grammar for any k. An example is things that need optional trailing matches. For example, the language of any number of a symbols followed by the same number or fewer b symbols, but not more bs -- { a^i b^j | i >= j }. There's a trivial LR(1) grammar:

    S ::= a S | P
    P ::= a P b | \epsilon
    

    but no LL(k) grammar. The reason is that an LL grammar needs to decide whether to match an a+b pair or an odd a when looking at an a, while the LR grammar can defer that decision until after it sees the b or the end of the input.

    This post on cs.stackechange.com has lots of references about this

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