Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (load-file "src/expressions.clj")
- (load-file "src/combinators.clj")
- (def *all-chars (mapv char (range 0 128)))
- (def *space (+char (apply str (filter #(Character/isWhitespace %) *all-chars))))
- (def *letter (+char (apply str (filter #(Character/isLetter %) *all-chars))))
- (def *digit (+char (apply str (filter #(Character/isDigit %) *all-chars))))
- (def *ws (+ignore (+star *space)))
- ; 1.0e123123
- (def *const (+map (comp Constant read-string)
- (+str (+seq (+opt (+char "-+")) (+str (+plus *digit)) (+char ".") (+str (+plus *digit))
- (+opt (+seq (+char "e") (+opt (+char "-+")) (+str (+plus *digit))))))))
- (def *basic-ops (+char "+-*/"))
- (def *identifier (+str (+plus (+or *letter *basic-ops))))
- (def *var-op (+map (comp (fn [id] (obj-id id (Variable (str id)))) symbol) *identifier))
- (declare *value)
- (defn *seq [begin p end] (+seqn 1 (+char begin) (+plus (+seqn 0 *ws p)) *ws (+char end)))
- (def *list (+map (fn [list] (apply (last list) (drop-last list))) (*seq "(" (delay *value) ")")))
- (def *value (+or *const *var-op *list))
- (def parseObjectSuffix (+parser (+seqn 0 *ws *value *ws)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement