mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-22 03:15:07 +00:00
95 lines
2.5 KiB
C++
95 lines
2.5 KiB
C++
/**
|
|
* This file has no copyright assigned and is placed in the Public Domain.
|
|
* This file is part of the mingw-w64 runtime package.
|
|
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
|
*/
|
|
#ifndef _SQL_1_H_
|
|
#define _SQL_1_H_
|
|
|
|
struct SQL_LEVEL_1_TOKEN {
|
|
enum { OP_EXPRESSION = 1,TOKEN_AND,TOKEN_OR,TOKEN_NOT };
|
|
enum { IFUNC_NONE = 0,IFUNC_UPPER = 1,IFUNC_LOWER = 2 };
|
|
int nTokenType;
|
|
enum { OP_EQUAL = 1,OP_NOT_EQUAL,OP_EQUALorGREATERTHAN,OP_EQUALorLESSTHAN,OP_LESSTHAN,OP_GREATERTHAN,OP_LIKE };
|
|
BSTR pPropertyName;
|
|
int nOperator;
|
|
WINBOOL bConstIsStrNumeric;
|
|
VARIANT vConstValue;
|
|
BSTR pPropName2;
|
|
DWORD dwPropertyFunction;
|
|
DWORD dwConstFunction;
|
|
SQL_LEVEL_1_TOKEN();
|
|
SQL_LEVEL_1_TOKEN(SQL_LEVEL_1_TOKEN&);
|
|
~SQL_LEVEL_1_TOKEN();
|
|
SQL_LEVEL_1_TOKEN& operator=(SQL_LEVEL_1_TOKEN &Src);
|
|
void Dump(FILE *);
|
|
};
|
|
|
|
struct SQL_LEVEL_1_RPN_EXPRESSION {
|
|
int nNumTokens;
|
|
int nCurSize;
|
|
SQL_LEVEL_1_TOKEN *pArrayOfTokens;
|
|
BSTR bsClassName;
|
|
int nNumberOfProperties;
|
|
int nCurPropSize;
|
|
BSTR *pbsRequestedPropertyNames;
|
|
SQL_LEVEL_1_RPN_EXPRESSION();
|
|
~SQL_LEVEL_1_RPN_EXPRESSION();
|
|
void AddToken(SQL_LEVEL_1_TOKEN *pTok);
|
|
void AddToken(SQL_LEVEL_1_TOKEN &pTok);
|
|
void AddProperty(LPWSTR pProp);
|
|
void Dump(const char *pszTextFile);
|
|
};
|
|
|
|
class SQL1_Parser {
|
|
CGenLexer *m_pLexer;
|
|
int m_nLine;
|
|
wchar_t *m_pTokenText;
|
|
int m_nCurrentToken;
|
|
SQL_LEVEL_1_RPN_EXPRESSION *m_pExpression;
|
|
void Cleanup();
|
|
void Init(CGenLexSource *pSrc);
|
|
VARIANT m_vTypedConst;
|
|
int m_nRelOp;
|
|
DWORD m_dwConstFunction;
|
|
DWORD m_dwPropFunction;
|
|
LPWSTR m_pIdent;
|
|
LPWSTR m_pPropComp;
|
|
WINBOOL m_bConstIsStrNumeric;
|
|
WINBOOL Next();
|
|
int parse();
|
|
int prop_list();
|
|
int class_name();
|
|
int opt_where();
|
|
int expr();
|
|
int property_name();
|
|
int prop_list_2();
|
|
int term();
|
|
int expr2();
|
|
int simple_expr();
|
|
int term2();
|
|
int leading_ident_expr();
|
|
int finalize();
|
|
int rel_operator();
|
|
int equiv_operator();
|
|
int comp_operator();
|
|
int is_operator();
|
|
int trailing_prop_expr();
|
|
int trailing_prop_expr2();
|
|
int trailing_or_null();
|
|
int trailing_const_expr();
|
|
int unknown_func_expr();
|
|
int typed_constant();
|
|
public:
|
|
enum {
|
|
SUCCESS,SYNTAX_ERROR,LEXICAL_ERROR,FAILED,BUFFER_TOO_SMALL
|
|
};
|
|
SQL1_Parser(CGenLexSource *pSrc);
|
|
~SQL1_Parser();
|
|
int GetQueryClass(LPWSTR pBuf,int nBufSize);
|
|
int Parse(SQL_LEVEL_1_RPN_EXPRESSION **pOutput);
|
|
int CurrentLine() { return m_nLine; }
|
|
LPWSTR CurrentToken() { return m_pTokenText; }
|
|
void SetSource(CGenLexSource *pSrc);
|
|
};
|
|
#endif
|