World: r3wp
[Parse] Discussion of PARSE dialect
older newer | first last |
BrianH 30-Sep-2009 [4143x2] | PARSE bugs, particularly new ones, are all urgent priority. This is what we're working on now. |
REMOVE doesn't advance, so STAY isn't needed. That's why I didn't mention REMOVE. | |
Maxim 30-Sep-2009 [4145] | steeve, remove is the odd case cause it returns the original position anyways, insert moves cursor past insert |
BrianH 30-Sep-2009 [4146] | CHANGE or INSERT, or rules containing productions. |
Maxim 30-Sep-2009 [4147] | I would stay A LOT with remark , stay its just a shorthand for pos: [rule] :pos but its handy :-) |
BrianH 30-Sep-2009 [4148] | No, that's AND. STAY is pos: opt [rule] :pos |
Steeve 30-Sep-2009 [4149x2] | Brian, try it with INSERT if you want, it's the same useless thing. >> parse a: "123" [STAY "456" insert "0"] a == "0123" Exactly the same thing that: >> parse a: "123" [insert "0"] a == "0123" |
STAY has no use | |
BrianH 30-Sep-2009 [4151] | You are still putting the matching rule as the stay argument, not the modifying rule. |
Steeve 30-Sep-2009 [4152x3] | hmmm.... |
i give it a try | |
oh I see... >> parse "123" [insert "0" ??] end!: "123" == false >> parse "123" [stay insert "0" ??] end!: "0123" == false | |
BrianH 30-Sep-2009 [4155] | Right now, since we don't have CHANGE, the opt aspect of STAY doesn't matter with INSERT. To have use you have to use it with rulees with productions in them. |
Steeve 30-Sep-2009 [4156] | i see a little better now |
BrianH 30-Sep-2009 [4157x2] | STAY is equivalent to OPT AND or AND OPT. |
Just like AND is the (much less annoying) equivalent of NOT NOT, in theory. | |
Steeve 30-Sep-2009 [4159] | Brian, i posted the bug, you can rewrite it now :-) |
BrianH 30-Sep-2009 [4160x2] | Cool, thanks :) |
Done. | |
Ladislav 30-Sep-2009 [4162] | the a: [stay b] rule can be rewritten as a: [b fail |] generally, I am of the opinion, that it is superfluous |
Maxim 30-Sep-2009 [4163] | many of the parse rules are shorthands for already doable things (except 'NOT and to/thru multi) |
Ladislav 30-Sep-2009 [4164] | moreover, the AND rule is usually what is desired, not the STAY rule, which is just a bug. I do not know any really meaningful use case for STAY; the above INSERT surely isn't one |
Maxim 30-Sep-2009 [4165] | remark could be rewriten using stay, and it would be much simpler to build/read. |
BrianH 30-Sep-2009 [4166] | That's why I put STAY so low on the priority list. Maxim, you are still confusing STAY and AND. |
Maxim 30-Sep-2009 [4167] | nope. |
Ladislav 30-Sep-2009 [4168] | you do not know shorthand for NOT? It may be as follows: a: [not b] is equivalent to a: [b then fail | none] |
Maxim 30-Sep-2009 [4169x4] | nope remark does what I call persistent parsing. it only moves ahead, once all INNER rules have recursively flushed themselves out. |
with inner parsing rules modifying the input and potentially triggering new parse matches. | |
cause inner rules generate parse-able content, which was not part of the original input. | |
true functional unfolding :-) | |
Ladislav 30-Sep-2009 [4173x2] | the Rebol programming wikibook contains a bunch of such idioms |
and THRU multi is even simpler: a: [thru b] is equivalent to a: [b | skip a] | |
Maxim 30-Sep-2009 [4175x2] | yep... all hard to understand and code in real life. which is why I say that the new keywords, just make it easier to parse stuff. They aren't hacks or tricks anymore, they are supported directly by the parse dialect. its like the stack handling... its just going to be MUCH simpler so use push, than tinker with your own stack. |
or rather 'USE ... sorry. | |
BrianH 30-Sep-2009 [4177] | I'm not saying STAY isn't useful, just that it is lower priority than AND because it's use is more limited. |
Maxim 30-Sep-2009 [4178] | you see the thru multi you show... is excessively hard to "see", even I look at it and have to wrap my brain against it, and its really not "obvious" |
BrianH 30-Sep-2009 [4179] | I like having STAY though, since I am one of the advanced parse users that would find use for it, like Maxim and Carl :) |
Steeve 30-Sep-2009 [4180x2] | we will see... |
A | |
Ladislav 30-Sep-2009 [4182] | as shown above, it is superfluous; the a: [b fail |] rule is exactly as simple as a: [stay b] |
BrianH 30-Sep-2009 [4183] | All of the new additions are superfluous, Ladislav. They were added to make our lives easier, not to enable stuff we couldn't do before. |
Maxim 30-Sep-2009 [4184x2] | I'm looking at this..... a: [b fail |] and its totally obscure ... I don't see it at all, I can study and eventually "understand" it, but within a 1000 line parse rule... <eek>. the way I see STAY is: [pos: b :pos] |
(speaking as a general user... not myself specifically) | |
BrianH 30-Sep-2009 [4186] | Sorry, that's still AND. STAY is [pos: opt b :pos]. |
Ladislav 30-Sep-2009 [4187] | well, I do not think, that e.g. NOT is superfluous, since it substantially simplifies the expression. This is not true for STAY. |
BrianH 30-Sep-2009 [4188] | The fact is that all of these were added to make our lives easier. Now I don't think STAY is worth the effort to implement it, but given that Carl *already has* implemented it, it it worth removing? This is regardless of the merits of AND, which are unquestioned. |
Steeve 30-Sep-2009 [4189] | NOT is very important, especially because charset can't be complemented in R3 (Actually they can, but it's a monstrous thing to add all the possible chars in a bitset, just to skip someones) |
BrianH 30-Sep-2009 [4190x2] | I agree that if we were to dump all of the enhancements but one, NOT is the one I would choose :) |
We could fix charsets too (add a complemented bit), and that would help too. | |
Steeve 30-Sep-2009 [4192] | would be useful for FIND |
older newer | first last |