| View script | License | Download documentation as: HTML or editable |
| Download script | History | Other scripts by: brett |
[0.163] 13.39k
Documentation for: load-parse-tree.rLoad-Parse-Tree1. What is this all about?It is a function that returns nested blocks and words that represent the structure of your input, based upon parse rules that you give it. 2. How is it useful?If you have parse rules that validate some input, you can use this function to give you a REBOL representation of that input, without coding any actions in your parse rules. 2.1 How can you use the output?
3. ExampleFor example, this code: ; Parse rules
digit: charset {0123456789}
hex-digit: charset {0123456789ABCDEF}
letter: charset [#"a" - #"z" #"A" - #"Z"]
word: [some letter]
phrase: [some [word | { }]]
number: [some digit]
hex-literal: [#"$" some hex-digit]
item: [phrase | hex-literal | number | { }]
; The information we want to appear in the structure.
structure-terms: [phrase word hex-literal number]
; Define a helper function that uses functions from parse-analysis.r
get-parse-tree: func [
terms
data [string!]
/local ctx result
][
ctx: hook-parse terms
result: load-parse-tree [parse/all data [any item]] ctx
unhook-parse ctx
result
]
data: {There were 374 brown foxes and $0001 mottley one.}
print mold get-parse-tree structure-terms dataProduces this output: [
phrase [
word "There"
word "were"
]
number "374"
phrase [
word "brown"
word "foxes"
word "and"
]
hex-literal "$0001"
phrase [
word "mottley"
word "one"
]
]4. How do you use the functions?
5. When will this function not work?As for the parse-analysis.r functions on which this function is based:
Therefore the best use of this script is in an ad-hoc fashion by developers not as part of production programs. 5.1 What do you mean by dynamic parse programming?Changing the input or the rules as parse executes. If you have the skills to do this you should be able to work out if you can use this function with your dynamic parse programming. 6. About the script authorBrett Handley started programming REBOL early 2000 and maintains a site of REBOL information and scripts at: http://www.codeconscious.com/rebol/ |