Beispiel #1
0
bool
ClParserParser::
isValidAssign()
{
  parse_.skipSpace();

  if (parse_.eof())
    return false;

  if (! parse_.isAlpha() && ! parse_.isChar('_'))
    return false;

  skipIdentifier();

  parse_.skipSpace();

  while (parse_.isChar('[')) {
    parse_.skipChar();

    if (! skipArray())
      return false;

    parse_.skipSpace();
  }

  while (parse_.isChar('.')) {
    parse_.skipChar();

    parse_.skipSpace();

    if (! parse_.isAlpha() && ! parse_.isChar('_'))
      return false;

    skipIdentifier();

    while (parse_.isChar('[')) {
      parse_.skipChar();

      if (! skipArray())
        return false;

      parse_.skipSpace();
    }
  }

  if (! parse_.eof())
    return false;

  return true;
}
Beispiel #2
0
JSON::Pos JSON::skipElement() const
{
    //std::cerr << "skipElement()\t" << data() << std::endl;

    ElementType type = getType();

    switch(type)
    {
        case TYPE_NULL:
            return skipNull();
        case TYPE_BOOL:
            return skipBool();
        case TYPE_NUMBER:
            return skipNumber();
        case TYPE_STRING:
            return skipString();
        case TYPE_NAME_VALUE_PAIR:
            return skipNameValuePair();
        case TYPE_ARRAY:
            return skipArray();
        case TYPE_OBJECT:
            return skipObject();
        default:
            throw JSONException("Logical error in JSON: unknown element type: " + Poco::NumberFormatter::format(type));
    }
}
Beispiel #3
0
  addressType
evaluateArray(void)
{
	error(ARRAY_TERM_IN_OBJECT_ERROR);
	skipArray();
	return(0);
}
Beispiel #4
0
    void property::skip(bitstream& stream, sendprop* prop) {
        switch (prop->getType()) {
            // Skip over Integer
            case sendprop::T_Int:
                skipInt(stream, prop);
                break;

            // Skip over Float
            case sendprop::T_Float:
                skipFloat(stream, prop);
                break;

            // Skip over 3D Vector
            case sendprop::T_Vector:
                skipVector(stream, prop);
                break;

            // Skip 2D Vector
            case sendprop::T_VectorXY:
                skipVectorXY(stream, prop);
                break;

            // Skip String
            case sendprop::T_String:
                skipString(stream);
                break;

            // Skip Array
            case sendprop::T_Array:
                skipArray(stream, prop);
                break;

            // Skip 64 bit Integer
            case sendprop::T_Int64:
                skipInt64(stream, prop);
                break;

            default:
                BOOST_THROW_EXCEPTION( propertyInvalidType()
                    << (EArgT<1, uint32_t>::info(prop->getType()))
                );
                break;
        }
    }
Beispiel #5
0
bool
ClParserParser::
skipExpression(bool *assign)
{
  bool expression = false;

  error_code_ = 0;

  parse_.skipSpace();

  while (! parse_.eof()) {
    /* <expression> := <unary_operator> <expression> */

    if      (! expression && strchr(parser_unary_operator_chars, parse_.getCharAt()) != nullptr) {
      skipUnaryOperator();

      if (! skipExpression(assign))
        return false;

      if (*assign) {
        error_code_ = int(ClErr::INVALID_LVALUE_FOR_ASSIGNMENT);
        return false;
      }

      expression = true;
    }

    /* <expression> := '(' <expression> ')' */

    else if (! expression && parse_.isChar('(')) {
      bool assign1 = false;

      parse_.skipChar();

      if (! skipExpression(&assign1) && error_code_ != int(ClErr::INVALID_CHARACTER))
        return false;

      error_code_ = 0;

      parse_.skipSpace();

      if (! parse_.isChar(')')) {
        error_code_ = int(ClErr::MISSING_CLOSE_ROUND_BRACKET);
        return false;
      }

      parse_.skipChar();

      expression = true;
    }

    /* <expression> := <numeric_value> */

    else if (! expression &&
             (parse_.isDigit() || parse_.isChar('.'))) {
      if (! skipNumericValue())
        return false;

      expression = true;
    }

    /* <expression> := <string_value> */

    else if (! expression && parse_.isOneOf(parser_string_chars)) {
      if (! skipStringValue())
        return false;

      expression = true;
    }

    /* <expression> := <array_value> */

    else if (! expression && parse_.isChar('[')) {
      parse_.skipChar();

      if (! skipArray())
        return false;

      expression = true;
    }

    /* <expression> := <dict_value> */

    else if (! expression && parse_.isString("{{")) {
      parse_.skipChars(2);

      if (! skipDictionary())
        return false;

      expression = true;
    }

    /* <expression> := <list_value> */

    else if (! expression && parse_.isChar('{')) {
      parse_.skipChar();

      if (! skipList())
        return false;

      expression = true;
    }

    /* <expression> := <expression> <binary_operator> <expression> */

    else if (expression && parse_.isOneOf(parser_binary_operator_chars)) {
      bool assign1 = false;

      skipBinaryOperator(&assign1);

      if (error_code_ != 0)
        return false;

      if (! skipExpression(assign))
        return false;

      if (! assign1 && *assign) {
        error_code_ = int(ClErr::INVALID_LVALUE_FOR_ASSIGNMENT);
        return false;
      }

      if (assign1)
        *assign = true;

      expression = true;
    }

    /* <expression> := <expression> '?' <expression> ':' <expression> */

    else if (expression && parse_.isChar('?')) {
      bool assign1 = false;
      bool assign2 = false;

      parse_.skipChar();

      if (! skipExpression(&assign1) && error_code_ != int(ClErr::INVALID_CHARACTER))
        return false;

      error_code_ = 0;

      parse_.skipSpace();

      if (! parse_.isChar(':')) {
        error_code_ = int(ClErr::MISSING_COLON_OPERATOR);
        return false;
      }

      parse_.skipChar();

      if (! skipExpression(&assign2))
        return false;

      expression = true;
      *assign    = assign1 | assign2;
    }

    /* <expression> := <expression> '[' <expression> ',' .... ']' */

    else if (expression && parse_.isChar('[')) {
      parse_.skipChar();

      if (! skipArray())
        return false;

      expression = true;
    }

    /* <expression> := <expression> ',' <expression> */

    else if (expression && parse_.isChar(',')) {
      bool assign1 = false;

      ClParserStackMgrInst->push(CL_PARSER_OP_COMMA);

      ClParserStackMgrInst->toNext();

      parse_.skipChar();

      if (! skipExpression(&assign1))
        return false;

      expression = true;
    }

    /* <expression> := <variable>                               */
    /* <expression> := <variable> '.' <variable> '.' <...>      */
    /* <expression> := <variable> '[' <expression> ',' .... ']' */
    /* <expression> := <function> '(' <expression> ',' .... ')' */
    /* <expression> := <type>     '(' <expression> ',' .... ')' */

    else if (! expression && (parse_.isAlpha() || parse_.isChar('_'))) {
      skipIdentifier();

      if (error_code_ != 0)
        return false;

      parse_.skipSpace();

      if (parse_.isChar('(')) {
        parse_.skipChar();

        if (! skipArgList())
          return false;

        expression = true;
      }
      else {
        if (parse_.isChar('[')) {
          parse_.skipChar();

          if (! skipArray())
            return false;

          parse_.skipSpace();
        }

        while (parse_.isChar('.')) {
          parse_.skipChar();

          parse_.skipSpace();

          skipIdentifier();

          if (error_code_ != 0)
            return false;

          if (parse_.isChar('[')) {
            parse_.skipChar();

            if (! skipArray())
              return false;

            parse_.skipSpace();
          }
        }

        expression = true;
      }
    }
    else {
      error_code_ = int(ClErr::INVALID_CHARACTER);
      return false;
    }

    parse_.skipSpace();
  }

  if (! expression) {
    error_code_ = int(ClErr::NULL_EXPRESSION);
    return false;
  }

  return true;
}
Beispiel #6
0
  void
skipExpression(void)
{
	if (pc == NULL)
		return;
	switch (*pc++) {
	    case IDENTIFIER_TAG:
		overSymbol();
		break;

	    case FUNCTION_CALL_TAG:
		skipFunctionCall();
		break;

	    case NUMBER_TAG:
	    case RELOCATABLE_TAG:
		overNumber();
		break;

	    case CONDITION_CODE_TAG:
		overByte();
		break;

	    case SUBEXPRESSION_TAG:
		skipExpression();
		break;

	    case UNOP_TAG:
		skipUnop();
		break;

	    case BINOP_TAG:
		skipBinop();
		break;

	    case PREOP_TAG:
		skipPreop();
		break;

	    case POSTOP_TAG:
		skipPostop();
		break;

	    case HERE_TAG:
		break;

	    case STRING_TAG:
		skipString();
		break;

	    case ARRAY_TAG:
		skipArray();
		break;

	    case VALUE_TAG:
		overNumber();
		break;

	    case NULL_TAG:
		break;

	    case BLOCK_TAG:
		skipBlock();
		break;

	    case MDEFINE_TAG:
		skipMdefine();
		break;

	    case MVARIABLE_TAG:
		skipMvariable();
		break;

	    case MIF_TAG:
		skipMif();
		break;

	    case MFOR_TAG:
		skipMfor();
		break;

	    case MWHILE_TAG:
		skipMwhile();
		break;

	    case MDOWHILE_TAG:
		skipMdoWhile();
		break;

	    case MDOUNTIL_TAG:
		skipMdoUntil();
		break;

	    case PERFORM_TAG:
		skipExpression();
		break;

	    case GROUP_TAG:
		skipBlock();
		break;

	    case ASSERT_TAG:
		skipAssert();
		break;

	    case MSWITCH_TAG:
		skipMswitch();
		break;

	    case CLAUSE_TAG:
		skipClause();
		break;

	    case END_TAG:
		break;
	}
}