对每一条条件陈述进行分组

时间:2013-09-02 20:38:51

标签: javascript jquery compiler-construction

如何在if括号内对每条条件stmt进行分组。说我有一个来自我的contenteditable div的文本。这不仅仅是语法高亮显示,我将在后面的代码中使用换行文本进行处理。

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

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

condFragment[0]=('x==1 && (x>2 || (!x>2 || x<=0))');
condFragment[1]=('x==1');
condFragment[2]=('(x>2 || (!x>2 || x<=0))');
condFragment[3]=('x>2');
condFragment[4]=('(!x>2 || x<=0)');
condFragment[5]=('!x>2');
condFragment[6]=('x>2');
condFragment[7]=('x<=0');

由此:

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

更新

我根据text解决此问题的想法是:

  1. 搜索&amp;&amp; || !从左到右
  2. 如果找到一个获得indexOF(&amp;&amp;或||或!)
  3. 如果发现&amp;&amp;的左侧从那里到paren切片包围&amp;&amp;&amp;
  4. 的索引
  5. 如果&amp;&amp;和是一个开放的paren,切片后&amp;&amp;直到第1发现第2次)
  6. 但我怎么知道那些是我应该切片的地方?

1 个答案:

答案 0 :(得分:1)

在这种情况下,你最好拥有一个完整的JavaScript解析器。

看看https://github.com/mishoo/UglifyJS

这个项目包括一个完整的JS解析器。