[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