Hey Jim,
> It is a problem with the code generation templates for all the targets (well,
> Java and C at least), someone did post a fix for it on the list, but it has
> not been issued as any formal patch yet.
Definitely not for C# because this code was taken from a grammar that works
well with C#.
>
> privilege_level
> : privs -> ^(PRIVILEGE_LEVEL $privs)
> ;
> privs
> : (MULT|IDENTIFIER) (DOT^ (MULT|IDENTIFIER))?
> ;
>
> Though in fact I would avoid the PRIVILEGE_LEVEL node altogether unless its
> absence causes ambiguity issues in the tree grammar.
Hmm, in fact, what I want to achieve actually is a bit different. But I have
some difficulties to formulate the grammar properly. These are the cases I want
to handle:
id
id. (error: missing id or star)
id.*
id.id
id.id. (error: missing id or star)
id.id.*
id.id.id
I would be thankful for a hint to get my brain into the right direction. The
best I could come up with is that I get a tree with an invalid node. Tho
actually I would like the special node with the missing value (to ease their
handling, e.g. for code completion). My current grammar is:
primary:
parExpression
| literal
| number
| { LA(2) != DOT }? identifier (INC | DEC)?
| identifier DOT qualified_field
;
number:
NUM
| HEX_NUM
| DIGITS
| DECIMAL_NUM
;
qualified_field:
MULT
| { LA(2) != DOT }? identifier
| identifier DOT qualified_field2
;
qualified_field2:
MULT
| { LA(2) != DOT }? identifier
;
Without the lookaheads the matching process stops for cases like "id."
returning only the id without error.
Mike
--
www.soft-gems.net
_______________________________________________
antlr-dev mailing list
[email protected]
http://www.antlr.org/mailman/listinfo/antlr-dev