tinypy中缩进的处理

先贴上代码


主程序

def do_tokenize(s):
    global T
    T,i,l = TData(),0,len(s)
    T.f = (T.y,i-T.yi+1)
    while i < l:
        c = s[i]; T.f = (T.y,i-T.yi+1)
        if T.nl: T.nl = False; i = do_indent(s,i,l)
        elif c == '\n': i = do_nl(s,i,l)
        elif c in ISYMBOLS: i = do_symbol(s,i,l)
        elif c >= '0' and c <= '9': i = do_number(s,i,l)
        elif (c >= 'a' and c <= 'z') or \
            (c >= 'A' and c <= 'Z') or c == '_':  i = do_name(s,i,l)
        elif c=='"' or c=="'": i = do_string(s,i,l)
        elif c=='#': i = do_comment(s,i,l)
        elif c == '\\' and s[i+1] == '\n':
            i += 2; T.y,T.yi = T.y+1,i
        elif c == ' ' or c == '\t': i += 1
        else: u_error('tokenize',s,T.f)
    indent(0)
    r = T.res; T = None
    return r

处理缩进程序

def do_indent(s,i,l):
    v = 0
    while i<l:
        c = s[i]
        if c != ' ' and c != '\t': break
        i,v = i+1,v+1
    if c != '\n' and c != '#' and not T.braces: indent(v)
    return i

def indent(v):
    if v == T.indent[-1]: pass
    elif v > T.indent[-1]:
        T.indent.append(v)
        T.add('indent',v)
    elif v < T.indent[-1]:
        n = T.indent.index(v)
        while len(T.indent) > n+1:
            v = T.indent.pop()
            T.add('dedent',v)


这里主程序只看

if T.nl: T.nl = False; i = do_indent(s,i,l)

这一行

nl是new line代表遇到换行符进行缩进判断


然后看do_indent方法可以看出是通过记录空格或tab的个数,然后使用indent函数与indent集合对比,判断当前代码行属于哪个程序块,T.add函数是添加一个标识符的类型和值。

结果就在这里发现的以前所不知道的:

python缩进是通过判断空格和tab个数来实现的,并不是强制规定4个空格或一个tab的!!!

难道是tinypy为了省事才这样?

用标准python2.x检测一下!

可以运行!!!实在孤陋寡闻了!!!以后再也不用担心循环嵌套太深了!!!对于过于深层的嵌套可以考虑使用2个空格的缩进,当然,过深的嵌套本省就有进一步优化的必要。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值