Exemple #1
0
 bool isNumber(const char *s) {
     //  empty space
     //  +/-
     //  [0123456789]
     //  .
     //  [0123456789]
     //  e/E
     //  [0123456789]
     //  empty space
     //  empty string should be treated as false?
     if (s == nullptr || *s == 0) return false;
     //  process empty space
     parseSpace(s);
     if (*s == 0) return false;  //  empty string
     parseSign(s);
     if (*s == 0) return false;
     if (parseDigit(s) == 0) {
         if (!parseDot(s)) return false;
         if (parseDigit(s) == 0) return false;
         if (parseSpace(s) > 0) return *s == 0;
         if (*s == 0) return true;
         if (!parseExp(s)) return false;
         parseSign(s);
         if (parseDigit(s) == 0) return false;
         parseSpace(s);
         return *s == 0;
     } else {
         if (parseSpace(s) > 0) return *s == 0;
         if (*s == 0) return true;
         if (parseDot(s)) {
             parseDigit(s);
             if (parseSpace(s) > 0) return *s == 0;
             if (*s == 0) return true;
             if (!parseExp(s)) return false;
             parseSign(s);
             if (parseDigit(s) == 0) return false;
             parseSpace(s);
             return *s == 0;
         } else if (parseExp(s)) {
             parseSign(s);
             if (parseDigit(s) == 0) return false;
             parseSpace(s);
             return *s == 0;
         } else {
             return false;
         }
     }
 }
Exemple #2
0
QVariantList
parseList(ParserState &st)
{
    skipSpaces(st);
    checkEndOfFile(st);
    if (*st.ptr != '(')
    {
        throw ParserError("list must be started with '('");
    }
    st.ptr++;

    QVariantList list;
    QString i = parseIdentifier(st);
    list.append(i);

    while (st.ptr < st.end)
    {
        if (*st.ptr == ')')
        {
            st.ptr++;
            return list;
        }

        parseSpace(st);

        if (*st.ptr == ')')
        {
            st.ptr++;
            return list;
        }

        if (*st.ptr == '(')
        {
            QVariant v = parseList(st);
            list.append(v);
        }
        else
        {
            list.append(parseAtom(st));
        }
    }

    throw ParserError("unexpected end of file");
}