[antlr-interest] Request:External action definitions

Terence Parr parrt at jguru.com
Tue Nov 26 12:02:21 PST 2002


Hi.  yes, that method works but has two problems:

1 you need to modify the grammar to have actions that reference methods 
all over or you won't be able to handle new situations

2 you can't define local variables in the rules, which are REALLY 
useful as you get a new copy per rule invocation.

Good summary, ram.

Terence

On Tuesday, November 26, 2002, at 10:25  AM, Sriram Durbha wrote:

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



More information about the antlr-interest mailing list