I have to convert an InFix value to Postfix
Examples:
Theproblemofmyalgorithmispreciselyinthislastline....Ibelievethattheproblemisinexpressionswith+2termswithintheparenthesis,oftype:(X*Y+Z)
Honestly,Ihavedebuggedthecodeseveraltimes,IhavechangedittoseveralversionsandIstillcannotfix.....anysuggestions?
FOLLOWTHEFULLCODE:
functionoperando(caracter){varregex=/^[a-zA-Z]+$/;if(regex.test(caracter)){returntrue;}else{returnfalse;}}functionoperador(caracter){varregex=/^[*+-–/^]+$/gi;if(regex.test(caracter)){returntrue;}else{returnfalse;}}functionobterPrioridade(caracter){varretorno=0;varregex1=/^[+-–]+$/gi;varregex2=/^[*/]+$/gi;if('('==caracter){retorno=1;}elseif(regex1.test(caracter)){retorno=2;}elseif(regex2.test(caracter)){retorno=3;}elseif('^'==caracter){retorno=4;}returnretorno;}functiontransformar(){//ConverteumaexpressãodaformaInfixanaformaPosfixa.SeguealógicaexplicaanteriormentenaintroduçãosobreexpressõesvararrayDeCaracteres=document.getElementById("expressao").value;
var pilha = [];
var prioridade = 0;
var caracter = ""; var resultado = "";
//Varre todos os elementos da expressão de entrada e, para cada elemento, verifica se é operador ou operando. Se for operando, já adicona a saída
for(i = 0; i < arrayDeCaracteres.length; i++){
caracter = arrayDeCaracteres.charAt(i);
if(operando(caracter)){
resultado += caracter;
}else if(operador(caracter)){
prioridade = obterPrioridade(caracter);
aux = pilha.pop();
prioridade2 = obterPrioridade(aux);
//alert('Caracter: '+caracter+'\n'+prioridade+'\nAux: '+aux+'\n'+prioridade2);
pilha.push(aux);
if(typeof aux === 'undefined'){
}else{
while((pilha.length > 1) && (prioridade2 >= prioridade)){
resultado += pilha.pop();
}
}
pilha.push(caracter);
}else if('(' === caracter){
//Insere o objeto no topo da pilha
pilha.push(caracter);
}else if(')' === caracter){
var item = pilha.pop();
while ((item != '(') && (item != undefined)){
resultado += item;
//Recupera e remove o objeto do topo da pilha
item = pilha.pop();
}
}
}
while(pilha.length > 1){
resultado += pilha.pop();
}
console.log(resultado);
}
I believe the logic error is in this section:
}else if(')' === caracter){
var item = pilha.pop();
while ((item != '(') && (item != undefined)){
resultado += item;
//Recupera e remove o objeto do topo da pilha
item = pilha.pop();
}
}