用JavaScript实现Brainf*ck循环

用JavaScript实现Brainf*ck循环,javascript,brainfuck,Javascript,Brainfuck,因此,i是指令指针,ptr是数据指针。 我正在努力做到这一点: [-如果数据指针处的字节为零,则不将指令指针向前移动到下一个命令,而是将其向前跳转到匹配]命令之后的命令 ]-如果数据指针处的字节非零,则不将指令指针向前移动到下一个命令,而是将其跳回匹配的[command]之后的命令 您需要正确处理[和]的嵌套。我会通过使用count变量来实现这一点。例如,当您遇到[并需要找到匹配的]时,将count初始化为1并遍历字符。当您遇到[,递增;在]上,递减。当计数为零时,您已找到匹配的括号 var

因此,
i
是指令指针,
ptr
是数据指针。 我正在努力做到这一点:

[-如果数据指针处的字节为零,则不将指令指针向前移动到下一个命令,而是将其向前跳转到匹配]命令之后的命令

]-如果数据指针处的字节非零,则不将指令指针向前移动到下一个命令,而是将其跳回匹配的[command]之后的命令


您需要正确处理
[
]
的嵌套。我会通过使用
count
变量来实现这一点。例如,当您遇到
[
并需要找到匹配的
]
时,将
count
初始化为1并遍历字符。当您遇到
[
,递增;在
]
上,递减。当
计数
为零时,您已找到匹配的括号

 var memory = new Array();
 for ( var ptr = 0; ptr < 1000; ptr++ )
    memory[ptr] = 0;
 var ptr = 0;
 var src = document.getElementById("source").value;
 for ( var i = 0; i < src.length; i++ )
 {   
    // other code
    if ( src[i] == "[" )
        if ( memory[ptr] == 0 )
        {
            for ( var j = i; j < src.length; j++ )
                if ( src[j] == "]" )
                {
                    i = j;
                    break;
                }
            continue; // so we don't enter the next if
        }
    if ( src[i] == "]" )
        if ( memory[ptr] != 0 )
            for ( var k = i; k > 0; k-- )
                if ( src[k] == "[" )
                {
                    i = k;
                    break;
                }
 }
   if ( src[i] == "[" )
        if ( memory[ptr] == 0 )
        {
            var count = 1;
            for ( var j = i + 1; j < src.length; j++ )
            {
                if ( src[j] == "[" )
                    count++;
                if ( src[j] == "]" )
                    count--;
                if ( count == 0 )
                {
                    i = j;
                    break;
                }
            }
            continue;
        }
    if ( src[i] == "]" )
        if ( memory[ptr] != 0 )
        {
            var count = 1;
            for ( var k = i - 1; k > 0; k-- )
            {
                if ( src[k] == "]" )
                    count++;
                if ( src[k] == "[" )
                    count--;
                if ( count == 0 )
                {
                    i = k;
                    break;
                }
            }
        }