mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-20 23:03:23 +02:00
164 lines
3.2 KiB
C
164 lines
3.2 KiB
C
#ifndef __PARSER_H__
|
|
#define __PARSER_H__
|
|
|
|
#include <ctype.h>
|
|
#include <limits.h>
|
|
#include "ts_locale.h"
|
|
|
|
typedef enum
|
|
{
|
|
TPS_Base = 0,
|
|
TPS_InUWord,
|
|
TPS_InLatWord,
|
|
TPS_InCyrWord,
|
|
TPS_InUnsignedInt,
|
|
TPS_InSignedIntFirst,
|
|
TPS_InSignedInt,
|
|
TPS_InSpace,
|
|
TPS_InUDecimalFirst,
|
|
TPS_InUDecimal,
|
|
TPS_InDecimalFirst,
|
|
TPS_InDecimal,
|
|
TPS_InVerVersion,
|
|
TPS_InSVerVersion,
|
|
TPS_InVersionFirst,
|
|
TPS_InVersion,
|
|
TPS_InMantissaFirst,
|
|
TPS_InMantissaSign,
|
|
TPS_InMantissa,
|
|
TPS_InHTMLEntityFirst,
|
|
TPS_InHTMLEntity,
|
|
TPS_InHTMLEntityNumFirst,
|
|
TPS_InHTMLEntityNum,
|
|
TPS_InHTMLEntityEnd,
|
|
TPS_InTagFirst,
|
|
TPS_InXMLBegin,
|
|
TPS_InTagCloseFirst,
|
|
TPS_InTagName,
|
|
TPS_InTagBeginEnd,
|
|
TPS_InTag,
|
|
TPS_InTagEscapeK,
|
|
TPS_InTagEscapeKK,
|
|
TPS_InTagBackSleshed,
|
|
TPS_InTagEnd,
|
|
TPS_InCommentFirst,
|
|
TPS_InCommentLast,
|
|
TPS_InComment,
|
|
TPS_InCloseCommentFirst,
|
|
TPS_InCloseCommentLast,
|
|
TPS_InCommentEnd,
|
|
TPS_InHostFirstDomain,
|
|
TPS_InHostDomainSecond,
|
|
TPS_InHostDomain,
|
|
TPS_InPortFirst,
|
|
TPS_InPort,
|
|
TPS_InHostFirstAN,
|
|
TPS_InHost,
|
|
TPS_InEmail,
|
|
TPS_InFileFirst,
|
|
TPS_InFileTwiddle,
|
|
TPS_InPathFirst,
|
|
TPS_InPathFirstFirst,
|
|
TPS_InPathSecond,
|
|
TPS_InFile,
|
|
TPS_InFileNext,
|
|
TPS_InURIFirst,
|
|
TPS_InURIStart,
|
|
TPS_InURI,
|
|
TPS_InFURL,
|
|
TPS_InProtocolFirst,
|
|
TPS_InProtocolSecond,
|
|
TPS_InProtocolEnd,
|
|
TPS_InHyphenLatWordFirst,
|
|
TPS_InHyphenLatWord,
|
|
TPS_InHyphenCyrWordFirst,
|
|
TPS_InHyphenCyrWord,
|
|
TPS_InHyphenUWordFirst,
|
|
TPS_InHyphenUWord,
|
|
TPS_InHyphenValueFirst,
|
|
TPS_InHyphenValue,
|
|
TPS_InHyphenValueExact,
|
|
TPS_InParseHyphen,
|
|
TPS_InParseHyphenHyphen,
|
|
TPS_InHyphenCyrWordPart,
|
|
TPS_InHyphenLatWordPart,
|
|
TPS_InHyphenUWordPart,
|
|
TPS_InHyphenUnsignedInt,
|
|
TPS_InHDecimalPartFirst,
|
|
TPS_InHDecimalPart,
|
|
TPS_InHVersionPartFirst,
|
|
TPS_InHVersionPart,
|
|
TPS_Null /* last state (fake value) */
|
|
} TParserState;
|
|
|
|
/* forward declaration */
|
|
struct TParser;
|
|
|
|
|
|
typedef int (*TParserCharTest) (struct TParser *); /* any p_is* functions
|
|
* except p_iseq */
|
|
typedef void (*TParserSpecial) (struct TParser *); /* special handler for
|
|
* special cases... */
|
|
|
|
typedef struct
|
|
{
|
|
TParserCharTest isclass;
|
|
char c;
|
|
uint16 flags;
|
|
TParserState tostate;
|
|
int type;
|
|
TParserSpecial special;
|
|
} TParserStateActionItem;
|
|
|
|
typedef struct
|
|
{
|
|
TParserState state;
|
|
TParserStateActionItem *action;
|
|
} TParserStateAction;
|
|
|
|
typedef struct TParserPosition
|
|
{
|
|
int posbyte; /* position of parser in bytes */
|
|
int poschar; /* osition of parser in characters */
|
|
int charlen; /* length of current char */
|
|
int lenbytelexeme;
|
|
int lencharlexeme;
|
|
TParserState state;
|
|
struct TParserPosition *prev;
|
|
int flags;
|
|
TParserStateActionItem *pushedAtAction;
|
|
} TParserPosition;
|
|
|
|
typedef struct TParser
|
|
{
|
|
/* string and position information */
|
|
char *str; /* multibyte string */
|
|
int lenstr; /* length of mbstring */
|
|
wchar_t *wstr; /* wide character string */
|
|
int lenwstr; /* length of wsting */
|
|
|
|
/* State of parse */
|
|
int charmaxlen;
|
|
bool usewide;
|
|
TParserPosition *state;
|
|
bool ignore;
|
|
bool wanthost;
|
|
|
|
/* silly char */
|
|
char c;
|
|
|
|
/* out */
|
|
char *lexeme;
|
|
int lenbytelexeme;
|
|
int lencharlexeme;
|
|
int type;
|
|
|
|
} TParser;
|
|
|
|
|
|
TParser *TParserInit(char *, int);
|
|
bool TParserGet(TParser *);
|
|
void TParserClose(TParser *);
|
|
|
|
#endif
|