World: r3wp
[Parse] Discussion of PARSE dialect
older newer | first last |
Pekr 3-May-2009 [3680x2] | Shadwolf - but that is your bug ;-) Simply put, you try to mix parse-like behaviour with how 'any behaves. 'any and 'all are just functions, so in the case of 'any it returns any true condition match, so any ["!" ";"] always returns "!", because it is evaluated as 'true. |
... so the code above behaves correctly, because in the second case your string does not contain "!" | |
Dockimbel 3-May-2009 [3682x2] | Pekr, try to run your 2) and 3) in trace mode, you'll see that there's no bug, parse rules evaluation looks consistent to me. |
In 3), the second 'break| doesn't report error because it's never evaluated. The rule fails on the first input character when trying to match "y" and 'skip is never reached. In 2), 'skip helps consuming the input until the "y" character which leads to evaluate 'break| and raises the error. | |
Pekr 3-May-2009 [3684] | yes, you might be right doc. But - it is really very difficult to track down for user. It almost looks like scanner bug, but it is not. What actually happens in the case 3) is, that "break|" is being considered a regular word, which just does not have value. Stating that, it also means that 'skip is not part of OR expression. So, 'some block fails on not matching "y" .... |
Graham 16-May-2009 [3685x3] | Here's a parse question for the experts. |
If I have a document with headings eg. a: b: .. z: and text optionally under each heading ... would it be possible to use parse to collect all the text from each heading if the headings are in any order and some headings with no text are optionally missing? | |
Each heading can only occur once in the document. | |
Maxim 16-May-2009 [3688] | sure |
Graham 16-May-2009 [3689] | Ok, let me rephrase that .. sure it's possible, but I can imagine it would be quite complicated |
Maxim 16-May-2009 [3690x2] | now was that a question of the "can you give me the solution" kind? |
actually it can be done quite simply... depends on the headers themselves... | |
Graham 16-May-2009 [3692] | It's a little complicated because the headers can have spaces in them. |
Maxim 16-May-2009 [3693x2] | spaces add no complication to the system, as long as the headers can be identified without doubt. |
so the rule is : headers start on new line, stop at first ":" all the rest is content? | |
Graham 16-May-2009 [3695] | now if you have a rule copy text [ to "a:" | to "b:" .... ] but if b: occurs before a: in the text, then you will include a header in copied text |
Maxim 16-May-2009 [3696] | forget to and thru... they are not proper parsing. |
Graham 16-May-2009 [3697] | yes, headers start on a newline and terminate in ":" |
Maxim 16-May-2009 [3698] | and there can be no ":" within the content? |
Graham 16-May-2009 [3699x2] | No, there can be a ":" in the content |
but you know what the headers are ... so that's not a big problem. | |
Maxim 16-May-2009 [3701x2] | ok, so they are explicit... then its very easy. |
can you give the name of some the headers... or an example.... so far it looks like a really simple rule to me. | |
Graham 16-May-2009 [3703] | eg. "social history:" |
Maxim 16-May-2009 [3704x2] | and you want the output in neat blocks I guess. |
give me 1 minute | |
Graham 16-May-2009 [3706x3] | so I guess we can masks for each possible header |
^/social history: | |
or apply the rule recursively until it is false | |
Maxim 16-May-2009 [3709] | I can assume it starts at a header? |
Graham 16-May-2009 [3710x2] | might be leading newlines |
or white spaces | |
Maxim 16-May-2009 [3712] | ok, but no content or stray letters? |
Graham 16-May-2009 [3713x2] | shouldn't be yet. |
So, I am trying to create an object from a semi structured document where the object elements are in any order or missing. | |
Maxim 16-May-2009 [3715x3] | almost done... |
ok, so we replace the spaces in the headers by "-" and create an object out of all the code... | |
all the content... rather | |
Graham 16-May-2009 [3718] | I guess I can do it without using parse .. just replace all the headers with a mark, that allows me to split off all the sections, and then i can match the sections with all the section headers. |
Maxim 16-May-2009 [3719] | I'm almost done... I like these little parse tests.. It keeps my mind sharp on using parse ;-) |
Graham 16-May-2009 [3720] | But I don't need parse! :) |
Steeve 16-May-2009 [3721] | are you asleep ? :-) |
Maxim 16-May-2009 [3722] | its working but its skipping the first tag for some reason. |
Graham 16-May-2009 [3723] | Huh? just dozing ... |
Maxim 16-May-2009 [3724x2] | aaahh there is no newline on the start of the text hehehe |
graham, obviously the simplest solution is to read/lines. | |
Graham 16-May-2009 [3726] | read/lines doesn't work on text in memory AFAIK |
Maxim 16-May-2009 [3727] | and just see if the line starts with one of the headers. |
Steeve 16-May-2009 [3728] | what's the content look like ? Can't you just post an example Graham ? |
Maxim 16-May-2009 [3729] | parse text "^/" |
older newer | first last |