REBOL 3.0

Comments on: PARSE: the definition of NOT

Carl Sassenrath, CTO
REBOL Technologies
5-Oct-2009 19:00 GMT

Article #0260
Main page || Index || Prior Article [0259] || Next Article [0261] || 2 Comments || Send feedback

The proposed definition of NOT was simply to invert the success or failure of the following rule.

So, NOT is not defined to complement a value. It inverts the rule result.

For some expressions, this difference can seem a bit misleading.

Take this line:

>> parse "a" [not "b"]
== false

At first, that looks like a bug, because it is true that "a" is NOT "b". However, parse is returning false because you did not finish parsing the input!

You can discover this if you add a bit of debugging:

>> parse "a" [not "b" (print 'ok)]
ok
== false

So, you can see that the NOT "b" was in fact true. Now, you need to finish the rule, in whatever way you require:

>> parse "a" [not "b" "a"]
== true
>> parse "a" [not "b" skip]
== true
>> parse "a" [not "b" to end]
== true

Notice that NOT works like AND (and also like OR, the "|") -- it always resets (backtracks) the input.

Why does it do that? Consider this case:

>> parse "abc" [not "test" ...]

Although it is true that "abc" is not "test" the parser cannot advance the input because it cannot determine how much to advance it by. In other words, not matching the input only tells you what the input is not, not what it is.

You can verify this with a little debugging (here, using the new ?? debugging feature):

>> parse "ab" [not "ax" ?? | ?? end]
|: "ab"
== false

>> parse "ab" [not "ab" ?? | ?? end]
end: "ab"
== false

Both cases show that the input is still at "ab" regardless of the success of the NOT.

2 Comments

Comments:

Peter Wood
5-Oct-2009 19:15:55
Thanks for the explanation.

Is there a way to achieve the same behaviour as using a "complemented" bitset in Rebol 2?

Carl Sassenrath
5-Oct-2009 19:50:08
Yes, a complemented bitset in R3. However, that's still lurking on the TBI (to be implemented) list. They work differently from R2.

Post a Comment:

You can post a comment here. Keep it on-topic.

Name:

Blog id:

R3-0260


Comment:


 Note: HTML tags allowed for: b i u li ol ul font span div a p br pre tt blockquote
 
 

This is a technical blog related to the above topic. We reserve the right to remove comments that are off-topic, irrelevant links, advertisements, spams, personal attacks, politics, religion, etc.

REBOL 3.0
Updated 28-Mar-2024 - Edit - Copyright REBOL Technologies - REBOL.net