|
Packit |
1c1d7e |
#ifndef CONDPARSER_H
|
|
Packit |
1c1d7e |
#define CONDPARSER_H
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/**
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit |
1c1d7e |
* input used in their production; they are not affected by this license.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* C++ Expression parser for EXTABLED_SETIONS in Doxygen
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Features used:
|
|
Packit |
1c1d7e |
* Operators:
|
|
Packit |
1c1d7e |
* && AND operator
|
|
Packit |
1c1d7e |
* || OR operator
|
|
Packit |
1c1d7e |
* ! NOT operator
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <qcstring.h>
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class CondParser
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// public functions
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
CondParser() : m_e(0), m_tokenType(NOTHING) {}
|
|
Packit |
1c1d7e |
bool parse(const char *fileName,int lineNr,const char *expr);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// enumerations
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
enum TOKENTYPE
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
NOTHING = -1,
|
|
Packit |
1c1d7e |
DELIMITER,
|
|
Packit |
1c1d7e |
VARIABLE,
|
|
Packit |
1c1d7e |
UNKNOWN
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
enum OPERATOR_ID
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
UNKNOWN_OP = -1,
|
|
Packit |
1c1d7e |
AND = 1,
|
|
Packit |
1c1d7e |
OR,
|
|
Packit |
1c1d7e |
NOT
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// data
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString m_err; //!< error state
|
|
Packit |
1c1d7e |
QCString m_expr; //!< holds the expression
|
|
Packit |
1c1d7e |
const char *m_e; //!< points to a character in expr
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString m_token; //!< holds the token
|
|
Packit |
1c1d7e |
TOKENTYPE m_tokenType; //!< type of the token
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// private functions
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
void getToken();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool parseLevel1();
|
|
Packit |
1c1d7e |
bool parseLevel2();
|
|
Packit |
1c1d7e |
bool parseLevel3();
|
|
Packit |
1c1d7e |
bool parseVar();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool evalOperator(const int opId, bool lhs, bool rhs);
|
|
Packit |
1c1d7e |
bool evalVariable(const char *varName);
|
|
Packit |
1c1d7e |
int getOperatorId(const QCString &opName);
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|