[antlr-interest] Problem with lexical nondeterminism - ANTLR 2.7.7

clive.i.hill at jpmorgan.com clive.i.hill at jpmorgan.com
Fri Jan 4 03:27:30 PST 2008


Brilliant!  Thanks guys for your advice.

Jim's suggestion fixed the problem.

For some reason I was still getting an issue with Gavin's.  It was still 
thinking that 1350 was APAC_NUMERIC_TICKER.  I'm not too sure why and as 
Jim's works I've stopped investigating.

Thanks again to all those that got back.





"Jim Idle" <jimi at temporal-wave.com> 
Sent by: antlr-interest-bounces at antlr.org
03/01/2008 21:40

To
antlr-interest at antlr.org
cc

Subject
Re: [antlr-interest] Problem with lexical nondeterminism - ANTLR 2.7.7








> -----Original Message-----
> From: Gavin Lambert [mailto:antlr at mirality.co.nz]
> Sent: Thursday, January 03, 2008 1:27 PM
> To: clive.i.hill at jpmorgan.com
> Cc: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Problem with lexical nondeterminism - 
ANTLR
> 2.7.7
> 
> At 10:02 4/01/2008, clive.i.hill at jpmorgan.com wrote:
> >If I try your suggestions with APAC_NUMERIC_TICKER above NUMER I
> >still get the same issue.  Harold your suggestion would work if
> >it matches NUMBER first but it was actually an
> >APAC_NUMERIC_TICKER.  The match actually happens the other way
> >around.
> 
> Ok, what's probably happening here is that ANTLR is discarding the
> predicate because there's only one alt.  I thought it was only
> ANTLR 3 that did that, but I guess v2 did as well.  In that case
> you'll need to combine the rules:
> 
> NUMBER
>      : (INT COMMA) => APAC_NUMERIC_TICKER
> {$setType(APAC_NUMERIC_TICKER);}
>      | (INT COLON) => RANGE               {$setType(RANGE);}
>      | (DOT) => FLOAT                     {$setType(FLOAT);}
>      | (INT DOT) => FLOAT                 {$setType(FLOAT);}
>      | INT                                {$setType(INT);}
>      ;
> 
> protected
> APAC_NUMERIC_TICKER
>      : INT COMMA CHAR CHAR
>      ;
> 

I suggest that combine the common elements though, which will minimize 
predicates (probably to none) and the protected calls:

NUMBER
: INT
    (
         COMMA (whatelse?)               { $setType(APAC_NUMERIC_TICKER);}
       | DOT INT                                                 { 
$setType(FLOAT); }
       | COLON INT            { $setType(RANGE); }
                  |                      { $setType(INT);   }
    )
| DOT 
    (
         INT                  { $setType(FLOAT); }
       |                      { $setType(DOT);   }
    )
;

Combine common roots basically, then branch accordingly. You can often 
avoid predicates this way.

Jim





Generally, this communication is for informational purposes only
and it is not intended as an offer or solicitation for the purchase
or sale of any financial instrument or as an official confirmation
of any transaction. In the event you are receiving the offering
materials attached below related to your interest in hedge funds or
private equity, this communication may be intended as an offer or
solicitation for the purchase or sale of such fund(s).  All market
prices, data and other information are not warranted as to
completeness or accuracy and are subject to change without notice.
Any comments or statements made herein do not necessarily reflect
those of JPMorgan Chase & Co., its subsidiaries and affiliates.

This transmission may contain information that is privileged,
confidential, legally privileged, and/or exempt from disclosure
under applicable law. If you are not the intended recipient, you
are hereby notified that any disclosure, copying, distribution, or
use of the information contained herein (including any reliance
thereon) is STRICTLY PROHIBITED. Although this transmission and any
attachments are believed to be free of any virus or other defect
that might affect any computer system into which it is received and
opened, it is the responsibility of the recipient to ensure that it
is virus free and no responsibility is accepted by JPMorgan Chase &
Co., its subsidiaries and affiliates, as applicable, for any loss
or damage arising in any way from its use. If you received this
transmission in error, please immediately contact the sender and
destroy the material in its entirety, whether in electronic or hard
copy format. Thank you.
Please refer to http://www.jpmorgan.com/pages/disclosures for
disclosures relating to UK legal entities.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20080104/72d01374/attachment.html 


More information about the antlr-interest mailing list