Hi Franck,
On Sat, Nov 26, 2011 at 8:54 AM, franck102 <[email protected]> wrote:
> The grammar below won't compile, this looks like a bug to me?
> ...
No bug, syntactic predicates and rule parameters can't be mixed. You can
use rule scopes instead:
---------------------------------
grammar Test;
options {
output=AST;
backtrack=true;
ASTLabelType=CommonTree;
}
program
scope { String x; }
@init { $program::x = null; }
: 'raw'? (ID {$program::x=$ID.text;} -> ID) (rule -> rule)*
| 'raw' ID
;
rule
: 'some' ID {System.out.println("called from: " + $program::x);}
;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
WS : (' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;};
---------------------------------
If you now parse "raw A some B", then "called from: A" will be printed to
your console.
Also, you're trying to pass the tree of `program` as a parameter, but that
tree hasn't been constructed yet, AFAIK (and will therefor be `null`).
That's why my example shows how to use rule scopes with a simple string.
Regards,
Bart.
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address
--
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.