brainfuck 解释器

#include <cstdio>#include <cmath>#include <cstring>#include <ctime>#include <iostream>#include <algorithm>#include <set>#include <vector>#include <sstream>#include <queue>#include <typeinfo>#include <fstream>#include <map>typedef long long ll;using namespace std;//freopen("D.in","r",stdin);//freopen("D.out","w",stdout);#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)#define maxn 100001#define eps 1e-9const int inf=0x7fffffff;   //无限大string s;vector<char> a;int kiss;int i;void dealk(){    void deal(char c);    int start=i;    while(1)    {        i++;        if(s[i]==‘]‘)        {            if(a[kiss]==0)            {                break;            }            else            {                i=start;                continue;            }        }        deal(s[i]);    }}void deal(char c){    if(c==‘+‘)        a[kiss]++;    if(c==‘-‘)        a[kiss]--;    if(c==‘>‘)    {        kiss++;        if(kiss>=a.size())            a.push_back(0);    }    if(c==‘<‘)    {        kiss--;        if(kiss<0)        {            a.insert(a.begin(),i);            kiss=0;        }    }    if(c==‘.‘)    {        int m=a[kiss];        printf("%c",m);    }

    if(c==‘,‘)    {        char k;        scanf("%c",&k);        s[kiss]=k;    }    if(c==‘[‘)    {        dealk();    }    /*    for(int i=0;i<a.size();i++)        printf("%d",a[i]);    cout<<endl;    */}

int main(){    while(cin>>s)    {        a.push_back(0);        int kiss=0;        for(i=0;i<s.size();i++)        {            deal(s[i]);        }    }    return 0;}
时间: 2024-10-10 07:43:18

brainfuck 解释器的相关文章

Brainfuck解释器(C#)

根据维基百科上的内容随手写的一个BF解释器,输入有两个参数——程序代码.输入流,返回内容为输出流.输入.输出均为字符串. 字符 含义 C语言替换 > 指针加一 ++ptr; < 指针减一 --ptr; + 指针指向的字节的值加一 ++*ptr; - 指针指向的字节的值减一 --*ptr; . 输出指针指向的单元内容(字符内码) putchar(*ptr); , 输入内容到指针指向的单元(字符内码) *ptr=getchar(); [ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处

2017广东省红帽杯网络安全攻防大赛writeup

签到 扫码按操作即得 brian(Y) 打开题目,发现是一段字符: +++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.< ++++[ ->+++ +<]>+ +++.< ++++[ ->--- -<]>- ----- .<+++ +++[- >---- --<]> ----- ----- -.+.- ..

BrainF**k的C解释器

啦啦啦转载自coolshell.cn,作者陈皓 BF语言介绍 Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的.这种语言有时被称为brainf**k或brainf***,甚至被简称为BF.这种 语言,是一种按照“Turing complete(完整图灵机)”思想设计的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语言,BrainF**k 语言只有八种符号,所有的操作都由这八种符号的组合来完成. BF基于一个简单的机器模型,除了八个指令,这个

Brainfuck 编程语言

很偶然的机会认识到这个语言,当时在纸上对着它的 "hello world" 程序一个字符一个字符的解释了一遍,惊讶于它的设计思想.到网上查了下,记录下来. 以下是正文 : -------------------------------- Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的.由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf***,甚至被简称为BF. Müller的目标是创建一种简单的.可以用最小的编

解释器模式 Interpreter

代码例子 参考 1.解释器模式定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 说明:解释器模式设计到文法规则和抽象语法树. 2.解释器模式的结构 解释器模式包含四个角色: 1)抽象表达式(AbstractExpress):声明抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类. 2)终结符表达式(TerminalExpress):是抽象表达式的子类,实现了与文法中的终结符相关联的解释操作,句子中的每一个终结符都是该类的一个实例.

【译】使用 Python 编写虚拟机解释器

原文地址:[Making a simple VM interpreter in Python](https://csl.name/post/vm/) **更新:根据大家的评论我对代码做了轻微的改动.感谢 robin-gvx. bs4h 和 Dagur,具体代码见[这里](https://github.com/cslarsen/python-simple-vm)** Stack Machine 本身并没有任何的寄存器,它将所需要处理的值全部放入堆栈中而后进行处理.Stack Machine 虽然简

怎样写一个解释器

我这个标题起的有一些不厚道,与大神的文章同名,倒不是因为我自比大神,是因为这两个说的是同一个东西. 简单地说,这篇是我在学习了 eopl 前面三章之后,把里面课后作业的解释器的构建过程,拿出来给团队同事们介绍一遍,并且从两条最简单的语法规则开始(输入一个字符串,返回一个数字),逐步完成书中介绍的 ``let-lang'' 的全部语法: 在这个简单的解释器里面,介绍了 AST, environement, closure 等名词,会使你了解一些平时困扰你的问题,比如 pyhton 的 lambda

设计模式之解释器模式

定义:给定一个语言,定义它的方法的一种表示,并定义一个解释器.这个解释器使用该表示解释语言中的句子 结构图: 演示样例代码: public abstract class AbstractExpression { public abstract void interpret(Context context); } public class NonterminalExpression extends AbstractExpression { @Override public void interpr

python 什么是全局解释器锁GIL

什么是全局解释器锁GIL Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行.对Python 虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行. 在多线程环境中,Python 虚拟机按以下方式执行: 1. 设置GIL2. 切换到一个线程去运行3. 运行:    a. 指定数量的字节码指令,或者 b.