Advertisement
Guest User

Untitled

a guest
May 3rd, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. (define-syntax flower-barcket/list
  2. ;; (: list -> parsed-list)
  3. (lambda (x)
  4. (syntax-case x (|{|)
  5. [(_ ())
  6. (syntax ())]
  7. [(_ ((a ...) . rest))
  8. (syntax ((flower-barcket/list (a ...)) . (flower-barcket/list rest)))]
  9. [(_ (|{| . rest))
  10. (syntax-case (flower-barcket/read (syntax rest)) ()
  11. [(dl . rl)
  12. (syntax ((list . dl) . (flower-barcket/list rl)))])]
  13. [(_ (e . rest))
  14. (syntax (e . (flower-barcket/list rest)))])))
  15.  
  16. (define-syntax flower-barcket/read
  17. ;; (: list -> (readed-list . not-parsed-rest-list))
  18. (lambda (x)
  19. (syntax-case x (|{| |}|)
  20. [(_ ()) (error "flower-barcket/read")]
  21. [(_ (|}| . rest))
  22. (syntax (() . rest))]
  23. [(_ (|{| . rest))
  24. (syntax-case (flower-barcket/read (syntax rest)) ()
  25. [(dl . rl)
  26. (syntax-case (flower-barcket/read (syntax rl)) ()
  27. [(dl1 . rl1)
  28. (syntax (((list . dl) . dl1) . rl1))])])]
  29. [(_ ((a ...) . rest))
  30. (syntax-case (flower-barcket/read (syntax rest)) ()
  31. [(dl . rl)
  32. (syntax-case (flower-barcket/list (syntax (a ...))) ()
  33. [l
  34. (syntax ((l . dl) . rl))])])]
  35. [(_ (e . rest))
  36. (syntax-case (flower-barcket/read (syntax rest)) ()
  37. [(dl . rl)
  38. (syntax ((e . dl) . rl))])])))
  39.  
  40. (define-macro (syntax/flower-barcket/list e)
  41. (flower-barcket/list e))
  42.  
  43. ;; (syntax/flower-barcket/list
  44. ;; '({a {a b c} b {a b c} c}))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement