Operator Precedence Parser
TOKEN expr ()
{ int done;
TOKEN tok;
done = 0;
opstack = NULL;
opndstack = NULL;
while (done == 0)
{ tok = gettoken();
if (EOFFLG == 0)
switch (tok->tokentype)
{ case IDENTIFIERTOK: case NUMBERTOK:
pushopnd (tok); break;
case DELIMITER:
if (tok->whichval == LPARENTHESIS)
pushop(tok);
else if (tok->whichval
== RPARENTHESIS)
{ while (opstack->tokentype !=
DELIMITER)
reduceop();
popop(); }
else done = 1;
break;