syntax-color/racket-lexer: update for single-precision and extflonums
Includes a doc fix to note `+inf.t', etc.
This commit is contained in:
parent
1dcc7ca4dc
commit
5afd1b4118
|
@ -22,7 +22,9 @@ A extflonum is @bold{not} a @tech{number} in the sense of
|
||||||
A literal extflonum is written like an @tech{inexact number},
|
A literal extflonum is written like an @tech{inexact number},
|
||||||
but using an explicit @litchar{t} or @litchar{T} exponent marker (see
|
but using an explicit @litchar{t} or @litchar{T} exponent marker (see
|
||||||
@secref["parse-extflonum"]). For example, @racket[3.5t0] is an
|
@secref["parse-extflonum"]). For example, @racket[3.5t0] is an
|
||||||
extflonum.
|
extflonum. The extflonum infinities and non-a-number values are
|
||||||
|
@as-index{@racket[+inf.t]}, @as-index{@racket[-inf.t]},
|
||||||
|
and @as-index{@racket[+nan.t]}.
|
||||||
|
|
||||||
If @racket[(extflonum-available?)] produces @racket[#f], then all
|
If @racket[(extflonum-available?)] produces @racket[#f], then all
|
||||||
operations exported by @racketmodname[racket/extflonum] raise
|
operations exported by @racketmodname[racket/extflonum] raise
|
||||||
|
|
|
@ -331,7 +331,9 @@ that the digit's actual value is unknown.
|
||||||
|
|
||||||
An @tech{extflonum} has the same syntax as an @nunterm{inexact-real}
|
An @tech{extflonum} has the same syntax as an @nunterm{inexact-real}
|
||||||
that includes an @nunterm{exp-mark}, but with @litchar{t} or
|
that includes an @nunterm{exp-mark}, but with @litchar{t} or
|
||||||
@litchar{T} in place of the @nunterm{exp-mark}. A @litchar{#b}
|
@litchar{T} in place of the @nunterm{exp-mark}. In addition,
|
||||||
|
@litchar{+inf.t}, @litchar{-inf.t}, @litchar{+nan.t}, @litchar{-nan.t}
|
||||||
|
are @tech{extflonums}. A @litchar{#b}
|
||||||
(binary), @litchar{#o} (octal), @litchar{#d} (decimal), or
|
(binary), @litchar{#o} (octal), @litchar{#d} (decimal), or
|
||||||
@litchar{#x} (hexadecimal) radix specification can prefix an
|
@litchar{#x} (hexadecimal) radix specification can prefix an
|
||||||
extflonum, but @litchar{#i} or @litchar{#e} cannot, and a
|
extflonum, but @litchar{#i} or @litchar{#e} cannot, and a
|
||||||
|
|
|
@ -105,7 +105,9 @@
|
||||||
(:? "\\" "\""))]
|
(:? "\\" "\""))]
|
||||||
|
|
||||||
|
|
||||||
[special-numbers (:or (:: n a n ".0") (:: i n f ".0"))]
|
[special-numbers (:or (:: n a n ".0") (:: i n f ".0")
|
||||||
|
(:: n a n ".f") (:: i n f ".f"))]
|
||||||
|
[special-extflonums (:or (:: n a n ".t") (:: i n f ".t"))]
|
||||||
[exponent-marker (:or e s f d l)]
|
[exponent-marker (:or e s f d l)]
|
||||||
[exponent-marker16 (:or s l)]
|
[exponent-marker16 (:or s l)]
|
||||||
[sign (char-set "+-")]
|
[sign (char-set "+-")]
|
||||||
|
@ -188,14 +190,24 @@
|
||||||
(define-lex-trans make-ureal
|
(define-lex-trans make-ureal
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
((_ digit exponent-marker)
|
((_ digit exponent-marker)
|
||||||
|
(make-ureal* digit exponent-marker make-suffix))))
|
||||||
|
|
||||||
|
(define-lex-trans make-ureal*
|
||||||
|
(syntax-rules ()
|
||||||
|
((_ digit exponent-marker make-suffix)
|
||||||
(:or (make-uinteger digit)
|
(:or (make-uinteger digit)
|
||||||
(:: (make-uinteger digit) "/" (make-uinteger digit) (:? (make-suffix digit exponent-marker)))
|
(:: (make-uinteger digit) "/" (make-uinteger digit) (make-suffix digit exponent-marker))
|
||||||
(make-decimal digit exponent-marker)))))
|
(make-decimal digit exponent-marker make-suffix)))))
|
||||||
|
|
||||||
(define-lex-trans make-real
|
(define-lex-trans make-real
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
((_ digit exponent-marker)
|
((_ digit exponent-marker)
|
||||||
(:or (:: (:? sign) (make-ureal digit exponent-marker))
|
(make-real* digit exponent-marker make-suffix special-numbers))))
|
||||||
|
|
||||||
|
(define-lex-trans make-real*
|
||||||
|
(syntax-rules ()
|
||||||
|
((_ digit exponent-marker make-suffix special-numbers)
|
||||||
|
(:or (:: (:? sign) (make-ureal* digit exponent-marker make-suffix))
|
||||||
(:: (char-set "+-") special-numbers)))))
|
(:: (char-set "+-") special-numbers)))))
|
||||||
|
|
||||||
(define-lex-trans make-uinteger
|
(define-lex-trans make-uinteger
|
||||||
|
@ -204,7 +216,7 @@
|
||||||
|
|
||||||
(define-lex-trans make-decimal
|
(define-lex-trans make-decimal
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
((_ digit exponent-marker)
|
((_ digit exponent-marker make-suffix)
|
||||||
(:or (:: (make-uinteger digit) (make-suffix digit exponent-marker))
|
(:or (:: (make-uinteger digit) (make-suffix digit exponent-marker))
|
||||||
(:: "." (:+ digit) (:* "#") (make-suffix digit exponent-marker))
|
(:: "." (:+ digit) (:* "#") (make-suffix digit exponent-marker))
|
||||||
(:: (:+ digit) "." (:* digit) (:* "#") (make-suffix digit exponent-marker))
|
(:: (:+ digit) "." (:* digit) (:* "#") (make-suffix digit exponent-marker))
|
||||||
|
@ -214,6 +226,14 @@
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
((_ digit exponent-marker) (:or "" (:: exponent-marker (:? sign) (:+ digit))))))
|
((_ digit exponent-marker) (:or "" (:: exponent-marker (:? sign) (:+ digit))))))
|
||||||
|
|
||||||
|
(define-lex-trans make-extflonum-suffix
|
||||||
|
(syntax-rules ()
|
||||||
|
((_ digit exponent-marker) (:: exponent-marker (:? sign) (:+ digit)))))
|
||||||
|
|
||||||
|
(define-lex-trans make-extflonum
|
||||||
|
(syntax-rules ()
|
||||||
|
((_ digit radix)
|
||||||
|
(:: radix (make-real* digit (:or "t" "T") make-extflonum-suffix special-extflonums)))))
|
||||||
|
|
||||||
(define (ret lexeme type paren start-pos end-pos status)
|
(define (ret lexeme type paren start-pos end-pos status)
|
||||||
(values lexeme type paren (position-offset start-pos) (position-offset end-pos) status))
|
(values lexeme type paren (position-offset start-pos) (position-offset end-pos) status))
|
||||||
|
@ -321,7 +341,11 @@
|
||||||
(make-num digit2 radix2 exponent-marker)
|
(make-num digit2 radix2 exponent-marker)
|
||||||
(make-num digit8 radix8 exponent-marker)
|
(make-num digit8 radix8 exponent-marker)
|
||||||
(make-num digit10 (:? radix10) exponent-marker)
|
(make-num digit10 (:? radix10) exponent-marker)
|
||||||
(make-num digit16 radix16 exponent-marker16))
|
(make-num digit16 radix16 exponent-marker16)
|
||||||
|
(make-extflonum digit2 radix2)
|
||||||
|
(make-extflonum digit8 radix8)
|
||||||
|
(make-extflonum digit10 (:? radix10))
|
||||||
|
(make-extflonum digit16 radix16))
|
||||||
(ret lexeme 'constant #f start-pos end-pos 'datum)]
|
(ret lexeme 'constant #f start-pos end-pos 'datum)]
|
||||||
[keyword (ret lexeme 'hash-colon-keyword #f start-pos end-pos 'datum)]
|
[keyword (ret lexeme 'hash-colon-keyword #f start-pos end-pos 'datum)]
|
||||||
[str (ret lexeme 'string #f start-pos end-pos 'datum)]
|
[str (ret lexeme 'string #f start-pos end-pos 'datum)]
|
||||||
|
|
|
@ -461,8 +461,13 @@ end-string
|
||||||
(test "#|#| |# a\na" "xxxxxxxxxxx")
|
(test "#|#| |# a\na" "xxxxxxxxxxx")
|
||||||
(test "#|\n#| |# a\na" "xxxxxxxxxxxx")
|
(test "#|\n#| |# a\na" "xxxxxxxxxxxx")
|
||||||
|
|
||||||
;; Numbers (mzscheme extensions)
|
;; Numbers and extflonums
|
||||||
|
(test "1e0" "ccc")
|
||||||
|
(test "1f0" "ccc")
|
||||||
|
(test "1t0" "ccc")
|
||||||
|
(test "1.1e0" "ccccc")
|
||||||
|
(test "1.1f0" "ccccc")
|
||||||
|
(test "1.1t0" "ccccc")
|
||||||
(test "#b1.1" "ccccc")
|
(test "#b1.1" "ccccc")
|
||||||
(test "#o1.1" "ccccc")
|
(test "#o1.1" "ccccc")
|
||||||
(test "#d1.1" "ccccc")
|
(test "#d1.1" "ccccc")
|
||||||
|
@ -475,15 +480,34 @@ end-string
|
||||||
(test "#d1d+2" "cccccc")
|
(test "#d1d+2" "cccccc")
|
||||||
(test "1/2e2" "ccccc")
|
(test "1/2e2" "ccccc")
|
||||||
(test "+iNf.0" "cccccc")
|
(test "+iNf.0" "cccccc")
|
||||||
|
(test "+iNf.f" "cccccc")
|
||||||
|
(test "+iNf.t" "cccccc")
|
||||||
(test "-InF.0" "cccccc")
|
(test "-InF.0" "cccccc")
|
||||||
|
(test "-InF.f" "cccccc")
|
||||||
|
(test "-InF.t" "cccccc")
|
||||||
(test "+naN.0" "cccccc")
|
(test "+naN.0" "cccccc")
|
||||||
(test "-nAN.0" "cccccc")
|
(test "-nAN.0" "cccccc")
|
||||||
|
(test "-nAN.f" "cccccc")
|
||||||
|
(test "-nAN.t" "cccccc")
|
||||||
(test "-inf.0+1i" "ccccccccc")
|
(test "-inf.0+1i" "ccccccccc")
|
||||||
(test "1-inf.0I" "cccccccc")
|
(test "1-inf.0I" "cccccccc")
|
||||||
|
(test "1#/2" "cccc")
|
||||||
|
(test "#e#x+e#s+e@-e#l-e" "ccccccccccccccccc")
|
||||||
|
(test "1/0" "ccc")
|
||||||
|
(test "#e1" "ccc")
|
||||||
|
(test "#i1" "ccc")
|
||||||
|
(test "#e1.0+2.3l5i" "cccccccccccc")
|
||||||
|
|
||||||
;; Bad numbers
|
;; Bad numbers
|
||||||
(test "#x1E+2" "xxxxxx")
|
(test "#x1E+2" "xxxxxx")
|
||||||
(test "#x1d+2" "xxxxxx")
|
(test "#x1d+2" "xxxxxx")
|
||||||
|
(test "#e1.0+2.3l5" "xxxxxxxxxxx")
|
||||||
|
|
||||||
|
;; Bad extflonums
|
||||||
|
(test "#e1t0" "xxxxx")
|
||||||
|
(test "#i1t0" "xxxxx")
|
||||||
|
(test "1t0+2t0i" "iiiiiiii")
|
||||||
|
(test "1t0@2t0" "iiiiiii")
|
||||||
|
|
||||||
;; Keywords
|
;; Keywords
|
||||||
(test "#:" "hh")
|
(test "#:" "hh")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user