Ejemplo n.º 1
0
def read_atom(reader):
    if IS_RPYTHON:
        int_re = '-?[0-9]+$'
        float_re = '-?[0-9][0-9.]*$'
    else:
        int_re = re.compile('-?[0-9]+$')
        float_re = re.compile('-?[0-9][0-9.]*$')
    token = reader.next()
    if re.match(int_re, token):     return MalInt(int(token))
##    elif re.match(float_re, token): return int(token)
    elif token[0] == '"':
        end = len(token)-1
        if end < 2:
            return MalStr(u"")
        else:
            s = unicode(token[1:end])
            s = types._replace(u'\\"', u'"', s)
            s = types._replace(u'\\n', u"\n", s)
            s = types._replace(u'\\\\', u"\\", s)
            return MalStr(s)
    elif token[0] == ':':           return _keywordu(unicode(token[1:]))
    elif token == "nil":            return types.nil
    elif token == "true":           return types.true
    elif token == "false":          return types.false
    else:                           return MalSym(unicode(token))
Ejemplo n.º 2
0
def read_atom(reader):
    if IS_RPYTHON:
        int_re = '-?[0-9]+$'
        float_re = '-?[0-9][0-9.]*$'
    else:
        int_re = re.compile('-?[0-9]+$')
        float_re = re.compile('-?[0-9][0-9.]*$')
    token = reader.next()
    if re.match(int_re, token):
        return MalInt(int(token))
        ##    elif re.match(float_re, token): return int(token)
    elif token[0] == '"':
        end = len(token) - 1
        if end < 2:
            return MalStr(u"")
        else:
            s = unicode(token[1:end])
            s = types._replace(u'\\"', u'"', s)
            s = types._replace(u'\\n', u"\n", s)
            s = types._replace(u'\\\\', u"\\", s)
            return MalStr(s)
    elif token[0] == ':':
        return _keywordu(unicode(token[1:]))
    elif token == "nil":
        return types.nil
    elif token == "true":
        return types.true
    elif token == "false":
        return types.false
    else:
        return MalSym(unicode(token))
Ejemplo n.º 3
0
def _pr_a_str(s, print_readably=True):
    if len(s) > 0 and s[0] == u'\u029e':
        return u':' + s[1:]
    elif print_readably:
        return u'"' + types._replace(u'\\n', u'\\n',
                        types._replace(u'\"', u'\\"',
                        types._replace(u'\\', u'\\\\', s))) + u'"'
    else:
        return s
Ejemplo n.º 4
0
def read_atom(reader):
    if IS_RPYTHON:
        int_re = '-?[0-9]+$'
        float_re = '-?[0-9][0-9.]*$'
        str_re = '"(?:[\\\\].|[^\\\\"])*"'
    else:
        int_re = re.compile('-?[0-9]+$')
        float_re = re.compile('-?[0-9][0-9.]*$')
        str_re = re.compile('"(?:[\\\\].|[^\\\\"])*"')
    token = reader.next()
    if re.match(int_re, token):
        return MalInt(int(token))
        ##    elif re.match(float_re, token): return int(token)
    elif re.match(str_re, token):
        end = len(token) - 1
        if end <= 1:
            return MalStr(u"")
        else:
            s = unicode(token[1:end])
            s = types._replace(u'\\\\', u"\u029e", s)
            s = types._replace(u'\\"', u'"', s)
            s = types._replace(u'\\n', u"\n", s)
            s = types._replace(u"\u029e", u"\\", s)
            return MalStr(s)
    elif token[0] == '"':
        types.throw_str("expected '\"', got EOF")
    elif token[0] == ':':
        return _keywordu(unicode(token[1:]))
    elif token == "nil":
        return types.nil
    elif token == "true":
        return types.true
    elif token == "false":
        return types.false
    else:
        return MalSym(unicode(token))