[antlr-interest] Request:External action definitions

Sriram Durbha cintyram at yahoo.com
Tue Nov 26 10:25:54 PST 2002


This looks alot like virtual functiuns
so we write an abstract grammar first, with virtualfunctions for
actions,
 and then override them in the derived grammars ;

since i have not used the inheritance feature even now i am at aloss
here, but the general idea looks like this :


if i write a grammar now which might be used with different actions at
a later stage, i want to put place holders for those actions and fill
them later;
so even now if in the action part we simply invoke a virtual function
from a calss called actions, declared in the first part of the grammar,
and  defined in a source file which is also included in the project
so all that the actions part will have is 
 
rule : ...
   {
   action_object_ptr->method_for_this_rule() ;  
    } 
  ;


the action_object_ptr has to be assigned a new object of the required
sub-type ; and its visibility , local ness etc have to be taken care of
.. 

so now i can change the action independently of the grammar ;
also i can override only some of the actions if i have to ;

but when grammar has to change, new situations might arise :)

cheers
ram




--- Terence Parr <parrt at jguru.com> wrote:
> Hi.  Yes, great idea!  I would call this "aspect oriented
> programming" 
> and is one future enhancement we've considered.  I have been working 
> with Monty and Loring on my new ideas for "how to keep those actions 
> from screwing up the grammar and making the grammar specific to one 
> problem."  The basic idea, assuming we had good tools for this, would
> 
> be to let you "derive" a new grammar from an old grammar and then
> have 
> changes to the original grammar be "pushed" into your modified
> grammar. 
>   Kind of like a "live" cut-n-paste.  In this way, you keep one clean
> 
> grammar that is just the grammar; no actions.  Then to make that 
> grammar do something "derive" a new one and add your actions. 
> Changes 
> can be rolled forward to any derived grammar.  Currently we use 
> inheritance which is really just compile-time cut-n-paste for
> grammars; 
> but this is less flexible as you have to rewrite every rule just to
> get 
> actions in there.  This strategy is what you do now, right?  You grab
> a 
> grammar and modify it and then curse when the original grammar gets 
> updated (such as what happens for any of you with a modified Java 
> grammar). ;)
> 
> You might call this the 
> RCS-based-grammar-derivation-and-composition-method.  <snicker>  Howz
> 
> that for a buzzword!?
> 
> Sound interesting?
> 
> Terence
> PS	Just finishing up my semester here at USF and should get some good
> 
> ANTLR time in now for next month or so to push out 2.7.2 for real!
> 
> On Tuesday, November 26, 2002, at 08:10  AM, mzukowski at yci.com wrote:
> 
> > Someone has recently done just this, but I forget who.  I'm sure
> they 
> > will
> > pipe up.  Look at the files section on the yahoo list site, I think
> it 
> > is
> > there.
> >
> > Also noweb can be used for this type of thing too.  Searching for 
> > noweb in
> > the list archives may uncover the one I was thinking of.
> >
> > Monty
> >
> > -----Original Message-----
> > From: Anakreon Mejdi [mailto:amejdi at ertonline.gr]
> > Sent: Tuesday, November 26, 2002 3:41 AM
> > To: antlr-interest at yahoogroups.com
> > Subject: [antlr-interest] Request:External action definitions
> >
> >
> > I have an idea which might make antlr better.
> > Instead of defining the actions in the same file with the grammar
> > they could be defined in other file(s).
> >
> > A way this could be achived(not necessarily the best) would be:
> >
> > RULE:
> > 	'a' .. 'z' { %id; }
> > 	;
> >
> >
> > rule
> > 	:
> > 	RULE { %some_id; }
> > 	;
> >
> >
> > tree_rule
> > 	:
> > 		#(r:RULE { %tree_id; System.out.println("RULE matched");  }
> > 	;
> >
> >
> > In this case antlr.Tool will be fed with the grammar file and the
> > file(s)  where actions are defined.
> >
> > The actions identified with a label (like %id) will be searched
> among
> > the  action  files and the label should be replaced by the content
> of
> > the action.
> >
> > Example:
> > 	id = {
> > 		System.out.println("Externaly defined action");
> > 	}
> > 		
> > 	tree_id = {
> > 		System.out.println(r.getText());
> > 	}
> >
> > This could be achieved with regular expressions but would be a 
> > primitive
> > implementation.
> >
> > I'd like to know what you think about it.
> > Anakreon
> > 		
> >
> >
> >
> >
> > Your use of Yahoo! Groups is subject to 
> > http://docs.yahoo.com/info/terms/
> >
> >
> >
> >
> > Your use of Yahoo! Groups is subject to 
> > http://docs.yahoo.com/info/terms/
> >
> >
> --
> Co-founder, http://www.jguru.com
> Creator, ANTLR Parser Generator: http://www.antlr.org
> Lecturer in Comp. Sci., University of San Francisco
> 
> 
>  
> 
> Your use of Yahoo! Groups is subject to
> http://docs.yahoo.com/info/terms/ 
> 
> 


__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com

 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 



More information about the antlr-interest mailing list