[racket] reader.html: documentation for complex number reading
Let's fix the docs. My current attempt is
‹exact-rationaln› ::= [‹sign›] ‹unsigned-rationaln›
‹unsigned-rationaln› ::= ‹unsigned-integern›
| ‹unsigned-integern› / ‹unsigned-integern›
‹exact-integern› ::= [‹sign›] ‹unsigned-integern›
‹unsigned-integern› ::= ‹digitn›+
Does that look right?
FWIW, there are number-parsing regexp constructions in
collects/r6rs/private/readtable.rkt (see `rx:number')
and
collects/syntax-color/racket-lexer.rkt (see `make-num')
The first, as the path suggests, is R6RS instead of Racket.
The latter is known to mishandle cases like "#x1E+2" (because "E" is
not an exponent marker for hexadecimal), but I'll push a fix for that.
And I'll fix it for extflonums, too.
At Tue, 26 Mar 2013 16:04:18 +0000, Tim Brown wrote:
> Folks,
>
> I'm trying to get a GeSHi highlighter together for racket (in support of,
> amongst other things) rosettacode.
>
> I have the regular expression below for matching racket numbers (it is
> about three characters shorter than just listing all exact and inexact
> complex numbers). However, it does not match "2+3i".
>
> According to the reader documentation:
>
> ‹exact-complexn› ::= ‹exact-rationaln› ‹sign› ‹unsigned-rationaln› i
> ‹exact-rationaln› ::= [‹sign›] ‹unsigned-rationaln›
> ‹unsigned-rationaln› ::= ‹unsigned-integern› / ‹unsigned-integern›
>
> Both the exact-rational and the unsigned-rational require both a numerator
> AND a denominator. There is no rule in the (documented) reader grammar for
> an exact-complex of:
>
> (integer | exact-rational) sign (unsigned-integer |
> unsigned-exact-rational) "i"
>
> Inexact complex is more forgiving (but with many more options).
>
> Of course, if anyone has a simpler I can use, I'd be interested.
> Or I could stick with [0-9]+
>
> Tim Brown
>
> The regex... should work with everything but: "2+3i"
>
> ((((#b)(((((#e)|(#i)))((((((((((((-)|(\+)))?)((([0-9]+)(\\/)([0-9]+)))))(((-)|(\
> +)))((([0-9]+)(\\/)([0-9]+)))(i)))|((((((-)|(\+)))?)((([0-9]+)(\\/)([0-9]+)))))|
> ((((((-)|(\+)))?)([0-9]+)))))|(((((((((((((((-)|(\+)))?)(((((((((([0-1])+)((#)*)
> ))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-1])+)((#)*)))))|(((((([0-1])+)((#)*
> )))(\\/)(((([0-1])+)((#)*)))))))(((((([sl])|([def])))((((((-)|(\+)))?)([0-9]+)))
> ))?)))))|(((((-)|(\+)))(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))))?)(((-)|(\+)))
> (((((((((((([0-1])+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-1])+)((#)
> *)))))|(((((([0-1])+)((#)*)))(\\/)(((([0-1])+)((#)*)))))))(((((([sl])|([def])))(
> (((((-)|(\+)))?)([0-9]+)))))?)))|(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))(i)))|
> ((((((((((-)|(\+)))?)(((((((((([0-1])+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.
> )?)(((([0-1])+)((#)*)))))|(((((([0-1])+)((#)*)))(\\/)(((([0-1])+)((#)*)))))))(((
> ((([sl])|([def])))((((((-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(\+)))(((inf\.0)|(
> nan\.0)|(inf\.f)|(nan\.f)))))))(@)((((((((-)|(\+)))?)(((((((((([0-1])+)((#)*)))(
> (\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-1])+)((#)*)))))|(((((([0-1])+)((#)*)))
> (\\/)(((([0-1])+)((#)*)))))))(((((([sl])|([def])))((((((-)|(\+)))?)([0-9]+)))))?
> )))))|(((((-)|(\+)))(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))))))))|((((((((-)|(
> \+)))?)(((((((((([0-1])+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-1])+
> )((#)*)))))|(((((([0-1])+)((#)*)))(\\/)(((([0-1])+)((#)*)))))))(((((([sl])|([def
> ])))((((((-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(\+)))(((inf\.0)|(nan\.0)|(inf\.
> f)|(nan\.f)))))))))))))))|(((#o)(((((#e)|(#i)))((((((((((((-)|(\+)))?)((([0-9]+)
> (\\/)([0-9]+)))))(((-)|(\+)))((([0-9]+)(\\/)([0-9]+)))(i)))|((((((-)|(\+)))?)(((
> [0-9]+)(\\/)([0-9]+)))))|((((((-)|(\+)))?)([0-9]+)))))|(((((((((((((((-)|(\+)))?
> )(((((((((([0-7])+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-7])+)((#)*
> )))))|(((((([0-7])+)((#)*)))(\\/)(((([0-7])+)((#)*)))))))(((((([sl])|([def])))((
> ((((-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(\+)))(((inf\.0)|(nan\.0)|(inf\.f)|(na
> n\.f)))))))?)(((-)|(\+)))(((((((((((([0-7])+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)
> ?)((\.)?)(((([0-7])+)((#)*)))))|(((((([0-7])+)((#)*)))(\\/)(((([0-7])+)((#)*))))
> )))(((((([sl])|([def])))((((((-)|(\+)))?)([0-9]+)))))?)))|(((inf\.0)|(nan\.0)|(i
> nf\.f)|(nan\.f)))))(i)))|((((((((((-)|(\+)))?)(((((((((([0-7])+)((#)*)))((\.)?)(
> (#)*)))|(((([0-9]+)?)((\.)?)(((([0-7])+)((#)*)))))|(((((([0-7])+)((#)*)))(\\/)((
> (([0-7])+)((#)*)))))))(((((([sl])|([def])))((((((-)|(\+)))?)([0-9]+)))))?)))))|(
> ((((-)|(\+)))(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))))(@)((((((((-)|(\+)))?)((
> (((((((([0-7])+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-7])+)((#)*)))
> ))|(((((([0-7])+)((#)*)))(\\/)(((([0-7])+)((#)*)))))))(((((([sl])|([def])))(((((
> (-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(\+)))(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.
> f)))))))))))|((((((((-)|(\+)))?)(((((((((([0-7])+)((#)*)))((\.)?)((#)*)))|(((([0
> -9]+)?)((\.)?)(((([0-7])+)((#)*)))))|(((((([0-7])+)((#)*)))(\\/)(((([0-7])+)((#)
> *)))))))(((((([sl])|([def])))((((((-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(\+)))(
> ((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))))))))))))|(((#x)(((((#e)|(#i)))((((((((
> ((((-)|(\+)))?)((([0-9]+)(\\/)([0-9]+)))))(((-)|(\+)))((([0-9]+)(\\/)([0-9]+)))(
> i)))|((((((-)|(\+)))?)((([0-9]+)(\\/)([0-9]+)))))|((((((-)|(\+)))?)([0-9]+)))))|
> (((((((((((((((-)|(\+)))?)(((((((((([0-9a-fA-F])+)((#)*)))((\.)?)((#)*)))|(((([0
> -9]+)?)((\.)?)(((([0-9a-fA-F])+)((#)*)))))|(((((([0-9a-fA-F])+)((#)*)))(\\/)((((
> [0-9a-fA-F])+)((#)*)))))))(((([sl])((((((-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(
> \+)))(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))))?)(((-)|(\+)))(((((((((((([0-9a-
> fA-F])+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-9a-fA-F])+)((#)*)))))
> |(((((([0-9a-fA-F])+)((#)*)))(\\/)(((([0-9a-fA-F])+)((#)*)))))))(((([sl])((((((-
> )|(\+)))?)([0-9]+)))))?)))|(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))(i)))|((((((
> ((((-)|(\+)))?)(((((((((([0-9a-fA-F])+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.
> )?)(((([0-9a-fA-F])+)((#)*)))))|(((((([0-9a-fA-F])+)((#)*)))(\\/)(((([0-9a-fA-F]
> )+)((#)*)))))))(((([sl])((((((-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(\+)))(((inf
> \.0)|(nan\.0)|(inf\.f)|(nan\.f)))))))(@)((((((((-)|(\+)))?)(((((((((([0-9a-fA-F]
> )+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-9a-fA-F])+)((#)*)))))|((((
> (([0-9a-fA-F])+)((#)*)))(\\/)(((([0-9a-fA-F])+)((#)*)))))))(((([sl])((((((-)|(\+
> )))?)([0-9]+)))))?)))))|(((((-)|(\+)))(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f))))))
> )))))|((((((((-)|(\+)))?)(((((((((([0-9a-fA-F])+)((#)*)))((\.)?)((#)*)))|(((([0-
> 9]+)?)((\.)?)(((([0-9a-fA-F])+)((#)*)))))|(((((([0-9a-fA-F])+)((#)*)))(\\/)(((([
> 0-9a-fA-F])+)((#)*)))))))(((([sl])((((((-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(\
> +)))(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))))))))))))|((((#d)?)(((((#e)|(#i)))
> ((((((((((((-)|(\+)))?)((([0-9]+)(\\/)([0-9]+)))))(((-)|(\+)))((([0-9]+)(\\/)([0
> -9]+)))(i)))|((((((-)|(\+)))?)((([0-9]+)(\\/)([0-9]+)))))|((((((-)|(\+)))?)([0-9
> ]+)))))|(((((((((((((((-)|(\+)))?)(((((((((([0-9])+)((#)*)))((\.)?)((#)*)))|((((
> [0-9]+)?)((\.)?)(((([0-9])+)((#)*)))))|(((((([0-9])+)((#)*)))(\\/)(((([0-9])+)((
> #)*)))))))(((((([sl])|([def])))((((((-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(\+))
> )(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))))?)(((-)|(\+)))(((((((((((([0-9])+)((
> #)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-9])+)((#)*)))))|(((((([0-9])+)(
> (#)*)))(\\/)(((([0-9])+)((#)*)))))))(((((([sl])|([def])))((((((-)|(\+)))?)([0-9]
> +)))))?)))|(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))(i)))|((((((((((-)|(\+)))?)(
> ((((((((([0-9])+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-9])+)((#)*))
> )))|(((((([0-9])+)((#)*)))(\\/)(((([0-9])+)((#)*)))))))(((((([sl])|([def])))((((
> ((-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(\+)))(((inf\.0)|(nan\.0)|(inf\.f)|(nan\
> .f)))))))(@)((((((((-)|(\+)))?)(((((((((([0-9])+)((#)*)))((\.)?)((#)*)))|(((([0-
> 9]+)?)((\.)?)(((([0-9])+)((#)*)))))|(((((([0-9])+)((#)*)))(\\/)(((([0-9])+)((#)*
> )))))))(((((([sl])|([def])))((((((-)|(\+)))?)([0-9]+)))))?)))))|(((((-)|(\+)))((
> (inf\.0)|(nan\.0)|(inf\.f)|(nan\.f)))))))))))|((((((((-)|(\+)))?)(((((((((([0-9]
> )+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-9])+)((#)*)))))|(((((([0-9
> ])+)((#)*)))(\\/)(((([0-9])+)((#)*)))))))(((((([sl])|([def])))((((((-)|(\+)))?)(
> [0-9]+)))))?)))))|(((((-)|(\+)))(((inf\.0)|(nan\.0)|(inf\.f)|(nan\.f))))))))))))
> ))))
>
> --
> | Tim Brown <tim.brown at timb.net> | M:+44(0)7771714159 | H:+44(0)1372747875 |
>
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users