[antlr-interest] Clarifications on grammar rules.

Terence Parr parrt at cs.usfca.edu
Wed Apr 7 11:07:47 PDT 2004


On Apr 7, 2004, at 6:24 AM, Bharath S wrote:

> Hi Ter,
>
> I need to have a rule called time units, lets say,
> that can be any unit (seconds or days or minutes..).
> ----------------------------
> Test: "Time:"(Secs|Days|mins|hours);
> ----------------------------
> is required for the same purpose. If I have "Test" as
> my lexer rule, I want the user to enter any time unit
> and I should be able to parse it and print out a
> result that looks like:
> ___________________________
> Time: 25s
> (or)
> Time: 12d
> ---------------------------
>
> and so on. Also each of the time units work perfectly
> when I test them alone.

Ok, now I understand.  Left factor Days and Secs etc...  pull INT into 
a common rule.  That is, pull INT out of Days and Secs and into Test; 
should work.

Test: INT (Secs|Days) ;

protected
Secs : 's' ;

Terence

>
> Thanks Ter.
>
> --- Terence Parr <parrt at cs.usfca.edu> wrote:
>>
>> On Apr 6, 2004, at 2:08 PM, Bharath S wrote:
>>> I have a rule of the form:
>>> ----------------------------------------
>>> Time: ('0'..'9')+
>>>       ('d'{$setType(Days);} | 's'{$setType(Secs);}
>>>       | {$setType(INT);}) ;
>>>
>>> and
>>> -------------------------
>>> protected Days: INT('d');
>>> protected Secs: INT('s');
>>> protected INT: ('0'..'9')+;
>>> ---------------------------
>>> When I try "Test: Secs|Days", I get a
>> non-determinism
>>> warning and it makes sense because both rules have
>>> common left prefixes. However, I have no clue to
>> how I
>>> can fix it. If I write a separate rule to remove
>>> common prefixes in "Secs" and "Days", it conflicts
>>> with the above rule, "Time". Am I missing
>> something
>>> obvious?
--
Professor Comp. Sci., University of San Francisco
Creator, ANTLR Parser Generator, http://www.antlr.org
Cofounder, http://www.jguru.com
Cofounder, http://www.knowspam.net enjoy email again!
Cofounder, 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/
 



More information about the antlr-interest mailing list