Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: Parse learning problem (simple)

From: Tom::Conlin::gmail::com at: 29-Nov-2007 22:26

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"]