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))
Example #2
0
    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()
Example #4
0
 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))