使用javaScript将前缀表达式转换为中缀表达式

时间:2017-05-04 10:19:56

标签: javascript operators prefix postfix-notation polish-notation

我真的很震惊。

使用javaScript转换下面的表达式

  

[" AND",["<"," var1"," var2"],[" OR& #34;,[">"," var3"," var4"],[" ==",&#34 ; var5"," var6"]]

  

var1< val2 AND(var3> val4或val5 == val6)

很抱歉,我没有更多信息

4 个答案:

答案 0 :(得分:2)

尝试这种递归方法

var convert = function(arr) {
    if (typeof arr[0] == 'string' && arr[1] instanceof Array && arr[2] instanceof Array) {
        return ' (' + convert(arr[1]) + arr[0] + convert(arr[2]) + ') ';
    } else {
        return ' ' + arr[1] + ' ' + arr[0] + ' ' + arr[2] + ' ';
    }
}

答案 1 :(得分:1)

尝试使用下面提到的算法

  1. 接受用户的前缀字符串。

  2. 一次从右边一个字符开始扫描字符串。

  3. 如果是操作数,请将其推入堆栈。

  4. 如果是运算符,请按顺序弹出opnd1,opnd2并将它们连接起来(opnd1,optr,opnd2)。

  5. 将结果推入堆栈。

  6. 重复这些步骤,直到输入前缀字符串的arr结束。

  7. 弹出堆栈的剩余元素,这是所需的Infix符号,等同于给定的前缀符号。

答案 2 :(得分:0)

试试这个..

function rpn( input ) {
   var ar = input.split( /\s+/ ), st = [], token;
   while( token = ar.shift() ) { 
     if ( token == +token ) {
        st.push( token );
     } else {
        var n2 = st.pop(), n1 = st.pop();
        var re = /^[\+\-\/\*\>\<\==\.]$/;
        if( n1 != +n1 || n2 != +n2 || !re.test( token ) ) {
            throw new Error( 'Invalid expression: ' + input );
        }
        st.push( eval( n1 + token + ' ' + n2 ) );
     }
   }
   if( st.length !== 1 ) {
      throw new Error( 'Invalid expression: ' + input );
   }
   return st.pop();
}

答案 3 :(得分:0)

您可以尝试以下语法:

if ((var1 < var2) AND (var3 > var4 OR var5==var6))