hesheit 0 Newbie Poster
/*
    INTOPOST.C

    Rex Jaechke, "C Users Journal" mach 92.
*/

#include <ctype.h>

void push(int);
int pop(void);

/*--------------------------------------------------------------------------

FUNCTION: intopost - converts infix to postfix

A.  Push a ( on the stack. This sentinel allows us to detect when we
    have flushed out the stack on completion in step 1.

--- Perform steps B through H for each character in the infix string ---

B.  Ignore white space.

C.  Pass alphabetic characters through to postfix list.

D.  Push any ( on the stack. These sentinels allows us to detect when
    have flushed out the stack when handling ) and operators.

E.  Have a ) so pop off the stack and put into postfix list until a (
    is popped. Discard the (.

F   Have a * or /. Pop off any operators of equal or higher precedence
    and put them into postfix list. If a ( or lower precedence operator
    (such as + or -) is popped, put it back and stop looking.
    Push new * or /.

G.  Have a + or -. Pop off any operators of equal or higher precedence
    (that includes all of them) and put them into postfix list. If a (
    is popped, put it back and stop looking. Push new + or -.

H.  Report unknown character on input.

--------

I.  Have processed all input characters. New flush stack until we find
    the matchint ( put there in step A.

J.  Terminate the postfix list.

--------------------------------------------------------------------------*/

void intopost(const char *infix, char *postfix)
{
    int st;

/*A*/   push('(');
    while (*infix != '\0') {

#ifdef TRACE
printf("*infix: %c\n", *infix);
#endif

/*B*/       if (isspace(*infix)) {
            ;
        }
/*C*/       else if (isalpha(*infix)) {
            *postfix++ = *infix;
        }
/*D*/       else if (*infix == '(') {
            push('(');
        }
/*E*/       else if (*infix == ')') {
            while ((st = pop()) != '(')
                *postfix++ = st;
        }
/*F*/       else if (*infix == '*' || *infix == '/') {
            while (1) {
                if ((st = pop()) == '(' || st == '+'
                    || st == '-') {
                    push(st);
                    break;
                }
                *postfix++ = st;
            }
            push(*infix);
        }
/*G*/       else if (*infix == '+' || *infix == '-') {
            while (1) {
                if ((st = pop()) == '(') {
                    push(st);
                    break;
                }
                *postfix++ = st;
            }
            push(*infix);
        }
/*H*/       else {
            printf("Unknown input character %c\n", *infix);
        }
        ++infix;
        continue;
    }
/*I*/   while ((st = pop()) != '(')
        *postfix++ = st;

/*J*/   *postfix = '\0';
}

I Can Write In C Language But Cannot In Assembly SomeOne Can Try Please Do it

/* Fil Slut : INTOPOST.C */

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.