World: r3wp
[Parse] Discussion of PARSE dialect
older newer | first last |
Pekr 24-Dec-2009 [4740x3] | I don't probably understand usefullness of 'while at all. Because now I have to think, if my code would cause infinite loop, or not, and use 'some or 'while accordingly ... |
Running above examples, my opinion is, that in fact adding 'while was probably not a good decision. I can understand, that now we have more power - our code will not easily cause an infinite loops, but otoh you now have to think, if it can happen or not, and 'some becomes your enemy ... | |
I probably need more examples .. | |
Ladislav 25-Dec-2009 [4743x3] | The WHILE keyword is the simplest possible cycle. The rule: a: [while b] is equivalent to recursive: a: [b a] |
sorry, I meant a: [b a |] | |
More complicated rules can be easily simulated using the While keyword, the opposite isn't true. Carl's example just proves, why While is useful. | |
Fork 28-Dec-2009 [4746x3] | >> parse [1 2 3] [?? thru [integer! string!] ?? integer!] thte: [1 2 3] integer!: [2 3] == false |
What's that "thte" thing? | |
?? not initialized after first match? And secondly, how do I match thru a series of things (e.g. integer! integer!, but just wondering about the thte. ?? problem before the first match?) | |
Pekr 28-Dec-2009 [4749x2] | >> parse [1 2 3][?? thru [integer! string!] ?? integer!] thru: [1 2 3] integer!: [2 3] == false |
what do you mean by "match thru a series of things"? | |
Fork 28-Dec-2009 [4751x3] | Hm. Version: 2.100.96.2.5 I quit and restarted. |
And it stopped doing that. I'll see if I can get it to do it again. | |
Is a sequence of things one of the complex rules that you can't use in a thru? | |
BrianH 28-Dec-2009 [4754x2] | Yes. You can express a sequence of characters in a string as a string literal, but not a sequence of types in a block. You are going to need first sets and the other LL tricks for that. |
Fortunately typesets work for block parsing like bitsets do for string parsing, so first sets are easy. | |
Fork 28-Dec-2009 [4756] | >> parse [a b c] [(value: none) copy value to 3 skip to end (probe value)] [a b] == true >> parse [a b c] [(value: none) copy value thru 3 skip to end (probe value)] [a b] == true |
Pekr 28-Dec-2009 [4757] | brian - so we can use things like any-string! or other typesets to match? |
Fork 28-Dec-2009 [4758] | Should the latter be [a b c] ? |
Pekr 28-Dec-2009 [4759x3] | I would expect that ... |
>> parse [a b c][?? 3 skip ??] 3: [a b c] end!: [] == true | |
to/thru were reimplemented to allow multiple options. There are cases, where they are not supposed to work, but in above case I would regard it being a bug .... unless some guru finds a theory showing us why it should be regarded being a correct result :-) | |
BrianH 28-Dec-2009 [4762] | Fork, the fact that both of those examples work incorrectly instead of throwing an error is a bug in PARSE. It should be CureCoded. |
Fork 28-Dec-2009 [4763x3] | FYI still seeing some erratic behavior with ?? at head of the parse rule |
>> parse [a b c] [?? copy value thru 1 skip to end] co? : [a b c] == true | |
(That question mark not visible in the terminal, showed up when I pasted here) | |
BrianH 28-Dec-2009 [4766] | Seems like a Unicode to ANSI translation error. |
Fork 28-Dec-2009 [4767] | Indeterminate, e.g. just ran it again and: |
BrianH 28-Dec-2009 [4768] | But no such characters should be output by ?? |
Fork 28-Dec-2009 [4769] | >> parse [a b c] [?? copy value thru 1 skip to end] coo:: [a b c] == true |
BrianH 28-Dec-2009 [4770] | Definitely another bug. CureCode it. |
Fork 28-Dec-2009 [4771] | Well, I should find a way to reproduce it before doing that. Left a note about how getting a CureCode account didn't work the other day. |
kcollins 29-Dec-2009 [4772] | Fork, are you seeing these outputs "coo", "thte", etc. on a Linux build of R3? I have seen similar corrupted output with Linux R3 when testing TCP client code, as documented in Curecode #1322. |
Ladislav 29-Dec-2009 [4773x3] | Regarding the QUOTE keyword: the original proposal was to treat blocks as in quote [1 2] as sequences of elements, not as embedded blocks, wouldn't you prefer that behaviour? |
Re the THRU problem: you can use parse [1 2 3] [?? while [integer! block! accept | skip | reject] ?? integer!] | |
I overlooked, that you used the STRING! datatype: parse [1 2 3] [?? while [integer! string! accept | skip | reject] ?? integer!] | |
Fork 29-Dec-2009 [4776x2] | Ladislav: I didn't realize you could use "while" as the second argument to copy, I thought it only worked with to and thru... |
kcollins: I'm using OS/X, I still haven't found a way to reproduce it. Comes and goes. | |
Ladislav 29-Dec-2009 [4778x2] | COPY should accept any rule, not just the ones you mentioned |
e.g. parse [a b c] [?? copy value thru 1 skip to end] should have preferably been parse [a b c] [?? copy value 1 skip to end] | |
Pekr 30-Dec-2009 [4780] | What is the difference between BREAK and ACCEPT? Both "break" out of the rule, both with success (IMO). |
Ladislav 30-Dec-2009 [4781] | Carl made a distinction in R3 blog, but they currently work the same, as far as I can tell, so, the only difference I see is, that ACCEPT is more self-explanatory. |
Carl 31-Dec-2009 [4782x2] | Right: synonyms. |
I'm still running into some problems with PARSE... mainly from the expectation of what ANY and SOME should do. For example: >> parse "" [any [copy tmp to end]] >> tmp == "" | |
Steeve 31-Dec-2009 [4784] | what do you expect in this case ? |
Carl 31-Dec-2009 [4785x3] | In the rewrite of DECODE-CGI, that behavior of ANY forces me to write: parse "" [any [end break | copy tmp to end]] This seems wrong to me if we define ANY as a MATCHing function, not as a LOOP function. This topic has been debated a bit between a few of us, but I think it deserves more attention. |
In other words, is ANY smart about the input? If there is no input, why should it even try? Of course, in the past we've used ANY a bit like WHILE -- as a LOOPing method, not really as a MATCHing method. | |
It's a small thing, and maybe too late to change. I wanted to point it out. | |
Steeve 31-Dec-2009 [4788x2] | We have so much alternatives that i don't see this as a burden |
any [and skip copy tmp to end] any [copy tmp [skip to end]] etc... | |
older newer | first last |