World: r3wp
[Parse] Discussion of PARSE dialect
older newer | first last |
Steeve 30-Sep-2009 [4119] | parse block [ skip ;** skip the first value not end ;** check if the block have a second value (if not, then stop) insert [ _ ] skip ;** insert what is inside [ ] before the second vlue , skip what it has been inserted, and skip one more time to pass the second value. not end ;** check if there is a third value (if not, then stop) insert [ . ] ;** insert [.] before the third value ] |
Henrik 30-Sep-2009 [4120x2] | I think I get it now, thanks. |
I wonder if we can test against a larger parse project now, such as postscript.r? | |
Steeve 30-Sep-2009 [4122] | i widely using it now, i rewrite an assembler/desassembler for Z80 |
BrianH 30-Sep-2009 [4123x2] | STAY is only useful for rules with effect: modifiers, and rules containing productions. Sometimes you need to do stuff where necessary and not care whether they were necessary later. |
We do have IF (renamed CHECK). | |
Steeve 30-Sep-2009 [4125] | It's theorical, i wonder if it's of any real use because we can do what you mean without STAY. |
BrianH 30-Sep-2009 [4126x2] | END is a keyword. This is PARSE, not DO. |
I am of the opinion that STAY is of (very) limited but significant use, but that AND is of critical, everyday use, as much as NOT. | |
Steeve 30-Sep-2009 [4128x3] | i want see the code where you demonstrate that STAY saves something. |
i'm not convinced :-) | |
i agree for AND urgency | |
BrianH 30-Sep-2009 [4131] | STAY is of use when combined with CHANGE or INSERT, when you want the parse position to be set to the position before the insert not after, and when the modification is optional, or otherwise doesn't need to be specially checked. |
Maxim 30-Sep-2009 [4132x2] | I posted on the blog about REMOVE. much prefer matching a rule. |
since we can easily do [11 skip] to simulate an index. | |
BrianH 30-Sep-2009 [4134x2] | STAY is a more efficient shortcut for OPT AND. |
Maxim, Steeve, I also prefer REMOVE 1 (my original proposal from November) and CHANGE 1. REMOVE 2 is too fiddly to satisfy the bug-reduction purpose of the CHANGE and REMOVE proposals. | |
Maxim 30-Sep-2009 [4136] | I think carl also prefers it, especially since he wrote as a pre rule, so it needs no explicit blocks on simple rues. :-) |
Steeve 30-Sep-2009 [4137] | Maxim, Did you miss the more recent note where Carl announces that your preference has been implemented in a84 ? |
BrianH 30-Sep-2009 [4138] | About that bug: CureCode it. I'm serious, post it ASAP. |
Steeve 30-Sep-2009 [4139] | Which bug ? |
BrianH 30-Sep-2009 [4140] | remove copy |
Maxim 30-Sep-2009 [4141] | yep... I read it just after posting :-) |
Steeve 30-Sep-2009 [4142] | Brian, you said: STAY is of use when combined with CHANGE or INSERT, when you want the parse position to be set to the position before the insert not after, and when the modification is optional, or otherwise doesn't need to be specially checked. you mean something like: parse [...][ STAY rule remove something] but it's the same thing that: parse [...] [remove something] i don't see your point, give an example please. |
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] |
older newer | first last |