Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket/base
- (require racket/string
- parser-tools/lex
- (prefix-in : parser-tools/lex-sre))
- (define-tokens my-tokens (COMMENT))
- (define-empty-tokens my-empty-tokens (EOF NEWLINE))
- (define-lex-abbrevs
- [%whitespace (:or #\tab #\space #\vtab)]
- [%newline (:or #\newline (:seq #\return #\newline))]
- [%comment (:seq "//" (:* (:& (char-complement #\return)
- (char-complement #\newline))))])
- (define my-lexer
- (lexer-src-pos
- [(:+ %whitespace)
- (return-without-pos (my-lexer input-port))]
- [%newline
- (token-NEWLINE)]
- [%comment
- (token-COMMENT lexeme)]
- [(eof)
- 'EOF]))
- (define p (open-input-string " // my-comment\r\n"))
- (port-count-lines! p)
- (let loop ([result null])
- (define tok (my-lexer p))
- (if ((position-token-token tok) . eq? . 'EOF)
- (reverse (cons tok result))
- (loop (cons tok result))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement