World: r3wp
[Parse] Discussion of PARSE dialect
older newer | first last |
sqlab 6-Dec-2008 [3308] | Too many recursions. Maybe the rule is too complex or you get an infinte loop. Just show your rule and the problem. For sure someone will help. |
Davide 6-Dec-2008 [3309] | Thanks Oldes, I've tried your hint, but it made my parse rule too complex, so I've used an additional word as discriminant. Hope that R3 will improve this. |
Jerry 7-Dec-2008 [3310] | sqlab, your are right. There is an infinite loop. I am fixing it. It's a C++ parser, so the rule is very complicated. |
Maxim 24-Dec-2008 [3311x3] | paul asked: "Question for you regarding parse. How do you force parse to return false immediately without processing the rest of the string or block one it evaluates a paren?" |
example: parse/all s [some ["12345" here: (print "*" here: tail here) :here skip]] basically, in the paren, you assing the tail of the data being parsed, and force parse to move to it, then try going beyond.... the skip makes it return false, otherwise it returns true. | |
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 [3357] | 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 |
older newer | first last |