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

World: r3wp

[Parse] Discussion of PARSE dialect

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...