Brainfuck解析器(Python)
- global cs
- global ip
- global ss
- #global sp
- global ds
- global bp
- global tab
- global out
- cs='++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'
- ip =
- ss = []
- #sp =
- ds = []
- bp =
- tab =
- out = []
- def tab_():
- i = tab
- stab = ''
- while i > :
- stab += '\t'
- i -=
- return stab
- def push(var):
- global ss
- ss.append(var)
- def pop():
- global ss
- return ss.pop()
- def op_inc_val():
- global ip
- count =
- while True:
- op = cs[ip]
- ip = ip +
- if op == '+':
- count = count +
- else:
- break
- l = len(ds)
- if l <= bp:
- ds.append()
- old = ds[bp]
- old += count
- ds[bp] = old
- print tab_()+'ds[%d] += %d (%d)'%(bp, count, old)
- def op_dec_val():
- global ip
- count =
- while True:
- op = cs[ip]
- ip = ip +
- if op == '-':
- count = count +
- 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 +
- def op_dec_dp():
- global bp
- bp = bp -
- def op_jmp_fwd():
- global tab
- global ip
- print tab_()+'while ds[%d]=%d:'%(bp, ds[bp])
- tab=tab +
- if ds[bp] != :
- curip = ip -
- push(curip)
- else:
- c = ;
- while c > :
- op = cs[ip]
- if op == '[':
- c +=
- elif op == ']':
- c -=
- ip +=
- def op_jmp_bck():
- global tab
- global ip
- tab = tab -
- if ds[bp] != :
- 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 +
- if op == '+':
- ip = ip -
- op_inc_val()
- ip = ip -
- elif op == '-':
- ip = ip -
- op_dec_val()
- ip = ip -
- 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
Brainfuck解析器(Python)的更多相关文章
- Python解析器源码加密系列之(二):一次使用标准c的FILE*访问内存块的尝试
摘要:由于近期打算修改Python解释器以实现pyc文件的加密/解密,出于保密的要求,解密之后的数据只能放在内存中,不能写入到文件中.但是后续的解析pyc文件的代码又只能接受FILE*作为入参,所以就 ...
- Python 文本解析器
Python 文本解析器 一.课程介绍 本课程讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 二.相关技术 Python:一种面向对象.解释型计算机程序设计语言,用它可以做 ...
- python模块介绍- HTMLParser 简单的HTML和XHTML解析器
python模块介绍- HTMLParser 简单的HTML和XHTML解析器 2013-09-11 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- Python爬虫(十四)_BeautifulSoup4 解析器
CSS选择器:BeautifulSoup4 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据. lxml只会局部遍历,而B ...
- Python HTML解析器BeautifulSoup(爬虫解析器)
BeautifulSoup简介 我们知道,Python拥有出色的内置HTML解析器模块——HTMLParser,然而还有一个功能更为强大的HTML或XML解析工具——BeautifulSoup(美味的 ...
- python 全栈开发,Day101(redis操作,购物车,DRF解析器)
昨日内容回顾 1. django请求生命周期? - 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者po ...
- Python 网页解析器
Python 有几种网页解析器? 1. 正则表达式 2.html.parser (Python自动) 3.BeautifulSoup(第三方)(功能比较强大) 是一个HTML/XML的解析器 4.lx ...
- Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息
本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...
随机推荐
- 获取AFP服务信息
获取AFP服务信息 如果苹果系统开放TCP 548端口,说明其开启了AFP服务.这个时候,可以使用Nmap的afp-serverinfo脚本获取对应的服务信息.获取的信息包括服务名.机器类型.AF ...
- activate-power-mode 插件 安装 设置 IDEA
作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com 可用 摇 shake 粒子 particle ...
- HDU.2829.Lawrence(DP 斜率优化)
题目链接 \(Description\) 给定一个\(n\)个数的序列,最多将序列分为\(m+1\)段,每段的价值是这段中所有数两两相乘的和.求最小总价值. \(Solution\) 写到这突然懒得写 ...
- 2845 ACM 豆子 beans
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2845 题意:吃豆子游戏 , 当你吃了一个格子的豆子 , 该格子左右两个和上下两行就不能吃了 , 输入每个格 ...
- 潭州课堂25班:Ph201805201 第十六课 正则 (课堂笔记)
import re 元字符: . ^ $ * + ? {} \ () # s = 'abcdefg' # s.find('c') # print(s.find('cd')) ## 查找 # b = s ...
- 以添加评论组件为例看angular2请求数据的处理
在NiceFish项目中,数据请求处理并没有用Promise的那一套方法,用的是Observable(观察者模式),我将其理解成生产者和消费者模式 如下简单例子:出自(https://segmentf ...
- 3dmax多个版本软件的安装包以及安装教程
这个文档具体出自哪里,我也是记不得了,需要的看下,链接如果是失效,那我也无能为力了. 免费分享,链接永久有效 2014版3D MAX链接:http://pan.baidu.com/s/1nuFr7Xv ...
- 结合MongoDB开发LBS应用(转)
原文链接:结合MongoDB开发LBS应用 简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在 ...
- c++数组的引用
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样.引用的声明方法:类型标识符 &引用名=目标变量名: 引用最大的好处就是提高函数效率以及节省空间; 关键问题一.传递引用 ...
- Java多线程学习(吐血超详细总结)(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但 ...