1. global cs
  2. global ip
  3.  
  4. global ss
  5. #global sp
  6.  
  7. global ds
  8. global bp
  9.  
  10. global tab
  11. global out
  12.  
  13. cs='++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'
  14. ip =
  15.  
  16. ss = []
  17. #sp =
  18.  
  19. ds = []
  20. bp =
  21.  
  22. tab =
  23. out = []
  24.  
  25. def tab_():
  26. i = tab
  27. stab = ''
  28. while i > :
  29. stab += '\t'
  30. i -=
  31. return stab
  32.  
  33. def push(var):
  34. global ss
  35. ss.append(var)
  36.  
  37. def pop():
  38. global ss
  39. return ss.pop()
  40.  
  41. def op_inc_val():
  42. global ip
  43. count =
  44. while True:
  45. op = cs[ip]
  46. ip = ip +
  47. if op == '+':
  48. count = count +
  49. else:
  50. break
  51. l = len(ds)
  52. if l <= bp:
  53. ds.append()
  54. old = ds[bp]
  55. old += count
  56. ds[bp] = old
  57. print tab_()+'ds[%d] += %d (%d)'%(bp, count, old)
  58.  
  59. def op_dec_val():
  60. global ip
  61. count =
  62. while True:
  63. op = cs[ip]
  64. ip = ip +
  65. if op == '-':
  66. count = count +
  67. else:
  68. break
  69. old = ds[bp]
  70. old -= count
  71. ds[bp] = old
  72. print tab_()+'ds[%d] -= %d (%d)'%(bp, count, old)
  73.  
  74. def op_inc_dp():
  75. global bp
  76. bp = bp +
  77.  
  78. def op_dec_dp():
  79. global bp
  80. bp = bp -
  81.  
  82. def op_jmp_fwd():
  83. global tab
  84. global ip
  85. print tab_()+'while ds[%d]=%d:'%(bp, ds[bp])
  86. tab=tab +
  87. if ds[bp] != :
  88. curip = ip -
  89. push(curip)
  90. else:
  91. c = ;
  92. while c > :
  93. op = cs[ip]
  94. if op == '[':
  95. c +=
  96. elif op == ']':
  97. c -=
  98. ip +=
  99.  
  100. def op_jmp_bck():
  101. global tab
  102. global ip
  103. tab = tab -
  104. if ds[bp] != :
  105. ip = pop()
  106.  
  107. def op_out():
  108. print tab_()+'putchar(ds[%d]) (%d)'%(bp, ds[bp])
  109. out.append(ds[bp])
  110.  
  111. def op_in():
  112. print tab_()+'getchar'
  113.  
  114. end = len(cs)
  115. while ip < end:
  116. op = cs[ip]
  117. ip = ip +
  118. if op == '+':
  119. ip = ip -
  120. op_inc_val()
  121. ip = ip -
  122. elif op == '-':
  123. ip = ip -
  124. op_dec_val()
  125. ip = ip -
  126. elif op == '>':
  127. op_inc_dp()
  128. elif op == '<':
  129. op_dec_dp()
  130. elif op == '[':
  131. op_jmp_fwd()
  132. elif op == ']':
  133. op_jmp_bck()
  134. elif op == '.':
  135. op_out()
  136. elif op == ',':
  137. op_in()
  138. else:
  139. print 'invalid opcode'
  140. break
  141.  
  142. print out
  143. str = ''
  144. for c in out:
  145. str += '%c'%(c)
  146. print str

Brainfuck解析器(Python)的更多相关文章

  1. Python解析器源码加密系列之(二):一次使用标准c的FILE*访问内存块的尝试

    摘要:由于近期打算修改Python解释器以实现pyc文件的加密/解密,出于保密的要求,解密之后的数据只能放在内存中,不能写入到文件中.但是后续的解析pyc文件的代码又只能接受FILE*作为入参,所以就 ...

  2. Python 文本解析器

    Python 文本解析器 一.课程介绍 本课程讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 二.相关技术 Python:一种面向对象.解释型计算机程序设计语言,用它可以做 ...

  3. python模块介绍- HTMLParser 简单的HTML和XHTML解析器

    python模块介绍- HTMLParser 简单的HTML和XHTML解析器 2013-09-11 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq ...

  4. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  5. Python爬虫(十四)_BeautifulSoup4 解析器

    CSS选择器:BeautifulSoup4 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据. lxml只会局部遍历,而B ...

  6. Python HTML解析器BeautifulSoup(爬虫解析器)

    BeautifulSoup简介 我们知道,Python拥有出色的内置HTML解析器模块——HTMLParser,然而还有一个功能更为强大的HTML或XML解析工具——BeautifulSoup(美味的 ...

  7. python 全栈开发,Day101(redis操作,购物车,DRF解析器)

    昨日内容回顾 1. django请求生命周期? - 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者po ...

  8. Python 网页解析器

    Python 有几种网页解析器? 1. 正则表达式 2.html.parser (Python自动) 3.BeautifulSoup(第三方)(功能比较强大) 是一个HTML/XML的解析器 4.lx ...

  9. Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息

    本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...

随机推荐

  1. 获取AFP服务信息

    获取AFP服务信息   如果苹果系统开放TCP 548端口,说明其开启了AFP服务.这个时候,可以使用Nmap的afp-serverinfo脚本获取对应的服务信息.获取的信息包括服务名.机器类型.AF ...

  2. activate-power-mode 插件 安装 设置 IDEA

    作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com 可用 摇 shake 粒子 particle ...

  3. HDU.2829.Lawrence(DP 斜率优化)

    题目链接 \(Description\) 给定一个\(n\)个数的序列,最多将序列分为\(m+1\)段,每段的价值是这段中所有数两两相乘的和.求最小总价值. \(Solution\) 写到这突然懒得写 ...

  4. 2845 ACM 豆子 beans

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2845 题意:吃豆子游戏 , 当你吃了一个格子的豆子 , 该格子左右两个和上下两行就不能吃了 , 输入每个格 ...

  5. 潭州课堂25班:Ph201805201 第十六课 正则 (课堂笔记)

    import re 元字符: . ^ $ * + ? {} \ () # s = 'abcdefg' # s.find('c') # print(s.find('cd')) ## 查找 # b = s ...

  6. 以添加评论组件为例看angular2请求数据的处理

    在NiceFish项目中,数据请求处理并没有用Promise的那一套方法,用的是Observable(观察者模式),我将其理解成生产者和消费者模式 如下简单例子:出自(https://segmentf ...

  7. 3dmax多个版本软件的安装包以及安装教程

    这个文档具体出自哪里,我也是记不得了,需要的看下,链接如果是失效,那我也无能为力了. 免费分享,链接永久有效 2014版3D MAX链接:http://pan.baidu.com/s/1nuFr7Xv ...

  8. 结合MongoDB开发LBS应用(转)

    原文链接:结合MongoDB开发LBS应用 简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在 ...

  9. c++数组的引用

    引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样.引用的声明方法:类型标识符 &引用名=目标变量名: 引用最大的好处就是提高函数效率以及节省空间; 关键问题一.传递引用 ...

  10. Java多线程学习(吐血超详细总结)(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但 ...