mirror of
https://github.com/postgres/postgres.git
synced 2025-06-04 00:02:37 -04:00
Lex/yacc source cleanup like indent.
This commit is contained in:
parent
319dbfa736
commit
23db70bf73
@ -2,13 +2,13 @@
|
|||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
* backendparse.y--
|
* backendparse.y--
|
||||||
* yacc parser grammer for the "backend" initialization program.
|
* yacc parser grammer for the "backend" initialization program.
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.4 1996/11/13 20:47:45 scrappy Exp $
|
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.5 1997/09/08 03:19:50 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -16,11 +16,11 @@
|
|||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
|
|
||||||
#include "catalog/pg_attribute.h"
|
#include "catalog/pg_attribute.h"
|
||||||
#include "access/attnum.h"
|
#include "access/attnum.h"
|
||||||
#include "nodes/pg_list.h"
|
#include "nodes/pg_list.h"
|
||||||
#include "access/tupdesc.h"
|
#include "access/tupdesc.h"
|
||||||
#include "storage/fd.h"
|
#include "storage/fd.h"
|
||||||
#include "catalog/pg_am.h"
|
#include "catalog/pg_am.h"
|
||||||
#include "catalog/pg_class.h"
|
#include "catalog/pg_class.h"
|
||||||
#include "nodes/nodes.h"
|
#include "nodes/nodes.h"
|
||||||
#include "rewrite/prs2lock.h"
|
#include "rewrite/prs2lock.h"
|
||||||
@ -57,24 +57,27 @@
|
|||||||
|
|
||||||
#include "miscadmin.h"
|
#include "miscadmin.h"
|
||||||
|
|
||||||
#define DO_START { StartTransactionCommand();\
|
#define DO_START { \
|
||||||
}
|
StartTransactionCommand();\
|
||||||
|
}
|
||||||
|
|
||||||
#define DO_END { CommitTransactionCommand();\
|
#define DO_END { \
|
||||||
if (!Quiet) { EMITPROMPT; }\
|
CommitTransactionCommand();\
|
||||||
fflush(stdout); \
|
if (!Quiet) { EMITPROMPT; }\
|
||||||
}
|
fflush(stdout); \
|
||||||
|
}
|
||||||
|
|
||||||
int num_tuples_read = 0;
|
int num_tuples_read = 0;
|
||||||
static Oid objectid;
|
static Oid objectid;
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%union {
|
%union
|
||||||
List *list;
|
{
|
||||||
IndexElem *ielem;
|
List *list;
|
||||||
char *str;
|
IndexElem *ielem;
|
||||||
int ival;
|
char *str;
|
||||||
|
int ival;
|
||||||
}
|
}
|
||||||
|
|
||||||
%type <list> arg_list
|
%type <list> arg_list
|
||||||
@ -84,7 +87,7 @@ static Oid objectid;
|
|||||||
|
|
||||||
%token <ival> CONST ID
|
%token <ival> CONST ID
|
||||||
%token OPEN XCLOSE XCREATE INSERT_TUPLE
|
%token OPEN XCLOSE XCREATE INSERT_TUPLE
|
||||||
%token STRING XDEFINE
|
%token STRING XDEFINE
|
||||||
%token XDECLARE INDEX ON USING XBUILD INDICES
|
%token XDECLARE INDEX ON USING XBUILD INDICES
|
||||||
%token COMMA EQUALS LPAREN RPAREN
|
%token COMMA EQUALS LPAREN RPAREN
|
||||||
%token OBJ_ID XBOOTSTRAP NULLVAL
|
%token OBJ_ID XBOOTSTRAP NULLVAL
|
||||||
@ -96,228 +99,233 @@ static Oid objectid;
|
|||||||
%%
|
%%
|
||||||
|
|
||||||
TopLevel:
|
TopLevel:
|
||||||
Queries
|
Queries
|
||||||
|
|
|
|
||||||
;
|
;
|
||||||
|
|
||||||
Queries:
|
Queries:
|
||||||
Query
|
Query
|
||||||
| Queries Query
|
| Queries Query
|
||||||
;
|
;
|
||||||
|
|
||||||
Query :
|
Query :
|
||||||
OpenStmt
|
OpenStmt
|
||||||
| CloseStmt
|
| CloseStmt
|
||||||
| CreateStmt
|
| CreateStmt
|
||||||
| InsertStmt
|
| InsertStmt
|
||||||
| DeclareIndexStmt
|
| DeclareIndexStmt
|
||||||
| BuildIndsStmt
|
| BuildIndsStmt
|
||||||
;
|
;
|
||||||
|
|
||||||
OpenStmt:
|
OpenStmt:
|
||||||
OPEN ident
|
OPEN ident
|
||||||
{
|
{
|
||||||
DO_START;
|
DO_START;
|
||||||
boot_openrel(LexIDStr($2));
|
boot_openrel(LexIDStr($2));
|
||||||
DO_END;
|
DO_END;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
CloseStmt:
|
CloseStmt:
|
||||||
XCLOSE ident %prec low
|
XCLOSE ident %prec low
|
||||||
{
|
{
|
||||||
DO_START;
|
DO_START;
|
||||||
closerel(LexIDStr($2));
|
closerel(LexIDStr($2));
|
||||||
DO_END;
|
DO_END;
|
||||||
}
|
}
|
||||||
| XCLOSE %prec high
|
| XCLOSE %prec high
|
||||||
{
|
{
|
||||||
DO_START;
|
DO_START;
|
||||||
closerel(NULL);
|
closerel(NULL);
|
||||||
DO_END;
|
DO_END;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
CreateStmt:
|
CreateStmt:
|
||||||
XCREATE optbootstrap ident LPAREN
|
XCREATE optbootstrap ident LPAREN
|
||||||
{
|
{
|
||||||
DO_START;
|
DO_START;
|
||||||
numattr=(int)0;
|
numattr=(int)0;
|
||||||
}
|
}
|
||||||
typelist
|
typelist
|
||||||
{
|
{
|
||||||
if (!Quiet) putchar('\n');
|
if (!Quiet)
|
||||||
DO_END;
|
putchar('\n');
|
||||||
}
|
DO_END;
|
||||||
RPAREN
|
}
|
||||||
{
|
RPAREN
|
||||||
DO_START;
|
{
|
||||||
|
DO_START;
|
||||||
|
|
||||||
if ($2) {
|
if ($2)
|
||||||
extern Relation reldesc;
|
{
|
||||||
TupleDesc tupdesc;
|
extern Relation reldesc;
|
||||||
|
TupleDesc tupdesc;
|
||||||
|
|
||||||
if (reldesc) {
|
if (reldesc)
|
||||||
puts("create bootstrap: Warning, open relation");
|
{
|
||||||
puts("exists, closing first");
|
puts("create bootstrap: Warning, open relation");
|
||||||
closerel(NULL);
|
puts("exists, closing first");
|
||||||
}
|
closerel(NULL);
|
||||||
if (DebugMode)
|
}
|
||||||
puts("creating bootstrap relation");
|
if (DebugMode)
|
||||||
tupdesc = CreateTupleDesc(numattr,attrtypes);
|
puts("creating bootstrap relation");
|
||||||
reldesc = heap_creatr(LexIDStr($3),
|
tupdesc = CreateTupleDesc(numattr,attrtypes);
|
||||||
DEFAULT_SMGR,
|
reldesc = heap_creatr(LexIDStr($3),
|
||||||
tupdesc);
|
DEFAULT_SMGR,
|
||||||
if (DebugMode)
|
tupdesc);
|
||||||
puts("bootstrap relation created ok");
|
if (DebugMode)
|
||||||
} else {
|
puts("bootstrap relation created ok");
|
||||||
Oid id;
|
}
|
||||||
TupleDesc tupdesc;
|
else
|
||||||
/* extern Oid heap_create();*/
|
{
|
||||||
|
Oid id;
|
||||||
|
TupleDesc tupdesc;
|
||||||
|
/* extern Oid heap_create();*/
|
||||||
|
|
||||||
tupdesc = CreateTupleDesc(numattr,attrtypes);
|
tupdesc = CreateTupleDesc(numattr,attrtypes);
|
||||||
id = heap_create(LexIDStr($3),
|
id = heap_create(LexIDStr($3),
|
||||||
NULL,
|
NULL,
|
||||||
'n',
|
'n',
|
||||||
DEFAULT_SMGR,
|
DEFAULT_SMGR,
|
||||||
tupdesc);
|
tupdesc);
|
||||||
if (!Quiet)
|
if (!Quiet)
|
||||||
printf("CREATED relation %s with OID %d\n",
|
printf("CREATED relation %s with OID %d\n",
|
||||||
LexIDStr($3), id);
|
LexIDStr($3), id);
|
||||||
}
|
}
|
||||||
DO_END;
|
DO_END;
|
||||||
if (DebugMode)
|
if (DebugMode)
|
||||||
puts("Commit End");
|
puts("Commit End");
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
InsertStmt:
|
InsertStmt:
|
||||||
INSERT_TUPLE optoideq
|
INSERT_TUPLE optoideq
|
||||||
{
|
{
|
||||||
DO_START;
|
DO_START;
|
||||||
if (DebugMode)
|
if (DebugMode)
|
||||||
printf("tuple %d<", $2);
|
printf("tuple %d<", $2);
|
||||||
num_tuples_read = 0;
|
num_tuples_read = 0;
|
||||||
}
|
}
|
||||||
LPAREN tuplelist RPAREN
|
LPAREN tuplelist RPAREN
|
||||||
{
|
{
|
||||||
if (num_tuples_read != numattr)
|
if (num_tuples_read != numattr)
|
||||||
elog(WARN,"incorrect number of values for tuple");
|
elog(WARN,"incorrect number of values for tuple");
|
||||||
if (reldesc == (Relation)NULL) {
|
if (reldesc == (Relation)NULL)
|
||||||
elog(WARN,"must OPEN RELATION before INSERT\n");
|
{
|
||||||
err_out();
|
elog(WARN,"must OPEN RELATION before INSERT\n");
|
||||||
}
|
err_out();
|
||||||
if (DebugMode)
|
}
|
||||||
puts("Insert Begin");
|
if (DebugMode)
|
||||||
objectid = $2;
|
puts("Insert Begin");
|
||||||
InsertOneTuple(objectid);
|
objectid = $2;
|
||||||
if (DebugMode)
|
InsertOneTuple(objectid);
|
||||||
puts("Insert End");
|
if (DebugMode)
|
||||||
if (!Quiet) { putchar('\n'); }
|
puts("Insert End");
|
||||||
DO_END;
|
if (!Quiet)
|
||||||
if (DebugMode)
|
putchar('\n');
|
||||||
puts("Transaction End");
|
DO_END;
|
||||||
}
|
if (DebugMode)
|
||||||
;
|
puts("Transaction End");
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
DeclareIndexStmt:
|
DeclareIndexStmt:
|
||||||
XDECLARE INDEX ident ON ident USING ident LPAREN index_params RPAREN
|
XDECLARE INDEX ident ON ident USING ident LPAREN index_params RPAREN
|
||||||
{
|
{
|
||||||
List *params;
|
List *params;
|
||||||
|
|
||||||
DO_START;
|
DO_START;
|
||||||
|
|
||||||
params = lappend(NIL, (List*)$9);
|
params = lappend(NIL, (List*)$9);
|
||||||
DefineIndex(LexIDStr($5),
|
DefineIndex(LexIDStr($5),
|
||||||
LexIDStr($3),
|
LexIDStr($3),
|
||||||
LexIDStr($7),
|
LexIDStr($7),
|
||||||
params, NIL, 0, 0, NIL);
|
params, NIL, 0, 0, NIL);
|
||||||
DO_END;
|
DO_END;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
BuildIndsStmt:
|
BuildIndsStmt:
|
||||||
XBUILD INDICES { build_indices(); }
|
XBUILD INDICES { build_indices(); }
|
||||||
|
|
||||||
index_params:
|
index_params:
|
||||||
index_on ident
|
index_on ident
|
||||||
{
|
{
|
||||||
IndexElem *n = (IndexElem*)$1;
|
IndexElem *n = (IndexElem*)$1;
|
||||||
n->class = LexIDStr($2);
|
n->class = LexIDStr($2);
|
||||||
$$ = n;
|
$$ = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
index_on:
|
index_on:
|
||||||
ident
|
ident
|
||||||
{
|
{
|
||||||
IndexElem *n = makeNode(IndexElem);
|
IndexElem *n = makeNode(IndexElem);
|
||||||
n->name = LexIDStr($1);
|
n->name = LexIDStr($1);
|
||||||
$$ = n;
|
$$ = n;
|
||||||
}
|
}
|
||||||
| ident LPAREN arg_list RPAREN
|
| ident LPAREN arg_list RPAREN
|
||||||
{
|
{
|
||||||
IndexElem *n = makeNode(IndexElem);
|
IndexElem *n = makeNode(IndexElem);
|
||||||
n->name = LexIDStr($1);
|
n->name = LexIDStr($1);
|
||||||
n->args = (List*)$3;
|
n->args = (List*)$3;
|
||||||
$$ = n;
|
$$ = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
arg_list:
|
arg_list:
|
||||||
ident
|
ident
|
||||||
{
|
{
|
||||||
$$ = lappend(NIL, makeString(LexIDStr($1)));
|
$$ = lappend(NIL, makeString(LexIDStr($1)));
|
||||||
}
|
}
|
||||||
| arg_list COMMA ident
|
| arg_list COMMA ident
|
||||||
{
|
{
|
||||||
$$ = lappend((List*)$1, makeString(LexIDStr($3)));
|
$$ = lappend((List*)$1, makeString(LexIDStr($3)));
|
||||||
}
|
}
|
||||||
|
|
||||||
optbootstrap:
|
optbootstrap:
|
||||||
XBOOTSTRAP { $$ = 1; }
|
XBOOTSTRAP { $$ = 1; }
|
||||||
| { $$ = 0; }
|
| { $$ = 0; }
|
||||||
;
|
;
|
||||||
|
|
||||||
typelist:
|
typelist:
|
||||||
typething
|
typething
|
||||||
| typelist COMMA typething
|
| typelist COMMA typething
|
||||||
;
|
;
|
||||||
|
|
||||||
typething:
|
typething:
|
||||||
ident EQUALS ident
|
ident EQUALS ident
|
||||||
{
|
{
|
||||||
if(++numattr > MAXATTR)
|
if(++numattr > MAXATTR)
|
||||||
elog(FATAL,"Too many attributes\n");
|
elog(FATAL,"Too many attributes\n");
|
||||||
DefineAttr(LexIDStr($1),LexIDStr($3),numattr-1);
|
DefineAttr(LexIDStr($1),LexIDStr($3),numattr-1);
|
||||||
if (DebugMode)
|
if (DebugMode)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
optoideq:
|
optoideq:
|
||||||
OBJ_ID EQUALS ident { $$ = atol(LexIDStr($3)); }
|
OBJ_ID EQUALS ident { $$ = atol(LexIDStr($3)); }
|
||||||
| { extern Oid newoid(); $$ = newoid(); }
|
| { extern Oid newoid(); $$ = newoid(); }
|
||||||
;
|
;
|
||||||
|
|
||||||
tuplelist:
|
tuplelist:
|
||||||
tuple
|
tuple
|
||||||
| tuplelist tuple
|
| tuplelist tuple
|
||||||
| tuplelist COMMA tuple
|
| tuplelist COMMA tuple
|
||||||
;
|
;
|
||||||
|
|
||||||
tuple:
|
tuple:
|
||||||
ident {InsertOneValue(objectid, LexIDStr($1), num_tuples_read++); }
|
ident {InsertOneValue(objectid, LexIDStr($1), num_tuples_read++); }
|
||||||
| const {InsertOneValue(objectid, LexIDStr($1), num_tuples_read++); }
|
| const {InsertOneValue(objectid, LexIDStr($1), num_tuples_read++); }
|
||||||
| NULLVAL
|
| NULLVAL
|
||||||
{ InsertOneNull(num_tuples_read++); }
|
{ InsertOneNull(num_tuples_read++); }
|
||||||
;
|
;
|
||||||
|
|
||||||
const :
|
const :
|
||||||
CONST { $$=yylval.ival; }
|
CONST { $$=yylval.ival; }
|
||||||
;
|
;
|
||||||
|
|
||||||
ident :
|
ident :
|
||||||
ID { $$=yylval.ival; }
|
ID { $$=yylval.ival; }
|
||||||
;
|
;
|
||||||
%%
|
%%
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
* bootscanner.lex--
|
* bootscanner.lex--
|
||||||
* a lexical scanner for the bootstrap parser
|
* a lexical scanner for the bootstrap parser
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootscanner.l,v 1.6 1997/01/10 20:16:26 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootscanner.l,v 1.7 1997/09/08 03:19:53 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -29,7 +29,7 @@
|
|||||||
#include "storage/fd.h"
|
#include "storage/fd.h"
|
||||||
#include "catalog/pg_am.h"
|
#include "catalog/pg_am.h"
|
||||||
#include "catalog/pg_class.h"
|
#include "catalog/pg_class.h"
|
||||||
#include "nodes/nodes.h"
|
#include "nodes/nodes.h"
|
||||||
#include "rewrite/prs2lock.h"
|
#include "rewrite/prs2lock.h"
|
||||||
#include "access/skey.h"
|
#include "access/skey.h"
|
||||||
#include "access/strat.h"
|
#include "access/strat.h"
|
||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
#include "nodes/primnodes.h"
|
#include "nodes/primnodes.h"
|
||||||
#include "utils/nabstime.h"
|
#include "utils/nabstime.h"
|
||||||
#include "access/htup.h"
|
#include "access/htup.h"
|
||||||
#include "utils/tqual.h"
|
#include "utils/tqual.h"
|
||||||
#include "nodes/parsenodes.h"
|
#include "nodes/parsenodes.h"
|
||||||
|
|
||||||
@ -46,82 +46,82 @@
|
|||||||
|
|
||||||
#include "bootstrap_tokens.h"
|
#include "bootstrap_tokens.h"
|
||||||
|
|
||||||
#define YY_NO_UNPUT
|
#define YY_NO_UNPUT
|
||||||
|
|
||||||
/* some versions of lex define this as a macro */
|
/* some versions of lex define this as a macro */
|
||||||
#if defined(yywrap)
|
#if defined(yywrap)
|
||||||
#undef yywrap
|
#undef yywrap
|
||||||
#endif /* yywrap */
|
#endif /* yywrap */
|
||||||
|
|
||||||
YYSTYPE yylval;
|
YYSTYPE yylval;
|
||||||
int yyline; /* keep track of the line number for error reporting */
|
int yyline; /* keep track of the line number for error reporting */
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
D [0-9]
|
D [0-9]
|
||||||
oct \\{D}{D}{D}
|
oct \\{D}{D}{D}
|
||||||
Exp [Ee][-+]?{D}+
|
Exp [Ee][-+]?{D}+
|
||||||
id ([A-Za-z0-9_]|{oct}|\-)+
|
id ([A-Za-z0-9_]|{oct}|\-)+
|
||||||
sid \"([^\"])*\"
|
sid \"([^\"])*\"
|
||||||
arrayid [A-Za-z0-9_]+\[{D}*\]
|
arrayid [A-Za-z0-9_]+\[{D}*\]
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
open { return(OPEN); }
|
open { return(OPEN); }
|
||||||
|
|
||||||
close { return(XCLOSE); }
|
close { return(XCLOSE); }
|
||||||
|
|
||||||
create { return(XCREATE); }
|
create { return(XCREATE); }
|
||||||
|
|
||||||
OID { return(OBJ_ID); }
|
OID { return(OBJ_ID); }
|
||||||
bootstrap { return(XBOOTSTRAP); }
|
bootstrap { return(XBOOTSTRAP); }
|
||||||
_null_ { return(NULLVAL); }
|
_null_ { return(NULLVAL); }
|
||||||
|
|
||||||
insert { return(INSERT_TUPLE); }
|
insert { return(INSERT_TUPLE); }
|
||||||
|
|
||||||
"," { return(COMMA); }
|
"," { return(COMMA); }
|
||||||
"=" { return(EQUALS); }
|
"=" { return(EQUALS); }
|
||||||
"(" { return(LPAREN); }
|
"(" { return(LPAREN); }
|
||||||
")" { return(RPAREN); }
|
")" { return(RPAREN); }
|
||||||
|
|
||||||
[\n] { yyline++; }
|
[\n] { yyline++; }
|
||||||
[\t] ;
|
[\t] ;
|
||||||
" " ;
|
" " ;
|
||||||
|
|
||||||
^\#[^\n]* ; /* drop everything after "#" for comments */
|
^\#[^\n]* ; /* drop everything after "#" for comments */
|
||||||
|
|
||||||
|
|
||||||
"declare" { return(XDECLARE); }
|
"declare" { return(XDECLARE); }
|
||||||
"build" { return(XBUILD); }
|
"build" { return(XBUILD); }
|
||||||
"indices" { return(INDICES); }
|
"indices" { return(INDICES); }
|
||||||
"index" { return(INDEX); }
|
"index" { return(INDEX); }
|
||||||
"on" { return(ON); }
|
"on" { return(ON); }
|
||||||
"using" { return(USING); }
|
"using" { return(USING); }
|
||||||
{arrayid} {
|
{arrayid} {
|
||||||
yylval.ival = EnterString(MapArrayTypeName((char*)yytext));
|
yylval.ival = EnterString(MapArrayTypeName((char*)yytext));
|
||||||
return(ID);
|
return(ID);
|
||||||
}
|
}
|
||||||
{id} {
|
{id} {
|
||||||
yylval.ival = EnterString(scanstr((char*)yytext));
|
yylval.ival = EnterString(scanstr((char*)yytext));
|
||||||
return(ID);
|
return(ID);
|
||||||
}
|
}
|
||||||
{sid} {
|
{sid} {
|
||||||
yytext[strlen(yytext)-1] = '\0'; /* strip off quotes */
|
yytext[strlen(yytext)-1] = '\0'; /* strip off quotes */
|
||||||
yylval.ival = EnterString(scanstr((char*)yytext+1));
|
yylval.ival = EnterString(scanstr((char*)yytext+1));
|
||||||
yytext[strlen(yytext)] = '"'; /* restore quotes */
|
yytext[strlen(yytext)] = '"'; /* restore quotes */
|
||||||
return(ID);
|
return(ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
(-)?{D}+"."{D}*({Exp})? |
|
(-)?{D}+"."{D}*({Exp})? |
|
||||||
(-)?{D}*"."{D}+({Exp})? |
|
(-)?{D}*"."{D}+({Exp})? |
|
||||||
(-)?{D}+{Exp} {
|
(-)?{D}+{Exp} {
|
||||||
yylval.ival = EnterString((char*)yytext);
|
yylval.ival = EnterString((char*)yytext);
|
||||||
return(CONST);
|
return(CONST);
|
||||||
}
|
}
|
||||||
|
|
||||||
. {
|
. {
|
||||||
printf("syntax error %d : -> %s\n", yyline, yytext);
|
printf("syntax error %d : -> %s\n", yyline, yytext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -130,11 +130,11 @@ insert { return(INSERT_TUPLE); }
|
|||||||
int
|
int
|
||||||
yywrap(void)
|
yywrap(void)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
yyerror(const char *str)
|
yyerror(const char *str)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"\tsyntax error %d : %s",yyline, str);
|
fprintf(stderr,"\tsyntax error %d : %s",yyline, str);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -2,13 +2,13 @@
|
|||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
* scan.l--
|
* scan.l--
|
||||||
* lexical scanner for POSTGRES
|
* lexical scanner for POSTGRES
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.18 1997/09/05 09:05:48 vadim Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.19 1997/09/08 03:20:04 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -64,207 +64,207 @@ int llen;
|
|||||||
char literal[MAX_PARSE_BUFFER];
|
char literal[MAX_PARSE_BUFFER];
|
||||||
|
|
||||||
%}
|
%}
|
||||||
/* OK, here is a short description of lex/flex rules behavior.
|
/* OK, here is a short description of lex/flex rules behavior.
|
||||||
* The longest pattern which matches an input string is always chosen.
|
* The longest pattern which matches an input string is always chosen.
|
||||||
* For equal-length patterns, the first occurring in the rules list is chosen.
|
* For equal-length patterns, the first occurring in the rules list is chosen.
|
||||||
* INITIAL is the starting condition, to which all non-conditional rules apply.
|
* INITIAL is the starting condition, to which all non-conditional rules apply.
|
||||||
* <xc> is an exclusive condition to allow embedded C-style comments.
|
* <xc> is an exclusive condition to allow embedded C-style comments.
|
||||||
* When in an exclusive condition, only those rules defined for that condition apply.
|
* When in an exclusive condition, only those rules defined for that condition apply.
|
||||||
* So, when in condition <xc>, only strings which would terminate the "extended comment"
|
* So, when in condition <xc>, only strings which would terminate the "extended comment"
|
||||||
* trigger any action other than "ignore".
|
* trigger any action other than "ignore".
|
||||||
* The "extended comment" syntax closely resembles allowable operator syntax.
|
* The "extended comment" syntax closely resembles allowable operator syntax.
|
||||||
* Therefore, be sure to match _any_ candidate comment, including those with appended
|
* Therefore, be sure to match _any_ candidate comment, including those with appended
|
||||||
* operator-like symbols. - thomas 1997-07-14
|
* operator-like symbols. - thomas 1997-07-14
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* define an exclusive condition to allow extended C-style comments - tgl 1997-07-12 */
|
/* define an exclusive condition to allow extended C-style comments - tgl 1997-07-12 */
|
||||||
%x xc
|
%x xc
|
||||||
/* define an exclusive condition for quoted strings - tgl 1997-07-30 */
|
/* define an exclusive condition for quoted strings - tgl 1997-07-30 */
|
||||||
%x xq
|
%x xq
|
||||||
|
|
||||||
/* We used to allow double-quoted strings, but SQL doesn't so we won't either */
|
/* We used to allow double-quoted strings, but SQL doesn't so we won't either */
|
||||||
quote '
|
quote '
|
||||||
xqstart {quote}
|
xqstart {quote}
|
||||||
xqstop {quote}
|
xqstop {quote}
|
||||||
xqdouble {quote}{quote}
|
xqdouble {quote}{quote}
|
||||||
xqinside [^\']*
|
xqinside [^\']*
|
||||||
xqliteral [\\].
|
xqliteral [\\].
|
||||||
|
|
||||||
xcline [\/][\*].*[\*][\/]{space}*\n*
|
xcline [\/][\*].*[\*][\/]{space}*\n*
|
||||||
xcstart [\/][\*]{op_and_self}*
|
xcstart [\/][\*]{op_and_self}*
|
||||||
xcstop {op_and_self}*[\*][\/]({space}*|\n)
|
xcstop {op_and_self}*[\*][\/]({space}*|\n)
|
||||||
xcinside [^*]*
|
xcinside [^*]*
|
||||||
xcstar [^/]
|
xcstar [^/]
|
||||||
|
|
||||||
digit [0-9]
|
digit [0-9]
|
||||||
letter [_A-Za-z]
|
letter [_A-Za-z]
|
||||||
letter_or_digit [_A-Za-z0-9]
|
letter_or_digit [_A-Za-z0-9]
|
||||||
|
|
||||||
sysfunc SYS_{letter}{letter_or_digit}*
|
sysfunc SYS_{letter}{letter_or_digit}*
|
||||||
|
|
||||||
identifier {letter}{letter_or_digit}*
|
identifier {letter}{letter_or_digit}*
|
||||||
|
|
||||||
typecast "::"
|
typecast "::"
|
||||||
|
|
||||||
self [,()\[\].;$\:\+\-\*\/\<\>\=\|]
|
self [,()\[\].;$\:\+\-\*\/\<\>\=\|]
|
||||||
selfm {self}[\-][\.0-9]
|
selfm {self}[\-][\.0-9]
|
||||||
|
|
||||||
op_and_self [\~\!\@\#\%\^\&\|\`\?\$\:\+\-\*\/\<\>\=]
|
op_and_self [\~\!\@\#\%\^\&\|\`\?\$\:\+\-\*\/\<\>\=]
|
||||||
|
|
||||||
operator {op_and_self}+
|
operator {op_and_self}+
|
||||||
operatorm {op_and_self}+[\-][\.0-9]
|
operatorm {op_and_self}+[\-][\.0-9]
|
||||||
|
|
||||||
integer -?{digit}+
|
integer -?{digit}+
|
||||||
real -?{digit}+\.{digit}+([Ee][-+]?{digit}+)?
|
real -?{digit}+\.{digit}+([Ee][-+]?{digit}+)?
|
||||||
|
|
||||||
param \${integer}
|
param \${integer}
|
||||||
|
|
||||||
comment "--".*\n
|
comment "--".*\n
|
||||||
comment2 "//".*\n
|
comment2 "//".*\n
|
||||||
|
|
||||||
space [ \t\n\f]
|
space [ \t\n\f]
|
||||||
other .
|
other .
|
||||||
|
|
||||||
%%
|
%%
|
||||||
{sysfunc} {
|
{sysfunc} {
|
||||||
yylval.str = pstrdup(SystemFunctionHandler((char *)yytext));
|
yylval.str = pstrdup(SystemFunctionHandler((char *)yytext));
|
||||||
return (SCONST);
|
return (SCONST);
|
||||||
}
|
}
|
||||||
|
|
||||||
{comment} { /* ignore */ }
|
{comment} { /* ignore */ }
|
||||||
{comment2} { /* ignore */ }
|
{comment2} { /* ignore */ }
|
||||||
|
|
||||||
{xcline} { /* ignore */ }
|
{xcline} { /* ignore */ }
|
||||||
|
|
||||||
<xc>{xcstar} |
|
<xc>{xcstar} |
|
||||||
{xcstart} { BEGIN(xc); }
|
{xcstart} { BEGIN(xc); }
|
||||||
|
|
||||||
<xc>{xcstop} { BEGIN(INITIAL); }
|
<xc>{xcstop} { BEGIN(INITIAL); }
|
||||||
|
|
||||||
<xc>{xcinside} { /* ignore */ }
|
<xc>{xcinside} { /* ignore */ }
|
||||||
|
|
||||||
{xqstart} {
|
{xqstart} {
|
||||||
BEGIN(xq);
|
BEGIN(xq);
|
||||||
llen = 0;
|
llen = 0;
|
||||||
*literal = '\0';
|
*literal = '\0';
|
||||||
}
|
}
|
||||||
<xq>{xqstop} {
|
<xq>{xqstop} {
|
||||||
BEGIN(INITIAL);
|
BEGIN(INITIAL);
|
||||||
yylval.str = pstrdup(scanstr(literal));
|
yylval.str = pstrdup(scanstr(literal));
|
||||||
return (SCONST);
|
return (SCONST);
|
||||||
}
|
}
|
||||||
<xq>{xqdouble} |
|
<xq>{xqdouble} |
|
||||||
<xq>{xqinside} {
|
<xq>{xqinside} {
|
||||||
if ((llen+yyleng) > (MAX_PARSE_BUFFER - 1)) {
|
if ((llen+yyleng) > (MAX_PARSE_BUFFER - 1))
|
||||||
elog(WARN,"quoted string parse buffer of %d chars exceeded",MAX_PARSE_BUFFER);
|
elog(WARN,"quoted string parse buffer of %d chars exceeded",MAX_PARSE_BUFFER);
|
||||||
/* not reached */
|
memcpy(literal+llen, yytext, yyleng+1);
|
||||||
}
|
llen += yyleng;
|
||||||
memcpy(literal+llen, yytext, yyleng+1);
|
}
|
||||||
llen += yyleng;
|
<xq>{xqliteral} {
|
||||||
}
|
if ((llen+yyleng-1) > (MAX_PARSE_BUFFER - 1))
|
||||||
<xq>{xqliteral} {
|
elog(WARN,"quoted string parse buffer of %d chars exceeded",MAX_PARSE_BUFFER);
|
||||||
if ((llen+yyleng-1) > (MAX_PARSE_BUFFER - 1)) {
|
memcpy(literal+llen, yytext+1, yyleng);
|
||||||
elog(WARN,"quoted string parse buffer of %d chars exceeded",MAX_PARSE_BUFFER);
|
llen += yyleng-1;
|
||||||
/* not reached */
|
}
|
||||||
}
|
|
||||||
memcpy(literal+llen, yytext+1, yyleng);
|
|
||||||
llen += yyleng-1;
|
|
||||||
}
|
|
||||||
|
|
||||||
{typecast} { return TYPECAST; }
|
{typecast} { return TYPECAST; }
|
||||||
|
|
||||||
{selfm} {
|
{selfm} {
|
||||||
yyless(yyleng-2);
|
yyless(yyleng-2);
|
||||||
return (yytext[0]);
|
return (yytext[0]);
|
||||||
}
|
}
|
||||||
{self} { return (yytext[0]); }
|
{self} { return (yytext[0]); }
|
||||||
|
|
||||||
{operatorm} {
|
{operatorm} {
|
||||||
yyless(yyleng-2);
|
yyless(yyleng-2);
|
||||||
yylval.str = pstrdup((char*)yytext);
|
yylval.str = pstrdup((char*)yytext);
|
||||||
return (Op);
|
return (Op);
|
||||||
}
|
}
|
||||||
{operator} {
|
{operator} {
|
||||||
if (strcmp((char*)yytext,"!=") == 0)
|
if (strcmp((char*)yytext,"!=") == 0)
|
||||||
yylval.str = pstrdup("<>"); /* compatability */
|
yylval.str = pstrdup("<>"); /* compatability */
|
||||||
else
|
else
|
||||||
yylval.str = pstrdup((char*)yytext);
|
yylval.str = pstrdup((char*)yytext);
|
||||||
return (Op);
|
return (Op);
|
||||||
}
|
}
|
||||||
{param} { yylval.ival = atoi((char*)&yytext[1]);
|
{param} {
|
||||||
return (PARAM);
|
yylval.ival = atoi((char*)&yytext[1]);
|
||||||
}
|
return (PARAM);
|
||||||
{integer} {
|
}
|
||||||
yylval.ival = atoi((char*)yytext);
|
{integer} {
|
||||||
return (ICONST);
|
yylval.ival = atoi((char*)yytext);
|
||||||
}
|
return (ICONST);
|
||||||
{real} {
|
}
|
||||||
char* endptr;
|
{real} {
|
||||||
errno = 0;
|
char* endptr;
|
||||||
yylval.dval = strtod(((char *)yytext),&endptr);
|
|
||||||
if (*endptr != '\0' || errno == ERANGE)
|
errno = 0;
|
||||||
elog(WARN,"\tBad float8 input format\n");
|
yylval.dval = strtod(((char *)yytext),&endptr);
|
||||||
CheckFloat8Val(yylval.dval);
|
if (*endptr != '\0' || errno == ERANGE)
|
||||||
return (FCONST);
|
elog(WARN,"\tBad float8 input format\n");
|
||||||
}
|
CheckFloat8Val(yylval.dval);
|
||||||
|
return (FCONST);
|
||||||
|
}
|
||||||
{identifier} {
|
{identifier} {
|
||||||
int i;
|
int i;
|
||||||
ScanKeyword *keyword;
|
ScanKeyword *keyword;
|
||||||
|
|
||||||
for(i = strlen(yytext); i >= 0; i--)
|
for(i = strlen(yytext); i >= 0; i--)
|
||||||
if (isupper(yytext[i]))
|
if (isupper(yytext[i]))
|
||||||
yytext[i] = tolower(yytext[i]);
|
yytext[i] = tolower(yytext[i]);
|
||||||
|
|
||||||
keyword = ScanKeywordLookup((char*)yytext);
|
|
||||||
if (keyword != NULL) {
|
|
||||||
if ( keyword->value == DEFAULT ) {
|
|
||||||
DefaultStartPosition = CurScanPosition () + yyleng + 1;
|
|
||||||
printf( "default offset is %d\n", DefaultStartPosition);
|
|
||||||
|
|
||||||
} else if ( keyword->value == CHECK ) {
|
keyword = ScanKeywordLookup((char*)yytext);
|
||||||
CheckStartPosition = CurScanPosition () + yyleng + 1;
|
if (keyword != NULL) {
|
||||||
printf( "check offset is %d\n", CheckStartPosition);
|
if ( keyword->value == DEFAULT )
|
||||||
|
{
|
||||||
|
DefaultStartPosition = CurScanPosition () + yyleng + 1;
|
||||||
|
printf( "default offset is %d\n", DefaultStartPosition);
|
||||||
|
}
|
||||||
|
else if ( keyword->value == CHECK )
|
||||||
|
{
|
||||||
|
CheckStartPosition = CurScanPosition () + yyleng + 1;
|
||||||
|
printf( "check offset is %d\n", CheckStartPosition);
|
||||||
|
}
|
||||||
|
return (keyword->value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
yylval.str = pstrdup((char*)yytext);
|
||||||
|
return (IDENT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{space} { /* ignore */ }
|
||||||
|
|
||||||
};
|
{other} { return (yytext[0]); }
|
||||||
|
|
||||||
return (keyword->value);
|
|
||||||
} else {
|
|
||||||
yylval.str = pstrdup((char*)yytext);
|
|
||||||
return (IDENT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{space} { /* ignore */ }
|
|
||||||
|
|
||||||
{other} { return (yytext[0]); }
|
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
void yyerror(char message[])
|
void yyerror(char message[])
|
||||||
{
|
{
|
||||||
elog(WARN, "parser: %s at or near \"%s\"\n", message, yytext);
|
elog(WARN, "parser: %s at or near \"%s\"\n", message, yytext);
|
||||||
}
|
}
|
||||||
|
|
||||||
int yywrap()
|
int yywrap()
|
||||||
{
|
{
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
init_io:
|
init_io:
|
||||||
called by postgres before any actual parsing is done
|
called by postgres before any actual parsing is done
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
init_io()
|
init_io()
|
||||||
{
|
{
|
||||||
/* it's important to set this to NULL
|
/* it's important to set this to NULL
|
||||||
because input()/myinput() checks the non-nullness of parseCh
|
because input()/myinput() checks the non-nullness of parseCh
|
||||||
to know when to pass the string to lex/flex */
|
to know when to pass the string to lex/flex */
|
||||||
parseCh = NULL;
|
parseCh = NULL;
|
||||||
#if defined(FLEX_SCANNER)
|
#if defined(FLEX_SCANNER)
|
||||||
if (YY_CURRENT_BUFFER)
|
if (YY_CURRENT_BUFFER)
|
||||||
yy_flush_buffer(YY_CURRENT_BUFFER);
|
yy_flush_buffer(YY_CURRENT_BUFFER);
|
||||||
#endif /* FLEX_SCANNER */
|
#endif /* FLEX_SCANNER */
|
||||||
BEGIN INITIAL;
|
BEGIN INITIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -274,63 +274,63 @@ init_io()
|
|||||||
int
|
int
|
||||||
input()
|
input()
|
||||||
{
|
{
|
||||||
if (parseCh == NULL) {
|
if (parseCh == NULL)
|
||||||
parseCh = parseString;
|
{
|
||||||
return(*parseCh++);
|
parseCh = parseString;
|
||||||
} else if (*parseCh == '\0') {
|
return(*parseCh++);
|
||||||
return(0);
|
}
|
||||||
} else {
|
else if (*parseCh == '\0')
|
||||||
return(*parseCh++);
|
return(0);
|
||||||
}
|
else
|
||||||
|
return(*parseCh++);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* undo lex input from a string instead of from stdin */
|
/* undo lex input from a string instead of from stdin */
|
||||||
void
|
void
|
||||||
unput(char c)
|
unput(char c)
|
||||||
{
|
{
|
||||||
if (parseCh == NULL) {
|
if (parseCh == NULL)
|
||||||
elog(FATAL, "Unput() failed.\n");
|
elog(FATAL, "Unput() failed.\n");
|
||||||
} else if (c != 0) {
|
else if (c != 0)
|
||||||
*--parseCh = c;
|
*--parseCh = c;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
CurScanPosition(void)
|
CurScanPosition(void)
|
||||||
{
|
{
|
||||||
return (parseCh - parseString - yyleng);
|
return (parseCh - parseString - yyleng);
|
||||||
}
|
}
|
||||||
#endif /* !defined(FLEX_SCANNER) */
|
#endif /* !defined(FLEX_SCANNER) */
|
||||||
|
|
||||||
#ifdef FLEX_SCANNER
|
#ifdef FLEX_SCANNER
|
||||||
/* input routine for flex to read input from a string instead of a file */
|
/* input routine for flex to read input from a string instead of a file */
|
||||||
int
|
int
|
||||||
myinput(char* buf, int max)
|
myinput(char* buf, int max)
|
||||||
{
|
{
|
||||||
int len, copylen;
|
int len, copylen;
|
||||||
|
|
||||||
if (parseCh == NULL) {
|
if (parseCh == NULL)
|
||||||
len = strlen(parseString);
|
{
|
||||||
if (len >= max)
|
len = strlen(parseString);
|
||||||
copylen = max - 1;
|
if (len >= max)
|
||||||
|
copylen = max - 1;
|
||||||
|
else
|
||||||
|
copylen = len;
|
||||||
|
if (copylen > 0)
|
||||||
|
memcpy(buf, parseString, copylen);
|
||||||
|
buf[copylen] = '\0';
|
||||||
|
parseCh = parseString;
|
||||||
|
return copylen;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
copylen = len;
|
return 0; /* end of string */
|
||||||
if (copylen > 0)
|
|
||||||
memcpy(buf, parseString, copylen);
|
|
||||||
buf[copylen] = '\0';
|
|
||||||
parseCh = parseString;
|
|
||||||
return copylen;
|
|
||||||
} else {
|
|
||||||
return 0; /* end of string */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
CurScanPosition(void)
|
CurScanPosition(void)
|
||||||
{
|
{
|
||||||
printf( "current position is %d\n", yy_c_buf_p - yy_current_buffer->yy_ch_buf - yyleng);
|
printf( "current position is %d\n", yy_c_buf_p - yy_current_buffer->yy_ch_buf - yyleng);
|
||||||
|
return (yy_c_buf_p - yy_current_buffer->yy_ch_buf - yyleng);
|
||||||
return (yy_c_buf_p - yy_current_buffer->yy_ch_buf - yyleng);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* FLEX_SCANNER */
|
#endif /* FLEX_SCANNER */
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
%{
|
%{
|
||||||
/*
|
/*
|
||||||
This should work, but non-patched flex 2.5.3 fails because input()
|
This should work, but non-patched flex 2.5.3 fails because input()
|
||||||
doesn't return EOF or '\0'
|
doesn't return EOF or '\0'
|
||||||
Bruce Momjian <root@candle.pha.pa.us>
|
Bruce Momjian <root@candle.pha.pa.us>
|
||||||
*/
|
*/
|
||||||
%}
|
%}
|
||||||
%%
|
%%
|
||||||
|
Loading…
x
Reference in New Issue
Block a user