Advertisement
Guest User

Untitled

a guest
May 20th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. (load-file "src/expressions.clj")
  2. (load-file "src/combinators.clj")
  3.  
  4. (def *all-chars (mapv char (range 0 128)))
  5. (def *space (+char (apply str (filter #(Character/isWhitespace %) *all-chars))))
  6. (def *letter (+char (apply str (filter #(Character/isLetter %) *all-chars))))
  7. (def *digit (+char (apply str (filter #(Character/isDigit %) *all-chars))))
  8. (def *ws (+ignore (+star *space)))
  9.  
  10. ; 1.0e123123
  11. (def *const (+map (comp Constant read-string)
  12. (+str (+seq (+opt (+char "-+")) (+str (+plus *digit)) (+char ".") (+str (+plus *digit))
  13. (+opt (+seq (+char "e") (+opt (+char "-+")) (+str (+plus *digit))))))))
  14.  
  15.  
  16. (def *basic-ops (+char "+-*/"))
  17. (def *identifier (+str (+plus (+or *letter *basic-ops))))
  18. (def *var-op (+map (comp (fn [id] (obj-id id (Variable (str id)))) symbol) *identifier))
  19.  
  20.  
  21. (declare *value)
  22. (defn *seq [begin p end] (+seqn 1 (+char begin) (+plus (+seqn 0 *ws p)) *ws (+char end)))
  23. (def *list (+map (fn [list] (apply (last list) (drop-last list))) (*seq "(" (delay *value) ")")))
  24. (def *value (+or *const *var-op *list))
  25.  
  26. (def parseObjectSuffix (+parser (+seqn 0 *ws *value *ws)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement