[REBOL] Re: Strange parsing behavior
From: brett:codeconscious at: 3-Aug-2002 10:03
Hi Robert,
I run your code and I get an error straight away:
** Script Error: string1 has no value
** Where: rejoin
** Near: mold name: get name
So you probably had string1 set before you ran your test code.
> rule1: [start: copy string1 [to " - " (?? string1) | to newline] copy
> string2 to end]
To start, lets just look at the first COPY in your Rule1. The variable is
string1, the pattern is
[to " - " (?? string1) | to newline]
Rule1 looks bad to me because you are asking parse to COPY the input stream
matched by the pattern into string1, but then from inside the pattern (and
therefore before the pattern completes) you try to print string1. So the
short answer to your first question is - nothing has been copied to string1
by the time you want to print it from inside the rule.
> - After the parsing string1 holds what I did expect in the
> first place too. This indicates that the varaibles input
> gets copied to will be changed after the parsing. But when and how?
When the pattern completes (after the first ] ). Compare with this:
>> parse/all "this is a - parsing test" [copy string1 to " - " (??
string1)]
string1: "this is a"
== false
In this case the pattern is just
to "- "
and so copy has finished by the time string1 is printed.
> Rule2:
> - This time the string1 is as expected inside the rule but
> changes to include the to " - " sequence after the parsing
>
> Any idea what's up here? Is this a bug? Robert
Same explanation as for Rule1.
Not a bug.
Regards,
Brett.