diff options
Diffstat (limited to 'src/include/parser/gramparse.h')
-rw-r--r-- | src/include/parser/gramparse.h | 80 |
1 files changed, 11 insertions, 69 deletions
diff --git a/src/include/parser/gramparse.h b/src/include/parser/gramparse.h index 09c99091361..41774028b5b 100644 --- a/src/include/parser/gramparse.h +++ b/src/include/parser/gramparse.h @@ -11,7 +11,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/parser/gramparse.h,v 1.49 2009/11/05 23:24:26 tgl Exp $ + * $PostgreSQL: pgsql/src/include/parser/gramparse.h,v 1.50 2009/11/09 18:38:48 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -20,20 +20,11 @@ #define GRAMPARSE_H #include "nodes/parsenodes.h" -#include "parser/keywords.h" +#include "parser/scanner.h" /* - * We track token locations in terms of byte offsets from the start of the - * source string, not the column number/line number representation that - * bison uses by default. Also, to minimize overhead we track only one - * location (usually the first token location) for each construct, not - * the beginning and ending locations as bison does by default. It's - * therefore sufficient to make YYLTYPE an int. - */ -#define YYLTYPE int - -/* - * After defining YYLTYPE, it's safe to include gram.h. + * NB: include gram.h only AFTER including scanner.h, because scanner.h + * is what #defines YYLTYPE. */ #include "parser/gram.h" @@ -44,63 +35,25 @@ typedef struct base_yy_extra_type { /* - * The string the lexer is physically scanning. We keep this mainly so - * that we can cheaply compute the offset of the current token (yytext). + * Fields used by the core scanner. */ - char *scanbuf; - Size scanbuflen; + core_yy_extra_type core_yy_extra; /* - * The keyword list to use. - */ - const ScanKeyword *keywords; - int num_keywords; - - /* - * literalbuf is used to accumulate literal values when multiple rules - * are needed to parse a single literal. Call startlit() to reset buffer - * to empty, addlit() to add text. NOTE: the string in literalbuf is - * NOT necessarily null-terminated, but there always IS room to add a - * trailing null at offset literallen. We store a null only when we - * need it. - */ - char *literalbuf; /* palloc'd expandable buffer */ - int literallen; /* actual current string length */ - int literalalloc; /* current allocated buffer size */ - - int xcdepth; /* depth of nesting in slash-star comments */ - char *dolqstart; /* current $foo$ quote start string */ - - /* first part of UTF16 surrogate pair for Unicode escapes */ - int32 utf16_first_part; - - /* state variables for literal-lexing warnings */ - bool warn_on_first_escape; - bool saw_non_ascii; - - /* - * State variables for filtered_base_yylex(). + * State variables for base_yylex(). */ bool have_lookahead; /* is lookahead info valid? */ int lookahead_token; /* one-token lookahead */ - YYSTYPE lookahead_yylval; /* yylval for lookahead token */ + core_YYSTYPE lookahead_yylval; /* yylval for lookahead token */ YYLTYPE lookahead_yylloc; /* yylloc for lookahead token */ /* - * State variables that belong to the grammar, not the lexer. It's - * simpler to keep these here than to invent a separate structure. - * These fields are unused/undefined if the lexer is invoked on its own. + * State variables that belong to the grammar. */ - List *parsetree; /* final parse result is delivered here */ } base_yy_extra_type; /* - * The type of yyscanner is opaque outside scan.l. - */ -typedef void *base_yyscan_t; - -/* * In principle we should use yyget_extra() to fetch the yyextra field * from a yyscanner struct. However, flex always puts that field first, * and this is sufficiently performance-critical to make it seem worth @@ -110,22 +63,11 @@ typedef void *base_yyscan_t; /* from parser.c */ -extern int filtered_base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, - base_yyscan_t yyscanner); - -/* from scan.l */ -extern base_yyscan_t scanner_init(const char *str, - base_yy_extra_type *yyext, - const ScanKeyword *keywords, - int num_keywords); -extern void scanner_finish(base_yyscan_t yyscanner); extern int base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, - base_yyscan_t yyscanner); -extern int scanner_errposition(int location, base_yyscan_t yyscanner); -extern void scanner_yyerror(const char *message, base_yyscan_t yyscanner); + core_yyscan_t yyscanner); /* from gram.y */ extern void parser_init(base_yy_extra_type *yyext); -extern int base_yyparse(base_yyscan_t yyscanner); +extern int base_yyparse(core_yyscan_t yyscanner); #endif /* GRAMPARSE_H */ |