You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
21 lines
619 B
Racket
21 lines
619 B
Racket
8 years ago
|
#lang br
|
||
|
(require brag/support racket/contract)
|
||
|
|
||
|
(define basic-lexer
|
||
|
(lexer-srcloc
|
||
|
[(eof) eof]
|
||
|
[whitespace (token lexeme #:skip? #t)]
|
||
|
[(from/to "rem" "\n") (token 'REM lexeme)]
|
||
|
[(:or "print" "goto" "end" "+" ":") lexeme]
|
||
|
[(:+ numeric) (token 'INTEGER (string->number lexeme))]
|
||
|
[(:or (:seq (:+ numeric) ".")
|
||
|
(:seq (:* numeric) "." (:+ numeric)))
|
||
|
(token 'DECIMAL (string->number lexeme))]
|
||
|
[(from/to "\"" "\"")
|
||
|
(token 'STRING (trim-ends "\"" lexeme "\""))]))
|
||
|
|
||
|
(provide
|
||
|
(contract-out
|
||
|
[basic-lexer
|
||
|
(input-port? . -> .
|
||
|
(or/c eof-object? string? srcloc-token?))]))
|