JavaScript DHTML/Development/Postfix Infix
Infix to Postfix Conversion
<source lang="html4strict">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Infix to Postfix</title> <style type="text/css"> .header{font-family:verdana,arial,helvetica; font-weight:bold; font-size:22pt; color:#003366; filter:DropShadow(color=#CCCCDD, offX=2, offY=2, positive=1); width:100%} .form_in{background:#FCFCFF; border:#003366 solid 1px} .text_box{font-weight:bold; background:#EFEFF5; border:#003366 solid 1px; height:20px} .button{background:#CCCCDD; font-weight:bold; color:#003366; border:#003366 solid 1px; height:20px; cursor:hand} .link{color:#003366} .link:hover{color:#666699} </style> </head> <body bgcolor="#FFFFFF">
<script language="JavaScript"> /*
Infix to Postfix Conversion - Converts an Infix(Inorder) expression to Postfix(Postorder) - For eg. "1*2+3" converts to "12*3+" - Valid Operators are +,-,*,/ - No Error Handling in this version JavaScript Implementation - CopyRight 2002 Premshree Pillai See algorithm at -http://www.qiksearch.ru/articles/cs/infix-postfix/index.htm Created : 28/08/02 (dd/mm/yy) Web : http://www.qiksearch.ru E-mail : qiksearch@rediffmail.ru
- /
function push_stack(stackArr,ele) {
stackArr[stackArr.length]=ele;
} function pop_stack(stackArr) {
var _temp=stackArr[stackArr.length-1]; delete stackArr[stackArr.length-1]; stackArr.length--; return(_temp);
} function isOperand(who) {
return(!isOperator(who)? true : false);
} function isOperator(who) {
return((who=="+" || who=="-" || who=="*" || who=="/" || who=="(" || who==")")? true : false);
} function topStack(stackArr) {
return(stackArr[stackArr.length-1]);
} function isEmpty(stackArr) {
return((stackArr.length==0)? true : false);
} /* Check for Precedence */ function prcd(char1,char2) {
var char1_index,char2_index; var _def_prcd="-+*/"; for(var i=0; i<_def_prcd.length; i++) { if(char1==_def_prcd.charAt(i)) char1_index=i; if(char2==_def_prcd.charAt(i)) char2_index=i; } if(((char1_index==0)||(char1_index==1)) && (char2_index>1)) return false; else return true;
} function InfixToPostfix(infixStr,postfixStr) {
var postfixStr=new Array(); var stackArr=new Array(); var postfixPtr=0; infixStr=infixStr.split(""); for(var i=0; i<infixStr.length; i++) { if(isOperand(infixStr[i])) { postfixStr[postfixPtr]=infixStr[i]; postfixPtr++; } else { while((!isEmpty(stackArr)) && (prcd(topStack(stackArr),infixStr[i]))) { postfixStr[postfixPtr]=topStack(stackArr); pop_stack(stackArr); postfixPtr++; } if((!isEmpty(stackArr)) && (infixStr[i]==")")) { pop_stack(stackArr); } else { push_stack(stackArr,infixStr[i]); } } } while(!isEmpty(stackArr)) { postfixStr[postfixStr.length]=topStack(stackArr); pop_stack(stackArr); } var returnVal=""; for(var i=0; i<postfixStr.length; i++) { returnVal+=postfixStr[i]; } return(returnVal);
} </script>
<form name="input_form">
Infix Expression : | Postfix Expression : | |
<input type="text" name="infixVal" class="text_box" value=""> | <input type="text" name="postfixVal" class="text_box" value=""> | <input type="button" onClick="document.input_form.postfixVal.value=InfixToPostfix(document.input_form.infixVal.value,"arr")" value="Infix to Postfix" class="button"> |
</form>
This is the "JavaScript" Implementation of converting an Infix(Inorder) expression to Postfix(Postorder) expression. © 2002 <a href="http://www.qiksearch.ru" class="link" title="Click here to visit Qiksearch.ru">Premshree Pillai</a>. |
</body> </html>
</source>
Postfix Evaluator
<source lang="html4strict">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Postfix Evaluator</title> <style type="text/css"> .header{font-family:verdana,arial,helvetica; font-weight:bold; font-size:22pt; color:#0066CC; filter:DropShadow(color=#CCCCFF, offX=2, offY=2, positive=1); width:100%} .form_in{background:#FFFFFF; border:#0066CC solid 1px} .text_box{font-weight:bold; background:#EEEEFF; border:#0066CC solid 1px; height:20px} .button{background:#0066CC; font-weight:bold; color:#FFFFFF; border:#0066CC solid 1px; height:20px; cursor:hand} .link{color:#0066CC} .link:hover{color:#0099FF} </style> </head> <body bgcolor="#FFFFFF">
<script language="JavaScript"> /*
Postfix Evaluator - Evaluates a Postfix(Postorder) expression - For eg. "12*3+" results in 5 - Valid Operators are +,-,*,/ - No Error Handling in this version JavaScript Implementation - CopyRight 2002 Premshree Pillai See algorithm at -http://www.qiksearch.ru/articles/cs/postfix-evaluation/index.htm Created : 02/09/02 (dd/mm/yy) Web : http://www.qiksearch.ru E-mail : qiksearch@rediffmail.ru
- /
function push_stack(stackArr,ele) {
stackArr[stackArr.length]=ele;
} function pop_stack(stackArr) {
var _temp=stackArr[stackArr.length-1]; delete stackArr[stackArr.length-1]; stackArr.length--; return(_temp);
} function isOperand(who) {
return(!isOperator(who)? true : false);
} function isOperator(who) {
return((who=="+" || who=="-" || who=="*" || who=="/" || who=="(" || who==")")? true : false);
} function topStack(stackArr) {
return(stackArr[stackArr.length-1]);
} function PostfixSubEval(num1,num2,sym) {
var returnVal; if(sym=="+") returnVal=num1+num2; if(sym=="-") returnVal=num1-num2; if(sym=="*") returnVal=num1*num2; if(sym=="/") returnVal=num1/num2; return(returnVal);
} function PostfixEval(postfixStr) {
var stackArr=new Array(); postfixStr=postfixStr.split(""); for(var i=0; i<postfixStr.length; i++) { if(isOperand(postfixStr[i])) { push_stack(stackArr,postfixStr[i]); } else { var temp=parseFloat(topStack(stackArr)); pop_stack(stackArr); var pushVal=PostfixSubEval(parseFloat(topStack(stackArr)),temp,postfixStr[i]); pop_stack(stackArr); push_stack(stackArr,pushVal); } } return(topStack(stackArr));
} </script>
<form name="input_form">
Postfix Expression : | Result : | |
<input type="text" name="postfixVal" class="text_box" value=""> | <input type="text" name="resultVal" class="text_box" value=""> | <input type="button" onClick="document.input_form.resultVal.value=PostfixEval(document.input_form.postfixVal.value)" value="Evaluate Postfix" class="button"> |
</form>
This JavaScript evaluates a Postfix(Postorder) expression. © 2002 <a href="http://www.qiksearch.ru" class="link" title="Click here to visit Qiksearch.ru">Premshree Pillai</a>. |
</body> </html>
</source>
Postfix to Infix Conversion
<source lang="html4strict">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Postfix to Infix</title> <style type="text/css"> .header{font-family:verdana,arial,helvetica; font-weight:bold; font-size:22pt; color:#0066CC; filter:DropShadow(color=#CCCCFF, offX=2, offY=2, positive=1); width:100%} .form_in{background:#FFFFFF; border:#0066CC solid 1px} .text_box{font-weight:bold; background:#EEEEFF; border:#0066CC solid 1px; height:20px} .button{background:#0066CC; font-weight:bold; color:#FFFFFF; border:#0066CC solid 1px; height:20px; cursor:hand} .link{color:#0066CC} .link:hover{color:#0099FF} </style> </head> <body bgcolor="#FFFFFF">
<script language="JavaScript"> /*
Postfix to Infix Conversion - Converts a Postfix(Postorder) expression to Infix(Inorder) - For eg. "abc/+d-" converts to "a+b/c-d" - Valid Operators are +,-,*,/ - No Error Handling in this version JavaScript Implementation - CopyRight 2002 Premshree Pillai Based on "Postfix Evaluator". See -http://www.qiksearch.ru/javascripts/postfix-evaluator.htm See algorithm at -http://www.qiksearch.ru/articles/cs/postfix-evaluation/index.htm Created : 03/09/02 (dd/mm/yy) Web : http://www.qiksearch.ru E-mail : qiksearch@rediffmail.ru
- /
function push_stack(stackArr,ele) {
stackArr[stackArr.length]=ele;
} function pop_stack(stackArr) {
var _temp=stackArr[stackArr.length-1]; delete stackArr[stackArr.length-1]; stackArr.length--; return(_temp);
} function isOperand(who) {
return(!isOperator(who)? true : false);
} function isOperator(who) {
return((who=="+" || who=="-" || who=="*" || who=="/" || who=="(" || who==")")? true : false);
} function topStack(stackArr) {
return(stackArr[stackArr.length-1]);
} function PostfixToInfix(postfixStr) {
var stackArr=new Array(); postfixStr=postfixStr.split(""); for(var i=0; i<postfixStr.length; i++) { if(isOperand(postfixStr[i])) { push_stack(stackArr,postfixStr[i]); } else { var temp=topStack(stackArr); pop_stack(stackArr); var pushVal=topStack(stackArr)+postfixStr[i]+temp; pop_stack(stackArr); push_stack(stackArr,pushVal); } } return(topStack(stackArr));
} </script>
<form name="input_form">
Postfix Expression : | Infix Expression : | |
<input type="text" name="postfixVal" class="text_box" value=""> | <input type="text" name="infixVal" class="text_box" value=""> | <input type="button" onClick="document.input_form.infixVal.value=PostfixToInfix(document.input_form.postfixVal.value)" value="Postfix to Infix" class="button"> |
</form>
This is the "JavaScript" Implementation of converting a Postfix(Postorder) expression to Infix(Inorder) expression. © 2002 <a href="http://www.qiksearch.ru" class="link" title="Click here to visit Qiksearch.ru">Premshree Pillai</a>. |
</body> </html>
</source>