World: r3wp
[Parse] Discussion of PARSE dialect
older newer | first last |
Steeve 27-Jun-2007 [2033] | have you tested ? doesn't work at all for many cases |
Brock 27-Jun-2007 [2034x3] | >> parse "BC" [[rule] [rule] [rule]] == false |
>> parse "ABC" [[rule] [rule] [rule]] == true | |
>> parse "BBC" [[rule] [rule] [rule]] == false | |
Steeve 27-Jun-2007 [2037x2] | parse "CBA" = false |
in any order, i said | |
Brock 27-Jun-2007 [2039] | damn, doesn't handle the varying order of elements |
Steeve 27-Jun-2007 [2040] | :-) |
btiffin 27-Jun-2007 [2041] | Yeah, this problem needs to allow alternatives and then remove them (or Steeve's counter) |
Steeve 27-Jun-2007 [2042x5] | agree |
but i'ts not very elegant | |
and i have such rules like this | |
sniff | |
so i have to build a pre-parser to transform rules in an elegant maner | |
btiffin 27-Jun-2007 [2047] | I'm still slowly backing out of the room...but I would not be completely surprised if another rebol gives you a "tada" solution...but I'd bet less money now. :) |
Steeve 27-Jun-2007 [2048] | hihi |
Brock 27-Jun-2007 [2049] | well, I'm stumped. Tried many variations on the theme and couldn't get any to work. Good luck. |
Chris 28-Jun-2007 [2050] | Basically you're asking for [all ["A" | "B" | "C"]] --> ABC = true BAC = true BBC = false ABCB = false |
btiffin 28-Jun-2007 [2051] | I think Steeve just left...but yep he wants a once and once only in any order |
Steeve 28-Jun-2007 [2052x3] | i'm here |
yeah Chris you got the thing | |
assuming "A" "B" and "C" could be more complex rules | |
Chris 28-Jun-2007 [2055] | You may want to check Gabriele's 'compile rules' to see if this has been solved. I have another solution, but needs hashed out a little. |
Steeve 28-Jun-2007 [2056] | i know how to build a complex solution but i would prefer a new word in the dialect , if other peoples think it's a good improvment |
Chris 28-Jun-2007 [2057] | I think so -- it's a common enough pattern... |
Gabriele 28-Jun-2007 [2058x3] | .333 |
sorry, cat on keyboard :) | |
unfortunately the cat did not type a useful parse rule. | |
Steeve 28-Jun-2007 [2061] | huhu |
Chris 28-Jun-2007 [2062] | I thought the zen answer was imminent... |
Gabriele 28-Jun-2007 [2063x3] | steve - not sure this should be a new dialect word, since it is a very specific case. basically you want all permutations of a set of rules. |
the simplest way may be to just generate all the permutations. | |
that is, parse string [a b c | a c b | c a b | c b a | b c a | b a c] | |
Steeve 28-Jun-2007 [2066] | i give another one example: imagine you have a dialect which describes a rectangle with coordinates length and color. You could write [rectangle 10x20 300 red] but [rectangle 30 red 10x20] should be correct too (and other combinations). So a parser should handle this with not too much complication. |
Gabriele 28-Jun-2007 [2067x2] | that can also be written as: parse string [a [b c | c b] | b [c a | a c] | c [b a | a b]] (faster) |
steve, we do that all the time, and we just take the last value when it is put more than once. | |
Chris 28-Jun-2007 [2069] | Steeve: In that situation, you have a little discretion to ignore excess attributes, as VID does. |
Steeve 28-Jun-2007 [2070] | but what if i have 10 rules to complete ? |
Gabriele 28-Jun-2007 [2071x2] | that is, two pairs is not an error, the parser just ignores one. if vid errored out it would be worse. |
you make a function that taken a list of rules generates all the permutations. | |
Steeve 28-Jun-2007 [2073x3] | ok, it was a bas example |
*bad | |
yes Gabriele, it's what i do currently | |
Chris 28-Jun-2007 [2076] | Not bad, we're just forgiving here : ) |
Steeve 28-Jun-2007 [2077] | but it's uggly |
Gabriele 28-Jun-2007 [2078] | i don't see any better approach, because you are parsing for the permutations. |
Steeve 28-Jun-2007 [2079] | and it's become huge if i have lot of rules to combinate |
Gabriele 28-Jun-2007 [2080x2] | if you use the above approach (second example i wrote) it is reasonably fast. |
otherwise, you need self-modifying rules, or use flags. | |
Steeve 28-Jun-2007 [2082] | yes we talked about other solutions |
older newer | first last |