2

i指令指针和ptr数据指针也是如此。我正在努力解决这个问题:

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

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

 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;
                }
 }

一切正常,但尝试使用循环的 Hello World 示例会产生错误的输出,[并且]在某处搞砸了。

关于如何修复循环的任何建议?

编辑

以下是修改后if的 s 以及建议的嵌套处理程序,它现在可以正确执行 Hello World 示例。

   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;
                }
            }
        }
4

1 回答 1

2

您需要正确处理[and的嵌套]。我会通过有一个count变量来做到这一点。比如遇到a [,需要找匹配的],初始化count为1,遍历字符。当你遇到 a[时,增加它;在 a 上],减少它。当count命中为零时,您已找到匹配的括号。

于 2015-01-04T00:40:54.890 回答