Exemple #1
0
def read_separated_elements(reader, separator, endc):
    oldinfo = reader.set_macro_character(separator, read_separator, isterminating=True)
    try:
        return tuple(listsplit(
            read_delimited_elements(reader, endc),
            Symbol(separator)
        ))
    finally:
        reader.set_macro_character(separator, *oldinfo)
Exemple #2
0
def read_list(reader, c):
    elements = read_delimited_elements(reader, ']')
    # special case empty [] as \[]
    if len(elements) == 0:
        return (Symbol('mklist'),)
    object = elements[0]
    slice_parts = listsplit(elements[1:], Symbol(':'))
    if len(slice_parts) == 1:
        return (Symbol('subscript'), object) + tuple(slice_parts[0])
    slice = []
    for e in slice_parts:
        if len(e) == 0:
            slice.append(None)
        elif len(e) == 1:
            slice.append(e[0])
        else:
            raise NoodleSyntaxError("Invalid slice: multiple values")
    return (Symbol('subscript'), object, (Symbol('mkslice'),) + tuple(slice))