Listing 10 Function Pwhile::parse()

_CLASSDEF(Pwhile)
class_CLASSTYPE Pwhile
{
public:
  Pwhile(){}
  ~Pwhile(){}
  BOOL parse();
  int write(int,const char *);
}

BOOL Pwhile::parse()
{
  int nEndofWhile;
  Token * pTemp;

  // create an expression object
  Pexpression * pTempExpression = new Pexpression;
  // call function parse and clean up
  PARSEU(pTempExpression)
  pTemp = gpTokenizer->getToken();     // get a new token

  if (pTemp->tokentype == tkdo)        // check for token DO
  {
    pTemp = gpTokenizer->peekToken();  // a look ahead token
    
    // a loop to parse statements inside the while loop
    while ((pTemp->tokentype != tkendwhile) &&
   (!gpTokenizer->eof() )
    {
        // create a statement object
        Pstatement * pMyStatement = new Pstatement;
        PARSEU(pMyStatement)  // call function parse
                          // and clean up
        pTemp = gpTokenizer->peekToken();
    }
    
    if (pTemp->tokentype == tkendwhile)
    {
     // update the branch pointer
      gpLocalSymTable->Put(nEndofWhile,
                        new Sym_Number((NUMBER)
                                     gnCslFileIndex));
      gpTokenizer->getToken();
    }
    else
    {
       gpErrorFile->raise(39);
       return FALSE;
    }
  }
  else
  {
     gpErrorFile->raise(10);
     return FALSE;
  }

  return TRUE;
}
// End of File