I'd suggest parameter passing here. Something like withStatement : 'With' id=ID memberCallStatement[id]+ ;
memberCallStatement[Token id] : '.' ID '()' -> ^(CALL {$id} '.' ID) ; -- Scott ---------------------------------------- Scott Stanchfield http://javadude.com On Wed, Apr 13, 2011 at 5:29 AM, Graham Mer <gd.an...@gmail.com> wrote: > 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 il-antlr-inter...@googlegroups.com. To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en.