[antlr-interest] Parser generation takes hours

Jean-Pierre LAMBERT jp.raven at worldonline.fr
Wed Jan 6 13:31:39 PST 2010


Looks like I finally hit the nail on the head!

After doing some crucial left-factorizations, I can put all four sets of 
mutually left-recursive productions all together, and the parser 
generation takes only a couple of minutes. It seems even faster than 
with only three sets without left-factorization.


It definitely looks like ANTLR is *very* sensible to left-factorization 
in rules.

In some way, it is quite normal since LL parsers requires it.


A big thank you for the help. It was greatly appreciated.


JP



Le 06/01/2010 15:17, Jean-Pierre LAMBERT a écrit :
> After investigating the problem further, it looks like I have rounded up
> the faulty rules.
>
>
> In my grammar I have four sets of productions who are mutually
> (indirectly) left-recursive. After removing left-recursion, I have the
> "3 hours parser generation" problem.
>
> If I remove from the grammar any one of these four sets, after removing
> left-recursion the parser generation takes less than 5 minutes, which is
> the expected behavior.
>
>
> I will try tackling the other problems of the grammar (namely left
> factorisation for start) and I will see later if that changes anything
> when I include back all the four sets of mutually left-recursive rules.
>
>
> Thanks everybody.
>
>
> JP
>
>
>
> Le 06/01/2010 12:52, Jean-Pierre LAMBERT a écrit :
>> I have already started to remove parts of the grammar and the problem is
>> still there.
>>
>>
>> Le 06/01/2010 07:42, Gokulakannan Somasundaram a écrit :
>>> Hi Jean,
>>>             I faced up with a similar issue, when i tried the migration
>>> of  a LR parser. But it's definitely because of recursion stuffs. The
>>> way i removed is sort of layman stuff, but thought of just informing you.
>>>             Try to split the grammar into multiple sections(group of
>>> rules) and try to add them one-by-one. You don't need to wait till the
>>> errors are emitted. As soon as the parser generation takes more than 3-4
>>> mins, just stop the generation. The last section, which resulted in the
>>> increase most probably contains the problematic code. Bear with me, if
>>> this approach looks very awkward.
>>>
>>> Thanks,
>>> Gokul.
>>>
>>> On Tue, Jan 5, 2010 at 8:22 PM, Jean-Pierre LAMBERT
>>> <jp.raven at worldonline.fr<mailto:jp.raven at worldonline.fr>>   wrote:
>>>
>>>       Hello everybody,
>>>
>>>       I'm currently rewriting a LR parser to be used for ANTLR. As a result,
>>>       ANTLR works literaly for hours before it outputs errors about my
>>>       grammar.
>>>
>>>       My work is not finished; I have removed all left-recursions but I still
>>>       have to do left-factorisations. The problem being that since ANTLR works
>>>       for hours before I get the errors, it isn't very practical for me to fix
>>>       the grammar.
>>>
>>>       Do you have any suggestions in this case? What could be done so that
>>>       ANTLR would take only dozen of minutes? Is there something capital that
>>>       I missed about ANTLR and LL grammars? How should be written ANTLR rules
>>>       to avoid such a problem?
>>>
>>>       Thanks in advance, any adice will be welcome.
>>>
>>>       JP
>>>
>>>       List: http://www.antlr.org/mailman/listinfo/antlr-interest
>>>       Unsubscribe:
>>>       http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>>>
>>>
>>
>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>>
>>
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
>


More information about the antlr-interest mailing list