Thank you for answering me, Jim.
In fact, the original rule seems to work well (as unit tests succeed). It is
only when I use ANTLRWorks for debugging that I encounter this exception.
I'm working with SQL2 grammar written by Lubos Vnuk. My goal is to migrate it
from v2 to v3.1.3.
The rule in question is <value_exp_primary> :
value_exp_primary :
set_fct_spec
| case_exp
| cast_spec
| {input.LA(1) == INTRODUCER}? ((column_ref)=>column_ref |
unsigned_value_spec)
| {input.LA(1) != INTRODUCER}? column_ref
| (LEFT_PAREN value_exp RIGHT_PAREN)=> LEFT_PAREN value_exp RIGHT_PAREN
| scalar_subquery
;
Yes, Lubos Vnuk wrote this to disambiguate his grammar.
The java.lang.NumberFormatException occurs when I launch this test :
select*from a where a = substring ( 'abcdefgh' || 'ijkl' from 5-2 for 1*2);
It does not matter that ANTLRWorks could not handle this input. My true problem
is that my lexer is not able to recognize 'abcdefgh' and 'ijkl', because of
quotes... But it's not the same story :-)
--
Jonathan Bayle
Stagiaire IUT Informatique Vannes
MGDIS - Département Etudes et Développement
________________________________
De : [email protected] [mailto:[email protected]]
De la part de Jim Idle
Envoyé : mercredi 12 août 2009 16:06
Cc : [email protected]
Objet : Re: [antlr-interest] Exception while debugging C# 2.0with
ANTLRWorks1.2.3
Bayle Jonathan wrote:
Hi everybody,
I have identified which piece of code returns « False » (and sometimes « True
») and make ANTLRWorks throw a "java.lang.NumberFormatException".
It is the result of 2 semantic predicates embedded in the same rule :
// beginning of rule (...)
| {input.LA(1) == MY_TOKEN}? // (...) First production
| {input.LA(1) != MY_TOKEN}? // (...) Second production
// (...) end of rule
;
I am used to work with ANTLR 2.7.7, so this syntax may be wrong under ANTLR
3.1.3.
Could anybody help me please ?
ON the face of it, it looks like yuo can just remove the predicates and 3.1
will work it out correctly. However you need to post the rule in question or we
are just guessing. Another possibility is that you want gated predicates and
just need that on the first production:
rule
: {input.LA(1) == MY_TOKEN}?=> ....
| // second rpodcution
;
The only advantage to that though would be to prevent some kind of warning so I
can't see that you need that.
Yet another possibility is that your predicates are just not correct, so, post
the actual rule in error :-)
Jim
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"il-antlr-interest" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/il-antlr-interest?hl=en
-~----------~----~----~----~------~----~------~--~---
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address