Hi Graham, 

It's not clear from your question if only method calls are legal within a 
"with" statement, in which case the suggestions made should work, or if (as I 
suspect) any statement is legal within a "with", like in javascript. 

Peter 


From: "Graham Mer" <[email protected]> 
To: [email protected] 
Sent: Wednesday, April 13, 2011 11:29:22 AM 
Subject: [antlr-interest] Previous rule element reference in a scope 

Hello list, 

I have a grammar that includes a "With" statement like the following: 

With anObject 
.method1() 
.method2() 

which is semantically equivalent to the following fragment: 

anObject.method1() 
anObject.method2() 


During AST construction, I want to distribute 'anObject' to its 
subordinate method calls, so that I get a tree like the following: 

^(CALL anObject.method1) 
^(CALL anObject.method2) 

This is a natural fit for a scope, but I'm not sure how to capture the 
'anObject' reference in a scope. 

If I have a recognizer grammar with the following rules, how do I 
capture the withStatement ID in a scope, and how do I insert that 
reference into the AST generated by memberCallStatement? 

withStatement 
scope{ // what do I store here to save my ID? } 
: 'With' ID 
; 

memberCallStatement 
: '.' ID '()' // how do i insert $scope::ID in my AST? 
; 

Also, are there any special precautions I need to take to avoid 
inserting loops in the AST, for example, do I need to make a new 
instance of the with object every time I duplicate it in the AST, or 
can I just re-use it? Is it best to use a String or my own Java 
object, or can I capture the thing that the recognizer generates 
directly? 

I wish I could do essentially the following: 

withStatement 
scope{ Object id; } 
: 'With'! id=ID! 
; 

memberCallStatement 
: '.' ID '()' -> ^(CALL $withStatement::id '.' $ID) 
; 

I know that will give ANTLR a sad, but I hope it illustrates what I 
want to produce. 


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