World: r3wp
[I'm new] Ask any question, and a helpful person will try to answer.
older newer | first last |
Henrik 14-May-2009 [2330] | reboltalk.com would be a possibility if it wasnt so embarassingly full of spam |
mhinson 14-May-2009 [2331] | I think one of the most confusing things about leaning Parse, is the occurance of some & any & | , and the use of [ ] the constructs are quite straight forward, but the need for [ ] etc is a raw mystery to me. |
Maxim 14-May-2009 [2332x4] | [ ] identifies rules which must ALL match as a group. |
or a roll back occurs at the start of the [ ] and tries the next rule following a "|" in the current rule (if any) | |
its pretty much the same as parens in regexp actually. | |
altme should use port 80 :-( | |
mhinson 14-May-2009 [2336x2] | it is installing non aproved applications that is the issue, and the need for a proxy config? perhaps that is covered. I may just install it I suppose. |
So the parse keeps going inside the [] till all the | are exhausted or it gets a match. then looks for the next | in the outer nesting of [] ?? | |
Maxim 14-May-2009 [2338] | almost. if one of the options match ( [option1 | option2 | option3] ) then the rule itself is considered a match and it won't attempt the other option. |
mhinson 14-May-2009 [2339] | That is what I meant to say. |
Maxim 14-May-2009 [2340] | so if the current rule is an option, then it will match too. read the "|" as: "continue if previous rule didn't match" |
mhinson 14-May-2009 [2341x4] | I read "any" matches 0 or more occurances --- I dont understand what that means in practice. it sounds like a loop perhaps? |
I can see any digit makes sense | |
but not any [long expression] | |
parse {aaa} any [[here: "a" (print here)] | [skip] ] does not work for how I imagine.. I expect it to return aaa aa a | |
Maxim 14-May-2009 [2345x5] | it simply means that the following rule won't cause the current to fail even if it doesn't match any [long expression] |
that's what it returns here... ' :-/ | |
note: above should be... parse "aaa" [any [[here: "a" (print here)] | [skip] ]] | |
any outside of parse is something else. | |
even if it's similar in intent. | |
mhinson 14-May-2009 [2350] | my first any needs to be inside the [ ... that would seem to mike it apply to the "a" |
Maxim 14-May-2009 [2351x3] | >> parse "aaa" [any [[here: "a" (print here)] | [skip] ]] aaa aa a == true |
>> parse "zaz" [any [[here: "a" (print here)] | [skip] ]] az == true | |
>> parse "zzz" [any [[here: "a" (print here)] | [skip] ]] == true | |
mhinson 14-May-2009 [2354] | that seems logica, but this does not parse {aaa} [any[here: "a" (print here)] | [skip] ] aaa aa a |
Maxim 14-May-2009 [2355] | note that the rule returns true everytime. it did not fail. |
mhinson 14-May-2009 [2356] | why does it skip in my example? |
Maxim 14-May-2009 [2357] | it doesn't... each time it hits "a" the first rule matches. |
mhinson 14-May-2009 [2358] | which moves the Parse pointer on |
Maxim 14-May-2009 [2359x2] | in your example, you have two rules, the any only applies to the first rule. the | skip basically will never be used, cause any will never fail. |
any will repeat until it doesn't match, but it still doesn't fail. | |
mhinson 14-May-2009 [2361] | & if i use data of zzz it returns false... I see why now, I think this is key to why I have been so frustrated with getting these rules to work. |
Maxim 14-May-2009 [2362] | now be carefull... the parse function returns false IF it didn't match all of the input string. |
mhinson 14-May-2009 [2363] | oh, no I dont, not if any makes it always return true |
Maxim 14-May-2009 [2364x2] | so the any actually didn't fail, and thus the skip never go to do its stuff. |
other examples. >> parse "aza" [any [here: "a" (print here)] | skip] aza == false >> parse "aza" [any [here: "a" (print here)] skip skip] aza == true | |
mhinson 14-May-2009 [2366x3] | so why did the parse return false? >> parse {zzz} [any[here: "a" (print here)] | [skip] ] == false |
is it because the skip never get called so the parse is stuck on the first position or match & parse needs to move to the tail to return true? | |
I need to dream about this EVERY night. | |
Maxim 14-May-2009 [2369x2] | yep. it hit the "z" stopped (but didn't "fail") so the skip isn't reached. |
the second example, both skip ARE evaluated, thus it returns true. | |
mhinson 14-May-2009 [2371] | Maxim, you are a very patient teacher. |
Maxim 14-May-2009 [2372x2] | :-) I missed such a big feature of rebol for sooo long, just because I didn't get these nuances. and its hard to make a tutorial out of this, cause it sooooo boring, and you don't realize why its so important until you really start to use parse. |
btw, I keep logging off, cause the winds are wreaking havoc on the electricity lines! there is probably a loose connector on some junction and my whole house has rebooted at least 15 times in the last 2 hours :-/ | |
mhinson 14-May-2009 [2374x2] | I agree, it needs to be interactively taught. I know I will still get it wrong, but I fee more confident to analyse what is going wrong now. |
wow, are you still in the winter? Are you in Canada? | |
Maxim 14-May-2009 [2376] | all of northern usa should be affected the same way, it snowed yesterday in central canada! yet we are already at temperatures of 65-70 on average... its just clash of northern and southern winds... creating a massive disruption here. |
mhinson 15-May-2009 [2377] | Hi, I am after some advice on creating a data structure please. I read data from my file in this sort of order. disabled 2/34 2/35 vlan 3 2/35 2/48 vlan 5 2/3 2/24 name 2/1 name one 2/35 second name Then I want to export it in this sort of format. port <tab> disabled <tab> vlan <tab> name 2/1 name one 2/3 5 2/24 disabled 2/34 5 2/35 disabled 3 second name 2/48 3 I am hoping that I can create a structure that mimics the data its self. maybe like data/2/35/disabled = "disabled" data/2/35/vlan = "3" data/2/35/name = "second name" Then some how use the input data to define what part of the structure the item is recorded in. Once I have it in a structure like this I am expecting it to be simple to enumerate each part to do my export. |
Geomol 15-May-2009 [2378x2] | Use blocks. >> data: [[] [[vlan 3]]] == [[] [[vlan 3]]] >> data/2/1/vlan == 3 |
And then probably PARSE should be used to scan the input and put values in the data block structure (maybe building the structure along the way, if it's known beforehand). | |
older newer | first last |