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

使用javaScript将前缀表达式转换为中缀表达式,javascript,operators,prefix,postfix-notation,polish-notation,Javascript,Operators,Prefix,Postfix Notation,Polish Notation,我真的被一个问题打动了 使用javaScript转换下面的表达式 [“AND”、[”、“var3”、“var4”]、[“==”、“var5”、“var6”]] 到 var1val4或val5==val6) 很抱歉,我没有更多信息了试试这个 function rpn( input ) { var ar = input.split( /\s+/ ), st = [], token; while( token = ar.shift() ) { if ( token == +to

我真的被一个问题打动了

使用javaScript转换下面的表达式

[“AND”、[”、“var3”、“var4”]、[“==”、“var5”、“var6”]]

var1val4或val5==val6)

很抱歉,我没有更多信息了

试试这个

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();
}
功能rpn(输入){
var ar=input.split(/\s+/),st=[],令牌;
while(token=ar.shift()){
如果(令牌==+令牌){
圣普(代币);
}否则{
变量n2=st.pop(),n1=st.pop();

var re=/^[\+\-\/\*\>\您可以尝试以下语法:

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

试试下面提到的算法

  • 接受来自用户的前缀字符串

  • 开始从右侧一次扫描一个字符的字符串

  • 如果它是一个操作数,则将其推入堆栈

  • 如果是运算符,则弹出opnd1、opnd2并按顺序(opnd1、optr、opnd2)连接它们

  • 将结果推送到堆栈中

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

  • 弹出堆栈的剩余元素,它是与给定前缀表示法等效的所需中缀表示法


  • 试试这种递归方法

    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] + ' ';
        }
    }
    

    嗨,你得到答案了吗?你能提供一些同样的例子吗?