Exemple #1
0
Expression *parseTerm(FILE *source, Expression *lvalue)
{
    Token token = scanner(source);
    Expression *expr;
	int i ;
    switch (token.type){
        case PlusOp:
        case MinusOp:
        case Alphabet:
        case PrintOp:
            for (i = strlen(token.tok) - 1; i >= 0; i--) {
                ungetc(token.tok[i], source);
            }
            return lvalue;
		case MulOp:
            expr = (Expression *)malloc( sizeof(Expression) );
            (expr->v).type = MulNode;
            (expr->v).val.op = Mul;
            expr->leftOperand = lvalue;
            expr->rightOperand = parseValue(source);
            return parseTerm(source, expr);
        case DivOp:
            expr = (Expression *)malloc( sizeof(Expression) );
            (expr->v).type = DivNode;
            (expr->v).val.op = Div;
            expr->leftOperand = lvalue;
            expr->rightOperand = parseValue(source);
            return parseTerm(source, expr);
        default:
            printf("In function parseTerm\n");
            printf("Syntax Error: Expect a numeric value or an identifier %s\n", token.tok);
            exit(1);
    }

}
	void parseGroup(filesystem::InputStream &stream, int flags)
	{
		std::string currentLine;
		std::string nextLine;

		readLine(stream, currentLine);
		if(!currentLine.empty() && currentLine[0] == '}')
			return;

		while(readLine(stream, nextLine))
		{
			if(nextLine[0] == '{')
			{
				parseSubGroup(stream, currentLine, flags);
				currentLine = "";
				continue;
			}

			parseValue(currentLine, flags);
			if(nextLine[0] == '}')
				return;

			currentLine.swap(nextLine);		
		}

		parseValue(currentLine, flags);
	}
Exemple #3
0
Expression *parseExpression( FILE *source, Expression *lvalue )//changed
{
    Token token = scanner(source);
    Expression *expr;

    switch(token.type){
        case PlusOp:
            expr = (Expression *)malloc( sizeof(Expression) );
            (expr->v).type = PlusNode;
            (expr->v).val.op = Plus;
            expr->leftOperand = lvalue;
            expr->rightOperand = parseValue(source);
            return parseExpressionTail(source, expr);
        case MinusOp:
            expr = (Expression *)malloc( sizeof(Expression) );
            (expr->v).type = MinusNode;
            (expr->v).val.op = Minus;
            expr->leftOperand = lvalue;
            expr->rightOperand = parseValue(source);
            return parseExpressionTail(source, expr);
        case Alphabet:
        case PrintOp:
			ungetstring(token.tok, source);
            //ungetc(token.tok[0], source);
            return NULL;
        case EOFsymbol:
            return NULL;
        default:
            printf("Syntax Error: Expect a numeric value or an identifier %s\n", token.tok);
            exit(1);
    }
}
Exemple #4
0
Expression *parseTerm(FILE *source, Expression *lvalue)
{
    Token token = scanner(source);
    Expression *expr;

    switch(token.type){
        case MulOp:
            expr = (Expression *)malloc( sizeof(Expression) );
            (expr->v).type = MulNode;
            (expr->v).val.op = Mul;
            expr->leftOperand = lvalue;
            expr->rightOperand = parseValue(source);
            return parseTermTail(source, expr);
        case DivOp:
            expr = (Expression *)malloc( sizeof(Expression) );
            (expr->v).type = DivNode;
            (expr->v).val.op = Div;
            expr->leftOperand = lvalue;
            expr->rightOperand = parseValue(source);
            return parseTermTail(source, expr);
        case Alphabet:
        case PrintOp:
        case PlusOp:
        case MinusOp:
            ungetToken(token);
            return lvalue;
        case EOFsymbol:
            return lvalue;
        default:
            printf("Syntax Error:(parseTerm) Expect a numeric value or an identifier %s\n", token.tok);
            exit(1);
    }

}
Exemple #5
0
//-------------------------------------------------------
void coTParser::parseEnumeration()
{
	parseValue();
	while( m_currentToken.m_type == coTLexer::EToken_COMMA)
	{
		consumeToken();
		parseValue();
	}
}
Exemple #6
0
CrontabSelector::CrontabSelector(
  const dynamic &d,
  int64_t min_val,
  int64_t max_val,
  function<int64_t(const string& lc_str)> str_to_value
) : start_(min_val),
    end_(max_val),
    period_(1),
    minVal_(min_val),
    maxVal_(max_val) {

  switch (d.type()) {
    case dynamic::Type::INT64:
    case dynamic::Type::STRING:
      sortedValues_.emplace_back(parseValue(d, str_to_value));
      break;
    case dynamic::Type::ARRAY:
      for (const auto& val : d) {
        sortedValues_.emplace_back(parseValue(val, str_to_value));
      }
      // If somebody specifies [] for a selector, we have to silently
      // accept it, since PHP's JSON library can morph {} into [], and {}
      // must mean "default selector accepting all values."
      break;
    case dynamic::Type::OBJECT:
      for (const auto& pair : d.items()) {
        // Interval is first so that it doesn't accept strings like "jan"
        if (pair.first == "period") {
          period_ = pair.second.asInt();
          if (period_ < 1 || period_ >= maxVal_ - minVal_) {
            throw runtime_error(format(
              "period not in [1, {}]: {}", maxVal_ - minVal_, period_
            ).str());
          }
          continue;
        }
        // For start & end, we are happy to accept string names
        auto val = parseValue(pair.second, str_to_value);
        if (pair.first == "start") {
          start_ = val;
        } else if (pair.first == "end") {
          end_ = val;
        } else {
          throw runtime_error(format("Unknown key: {}", pair.first).str());
        }
      }
      // If we got an empty object, no problem -- this selector will
      // follow the default of "match everything".
      break;
    default:
      throw runtime_error(format(
        "Bad type for crontab selector: {}", d.typeName()
      ).str());
  }
  sort(sortedValues_.begin(), sortedValues_.end());
}
Exemple #7
0
// Build an object from the text.
const char*
aJsonClass::parseObject(aJsonObject *item, const char *value)
{
  aJsonObject *child;
  if (*value != '{')
    return NULL; // not an object!

  item->type = aJson_Object;
  value = skip(value + 1);
  if (*value == '}')
    return value + 1; // empty array.

  item->child = child = newItem();
  if (!item->child)
    return NULL;
  value = skip(parseString(child, skip(value)));
  if (!value)
    return NULL;
  child->name = child->value.valuestring;
  child->value.valuestring = NULL;
  if (*value != ':')
    return NULL; // fail!
  value = skip(parseValue(child, skip(value + 1))); // skip any spacing, get the value.
  if (!value)
    return NULL;

  while (*value == ',')
    {
      aJsonObject *new_item;
      if (!(new_item = newItem()))
        return NULL; // memory fail
      child->next = new_item;
      new_item->prev = child;
      child = new_item;
      value = skip(parseString(child, skip(value + 1)));
      if (!value)
        return NULL;
      child->name = child->value.valuestring;
      child->value.valuestring = NULL;
      if (*value != ':')
        return NULL; // fail!
      value = skip(parseValue(child, skip(value + 1))); // skip any spacing, get the value.
      if (!value)
        return NULL;
    }

  if (*value == '}')
    return value + 1; // end of array
  return NULL; // malformed.
}
Exemple #8
0
/* parse the audit record and create libee structure
 */
static rsRetVal
audit_parse(uchar *buf, struct json_object **jsonRoot)
{
	struct json_object *json;
	struct json_object *jval;
	char name[1024];
	char val[1024];
	DEFiRet;

	*jsonRoot = json_object_new_object();
	if(*jsonRoot == NULL) {
		ABORT_FINALIZE(RS_RET_ERR);
	}
	json = json_object_new_object();
	json_object_object_add(*jsonRoot, "data", json);

	while(*buf) {
		CHKiRet(parseName(&buf, name, sizeof(name)));
		if(*buf != '=') {
			ABORT_FINALIZE(RS_RET_ERR);
		}
		++buf;
		CHKiRet(parseValue(&buf, val, sizeof(val)));
		jval = json_object_new_string(val);
		json_object_object_add(json, name, jval);
	}
	

finalize_it:
	RETiRet;
}
Exemple #9
0
//-------------------------------------------------------
void coTParser::parseProperty()
{
	coASSERT(m_currentToken.m_type == coTLexer::EToken_IDENTIFIER);
	coTSemanticAnalyzer::Property prop;
	prop.m_name = m_currentToken;
	consumeToken();
	if (m_currentToken.m_type != coTLexer::EToken_COLON)
	{
		prop.m_type.clear();
	}
	else
	{
		prop.m_type = m_currentToken;
		consumeToken();
	}
	m_semanticAnalyzer->onProperty(prop);
	switch (m_currentToken.m_type)
	{
	case coTLexer::EToken_EQUAL:
		{
			consumeToken();
			parseValue();
		}
		break;
	case coTLexer::EToken_LBRACE:
		{
			parsePropertyBlock();
		}
		break;
	default:
		{
			coFAIL();
		}
	}
}
bool CSSParser::parseColor(RGBA32& color, const String& string, bool strict)
{
    if (string.isEmpty())
        return false;

    // First try creating a color specified by name, rgba(), rgb() or "#" syntax.
    if (CSSPropertyParser::fastParseColor(color, string, strict))
        return true;

    // In case the fast-path parser didn't understand the color, try the full parser.
    RefPtrWillBeRawPtr<MutableStylePropertySet> stylePropertySet = MutableStylePropertySet::create();
    // FIXME: The old CSS parser is only working in strict mode ignoring the strict parameter.
    // It needs to be investigated why.
    if (!parseValue(stylePropertySet.get(), CSSPropertyColor, string, false, strictCSSParserContext()))
        return false;

    RefPtrWillBeRawPtr<CSSValue> value = stylePropertySet->getPropertyCSSValue(CSSPropertyColor);
    if (!value || !value->isPrimitiveValue())
        return false;

    CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value.get());
    if (!primitiveValue->isRGBColor())
        return false;

    color = primitiveValue->getRGBA32Value();
    return true;
}
Exemple #11
0
			inline static JSONPair parseMember(const char* string)
			{
				int stringLength = strlen(string) + 1;
				char* memberString = new char[stringLength];
				memcpy(memberString, string, stringLength);
				memberString[stringLength - 1] = '\0';

				char* key = "";
				JSONValue value;

				//We can't parse the member just yet, we need to know its type
				std::vector<std::string> split = StringUtils::splitOnce(memberString, ":");
				if (split.size() == 2)
				{
					const char* memberKeyString = split[0].c_str();
					const char* memberValueString = split[1].c_str();

					int keyStringLen = strlen(memberKeyString);

					value = parseValue(memberValueString);

					key = new char[keyStringLen];
					memcpy(key, memberKeyString, keyStringLen);
					key[keyStringLen - 1] = '\0';
				}
			
				delete[] memberString;
				return JSONPair(key, value);
			}
Exemple #12
0
void JsonParser::parseArray( JsonScanner & scanner, std::vector<JsonValue *> * values ) {
	static std::string name( "" );
	JsonToken token;
	try {
		token = scanner.getNextToken();
	}
	catch ( const std::exception & e ) {
		throw;
	}

	JsonValue * value;
	try {
		value = parseValue( scanner, token, name );
	} catch( const std::exception & e ) {
		throw;
	}
	values->push_back( value );
	try {
		token = scanner.getNextToken();
	} catch( const std::exception & e ) {
		throw;
	}
	if( token.getType() == JsonTypes::COMMA ) {
		try {
			parseArray( scanner, values );
		} catch( std::exception & e ) {
			throw;
		}
	} else if ( token.getType() == JsonTypes::CLOSE_BRACKET ) {
	} else {
		throw ArrayParsingException();
	}
}
Exemple #13
0
Declaration* CssParser::parseDeclaration () {
  Declaration* declaration = NULL;
  TokenList property;

  if (!parseProperty(&property))
    return NULL;
  
  skipWhitespace();

  declaration = new Declaration(property.toString());
  
  if (tokenizer->getTokenType() != Token::COLON) {
    throw new ParseException(tokenizer->getToken()->str,
                             "colon following property(':')");
  }
  tokenizer->readNextToken();
  skipWhitespace();

  TokenList* value = parseValue();
  if (value == NULL) {
    throw new ParseException(tokenizer->getToken()->str,
                             "value for property");
  }
  declaration->setValue(value);
  return declaration;
}
Exemple #14
0
Expression *parsePreTerm(FILE *source)
{
    Expression *v = parseValue(source);
    Expression *term = parseTerm(source, v);
    return term;

}
Exemple #15
0
bool LessParser::parseVariable (TokenList &value) {
  if (tokenizer->getTokenType() != Token::COLON)
    return false;
  
  tokenizer->readNextToken();
  skipWhitespace();
    
  if (parseValue(value) == false || value.size() == 0) {
    throw new ParseException(tokenizer->getToken(),
                             "value for variable",
                             tokenizer->getLineNumber(),
                             tokenizer->getColumn(),
                             tokenizer->getSource());
  }
  if (tokenizer->getTokenType() != Token::DELIMITER) {
    throw new ParseException(tokenizer->getToken(),
                             "delimiter (';') at end of @-rule",
                             tokenizer->getLineNumber(),
                             tokenizer->getColumn(),
                             tokenizer->getSource());
  }
  tokenizer->readNextToken();
  skipWhitespace();

  return true;
}
Exemple #16
0
void XmlRpc::parseCall(const QByteArray& call, QByteArray& function, QList<QVariant>& args)
{
	QDomDocument doc;
	QDomElement root;
	QString msg;
	QList<QVariant> values;

	if(!doc.setContent(call, false, &msg))
		throw RuntimeException(msg);

	root = doc.documentElement();
	if(root.tagName() != "methodCall")
		throw RuntimeException(QObject::tr("Not a XML-RPC call"));

	QDomElement methodName = root.firstChildElement("methodName");
	if(methodName.isNull())
		throw RuntimeException(QObject::tr("Not a valid XML-RPC call"));
	function = methodName.firstChild().toText().data().toAscii();

	QDomElement e = root.firstChildElement("params");
	if(!e.isNull())
	{
		QDomElement p = e.firstChildElement("param");
		while(!p.isNull())
		{
			QDomElement value = p.firstChildElement("value");
			if(value.isNull())
				throw RuntimeException(QObject::tr("Invalid XML-RPC call"));

			args << parseValue(value);

			p = p.nextSiblingElement("param");
		}
	}
}
Exemple #17
0
const wchar_t* TcJSONObject::fromObject(const QString&, const wchar_t* ptr)
{
    ptr = skip(ptr);
    if (*ptr == L'{')
    {
        setType(vtfObject);
        do
        {
            ptr = skip(++ptr);
            QString Key;
            ptr = skip(parseKey(Key, ptr));
            if (*ptr == L':')
            {
                ptr = skip(++ptr);

                ptr = parseValue(Key, ptr);
            }
            ptr = skip(ptr);
        } while (ptr && *ptr && *ptr == ',');
        if (ptr && *ptr == L'}')
        {
            ptr = skip(++ptr);
        }
        else
        {
            ptr = 0;
        }
    }
    return ptr;
}
Exemple #18
0
UnprocessedStatement* LessParser::parseRulesetStatement (LessRuleset &ruleset) {
  UnprocessedStatement* statement;
  Selector tokens;
  size_t property_i;
  
  while (parseProperty(tokens) || parsePropertyVariable(tokens)) {}
  
  property_i = tokens.size();

  parseWhitespace(tokens);
  parseSelector(tokens);
  tokens.trim();

  if (tokens.empty())
    return NULL;

  statement = ruleset.createUnprocessedStatement();
  
  statement->getTokens()->swap(tokens);
  statement->property_i = property_i;
    
  if (tokenizer->getTokenType() == Token::BRACKET_OPEN) 
    return statement;
  
  parseValue(*statement->getTokens());
  
  if (tokenizer->getTokenType() == Token::DELIMITER) {
    tokenizer->readNextToken();
    skipWhitespace();
  } 
  return statement;
}
QPair<QStringRef,QStringRef> QDeclarativeStyledTextPrivate::parseAttribute(const QChar *&ch, const QString &textIn)
{
    skipSpace(ch);

    int attrStart = ch - textIn.constData();
    int attrLength = 0;
    while (!ch->isNull()) {
        if (*ch == greaterThan) {
            break;
        } else if (*ch == equals) {
            ++ch;
            if (*ch != singleQuote && *ch != doubleQuote) {
                while (*ch != greaterThan && !ch->isNull())
                    ++ch;
                break;
            }
            ++ch;
            if (!attrLength)
                break;
            QStringRef attr(&textIn, attrStart, attrLength);
            QStringRef val = parseValue(ch, textIn);
            if (!val.isEmpty())
                return QPair<QStringRef,QStringRef>(attr,val);
            break;
        } else {
            ++attrLength;
        }
        ++ch;
    }

    return QPair<QStringRef,QStringRef>();
}
Exemple #20
0
MVJSONNode* MVJSONReader::parse(string text)
{
	string s = trim(text);
	if (s.length() < 2) return NULL;

	// object
	if ((s[0] == '{') && (s[s.length() - 1] == '}'))
	{
		// erase last and first symbols
		s.erase(0, 1);
		s.erase(s.length() - 1, 1);

		vector<string> parts;
		splitList(s, parts);

		MVJSONNode* node = new MVJSONNode();

		for (int i = 0; i < parts.size(); i++)
			node->values.push_back(parseValue(parts.at(i), false));

		return node;
	}

	return NULL;
}
Exemple #21
0
Statement parseStatement( FILE *source, Token token )
{
    Token next_token;
    Expression *value, *term,*expr;

    switch(token.type){
        case Alphabet:
            next_token = scanner(source);
            if(next_token.type == AssignmentOp){
                value = parseValue(source);
                term = parseTerm(source, value);
                expr = parseExpression(source, term);
                return makeAssignmentNode(token.tok, value, expr);
            }
            else{
                printf("Syntax Error: Expect an assignment op %s\n", next_token.tok);
                exit(1);
            }
        case PrintOp:
            next_token = scanner(source);
            if(next_token.type == Alphabet)
                return makePrintNode(next_token.tok);
            else{
                printf("Syntax Error: Expect an identifier %s\n", next_token.tok);
                exit(1);
            }
            break;
        default:
            printf("Syntax Error: Expect a statement %s\n", token.tok);
            exit(1);
    }
}
Exemple #22
0
MVJSONValue* MVJSONReader::parseValue(string text, bool hasNoName)
{
	string key;
	string s;
	splitInHalf(text, ":", key, s);
	key = trim(key);
	s = trim(s);
	if (key.length() > 2)
	{
		// strip "
		key.erase(0, 1);
		key.erase(key.length() - 1, 1);
	}

	if (hasNoName)
	{
		s = text;
		key = "";
	}


	if (s == "false") // bool
		return new MVJSONValue(key, false);

	if (s == "true")  // bool
		return new MVJSONValue(key, true);

	if (s == "null") // null
		return new MVJSONValue(key, MVJSON_TYPE_NULL);

	char first = s[0];

	if (first == '"') // string
		return new MVJSONValue(key, s.substr(1, s.length() - 2));

	if (first == '{') // object
		return new MVJSONValue(key, parse(s));

	if (first == '[') // array
	{
		s.erase(0, 1);
		s.erase(s.length() - 1, 1);
		vector<string> parts;
		splitList(s, parts);

		MVJSONValue* val = new MVJSONValue(key, MVJSON_TYPE_ARRAY);
		for (int i = 0; i < parts.size(); i++)
			val->arrayValue.push_back(parseValue(parts.at(i), true));
		return val;
	}

	// else its number!
	if (s.find(".") == string::npos)
		return new MVJSONValue(key, stringToInt(s));
	else
		return new MVJSONValue(key, stringToDouble(s));

}
Exemple #23
0
int
Options::handleFixed( SimpleArg &arg, int & /*argno*/ )
{
    if ( ST_CMD == m_state ) {
        if ( !lookupCommand( arg ) ) {
            fprintf(stderr, "Invalid command '%s'\n", arg.Arg() );
            printf("%s", m_usage);
            m_state = ST_NONE;
            return -1;
        }
        if ( CMD_LIST == m_command ) {
            m_state = ST_NONE;
            return 1;
        }
        else if ( CMD_DUMP == m_command ) {
            m_field = lookupField( "all" );
            if ( NULL == m_field ) {
                assert( 0 );
            }
        }
        m_state = ST_FILE;
    }
    else if ( ST_FILE == m_state ) {
        m_file = arg.Arg();
        m_state = ST_FIELD;
    }
    else if ( ST_FIELD == m_state ) {
        m_field = lookupField( arg );
        if ( NULL == m_field ) {
            fprintf(stderr, "Invalid field '%s'\n", arg.Arg() );
            printf("%s", m_usage);
            m_state = ST_NONE;
            return -1;
        }

        if ( 0 == m_field->m_max_values ) {
            m_state = ST_NONE;
            return 1;
        }
        m_state = ST_VALUES;
    }
    else if (  ( ST_VALUES == m_state ) &&
               ( m_field ) &&
               ( m_num_values < m_field->m_max_values ) ) {
        if ( !parseValue( arg ) ) {
            fprintf(stderr, "Invalid value for %s: '%s'\n",
                    m_field->m_name, arg.Arg() );
            return -1;
        }
        m_num_values++;
    }
    else {
        fprintf(stderr, "Unexpected arg '%s'\n", arg.Arg() );
        return -1;
    }

    return 0;
}
Exemple #24
0
QVariant XmlRpc::parseResponse(const QByteArray& response)
{
	QDomDocument doc;
	QDomElement root;
	QString msg;
	bool bFault;
	
	if(!doc.setContent(response, false, &msg))
		throw RuntimeException(msg);
	
	root = doc.documentElement();
	if(root.tagName() != "methodResponse")
		throw RuntimeException(QObject::tr("Not a XML-RPC response"));
	
	QDomElement e = root.firstChildElement();
	if(e.tagName() == "fault")
		bFault = true;
	else if(e.tagName() == "params")
		bFault = false;
	else
		throw RuntimeException(QObject::tr("Not a XML-RPC response"));
	
	if(!bFault)
	{
		QDomElement p = e.firstChildElement("param");
		if(p.isNull())
			return QVariant();

		QDomElement value = p.firstChildElement("value");
		if(value.isNull())
			throw RuntimeException(QObject::tr("Invalid XML-RPC response"));
			
		return parseValue(value);
	}
	else
	{
		QDomElement value = e.firstChildElement("value");
		if(value.isNull())
			throw RuntimeException(QObject::tr("Server is indicating an unknown failure"));
		
		QMap<QString, QVariant> v = parseValue(value).toMap();
		throw RuntimeException(QString("%1 %2").arg(v["faultCode"].toString()).arg(v["faultString"].toString()));
	}
}
Exemple #25
0
// Build an array from input text.
int
aJsonClass::parseArray(aJsonObject *item, FILE* stream, char** filter)
{
  int in = fgetc(stream);
  if (in != '[')
    {
      return EOF; // not an array!
    }

  item->type = aJson_Array;
  skip(stream);
  in = fgetc(stream);
  //check for empty array
  if (in == ']')
    {
      return 0; // empty array.
    }
  //now put back the last character
  ungetc(in, stream);
  aJsonObject *child;
  char first = -1;
  while ((first) || (in == ','))
    {
      aJsonObject *new_item = newItem();
      if (new_item == NULL)
        {
          return EOF; // memory fail
        }
      if (first)
        {
          item->child = new_item;
          first = 0;
        }
      else
        {
          child->next = new_item;
          new_item->prev = child;
        }
      child = new_item;
      skip(stream);
      if (parseValue(child, stream, filter))
        {
          return EOF;
        }
      skip(stream);
      in = fgetc(stream);
    }
  if (in == ']')
    {
      return 0; // end of array
    }
  else
    {
      return EOF; // malformed.
    }
}
Exemple #26
0
bool parseObject(File& file, Object& out_obj)
{
	file.str++; // consume '{'

	skipWhitespaces(file);

	while(*file.str != '}')
	{
		std::string key;

		uint32_t key_line_num = file.current_line_num;

		if(!parseIdentifier(file, key))
		{
			std::cout << "Line " << key_line_num << ": Error parsing identifier!\n";
			return false;
		}
		else if(key.empty())
		{
			std::cout << "Line " << key_line_num << ": Identifier can't be an empty string!\n";
			return false;
		}

		if(out_obj[key] != nullptr)
		{
			std::cout << "Line " << key_line_num << ": Key '" << key << "' already exists!\n";
			return false;
		}

		skipWhitespaces(file);

		if(*file.str != '=')
		{
			std::cout << "Line " << file.current_line_num << ": Expected '=' not found!\n";
			return false;
		}

		file.str++; //consume '='

		skipWhitespaces(file);

		Value value;

		if(!parseValue(file, value))
			return false;

		out_obj.insert(std::move(key), std::move(value), key_line_num);

		skipWhitespaces(file);
	}

	//consume '}'
	file.str++;

	return true;
}
Exemple #27
0
boost::shared_ptr<CSMFilter::Node> CSMFilter::Parser::parseImp (bool allowEmpty, bool ignoreOneShot)
{
    if (Token token = getNextToken())
    {
        if (token==Token (Token::Type_OneShot))
            token = getNextToken();

        if (token)
            switch (token.mType)
            {
                case Token::Type_Keyword_True:

                    return boost::shared_ptr<CSMFilter::Node> (new BooleanNode (true));

                case Token::Type_Keyword_False:

                    return boost::shared_ptr<CSMFilter::Node> (new BooleanNode (false));

                case Token::Type_Keyword_And:
                case Token::Type_Keyword_Or:

                    return parseNAry (token);

                case Token::Type_Keyword_Not:
                {
                    boost::shared_ptr<CSMFilter::Node> node = parseImp();

                    if (mError)
                        return boost::shared_ptr<Node>();

                    return boost::shared_ptr<CSMFilter::Node> (new NotNode (node));
                }

                case Token::Type_Keyword_Text:

                    return parseText();

                case Token::Type_Keyword_Value:

                    return parseValue();

                case Token::Type_EOS:

                    if (!allowEmpty)
                        error();

                    return boost::shared_ptr<Node>();

                default:

                    error();
            }
    }

    return boost::shared_ptr<Node>();
}
bool CommandAttribute::check(const char *data)
{
	StringTokenizer st(data);
	string name = st.next();
	string val = parseValue( string(data) );

	if(name.empty() || ( val.empty() && m_type != AttributeType::NONE ) )
		return false;

	//check if the attribute hasn't already been processed
	if (m_dirty)
		return false;

	//check name
	if(strcmp(name.c_str(), m_name) != 0)
		return false;
	
	//check attribute type
	switch(m_type)
	{
		case AttributeType::INTEGER:		
			if(val.find_first_not_of("-1234567890") != string::npos)
				return false;
			break;

		case AttributeType::FLOAT:		
			if(val.find_first_not_of("-1234567890.") != string::npos)
				return false;
			break;

		case AttributeType::STRING:
		{
			bool containsNumbers = (val.find_first_of("-1234567890.") != string::npos);
			bool containsNonNumbers = (val.find_first_not_of("-1234567890.<>\"") != string::npos);
			if(containsNumbers && !containsNonNumbers)
				return false;
			break;
		}

		case AttributeType::VEC3F:
		{
			size_t xpos = val.find_first_of('x');
			if(xpos == string::npos)
				return false;
			size_t ypos = val.find_first_of('y');
			if(ypos == string::npos)
				return false;
			size_t zpos = val.find_first_of('z');
			if(zpos == string::npos)
				return false;
			break;
		}
	}

	return true;
}
InputMatrix::InputMatrix(std::istream& input)
{
    START_COLLECT_TIME(readingInput, Counters::ReadingInput);
    input >> _rowsCount;

    input >> _qColsCount;
    _qMatrix = new int[_rowsCount * _qColsCount];
    _qMinimum = new int[_qColsCount];
    _qMaximum = new int[_qColsCount];
    for(auto j=0; j<_qColsCount; ++j) {
        _qMinimum[j] = DASH;
        _qMaximum[j] = DASH;
    }
    for(auto i=0; i<_rowsCount; ++i) {
        for(auto j=0; j<_qColsCount; ++j) {
            auto value = parseValue(input);
            setFeature(i, j, value);
            if (value != DASH) {
                if (_qMinimum[j] == DASH || value < _qMinimum[j])
                    _qMinimum[j] = value;
                if (_qMaximum[j] == DASH || _qMaximum[j] < value)
                    _qMaximum[j] = value;
            }
        }
    }
    
    input >> _rColsCount;
    _rMatrix = new int[_rowsCount * _rColsCount];
    for(auto i=0; i<_rowsCount; ++i) {
        for(auto j=0; j<_rColsCount; ++j) {
            setImage(i, j, parseValue(input));
        }
    }
    
    _r2Matrix = new int[_rowsCount];
    STOP_COLLECT_TIME(readingInput);

    START_COLLECT_TIME(preparingInput, Counters::PreparingInput);
    calcR2Matrix();
    sortMatrix();
    calcR2Indexes();
    STOP_COLLECT_TIME(preparingInput);
}
Exemple #30
0
CCObject *CCJson::parseObject(Json *pJson) {
    CCDictionary *root = CCDictionary::create();
    for (Json *item = pJson; item; item = item->next) {
        CCObject *value = parseValue(item);
        if (value) {
            root->setObject(value, item->name);
        }
    }
    return root;
}