zoukankan      html  css  js  c++  java
  • Brainfuck解析器(Python)

    global cs
    global ip
    
    global ss
    #global sp
    
    global ds
    global bp
    
    global tab
    global out
    
    cs='++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'
    ip = 0
    
    ss = []
    #sp = 0
    
    ds = []
    bp = 0
    
    tab = 0
    out = []
    
    def tab_():
        i = tab
        stab = ''
        while i > 0:
            stab += '	'
            i -= 1
        return stab
    
    def push(var):
        global ss
        ss.append(var)
    
    def pop():
        global ss
        return ss.pop()
    
    def op_inc_val():
        global ip
        count = 0
        while True:
            op = cs[ip]            
            ip = ip + 1
            if op == '+':
                count = count + 1
            else:
                break
        l = len(ds)
        if l <= bp:
            ds.append(0)
        old = ds[bp]
        old += count
        ds[bp] = old
        print tab_()+'ds[%d] += %d                  (%d)'%(bp, count, old)
    
    def op_dec_val():
        global ip    
        count = 0
        while True:
            op = cs[ip]            
            ip = ip + 1
            if op == '-':
                count = count + 1
            else:
                break
        old = ds[bp]
        old -= count
        ds[bp] = old
        print tab_()+'ds[%d] -= %d                  (%d)'%(bp, count, old)
    
    def op_inc_dp():
        global bp
        bp = bp + 1
    
    def op_dec_dp():
        global bp
        bp = bp - 1
    
    def op_jmp_fwd():
        global tab
        global ip
        print tab_()+'while ds[%d]=%d:'%(bp, ds[bp])
        tab=tab + 1
        if ds[bp] != 0:
            curip = ip - 1
            push(curip)
        else:
            c = 1; 
            while c > 0:
                op = cs[ip]
                if op == '[':
                    c += 1
                elif op == ']':
                    c -= 1
                ip += 1
    
    def op_jmp_bck():
        global tab
        global ip
        tab = tab - 1
        if ds[bp] != 0:
            ip = pop()
    
    def op_out():
        print tab_()+'putchar(ds[%d])                  (%d)'%(bp, ds[bp])
        out.append(ds[bp])
    
    def op_in():
        print tab_()+'getchar'
    
    end = len(cs)
    while ip < end:
        op = cs[ip]
        ip = ip + 1
        if op == '+':
            ip = ip - 1
            op_inc_val()
            ip = ip - 1
        elif op == '-':
            ip = ip - 1
            op_dec_val()
            ip = ip - 1
        elif op == '>':
            op_inc_dp()
        elif op == '<':
            op_dec_dp()
        elif op == '[':
            op_jmp_fwd()
        elif op == ']':
            op_jmp_bck()
        elif op == '.':
            op_out()
        elif op == ',':
            op_in()
        else:
            print 'invalid opcode'
            break
        
    print out
    str = ''
    for c in out:
        str += '%c'%(c)
    print str
  • 相关阅读:
    顺序 | order (Flexible Box Layout)
    顶部边距 | margin-top (Basic Box Model)
    面具重复 | mask-repeat (Masking)
    面具类型 | mask-type (Masking)
    面具模型 | mask-mode (Masking)
    面具大小 | mask-size (Masking)
    面具图像 | mask-image (Masking)
    mycat 只分库,不分表,并且主从读写分离范例
    《风控模型—WOE与IV指标的深入理解应用》
    《风控模型—群体稳定性指标(PSI)深入理解应用》
  • 原文地址:https://www.cnblogs.com/qintangtao/p/7100191.html
Copyright © 2011-2022 走看看