/
(?(DEFINE)
(?<token>
(?&identifier) | (?&boolean) | (?&number)
| (?&character) | (?&string)
| [()'`.] | \#(?:u8)?\( | ,@? )
(?<delimiter>
(?&whitespace) | (?&vertical_line)
| [()";] | $ )
(?<intraline_whitespace> [ \t] )
(?<whitespace> (?&intraline_whitespace) | (?&line_ending) )
(?<vertical_line> \| )
(?<line_ending> \n | \r\n? )
(?<comment> ;.*+ # all subsequent characters up to a line ending
| (?&nested_comment)
| \#; (?&intertoken_space) (?&datum) )
(?<nested_comment> \#\| (?&comment_text)
(?&comment_cont)*+ \|\# )
(?<comment_text> # character sequence not including #| or |#
(?: [^#|] | \#[^|] | \|[^#] )*+ )
(?<comment_cont> (?&nested_comment) (?&comment_text) )
(?<directive> \#!(?:no-)fold-case (?=(?&delimiter)) )
(?<atmosphere> (?&whitespace) | (?&comment) | (?&directive) )
(?<intertoken_space> (?&atmosphere)*+ )
(?<identifier> (?&initial) (?&subsequent)*+
| (?&vertical_line) (?&symbol_element)*+ (?&vertical_line)
| (?&peculiar_identifier) )
(?<initial> (?&letter) | (?&special_initial) )
(?<letter> [a-zA-Z] )
(?<special_initial> [!$%&*\/:<=>?^_~] )
(?<subsequent> (?&initial) | (?&digit)
| (?&special_subsequent) )
(?<digit> [0-9] )
(?<hex_digit> [0-9a-fA-F] )
(?<explicit_sign> [+-] )
(?<special_subsequent> (?&explicit_sign) | [.@] )
(?<inline_hex_escape> \\x(?&hex_scalar_value) )
(?<hex_scalar_value> [0-9a-fA-F]++ )
(?<mnemonic_escape> \\[abtnr] )
(?<peculiar_identifier> (?&explicit_sign)
| (?&explicit_sign) (?&sign_subsequent) (?&subsequent)*+
| (?&explicit_sign)? \. (?&dot_subsequent) (?&subsequent)*+ )
(?<dot_subsequent> (?&sign_subsequent) | \. )
(?<sign_subsequent> (?&initial) | (?&explicit_sign) | @ )
(?<symbol_element>
[^|\\] # any character other than vertical line or backslash
| (?&inline_hex_escape) | (?&mnemonic_escape) | \\ \| )
(?<boolean> \#t(?:rue)? | \#f(?:alse)? )
(?<character> \# \\
(?: (?&character_name) | x (?&hex_scalar_value) | . | (?&line_ending) ) )
(?<character_name> alarm | backspace | delete
| escape | newline | null | return | space | tab )
(?<string> " (?&string_element)* " )
(?<string_element> [^"\\] # any character other than " or \
| (?&mnemonic_escape)
| \\ (?: [\\"]
| (?&intraline_whitespace)* (?&line_ending)
(?&intraline_whitespace)* )
| (?&inline_hex_escape) )
(?<bytevector> \#u8\( (?&ws)? (?: (?&byte) (?&ws) )* \) )
(?<byte> (?> (?: # any exact integer between 0 and 255
(?&prefix_2) 0* (?&digit_2){1,8}
| (?&prefix_16) 0* (?&digit_16){1,2}
| (?&prefix_8) 0* (?: 0 | [1-3] (?&digit_8){0,2} | [4-7](?&digit_8)? )
| (?&prefix_10) 0*
(?: [0-9]{1,2}
| 1 [0-9]{2}
| 2 (?: [0-4][0-9] | 5[0-5] )
)
) (?=(?&delimiter)) ) )
(?<number> (?&num_2) | (?&num_8) | (?&num_16) | (?&num_10) )
# the number stack
(?<num_2> (?&prefix_2) (?&complex_2) )
(?<num_8> (?&prefix_8) (?&complex_8) )
(?<num_10> (?&prefix_10) (?&complex_10) )
(?<num_16> (?&prefix_16) (?&complex_16) )
(?<complex_2>
(?&real_2) (?:
@ (?&real_2)
| [+-] (?&ureal_2)? i
| (?&infnan) i
|
)?
| [+-] (?&ureal_2)? i
| (?&infnan) i
)
(?<complex_8>
(?&real_8) (?:
@ (?&real_8)
| [+-] (?&ureal_8)? i
| (?&infnan) i
|
)?
| [+-] (?&ureal_8)? i
| (?&infnan) i
)
(?<complex_10>
(?&real_10) (?:
@ (?&real_10)
| [+-] (?&ureal_10)? i
| (?&infnan) i
|
)?
| [+-] (?&ureal_10)? i
| (?&infnan) i
)
(?<complex_16>
(?&real_16) (?:
@ (?&real_16)
| [+-] (?&ureal_16)? i
| (?&infnan) i
|
)?
| [+-] (?&ureal_16)? i
| (?&infnan) i
)
(?<real_2> (?&sign) (?&ureal_2) | (?&infnan) )
(?<real_8> (?&sign) (?&ureal_8) | (?&infnan) )
(?<real_10> (?&sign) (?&ureal_10) | (?&infnan) )
(?<real_16> (?&sign) (?&ureal_16) | (?&infnan) )
(?<ureal_2> (?&uinteger_2) (?: \/ (?&uinteger_2) )? )
(?<ureal_8> (?&uinteger_8) (?: \/ (?&uinteger_8) )? )
(?<ureal_10> (?&uinteger_10) (?: \/ (?&uinteger_10) )?
| (?&decimal_10) )
(?<ureal_16> (?&uinteger_16) (?: \/ (?&uinteger_16) )? )
(?<decimal_10>
(?&uinteger_10) (?: \. (?&digit_10)++ )? (?&suffix)
| \. (?&digit_10)++ (?&suffix)
)
(?<uinteger_2> [01]++ )
(?<uinteger_8> [0-7]++ )
(?<uinteger_10> [0-9]++ )
(?<uinteger_16> [0-9a-fA-F]++ )
(?<prefix_2> (?&radix_2) (?&exactness) | (?&exactness) (?&radix_2) )
(?<prefix_8> (?&radix_8) (?&exactness) | (?&exactness) (?&radix_8) )
(?<prefix_10> (?&radix_10) (?&exactness) | (?&exactness) (?&radix_10) )
(?<prefix_16> (?&radix_16) (?&exactness) | (?&exactness) (?&radix_16) )
(?<infnan> [+-] (?: inf | nan ) \. 0 )
(?<suffix> (?: (?&exponent_marker) (?&sign) (?&digit_10)++ )? )
(?<exponent_marker> e )
(?<sign> [+-]? )
(?<exactness> (?:\#[ieIE])? )
(?<radix_2> \#[bB] )
(?<radix_8> \#[oO] )
(?<radix_10> (?: \#[dD] )? )
(?<radix_16> \#[xX] )
(?<digit_2> [01] )
(?<digit_8> [0-7] )
(?<digit_10> [0-9] )
(?<digit_16> [0-9a-fA-F] )
### External Representation
(?<datum> (?&simple_datum) | (?&compound_datum)
| (?&label) (?: = (?&datum) | \# ) )
(?<simple_datum> (?&boolean) | (?&number)
| (?&character) | (?&string) | (?&symbol) | (?&bytevector) )
(?<symbol> (?&identifier) )
(?<compound_datum> (?&list) | (?&vector) | (?&abbreviation) )
(?<list> \( (?&ws)? (?: (?: (?&datum) (?&ws) )+ (?: \. (?&ws) (?&datum) )? )? \) )
(?<abbreviation> (?&abbrev_prefix) (?&datum) )
(?<abbrev_prefix> ['`] | ,@? )
(?<vector> \#\( (?&ws)? (?: (?&datum) (?: (?&ws) (?&datum) )* (?&ws)? \) )
(?<label> \# (?&uinteger_10) )
(?<ws> \s++ (?: (?&comment) \s*+ )*+ | (?= [()";|] | $ ) ) )
)
(?&datum)
/
gxui