c - Does there exist an LR(k) grammar with no LL(1) equivalent -


i haven't been able find answer yet. there grammars context free , non-ambiguous can't converted ll(1)?

i found 1 production couldn't figure out how convert ll(1): parameter-type-list production in c99:

parameter-type-list:     parameter-list     parameter-list , ... 

is example of lr(k) grammar doesn't have ll(1) equivalent or doing wrong?

edit: copied wrong name, meant copy parameter-declaration:

parameter-declaration:     declaration-specifiers declarator     declaration-specifiers abstract-declarator(opt) 

the problem declarator , abstract declarator both having ( in first set, being left recursive.

in general, lr(k) grammars more powerful ll(k). means there languages lr(k) parser, not ll(k).

one of examples language defined grammar:

s -> s  s -> p p -> p b p -> \epsilon 

or, in other words, string of a's, followed same or less number of b's. follows fact ll(k) parser must make decision every a encountered - paired b - looking ahead no more k symbols of input, can a's, giving no useful information. strict proof, @ second part of accepted answer here https://cs.stackexchange.com/questions/3350/is-this-language-ll1-parseable

your example, however, can left factored in ll(1) grammar be

parameter-type-list -> parameter-list optional-ellipsis optional-ellipsis -> \epsilon optional-ellipsis -> , ... 

one note follow set parameter-list contain , character, , can cause first-follow conflict. if case, need see parameter-list definition fix conflict too.

edit: parameter-declaration rule seems complicated answer right away. can try perform left factorization hands conflicting alternatives, or assistance tool, antlr.


Comments

Popular posts from this blog

qt - Using float or double for own QML classes -

Create Outlook appointment via C# .Net -

ios - Swift Array Resetting Itself -