[racket] reader.html: documentation for complex number reading

From: Tim Brown (tim.brown at timb.net)
Date: Tue Mar 26 12:04:18 EDT 2013

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)|(nan\.f)))))))?)(((-)|(\+)))(((((((((((([0-7])+)((#)*)))((\.)?)((#)*)))|(((([0-9]+)?)((\.)?)(((([0-7])+)((#)*)))))|(((((([0-7])+)((#)*)))(\\/)(((([0-7])+)((#)*)))))))(((((([sl])|([def])))((((((-)|(\+)))?)([0-9]+)))))?)))|(((inf\.0)|(nan\.0)|(inf\.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 |


Posted on the users mailing list.