Skip to content

Sled grammar#

Context-free grammar
sled
    optional_ws_or_delimiters smap_content
    optional_ws smap optional_ws

entity
    smap
    imap
    list
    concrete

list
    '[' optional_ws_or_delimiters optional_entities ']'

smap
    '{' optional_ws_or_delimiters smap_content '}'

smap_content
    ""
    smap_pair optional_ws
    smap_pair optional_ws delimiter optional_ws_or_delimiters smap_content

smap_pair
    string optional_ws '=' optional_ws entity

imap
    '{' optional_ws_or_delimiters imap_content '}'

imap_content
    ""
    imap_pair optional_ws
    imap_pair optional_ws delimiter optional_ws_or_delimiters imap_content

imap_pair
    integer optional_ws '=' optional_ws entity

optional_entities
    ""
    entity optional_ws
    entity optional_ws delimiter optional_ws_or_delimiters optional_entities

optional_ws_or_delimiters
    ""
    optional_ws optional_ws_or_delimiters
    delimiter optional_ws_or_delimiters

delimiter
    ';'
    inclusive_line_separator

optional_ws
    ""
    horizontal_space optional_ws
    inclusive_line_separator optional_ws

inclusive_line_separator
    line_separator
    '#' comment line_separator

comment
    ""
    comment_symbol comment

comment_symbol
    '0009'
    '0020' . '10FFFF' - '007F'

line_separator
    '000A'
    '000D'
    '000D' '000A'

optional_horizontal_spaces
    ""
    horizontal_space optional_horizontal_spaces

horizontal_space
    '0020'
    '0009'

concrete
    string
    integer
    float
    "@hex" optional_ws '(' hex_content ')'
    "@true"
    "@false"
    "@nil"

string
    primitive_string
    "@concat" optional_ws '(' optional_primitive_strings ')'

optional_primitive_strings
    ""
    primitive_string optional_ws
    primitive_string optional_ws delimiter optional_ws_or_delimiters optional_primitive_strings

primitive_string
    identity_string
    '"' optional_doubly_quoted_symbols '"'
    ''' optional_singly_quoted_symbols '''

optional_doubly_quoted_symbols
    ""
    doubly_quoted_symbol optional_doubly_quoted_symbols

doubly_quoted_symbol
    quoted_symbol
    '''

optional_singly_quoted_symbol
    ""
    singly_quoted_symbol optional_singly_quoted_symbol

singly_quoted_symbol
    quoted_symbol
    '"'

quoted_symbol
    '0021' . '10FFFF' - '007F' - '"' - ''' - '\'
    '0009'
    '\' '"'
    "\'"
    "\`"
    "\n"
    "\r"
    "\t"
    "\u" '{' optional_digit_separators hex_digit optional_hex_digits '}'
    "\\"

optional_hex_digits
    ""
    '_' optional_hex_digits
    hex_digit optional_hex_digits

identity_string
    identity_start_symbol optional_identity_symbols

optional_identity_symbols
    ""
    identity_symbol optional_identity_symbols

identity_symbol
    identity_start_symbol
    '0' . '9'
    '_'
    '-'
    '+'
    '.'
    ','
    '@'

identity_start_symbol
    '0021' . '10FFFF' - '007F' - ' ' - '0' . '9' - '_' - '-' - '+' - '.' - ',' - '@' - '#' - '=' - ';' - '[' - ']' - '{' - '}' - '(' - ')' - '<' - '>' - '"' - ''' - '\'

float
    "@nan"
    "@inf"
    "@ninf"
    integer decimal_mark optional_digits optional_exponent
    integer exponent
    optional_sign optional_digits decimal_mark one_or_more_digits optional_exponent

integer
    optional_sign one_or_more_digits

decimal_mark
    '.'
    ','

hex_content
    ""
    optional_hex_separators hex_content
    hex_digit optional_hex_separators hex_digit hex_content

hex_digit
    digit
    'A' . 'F'
    'a' . 'f'

optional_hex_separators
    ""
    optional_ws optional_hex_separators
    '_' optional_hex_separators

optional_exponent
    ""
    exponent

exponent
    exponent_marker integer

exponent_marker
    'E'
    'e'

one_or_more_digits
    optional_digit_separators digit optional_digits

optional_digits
    ""
    digit digits
    '_' digits

optional_digit_separators
    ""
    '_' optional_digit_separators

digit
    '0' . '9'

optional_sign
    ""
    sign
    '_' optional_sign

sign
    '-'
    '+'