[antlr-interest] Why BANG after rule id ?
Kaleb Pederson
kaleb.pederson at gmail.com
Tue Oct 6 14:58:43 PDT 2009
Well I wasn't paying enough attention to the question, so the answer I gave probably wasn't right :(. The exclamation mark is used as I indicated when following an element or range within a rule, but I've never actually seen it used as in the example you provided. I looked at the grammar description documentation (http://www.antlr.org/wiki/display/ANTLR3/Grammars), but don't see it present in the documentation.
It's definitely supported as indicated by the '!' in this grammar rule:
rule
scope {
String name;
}
: DOC_COMMENT?
( modifier=('protected'|'public'|'private'|'fragment') )?
id {$rule::name = $id.text;}
'!'?
( arg=ARG_ACTION )?
( 'returns' rt=ARG_ACTION )?
throwsSpec? optionsSpec? ruleScopeSpec? ruleAction*
':' altList ';'
exceptionGroup?
-> ^( RULE id {modifier!=null?adaptor.create(modifier):null} ^(ARG[$arg] $arg)? ^('returns' $rt)?
throwsSpec? optionsSpec? ruleScopeSpec? ruleAction*
altList
exceptionGroup?
EOR["EOR"]
)
;
Sorry I can't be of more help.
--Kaleb
http://twitter.com/kalebpederson
http://kalebpederson.com
On Tuesday 06 October 2009 02:18:55 pm Kaleb Pederson wrote:
> On Tuesday 06 October 2009 03:15:05 am Graham Wideman wrote:
> > Hi folks:
> >
> > I see in the ANTLR grammar that you can place a BANG (exclamation point) after the initial rule id in a rule. Indeed it's used in the ANTLR v3 grammar itself:
> >
> > ----------------------------
> > range!
> > : c1=CHAR_LITERAL RANGE c2=CHAR_LITERAL elementOptions?
> > -> ^(CHAR_RANGE[$c1,".."] $c1 $c2 elementOptions?)
> > ;
> > ----------------------------
> >
> > Could someone illuminate what this ! does?
>
> The exclamation mark is placed on a node when that node should not be present in the AST when output=AST for a grammar.
>
> See:
>
> http://jnb.ociweb.com/jnb/jnbJun2008.html#CreatingASTs
> http://www.antlr.org/wiki/display/ANTLR3/Tree+construction
>
> --Kaleb
>
> http://twitter.com/kalebpederson
> http://kalebpederson.com
>
More information about the antlr-interest
mailing list