lexical-syntax.scm 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. ;; syntax tokens
  2. (define open-token #\()
  3. (define close-token #\))
  4. (define dot-token #\.)
  5. (define quote-mark-token #\')
  6. (define quasiquote-mark-token #\`)
  7. (define unquote-mark-token #\,)
  8. ;; atoms
  9. (define symbol-token
  10. `(seq (or ,alpha-class ,symbol-class)
  11. (star (or ,alpha-class ,symbol-class ,number-class))))
  12. (define number-token
  13. `(or (plus ,number-class)
  14. (seq #\# #\b (plus (or #\0 #\1)))
  15. (seq #\# #\x (plus ,hex-class))))
  16. (define boolean-token
  17. `(seq #\# (or #\t #\f)))
  18. (define character-token
  19. `(seq #\# #\\
  20. (or ,number-class ,alpha-class ,symbol-class
  21. ,reserved-symbol-class)
  22. (star (or ,number-class ,alpha-class ,symbol-class))))
  23. (define string-token
  24. `(seq #\"
  25. (star (or (or . ,(delete #\\ (delete #\" alphabet)))
  26. (seq #\\ (or #\" #\\))))
  27. #\"))
  28. ;; whitespace
  29. (define comment
  30. `(seq #\; (kleene (or . ,(delete #\newline alphabet)))
  31. #\newline))
  32. (define whitespace-token
  33. `(plus (or #\space #\newline ,comment)))