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; }
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)); } }
addressType evaluateArray(void) { error(ARRAY_TERM_IN_OBJECT_ERROR); skipArray(); return(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; } }
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; }
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; } }