Thanks very much for the help. I tried the program and it worked!

----- Original Message ----- 
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, February 08, 2000 3:30 PM
Subject: [REBOL] [Rebol_New] symbol manipulation Re:(3)


> Hello, jetroy!
> 
> [EMAIL PROTECTED] wrote:
> > 
> > How do you link up the BNF definition with the parse statement?
> >
> 
> REBOL parse rules are conceptually similar to BNF, but you can (and
> must) embed REBOL code to take action on the parsed data -- unless,
> of course, you just want a pass/fail syntax check.
> 
> >
> > I can't seem to find any simple examples. Thanks!
> > 
> 
> I'm not sure if this qualifies as "simple", but here's an example.
> 
> =======================================================================
> REBOL []
> 
> polydiff: function [
>     expr [string!]
> ][
>     alpha dig numb whsp gap coeff varbl expon result
> ][
>     alpha: charset [#"a" - #"z"]
>     dig:   charset [#"0" - #"9"]
>     numb:  [some dig]
>     whsp:  charset " ^/^-"
>     gap:   [any whsp]
> 
>     either parse/all expr [
>         gap  [copy coeff numb | none (coeff: 1)]
> gap  copy varbl alpha
> gap  ["**" gap copy expon numb | none (expon: 1)]
> gap  end
>     ][
>         coeff: to-integer coeff
> expon: to-integer expon
> coeff: coeff * expon
> expon: expon - 1
> result: copy ""
> either expon = 0 [
>     append result coeff
> ][
>     if coeff <> 1 [append result coeff]
>     append result varbl
>     if expon <> 1 [append result join "**" expon]
> ]
> result
>     ][
> ""
>     ]
> ]
> =======================================================================
> 
> used as in
> 
>     >> polydiff "2x**3"
>     == "6x**2"
>     >> polydiff "  2 x ** 3  "
>     == "6x**2"
>     >> polydiff "x"
>     == "1"
>     >> polydiff "2x"
>     == "2"
>     >> polydiff "2x**2"
>     == "4x
> 
> Notes:
> 
> *   gap is there to gobble up optional whitespace
> *   copy is there to save what matched into a word for later use
> *   the alternatives with none set coefficient and exponent to default
>     values if they are missing
> *   the dozen or so lines for a successful parse are there to simplify
>     the result expression by avoiding coefficient of 1, exponents of
>     0 or 1
> 
> >
> >    parse str [
> >     factor (result: join result  [ digit "*x**"  digit - 1 ]  )  ;this
> > doesn't work
> >    ]
> >
> 
> One reason why it doesn't work is that you're trying to use the word
> digit as if it were a variable containing the digit matched.
> It's not.  It's just a test of whether a character is a digit.
> 
> --
> 
> Unlimited Internet Access only $12.95 a month! http://www.peclink.net/

--

Unlimited internet access only $12.95 a month. Click here for more details: 
http://www.surfcheap.com/?allied

Reply via email to