1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #lang br (require brag/support) (define-lex-abbrev digits (:+ (char-set "0123456789"))) (define basic-lexer (lexer-srcloc ["\n" (token 'NEWLINE lexeme)] [whitespace (token lexeme #:skip? #t)] [(from/stop-before "rem" "\n") (token 'REM lexeme)] [(:or "print" "goto" "end" "+" ":" ";") (token lexeme lexeme)] [digits (token 'INTEGER (string->number lexeme))] [(:or (:seq (:? digits) "." digits) (:seq digits ".")) (token 'DECIMAL (string->number lexeme))] [(:or (from/to "\"" "\"") (from/to "'" "'")) (token 'STRING (substring lexeme 1 (sub1 (string-length lexeme))))])) (provide basic-lexer) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #lang br/quicklang (require "parser.rkt" "tokenizer.rkt") (module+ reader (provide read-syntax get-info)) (define (read-syntax path port) (define parse-tree (parse path (make-tokenizer port path))) (strip-bindings #`(module basic-mod basic/expander #,parse-tree))) (define (get-info port src-mod src-line src-col src-pos) (define (handle-query key default) (case key [(color-lexer) (dynamic-require 'basic/colorer 'basic-colorer)] [else default])) handle-query) |
1 2 3 4 5 6 7 8 9 10 11 12 | #lang br (require "lexer.rkt" brag/support) (provide basic-colorer) (define (basic-colorer port) (define (handle-lexer-error excn) (define excn-srclocs (exn:fail:read-srclocs excn)) (srcloc-token (token 'ERROR) (car excn-srclocs))) (define srcloc-tok (with-handlers ([exn:fail:read? handle-lexer-error]) (basic-lexer port))) ···) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #lang br (require "lexer.rkt" brag/support) (provide basic-colorer) (define (basic-colorer port) (define (handle-lexer-error excn) (define excn-srclocs (exn:fail:read-srclocs excn)) (srcloc-token (token 'ERROR) (car excn-srclocs))) (define srcloc-tok (with-handlers ([exn:fail:read? handle-lexer-error]) (basic-lexer port))) (match srcloc-tok [(? eof-object?) (values srcloc-tok 'eof #f #f #f)] [else ···])) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #lang br (require "lexer.rkt" brag/support) (provide basic-colorer) (define (basic-colorer port) (define (handle-lexer-error excn) (define excn-srclocs (exn:fail:read-srclocs excn)) (srcloc-token (token 'ERROR) (car excn-srclocs))) (define srcloc-tok (with-handlers ([exn:fail:read? handle-lexer-error]) (basic-lexer port))) (match srcloc-tok [(? eof-object?) (values srcloc-tok 'eof #f #f #f)] [else (match-define (srcloc-token (token-struct type val _ _ _ _ _) (srcloc _ _ _ posn span)) srcloc-tok) ···])) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #lang br (require "lexer.rkt" brag/support) (provide basic-colorer) (define (basic-colorer port) (define (handle-lexer-error excn) (define excn-srclocs (exn:fail:read-srclocs excn)) (srcloc-token (token 'ERROR) (car excn-srclocs))) (define srcloc-tok (with-handlers ([exn:fail:read? handle-lexer-error]) (basic-lexer port))) (match srcloc-tok [(? eof-object?) (values srcloc-tok 'eof #f #f #f)] [else (match-define (srcloc-token (token-struct type val _ _ _ _ _) (srcloc _ _ _ posn span)) srcloc-tok) (define start posn) (define end (+ start span)) (match-define (list cat paren) (match type ['STRING '(string #f)] ['REM '(comment #f)] ['ERROR '(error #f)] [else (match val [(? number?) '(constant #f)] [(? symbol?) '(symbol #f)] ["(" '(parenthesis |(|)] [")" '(parenthesis |)|)] [else '(no-color #f)])])) (values val cat paren start end)])) |