Advertisement
Guest User

Untitled

a guest
Sep 25th, 2013
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.90 KB | None | 0 0
  1. #lang racket/base
  2.  
  3. (require racket/string
  4. parser-tools/lex
  5. (prefix-in : parser-tools/lex-sre))
  6.  
  7. (define-tokens my-tokens (COMMENT))
  8.  
  9. (define-empty-tokens my-empty-tokens (EOF NEWLINE))
  10.  
  11. (define-lex-abbrevs
  12. [%whitespace (:or #\tab #\space #\vtab)]
  13. [%newline (:or #\newline (:seq #\return #\newline))]
  14. [%comment (:seq "//" (:* (:& (char-complement #\return)
  15. (char-complement #\newline))))])
  16.  
  17. (define my-lexer
  18. (lexer-src-pos
  19. [(:+ %whitespace)
  20. (return-without-pos (my-lexer input-port))]
  21. [%newline
  22. (token-NEWLINE)]
  23. [%comment
  24. (token-COMMENT lexeme)]
  25. [(eof)
  26. 'EOF]))
  27.  
  28. (define p (open-input-string " // my-comment\r\n"))
  29. (port-count-lines! p)
  30.  
  31. (let loop ([result null])
  32. (define tok (my-lexer p))
  33. (if ((position-token-token tok) . eq? . 'EOF)
  34. (reverse (cons tok result))
  35. (loop (cons tok result))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement