At 01:24 2/10/2009, Naveen Chawla wrote:
>Thanks so much! Yes, I tried complement: object object? 
>coincidentally just before I read your message and it worked. 
>Good news is that in the real grammar they ARE actually 
>equivalent. But is there no way of making 'indirectObject' and 
>'object' appear as they are in the end structure if there are 2 
>'object's in a row (they have slightly different meanings even 
>though syntactically the same)? Would a syntactic predicate solve 
>this? For example, complement: (indirectObject 
>object)=>indirectObject object | object; Is this the right one? 
>(it doesn't seem to work on ANTLRWorks) Many many thanks, N

Which rules it passes through shouldn't have any bearing on the 
semantic meaning; the rules should just be concerned with matching 
logical units of tokens.

You can assign different meanings to the objects via altering the 
output AST, eg:

complement
   : (o1=object -> ^(DIRECT $o1))
     (o2=object -> ^(INDIRECT_DIRECT $o1 $o2))?
   ;
(There are lots of other possible tree layouts, of course.)

If you're carrying out some action directly rather than outputting 
an AST, you can still use a similar technique (putting some of the 
code inside the optional block) to get different behaviour if the 
second object is actually present.


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
-~----------~----~----~----~------~----~------~--~---

Reply via email to