Infix to Postfix
Conversion and
Evaluator CODES
-Eivuj Papas
/**
* [Link]
*NOTE: I used Stack using char int Array.
* @author ME – mijaka_paz08@[Link]
* @version 1.00 2010/8/4
*/
import [Link].*;
import [Link].*;
public class StackTest {
public static void main(String[] args) {
String input=" ";
BufferedReader dataIn = new BufferedReader(new InputStreamReader( [Link]) );
[Link]("Enter infix expression operators(+-*/%) and digits(0-9): ");
try{
input=[Link]();
}catch(IOException w){ [Link]("Error"+w);}
input=input+")";
Stack stack=new Stack([Link]());
[Link]('(');
String post=[Link](input);
StringTokenizer output=new StringTokenizer(post);
[Link]("\npostfix expression:");
while([Link]())
{
[Link]([Link]()+" ");
}
Evaluator_Postfix evaluate=new Evaluator_Postfix([Link]());
int answer=[Link](post);
[Link]("\nResult: ");
[Link](answer);
[Link](0);
}
/**
* [Link]
*NOTE: I used Stack using char int Array.
* @author ME – mijaka_paz08@[Link]
* @version 1.00 2010/8/4
*/
import [Link].*;
import [Link].*;
public class Stack{
private int size;
private int top;
private char[] values;
public Stack(int size){
[Link] = size;
values = new char[size];
top = -1;
}
public void push(char data)
{ if(!isFull()){
top++;
values[top] = data;
}
}
public boolean isFull(){
if(top < size-1){
return false;
}
else{
return true;
}
}
public boolean isEmpty(){
if(top == -1){
return true;
}
else{
return false;
}
}
public char pop()
{
char retVal = ' ';
if(!isEmpty())
{
retVal=values[top];
top--;
}
return retVal;
}
public char stackTop()
{ int temp=top;
char retVal = ' ';
if(!isEmpty()) {
retVal=values[temp];
temp--;
}
return retVal;
public int precedence(char it)
{
if(it=='*'||it=='^')
return 6;
else if(it=='/')
return 5;
else if(it=='%')
return 4;
else if(it=='+')
return3;
else if(it=='-')
return2;
else
return1;
}
public String convert(String in_put)
{
StringBuffer postfix=new StringBuffer(in_put.length());
int i=0;
char c;
String word=" ";
while(i<in_put.length())
{
c=in_put.charAt(i);
if([Link](c))
[Link](c).append(" ");
if(c=='(')
push('(');
if(c=='*'||c=='/'||c=='%'||c=='+'||c=='-')
{
char v=stackTop();
if(v=='*'||v=='/'||v=='%'||v=='+'||v=='-')
{
if(precedence(v)>=precedence(c))
{
{
[Link](pop()).append(" ").toString();
}
}
}
push(c);
}
if(c==')')
{ char st=stackTop();
while(st!='('&&!isEmpty())
{
[Link](pop()).append(" ").toString();
st=stackTop();
}
pop();
}
i++;
}
return [Link]();
}//end of inner while(token)
public void print()
{
char temp=values[top];
[Link]("Stack content");
while(!isEmpty())
{
[Link]("\n"+temp);
temp=values[top--];
}
/**
* Evaluator_Postfix.java
*NOTE: I used Stack using char int Array.
* @author ME – mijaka_paz08@[Link]
* @version 1.00 2010/8/4
*/
import [Link].*;
import [Link].*;
public class Evaluator_Postfix {
private int size;
private int top;
private int[] values;
private int valEx;
public Evaluator_Postfix(int size){
[Link] = size;
values = new int[size];
top = -1;
}
public void push(int data)
{ if(!isFull()){
top++;
values[top] = data;
}
}
public boolean isFull(){
if(top < size-1){
return false;
}
else{
return true;
}
}
public boolean isEmpty(){
if(top == -1){
return true;
}
else{
return false;
}
}
public int pop()
{
int retVal = 0;
if(!isEmpty())
{
retVal=values[top];
top--;
}
return retVal;
}
public int produce(String post_fix) {
post_fix=post_fix+"\0";
int i=0;
int ans;
int x,y;
while(i<post_fix.length())
{
char c=post_fix.charAt(i);
if([Link](c))
{
int l=(c-'0');
push(l);
if(c=='*'||c=='/'||c=='%'||c=='+'||c=='-')
{
x=pop();
y=pop();
//calculating
if(c=='*'){
ans=x*y;
push(ans);
}
if (c=='/'){
if(x<y)
{
ans=y/x;
push(ans);
}
else{
ans=x/y;
push(ans);
}
}
if (c=='%'){
ans=x%y;
push(ans);
}
if(c=='+'){
ans=x+y;
push(ans);
}
if(c=='-'){
if(x<y)
{
ans=y-x;
push(ans);
}
else{
ans=x-y;
push(ans);
}
}
if(c=='\0')
{
while(!isEmpty()){
valEx=pop();
}
}
i++;
}
return valEx;
}
Don't forget to say Thank You... You may visit my facebook account and here's my email add:
mijaka_paz08@[Link]. If Error occurs just debug it and hopefully understand the algorithm. BYE
--THE END--