Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: Parse and and recursion local variables?

From: volker:nitsch:gmai:l at: 17-Mar-2007 19:22

My typicall way to do that is my own stack. stack: copy[] parse rule[ (insert/only stack reduce[local1 local2]) rule ;recursion (set[local local2] first stack remove stack) ] On 3/17/07, Petr Krenzelok <petr.krenzelok-trz.cz> wrote:
> Hi, > > not being much skilled in parsing, I tried to do a little parser for my > own rsp-tag system (I know there are few robust systems out there, but I > want to learn via implementing my own). Basically the idea is to use > kind of comment tags, which still allow web designer to display html > content. The most attractive system for me was Gabriele's Temple, but it > is not finished, nor supported, so I want my own one, much simpler :-) > My tags look like: > > <!--[section-x]--> > subsection html code > <!--/[section-x]--> > > I want to detect particular sections and invoke particular modules/code > for them, submitting it section content. Basically it works, but I also > wanted to try my very primitive parser to do some recursion. And it > seems to me I tracked down, why it does not work - inside of nested > sections, when the recursive rule is applied, I think that > rsp-section-name is not kept local to particular recursion level? Can I > make it local by putting e.g. parse into function body, defining a word > (rsp-tag-nested) as a local variable? Or the issue is more complex and > my rules simply build insufficiently? > > Also - if I don't use to [a | b | c], as we don't have any ;-), I have > to skip by one char. That makes stripping out html subsections a bit > difficult (where to put correct markers), as my rsp-html or html rules > simply are "1 skip". But maybe that could be solved by defining what the > proper html charset is? > > Sorry if my questions are rather primitive to our parse gurus here :-) > > -pekr- > --------------------- > REBOL [] > > template: { > this is the beginning of html:-) > <b><!--[mark-x]-->Hello x!<!--/[mark-x]--></b> > <b><!--[mark-y]-->Hello y!<!--/[mark-y]--></b> > <b><!--[mark-z]-->Hello z!<!--/[mark-z]--></b> > <b><!--[mark-w]-->Hello w! > another html code > <!--[mark-u]--> > subsection html code > <!--/[mark-u]--> > finishing mark-w html code > <!--/[mark-w]--></b> > this is the end :-) > } > > out: copy "" > > ;--- uncommend following to get incorrect recursion behavior > ;rsp-begin: ["<!--[" copy rsp-tag-name to "]-->" "]-->"] > ;rsp-end: ["<!--/[" rsp-tag-name "]-->"] > > ;--- comment following if enabling above ones ... > rsp-begin: ["<!--[" s: some [e: "]-->" (print copy/part s e) break | skip]] > rsp-end: ["<!--/[" s: some [e: "]-->" (print copy/part s e) break | skip]] > > ;just to distinguish for eventual debugging ... > html: [copy char skip (append out char)] > rsp-html: [copy char skip (append out char)] > > rsp-section: [rsp-begin any [rsp-end break | rsp-section | rsp-html] > ] > > rsp-rules: [any [rsp-section | html] end] > > parse/all template rsp-rules > > probe out > > halt > > -- > To unsubscribe from the list, just send an email to > lists at rebol.com with unsubscribe as the subject. >
-- -Volker Any problem in computer science can be solved with another layer of indirection. But that usually will create another problem. David Wheeler