Joe Solinsky wrote:
> Hello,
> 
> I would very much like to write a trivial parser that will consume the 
> following format
> 
> letter: charset [#"a" - #"z" #"A" - #"Z"]
> digit: charset [#"0" - #"9"]
> letter-or-digit: union letter digit
> valid-name: [letter any letter-or-digit]
> params: [valid-name | valid-name "," params]
> function-rule: [valid-name "(" params ")" ]
> 
> and recognize the following input:
> 
> parse "person(fred)" function-rule
> parse "buys(fred,shoes)" function-rule
> 
> I would also dearly like to change function-rule and params 
 > to capture and store the "valid-name" values, related to each other.
> As usual, REBOL syntax is more "powerful" than I can understand.
> 
> Also, a commentary question: I'm exploring first-order logic.  
 > Is REBOL a poor choice over Prolog for this?
> 
> Thanks for your input.
> -Joe Solinsky

store: copy []
letter: charset [#"a" - #"z" #"A" - #"Z"]
digit: charset [#"0" - #"9"]
alphanum: union letter digit
valid-name: [letter any alphanum]
params: [
        copy token valid-name
        (insert/only tail store token)
        opt ["," params]
]
function-rule: [
        copy token valid-name
        (insert/only tail store token)
        "(" params ")"
]
;;; use /all whenever you make a block rule
parse/all "person(fred)" function-rule
parse/all "buys(fred,shoes)" function-rule
probe store
== ["person" "fred" "buys" "fred" "shoes"]




-- 
To unsubscribe from the list, just send an email to 
lists at rebol.com with unsubscribe as the subject.

Reply via email to