最近比较流行的程序员招租 brainfuck的代码 用java写了个解释器

来源:互联网 发布:免费空间可绑定域名 编辑:程序博客网 时间:2024/04/28 12:53

最近无聊 逛社交 看到个比较火的程序员招租的代码如++++++[+++>+++++++>++++++<<-]++.>---.>(我是随便贴的代码 不知道会翻译成什么样子) 翻译成联系方式。

brainfuck是一种比较简单的动态语言,这种语言只有八种状态构成如下图:(详见百度百科)

“[ ]“内部实际上是一个循环


下面是这种语言的java解释器

import java.io.IOException;/** * project Interpreter * package PACKAGE_NAME * Created by xsm on 2016/7/29. */public class Interpreter {    private byte[] data = new byte[3000];    private int point;    private int index;    public void run(String src) {        run(src, src.length());    }    public void run(String src, int end){        while (index < end){            switch (src.charAt(index)) {                case '+':                    data[point]++;                    break;                case '-':                    data[point]--;                    break;                case '>':                    point++;                    break;                case '<':                    point--;                    break;                case '[':                    int temp = index;                    int count = 0;                    int e = index+1;                    while (count != 0 || src.charAt(e) != ']') {                        if (src.charAt(e) == '[') {                            count++;                        }                        if (src.charAt(e) == ']') {                            count--;                        }                        e++;                    }                    while (data[point] != 0) {                        index = temp + 1;                        run(src, e);                    }                    break;                case ']':                    break;                case ',':                    try {                        data[point] = (byte) System.in.read();                    } catch (IOException ex) {                        ex.printStackTrace();                    }                    break;                case '.':                    System.out.printf("%c", data[point]);                    break;            }            index++;        }    }}

打印输出

/** * project Interpreter * package PACKAGE_NAME * Created by xsm on 2016/7/29. */public class Demo {    public static void main(String[] args) {        String src = "++++++++++[>+++++>++++++>+++++<<<-]>+++++.>---.-.>-.++.++.----.-.<+.";        Interpreter interpreter = new Interpreter();        interpreter.run(src);        System.out.println("   aa");    }}
解释器代码中switch语句里,遇到 “ [ ”说明进入到了一个循环里面,在这个循环里面可能还会遇到 “ [ ”,因此需要用到递归调用。遇到 “ ] ”说明最近的一个循环结束,直接执行brack语句。

0 0
原创粉丝点击