JavaScript DHTML/Development/Postfix Infix

Материал из Web эксперт
Перейти к: навигация, поиск

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>

Infix to Postfix Conversion

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


<a href="http://www.qiksearch.ru/articles/cs/infix-postfix/index.htm" class="link">Click here</a> for the algorithm used.

&#169 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>

Postfix Evaluator

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


<a href="http://www.qiksearch.ru/articles/cs/postfix-evaluation/index.htm" class="link">Click here</a> for the algorithm used.

&#169 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>

Postfix to Infix Conversion

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


It is a small modification of <a href="http://www.qiksearch.ru/javascripts/postfix-evaluator.htm" class="link">Postfix Evaluator</a>.
For the algorithm used in "Postfix Evaluator" <a href="http://www.qiksearch.ru/articles/cs/postfix-evaluation/index.htm" class="link">click here</a>.

&#169 2002 <a href="http://www.qiksearch.ru" class="link" title="Click here to visit Qiksearch.ru">Premshree Pillai</a>.

</body> </html>

      </source>