def raise_if_not_identifier(O): i = identifier_scan(code=O.value) if (i < 0 or i != len(O.value)): O.raise_error(msg="Not an identifier: %s" % repr(O.value))
def get(O, optional=False): ssl = O.ssl code = ssl.code stop = O.stop def return_none(): if (not optional): if (stop == 0): ssl.raise_syntax_error() else: ssl.raise_syntax_error(i=stop - 1) O.i = None return None if (len(O.buffer) != 0): O.i, result = O.buffer.pop(0) if (result is None): return_none() return result if (O.i is None): if (optional): return None ssl.raise_internal_error(i=stop - 1) while (O.i < stop): i_code = O.i c = code[i_code] if ("=<>".find(c) >= 0): if (code.startswith("=", i_code + 1)): O.i += 2 return tk_op(ssl=ssl, i_code=i_code, value=code[i_code:i_code + 2]) O.i += 1 return tk_op(ssl=ssl, i_code=i_code, value=c) if ("(),:+-".find(c) >= 0): O.i += 1 return tk_op(ssl=ssl, i_code=i_code, value=c) if (c == "'"): O.i += 1 return tk_string( ssl=ssl, i_code=i_code, value=ssl.strings[ssl.string_indices.index(i_code)]) if (c == "x" and code.startswith("'", i_code + 1)): O.i += 2 return tk_hexadecimal( ssl=ssl, i_code=i_code, value=ssl.strings[ssl.string_indices.index(i_code + 1)]) j = identifier_scan(code=code, start=i_code) if (j > 0): O.i = j return tk_identifier(ssl=ssl, i_code=i_code, value=code[i_code:j]) if (c == "*"): if (code.startswith("*", i_code + 1)): O.i += 2 return tk_op(ssl=ssl, i_code=i_code, value="**") O.i += 1 return tk_op(ssl=ssl, i_code=i_code, value="*") if (c == "/"): if (code.startswith("/", i_code + 1)): O.i += 2 return tk_op(ssl=ssl, i_code=i_code, value="//") if (code.startswith("=", i_code + 1)): O.i += 2 return tk_op(ssl=ssl, i_code=i_code, value="/=") O.i += 1 return tk_op(ssl=ssl, i_code=i_code, value="/") if (c == "."): return O.__after_dot(i_fld=i_code, i_dot=i_code) j = unsigned_integer_scan(code=code, start=i_code, stop=stop) if (j > 0): if (j == stop): O.i = j return tk_integer(ssl=ssl, i_code=i_code, value=code[i_code:j]) cj = code[j] if (cj == "."): if (j + 1 == stop): O.i = stop return tk_real(ssl=ssl, i_code=i_code, value=code[i_code:stop]) return O.__after_dot(i_fld=i_code, i_dot=j) if (cj == "e" or cj == "d"): k = floating_point_scan_after_exponent_char(code=code, start=j + 1, stop=stop) if (k < 0): ssl.raise_error(msg="Invalid floating-point literal", i=j + 1) O.i = k if (cj == "d"): return tk_double_precision(ssl=ssl, i_code=i_code, value=code[i_code:k]) return tk_real(ssl=ssl, i_code=i_code, value=code[i_code:k]) O.i = j return tk_integer(ssl=ssl, i_code=i_code, value=code[i_code:j]) ssl.raise_syntax_error(i=i_code) return_none()
def get(O, optional=False): ssl = O.ssl code = ssl.code stop = O.stop def return_none(): if (not optional): if (stop == 0): ssl.raise_syntax_error() else: ssl.raise_syntax_error(i=stop-1) O.i = None return None if (len(O.buffer) != 0): O.i, result = O.buffer.pop(0) if (result is None): return_none() return result if (O.i is None): if (optional): return None ssl.raise_internal_error(i=stop-1) while (O.i < stop): i_code = O.i c = code[i_code] if ("=<>".find(c) >= 0): if (code.startswith("=", i_code+1)): O.i += 2 return tk_op(ssl=ssl, i_code=i_code, value=code[i_code:i_code+2]) O.i += 1 return tk_op(ssl=ssl, i_code=i_code, value=c) if ("(),:+-".find(c) >= 0): O.i += 1 return tk_op(ssl=ssl, i_code=i_code, value=c) if (c == "'"): O.i += 1 return tk_string( ssl=ssl, i_code=i_code, value=ssl.strings[ssl.string_indices.index(i_code)]) if (c == "x" and code.startswith("'", i_code+1)): O.i += 2 return tk_hexadecimal( ssl=ssl, i_code=i_code, value=ssl.strings[ssl.string_indices.index(i_code+1)]) j = identifier_scan(code=code, start=i_code) if (j > 0): O.i = j return tk_identifier(ssl=ssl, i_code=i_code, value=code[i_code:j]) if (c == "*"): if (code.startswith("*", i_code+1)): O.i += 2 return tk_op(ssl=ssl, i_code=i_code, value="**") O.i += 1 return tk_op(ssl=ssl, i_code=i_code, value="*") if (c == "/"): if (code.startswith("/", i_code+1)): O.i += 2 return tk_op(ssl=ssl, i_code=i_code, value="//") if (code.startswith("=", i_code+1)): O.i += 2 return tk_op(ssl=ssl, i_code=i_code, value="/=") O.i += 1 return tk_op(ssl=ssl, i_code=i_code, value="/") if (c == "."): return O.__after_dot(i_fld=i_code, i_dot=i_code) j = unsigned_integer_scan(code=code, start=i_code, stop=stop) if (j > 0): if (j == stop): O.i = j return tk_integer(ssl=ssl, i_code=i_code, value=code[i_code:j]) cj = code[j] if (cj == "."): if (j + 1 == stop): O.i = stop return tk_real(ssl=ssl, i_code=i_code, value=code[i_code:stop]) return O.__after_dot(i_fld=i_code, i_dot=j) if (cj == "e" or cj == "d"): k = floating_point_scan_after_exponent_char( code=code, start=j+1, stop=stop) if (k < 0): ssl.raise_error( msg="Invalid floating-point literal", i=j+1) O.i = k if (cj == "d"): return tk_double_precision( ssl=ssl, i_code=i_code, value=code[i_code:k]) return tk_real(ssl=ssl, i_code=i_code, value=code[i_code:k]) O.i = j return tk_integer(ssl=ssl, i_code=i_code, value=code[i_code:j]) ssl.raise_syntax_error(i=i_code) return_none()