示例#1
0
bool ParseMarkupSimple(const char *s, MarkupParserCallback *cb)
{
    ParserState *state = new ParserState(s, cb);
    bool ok = ParseSimple(state);
    delete state;
    return ok;
}
示例#2
0
LDAPExpr LDAPExpr::ParseExpr( ParseState& ps )
{
  ps.skipWhite();
  if (!ps.prefix("("))
    ps.error(MALFORMED);

  int op;
  ps.skipWhite();
  Byte c = ps.peek();
  if ( c == '&')
  {
    op = AND;
  }
  else if ( c == '|' )
  {
    op = OR;
  }
  else if ( c == '!' )
  {
    op = NOT;
  }
  else
  {
    return ParseSimple(ps);
  }
  ps.skip(1); // Ignore the d->m_operator

  std::vector<LDAPExpr> v;
  do
  {
    v.push_back(ParseExpr(ps));
    ps.skipWhite();
  } while (ps.peek() == '(');

  std::size_t n = v.size();
  if (!ps.prefix(")") || n == 0 || (op == NOT && n > 1))
    ps.error(MALFORMED);

  return LDAPExpr(op, v);
}