r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Parse] Discussion of PARSE dialect

Maxim
24-Dec-2008
[3313]
oops example forgot string to parse... hehehe

>> s: "12345 12345 12345"
== "12345 12345 12345"

>> parse/all s [some ["12345" here: (print "*" here: tail here) :here]]
*
== true

>> parse/all s [some ["12345" here: (print "*" here: tail here) :here 
skip]]
*
== false
[unknown: 5]
24-Dec-2008
[3314x2]
Not exactly what I'm talking about.
Well maybe...
Steeve
24-Dec-2008
[3316]
parse/all s [some ["12345" (print "*") end skip]
is that not enough ?
[unknown: 5]
24-Dec-2008
[3317]
Well the skip is  going to produce false unless you know how much 
to skip
Maxim
24-Dec-2008
[3318x3]
the here: tail here: is just the code you assign IF something you 
want to check programatically matched.
now the question, paul, is do you want the WHOLE parse to fail, or 
just that rule?  up to the paren?
or do you want to do, basically, look ahead assertion?
BrianH
24-Dec-2008
[3321x2]
The skip will produce false because it is attempting to skip past 
the end.
The phrase [end skip] will always fail and return false.
[unknown: 5]
24-Dec-2008
[3323x2]
What I'm talking about is this:

words: [this that blah]


result: parse [this that bleh blah][some [set w word! (unless find 
words w [do something to return false here)]]
result should evaluate to false in my example
BrianH
24-Dec-2008
[3325]
For now, you want a continuation variable. Like this:

result: parse [this that bleh blah][some [set w word! (cont: unless 
find words w [[end skip]]) cont]]
Steeve
24-Dec-2008
[3326x2]
continue: none	;means continue is ok
stop: [end skip]

result: parse [this that bleh blah][some [set w word! (unless find 
words w [continue: stop]) continue]]
ahah, same idea
[unknown: 5]
24-Dec-2008
[3328x2]
Brian, I thought I tried that.
checking that one hold on.
Maxim
24-Dec-2008
[3330x2]
I was working on another idea where only THAT rule failed !
for a general failure, the above works for sure.
[unknown: 5]
24-Dec-2008
[3332]
yeah that will work Brian.  i think I was setting the word that I 
had placed at the end and that is why it failed before.
BrianH
24-Dec-2008
[3333]
That is the equivalent of the CHECK proposal.
[unknown: 5]
24-Dec-2008
[3334]
What is the Check proposal?
Maxim
24-Dec-2008
[3335]
look in:   http://www.rebol.net/wiki/Parse_Project
BrianH
24-Dec-2008
[3336]
Read the parse proposals linked above.
Maxim
24-Dec-2008
[3337]
its also a good read to know many of the "tricks" in parse   :-)
[unknown: 5]
24-Dec-2008
[3338]
By the way what I currently have been doing is setting a value to 
another word to differentiate why the parse failed - whether it was 
syntax or because of an invalid word.
Maxim
24-Dec-2008
[3339]
(of R2)
BrianH
24-Dec-2008
[3340]
I was the editor of the proposals and manager of the proposal process.
Maxim
24-Dec-2008
[3341]
I remember posting on the blogs a long time ago... its nice to see 
it was all compiled.... thanks brian !
[unknown: 5]
24-Dec-2008
[3342]
Yeah currently I would just set another value called 'flag in the 
parens and then check it after the parse was complete.  If it was 
true then I know a word wasn't found.
BrianH
24-Dec-2008
[3343]
In theory, the best proposals (I have a list in my head) will be 
able to be compiled to R2 parse rules. Tested theory :)
Maxim
24-Dec-2008
[3344x2]
the whole of the enhancements will make PARSE SOOOOOOO much more 
conscice and fun to use for advanced stuff.     :-)
I now have a real reason to want R3.
[unknown: 5]
24-Dec-2008
[3346]
I don't  know if  'Check functionality really needs to be BUILT as 
much as just communicated.
BrianH
24-Dec-2008
[3347]
Did you see my advanced example at the bottom? :)
[unknown: 5]
24-Dec-2008
[3348]
It shows the power of parse.
Maxim
24-Dec-2008
[3349]
not yet... reading it as I chat, cook and do some income tax stuff... 
I' m a bit like reichart... I've got an exec kernel in my brain  
 ;-)
[unknown: 5]
24-Dec-2008
[3350]
In fact that method I was showing is how TRETBASE will be parsing 
search criteria to ensure only acceptable words are used in the block 
that will be reduced.
BrianH
24-Dec-2008
[3351]
A lot of the workarounds require variables, which can be difficult 
to use concurrently. The proposals are all attempts to get around 
that.
[unknown: 5]
24-Dec-2008
[3352]
That idea is to put all the operators (since they are words in the 
words containers along with field names which get later set to values 
and other set-words as desired).
Maxim
24-Dec-2008
[3353]
the main thing is about the recursiveness.
[unknown: 5]
24-Dec-2008
[3354]
I do that will calling my rule inside the rule.
Maxim
24-Dec-2008
[3355]
remark has a stack which it must manage manually... proposals might 
make some of that management useless.
BrianH
24-Dec-2008
[3356]
The CHECK workaround is the easiest way to do reserved words that 
can change at runtime.
[unknown: 5]
24-Dec-2008
[3357x2]
Here is what I currently had:


rule: [some [set w word! (unless find valid-A w [flag: true]) | into 
[rule] | any-type!]] ; rule for parsing the Ablock
Actually the last part of that rule was for testing something currently.
Maxim
24-Dec-2008
[3359]
I might have a new proposal brian.  but I am reading the whol... 
to make sure its not somewhere in the current ideas.
BrianH
24-Dec-2008
[3360x3]
You would be surprised. The modifying proiposals are not going to 
be expanded though.
Still, if we missed something suggest it here first :)
I had enough trouble with someone who was making hostile changes 
without discussing them first :(

Not that your changes would be hostile, but discussing them is still 
good.