// /*------------------------------------------------------------------------- // * // * gramparse.h // * Shared definitions for the "raw" parser (flex and bison phases only) // * // * NOTE: this file is only meant to be included in the core parsing files, // * ie, parser.c, gram.y, scan.l, and keywords.c. Definitions that are needed // * outside the core parser should be in parser.h. // * // * // * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group // * Portions Copyright (c) 1994, Regents of the University of California // * // * src/include/parser/gramparse.h // * // *------------------------------------------------------------------------- // */ // #ifndef GRAMPARSE_H // #define GRAMPARSE_H // #include "nodes/parsenodes.h" // #include "parser/scanner.h" // /* // * NB: include gram.h only AFTER including scanner.h, because scanner.h // * is what #defines YYLTYPE. // */ // #include "parser/gram.h" // /* // * The YY_EXTRA data that a flex scanner allows us to pass around. Private // * state needed for raw parsing/lexing goes here. // */ // typedef struct base_yy_extra_type // { // /* // * Fields used by the core scanner. // */ // core_yy_extra_type core_yy_extra; // /* // * State variables for base_yylex(). // */ // bool have_lookahead; /* is lookahead info valid? */ // int lookahead_token; /* one-token lookahead */ // core_YYSTYPE lookahead_yylval; /* yylval for lookahead token */ // YYLTYPE lookahead_yylloc; /* yylloc for lookahead token */ // /* // * State variables that belong to the grammar. // */ // List *parsetree; /* final parse result is delivered here */ // } base_yy_extra_type; // /* // * 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 // * cheating a bit to use an inline macro. // */ // #define pg_yyget_extra(yyscanner) (*((base_yy_extra_type **) (yyscanner))) // /* from parser.c */ // extern int base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, // core_yyscan_t yyscanner); // /* from gram.y */ // extern void parser_init(base_yy_extra_type *yyext); // extern int base_yyparse(core_yyscan_t yyscanner); // #endif /* GRAMPARSE_H */ /*------------------------------------------------------------------------- * * gramparse.h * Shared definitions for the "raw" parser (flex and bison phases only) * * NOTE: this file is only meant to be included in the core parsing files, * ie, parser.c, gram.y, scan.l, and keywords.c. Definitions that are needed * outside the core parser should be in parser.h. * * * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * src/include/parser/gramparse.h * *------------------------------------------------------------------------- */ #ifndef GRAMPARSE_H #define GRAMPARSE_H #include "nodes/parsenodes.h" #include "parser/scanner.h" /* * NB: include gram.h only AFTER including scanner.h, because scanner.h * is what #defines YYLTYPE. */ #include "parser/gram.h" /* * The YY_EXTRA data that a flex scanner allows us to pass around. Private * state needed for raw parsing/lexing goes here. */ typedef struct base_yy_extra_type { /* * Fields used by the core scanner. */ core_yy_extra_type core_yy_extra; /* * State variables for base_yylex(). */ bool have_lookahead; /* is lookahead info valid? */ int lookahead_token; /* one-token lookahead */ core_YYSTYPE lookahead_yylval; /* yylval for lookahead token */ YYLTYPE lookahead_yylloc; /* yylloc for lookahead token */ /* * State variables that belong to the grammar. */ List *parsetree; /* final parse result is delivered here */ } base_yy_extra_type; /* * 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 * cheating a bit to use an inline macro. */ #define pg_yyget_extra(yyscanner) (*((base_yy_extra_type **) (yyscanner))) /* from parser.c */ extern int base_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, core_yyscan_t yyscanner); /* from gram.y */ extern void parser_init(base_yy_extra_type *yyext); extern int base_yyparse(core_yyscan_t yyscanner); #endif /* GRAMPARSE_H */