[antlr-interest] Re: Nondeterminism problem

Oliver Zeigermann oliver at zeigermann.de
Fri Dec 19 16:41:37 PST 2003


Terence Parr wrote:
> On Friday, December 19, 2003, at 08:39 AM, Oliver Zeigermann wrote:
> 
>>>I think you'll find that LALL(k) done by PCCTS is a proper *superset*.
>>>I don't understand "only one that does practical SLL(k) near
>>>computation".  Can you rephrase?
>>
>>I browsed around the SLK site a bit and guess SLK *nearly* is able to
>>solve the SLL(k) computation in polynomial time instead of exponential.
> 
> 
> Howdy :)
> 
> This is not possible in theory for k>1 because each lookahead set is 
> O(|T|^k) in the worst case.  In practice it's not as bad, but can 
> quickly explode for k>2.  The algorithm is irrelevant...this is min 
> requirement just to store a *single* lookahead set.
> 
> 
>>As far as I understand it uses the fact SLL(k) computation for any
>>*fixed* k is polynomial only.
> 
> 
> Actually, it can never be polynomial in theory.  The sequence of tokens 
> is combinatoric.  Sometimes in practice you can make it do k=7 as I've 
> done with antlr on small grammars.
> 

I have this reference from

http://home.earthlink.net/~parsersinc/doc/conjecture.html

first paragraph, but have no access to the primary source. I do not want 
to make this a research topic, but can anyone verify the link?

The primary source seems to be:

Aho, Alfred V., S.C. Johnson, and Jeffrey D. Ullman (1975). 
"Deterministic Parsing of Ambiguous Grammars." Communications of the 
ACM, 18(8), pp. 441-452.


>> So SLK begins to create a table assuming
>>the grammar is SLL(1). If it detects an ambiguity it augments it with
>>SLL(2), etc. How does ANTLR do it?
> 
> 
> ANTLR does the same thing and that technique has been known for at 
> least 30 years (modulating the lookahead depth).
> 
> 
>>>Again, PCCTS does full LALL(k); my
>>>dissertation was how approximate lookahead can be used to attenuate 
>>>the
>>>complexity of computation and storage of lookahead.  This includes
>>>weaker parser as well as helping to build full LALL(k) parsers.
>>
>>Yes, but isn't the creation time for such a parser exponential in
>>respect to k?
> 
> 
> Yep.  Any parser that does SLL or LALL or LL will be exponential for 
> k>1.  LL is non linear (can't remember exact order at the moment) even 
> for k=1 due to rule replication.
> 
> Approximate parsers are always non-exponential, but non linear.  They 
> are essentially O(|G|xk) or perhaps a little higher where |G| is the 
> size of the grammar.
> 
> 
>>>s : Z (a | ) B ;
>>>
>>>a : A;
>>>
>>>t : X a A ;
>>
>>Ah, this is interesting. *Obviously this shows LALL' grammars are not a
>>subset of SLL grammars*!
> 
> 
> Correct.  SLL has less precise lookahead computation.
> 
> However, I made a mistake in this grammar I just realized...tried to 
> simplify.  Here is an LALL(1) grammar that should not be SLL(k).
> 
> s : (a|C) B ;
> 
> a : A|;
> 
> t : a C ;
> 
> The problem is that computing lookahead for first alt of subrule you go 
> like this:
> 
> LOOK(a) == FIRST(a) == {A} U FOLLOW(a)  == A // SLL
> 
> whereas an LALL computation will use the fact that it knows which 
> context in which 'a' will be invoked and use only the first 
> FOLLOW=={B}.  So LALL(1) should compute {A,B} for lookahead of first 
> alt of subrule and SLL(1) would compute {A,B,C}, which collides with C 
> of second alt.  Sorry for the incorrect grammar.  BTW, LALL'(1) == 
> LALL(1) grammar and language.  They are identical functionally and 
> hence equivalent in power trivially.
> 
> 
>>What about languages then?
> 
> 
> Ah.  That's different.
> 
> 
>> As far as I understand from the above there
>>is always a way to rephrase your LL grammar to SLL to parse any LL
>>language, is this correct?
> 
> 
> For k=1, SLL(k)==LL(k).  But this is not true for LL(k) languages with 
> k>1.
> 
> 
>> Is it always possible to make a LL grammar
>>LALL', parsing the same language?
> 
> 
> I'm not certain, but I'd say no: there must be LL(k) languages that are 
> not LALL'(k).
> 
> 
>> If not the LALL' languages indeed seem
>>to be a subset of the SLL languages, right?
> 
> 
> No because LL(k) strictly stronger than SLL(k) languages and grammars.  
> LALL' weaker than LALL for grammars, but I don't know for languages.  I 
> never established that result, sorry.  Therefore, I don't think the 
> relationship is so obvious.  The only thing that is clear is that SLK's 
> claims about being strongest non-LL(k) parsers is wrong due to PCCTS's 
> LALL(k) parsers.

OK. Is there anything I could read to clear my mind? Is there anyone who 
touched this before in a theoretical way? My mind needs relief and a 
little bit of rest, but I will have to find this out before :( Any hints?

Oliver


> Ter
> --
> Professor Comp. Sci., University of San Francisco
> Creator, ANTLR Parser Generator, http://www.antlr.org
> Co-founder, http://www.jguru.com
> Co-founder, http://www.knowspam.net enjoy email again!
> Co-founder, http://www.peerscope.com pure link sharing
> 
> 
> 
> 
>  
> 
> Yahoo! Groups Links
> 
> To visit your group on the web, go to:
>  http://groups.yahoo.com/group/antlr-interest/
> 
> To unsubscribe from this group, send an email to:
>  antlr-interest-unsubscribe at yahoogroups.com
> 
> Your use of Yahoo! Groups is subject to:
>  http://docs.yahoo.com/info/terms/ 
> 
> 
> 




 

Yahoo! Groups Links

To visit your group on the web, go to:
 http://groups.yahoo.com/group/antlr-interest/

To unsubscribe from this group, send an email to:
 antlr-interest-unsubscribe at yahoogroups.com

Your use of Yahoo! Groups is subject to:
 http://docs.yahoo.com/info/terms/ 




More information about the antlr-interest mailing list