分组条件语句块

时间:2013-08-31 15:18:48

标签: javascript compiler-construction tree-traversal

我想在if括号内对条件stmt进行分组。说我有一个来自我的contenteditable div的文本

if ( x==1 && (x>2 || (!x>2 || x<=0)) )

我希望他们成为相应的组并存储在像这样的数组中

condFragment.push('x==1 && (x>2 || (!x>2 || x<=0))');
condFragment.push('x==1');
condFragment.push('(x>2 || (!x>2 || x<=0))');
condFragment.push('x>2');
condFragment.push('(!x>2 || x<=0)');
condFragment.push('!x>2');
condFragment.push('x>2');
condFragment.push('x<=0');

通过检测条件运算符然后将它们并排拆分来启动它是否正确?修改分割功能?请帮忙。

我正在按照这种方式对它们进行分组,因为我将在稍后获取数组并对它进行评估以显示它是真还是假。我使用push因为这可能成为动态数组。

由此:

<div id="board">
     <div>int main(){</div>
     <div></div>
     <div>if(x==1 && !x>2)</div>
     <div>statement;</div>
     <div>while(!x>5){</div>
     <div>statement;}</div>
     <div>}</div>
</div>

使用condFragment内容

来实现此目的
<div id="board">
     <div>int main(){</div>
     <div></div>
     <div>
     if(<span class="frag"><span class="frag">x==1</span> && 
     <span class="frag">!<span class="frag">x>2</span></span></span>)
     </div>
     <div>statement;</div>
     <div>while(!x>5){</div>
     <div>statement;}</div>
     <div>}</div>
</div>   

1 个答案:

答案 0 :(得分:1)

如果我是你,我会找到表达的每一面,然后递归地进一步分解每一面。

我会在每一侧寻找表达式而不是布尔运算符,但是你永远不会知道你是否找到了正确的运算符,除非你已经解析了左右表达式,所以为什么要比它更复杂呢?它必须是?

正如@fireflieslive所指出的,这将最终成为一个基本的树遍历。