Resusing 'parse rules
[1/5] from: al::bri::xtra::co::nz at: 22-Dec-2000 21:08
I'm involved in several largish projects now where I find that I'm reusing (or should I say wanting to reuse) 'parse rules and/or the actions associated with them. In simplified form, a 'parse rule looks like: [pattern (action)] In some cases I'd like to reuse the pattern, and change the action (for example generating HTML or XML, or say, postscript all from the one eText), in other cases keeping the same pattern and action (different projects). If I was using C++ (my only OO language I'm skilled in), I'd write the rules as objects and inherit from them, that's assuming that Rebol was smoothly integrated into C++. Does anyone have any suggestions on how to do this? Thank you for your help. BTW, have a Merry Christmas and a Happy New Year. Andrew Martin Spreading Rebolius good cheer... ICQ: 26227169 http://members.nbci.com/AndrewMartin/
[2/5] from: brett:codeconscious at: 22-Dec-2000 19:50
Here's one suggestion. Create an object that holds your parse rules in one place. This object will have a special field called "Writer" that is initially set to 'none or some default object. Each of the actions in your parse rules will call a particular function on Writer. Create objects that know how to output a specfic formats for example a Html-Writer object. Prior to calling PARSE, set the value of the Writer field in the parse-rules object (or decendent) to one of your format writer objects like Html-Writer . So as parse calls the various rules in your parse-rules object, the actions call the appropriate writer functions and you get your specific output. A delegation style pattern (I think). In this way you separate the scanner of the input (parse-rules object) from the emitter of the output (Html-writer). If you find that you want to vary your actions as well you could consider creating a new field in the parse-rules object that is called "controller". This object would then have the responsibility of calling the writer object in response to events raised by the parse-rules object. Food for thought. Hope it helps! Brett.
[3/5] from: al:bri:xtra at: 22-Dec-2000 22:13
> Food for thought. Hope it helps!
It does help. Thank you Brett! Have a merry Christmas. Andrew Martin ICQ: 26227169 http://members.nbci.com/AndrewMartin/
[4/5] from: brett:codeconscious at: 22-Dec-2000 22:02
My pleasure. I'm still wondering what a truly Rebolous solution would look like. So an incremental change to my last suggestion might be to use parse-rules to create a structured language that would be interpreted by the later writer objects, instead of writer objects having their functions called directly. The structured language could be a new dialect or just a block that is bound then passed to do in the writer object. It would have the interesting possibility of functions built for editing the structured language enabling one editor function to handle all sorts of different input and outputs. So there's more food for thought. Hmm. better stop there before I give myself mental indigestion. Merry xmas to you too. Brett.
[5/5] from: g:santilli:tiscalinet:it at: 22-Dec-2000 13:40
Andrew Martin wrote: [...]
> [pattern (action)] > In some cases I'd like to reuse the pattern, and change the action (for > example generating HTML or XML, or say, postscript all from the one eText), > in other cases keeping the same pattern and action (different projects). If
What about creating a function that generates the rule? You can then parametrize it if needed and add a refinement to change the action from the default one...
> BTW, have a Merry Christmas and a Happy New Year.
Merry Christmas and a Happy New Year everyone! Regards, Gabriele. -- Gabriele Santilli <[giesse--writeme--com]> - Amigan - REBOL programmer Amiga Group Italia sez. L'Aquila -- http://www.amyresource.it/AGI/