If it cabn be determined via prior tokens you can test the value of LA 
(-n). If not you can use a scope in a higher ruler than both and set a  
flag. But easier than that, pass a Boolean (or state if more than two  
rules). So ruleB[true] ruleB[false]. But if they are  duplicate then  
refactoring will be better usually.

ruleB[Boolean isA] :

Jim

On Mar 7, 2010, at 18:50, Kieran Simpson <[email protected]> wrote:

> I have
>
> ruleA: ruleB;
>
> ruleC: ruleB;
>
> ruleB: ruleD;
>
> In ruleB I want to different target language actions to execute  
> based on
> whether it was ruleA or ruleC that was previously matched.  If my
> understanding of syntatic/semantic predicates is correct, they only  
> look
> forwards, not backwards.
>
> Is there a way (without refactoring the grammar) to in rule B know  
> which
> rule it was invoked from (A or C) and make decisions accordingly?
>
> Thanks.
>
> 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.

Reply via email to