Ejemplo n.º 1
0
//////////////////////////////////////////
// return value: 0, execute new statement.
//               -20, abort it.
//		other error codes from readStmt()
//////////////////////////////////////////
Int32 InputStmt::fix(Int32 append_only)
{
  Int32 retval = 0;

  if (!append_only)
    {
      Option option;

      StringFragment * fragment = first_fragment;

      while (fragment)
	{
	  char * new_fragment = new char[MAX_FRAGMENT_LEN + 1];
	  option = fix_string(fragment->fragment,new_fragment,MAX_FRAGMENT_LEN);
	  if (option == ABORT_O)
	    return -20;	  // caller is responsible for deleting this InputStmt

	  delete [] fragment->fragment;
	  fragment->fragment = new_fragment;
	  fragment = fragment->next;
	}
    }
  else
    {
      retval = readStmt(NULL/*interactive only, so input is stdin*/);
    }

  // Pack (or repack) the new stmt.
  pack();

  return retval;
}	// fix()
Ejemplo n.º 2
0
    /*Conjunto de Construções*/
    void SyntaxAnalysis::expression() {

        Token::Token tokenTemp = vecToken[0];
        Token::Token recover;

        Tree::Tree * tempTree = subTree;
        setAndAdvance(EXPSTRING);

        switch (tokenTemp.getTokenType()) {

            case(Token::INTEGER): case(Token::FLOAT): case(Token::VOID):
                targetAdvance();
                variableDecStmt();
                break;

            case(Token::WRITE):
                writeStmt();
                break;

            case(Token::READ):
                readStmt();
                break;

            case(Token::RETURN):
                returnValue();
                break;

            case(Token::IDENTIFIER):
                recover = tokenTemp;
                tokenTemp = targetAdvance();
                switch (tokenTemp.getTokenType()) {

                    case(Token::ATTRIBUTION):
                        attributionStmt();
                        break;

                    case(Token::OPEN):
                        functionCallStmt();
                        break;

                    default: this->error.expressionError(recover);
                }
                break;

            case(Token::IF):
                ifStmt();
                break;

            case(Token::REPEAT):
                whileStmt();
                break;

            default: this->error.expressionError(tokenTemp);
        }

        subTree = tempTree;
    }