Advertisement
Guest User

Untitled

a guest
May 12th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (def convertTo
  2.   (let
  3.     [*all-chars (mapv char (range 0 128))
  4.      *negate (+seqf (constantly "negate") (+char "n") (+char "e") (+char "g") (+char "a") (+char "t") (+char "e"))
  5.      *letter (+char (apply str (filter #(Character/isLetter %) *all-chars)))
  6.      *digit (+char (apply str (filter #(Character/isDigit %) *all-chars)))
  7.      *space (+char (apply str (filter #(Character/isWhitespace %) *all-chars)))
  8.      *ws (+ignore (+star *space))
  9.      *number (+map read-string (+str (+plus (+or *digit (+char "-.")))))
  10.      *identifier (+str (+seqf cons (+char "+-/*") (+star (+or *letter *digit))))]
  11.     (letfn [(*seq [begin p end]
  12.               (+seqn 1 (+char begin) (+opt (+seqf cons *ws p (+star (+seqn 1 (+char " ") *ws p)))) *ws (+char end)))
  13.             (*array [] (*seq "(" (delay (*value)) ")"))
  14.             (*value [] (+or *negate *number *letter  (*array) *identifier))]
  15.       (+parser (+seqn 0 *ws (*value) *ws)))))
  16.  
  17.  
  18. (defn parseSuffix [expression]
  19.   (cond
  20.     (number? expression) (Constant expression)
  21.     (char? expression) (Variable (str expression))
  22.     (symbol? (last expression)) (apply (operationsMap (last expression)) (map parseSuffix (butlast expression)))
  23.     :else (apply (operationsMap (if (symbol? (last expression)) (last expression) (read-string (last expression)))) (map parseSuffix (butlast expression)))
  24.     )
  25.   )
  26.  
  27. (defn parseObjectSuffix [expression] (parseSuffix (convertTo expression)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement