Hi Ter
I set ASTLabelType = ASNode in options on the tree grammar
Got runtime cast error
Exception in thread "main" java.lang.ClassCastException:
org.antlr.runtime.tree.CommonTree cannot be cast to com.hf.lang.eclif.ltt.ASNode
in generated code:
// /Users/bill/Documents/Eclipse
Workspaces/workspace2/OWExperimental/LTT2/com/hf/lang/eclif/ltt/ASPass1.g:21:4:
^( AS_SPEC ( rule )+ )
{
root_0 = (ASNode)adaptor.nil();
I get what's going on in ANTLR - the default adaptor is spitting out CommonTree
instances. This seems to imply that one has to supply a custom adaptor. Is
this true?
WIth no adaptor and with ASTLabelType = CommonTree the tree grammar works just
fine - with no actions.
Now, when I try to access a node in an action in a tree grammar as an ASNode, I
can only get it to work with an explicit cast in the semantic action
simple_alt
: AS_TYPE
{ System.out.println( ">>> " + ((ASNode) $AS_TYPE).nodeType ); }
| ^(AS_SUBRULE ID)
;
Is this the verdict? Either write an adaptor that does the right thing or live
with the casts?
On Jul 22, 2010, at 16:34 , Terence Parr wrote:
> Hi Bill. try setting ASTLabelType in tree grammar.
> T
> On Jul 22, 2010, at 12:26 PM, Bill Andersen wrote:
>
>> Hi Folks,
>>
>> This is my second attempt at asking this question. Hopefully it is clear.
>> If not, please let me know.
>>
>> I'm interested in using a custom AST node class to carry type information.
>>
>> I do not want to build a custom TreeAdaptor to determine node type based on
>> token id because only a few AST nodes will have to be of the custom class.
>>
>> Here's a sample production from the tree generating grammar.
>>
>> rule
>> : ... match something ...
>> -> ^(NODE<CustomType>[param] ...)
>> ;
>>
>> So far so good. I know how to do this.
>>
>> Let's say CustomType looks like this
>>
>> class CustomType extends CommonTree {
>> public T param;
>> public CustomType(int ttype, T param) { ... }
>> public T getParam() { ... }
>> ...
>> }
>>
>> Now I have another grammar that consumes ASTs from the first grammar. I
>> want to do this:
>>
>> rule
>> : ^(NODE ...)
>> { ... do something with this information ... }
>> ;
>>
>> So, what syntax do I need in the action to get a T-typed param value from
>> this node?
>>
>> Any help appreciated
>>
>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>> Unsubscribe:
>> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
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.