diff options
Diffstat (limited to 'src/backend/bootstrap/bootscanner.l')
-rw-r--r-- | src/backend/bootstrap/bootscanner.l | 72 |
1 files changed, 41 insertions, 31 deletions
diff --git a/src/backend/bootstrap/bootscanner.l b/src/backend/bootstrap/bootscanner.l index 1799757da2..739087b786 100644 --- a/src/backend/bootstrap/bootscanner.l +++ b/src/backend/bootstrap/bootscanner.l @@ -68,22 +68,35 @@ static int yyline = 1; /* line number for error reporting */ id [-A-Za-z0-9_]+ sid \"([^\"])*\" +/* + * Keyword tokens return the keyword text (as a constant string) in yylval.kw, + * just in case that's needed because we want to treat the keyword as an + * unreserved identifier. Note that _null_ is not treated as a keyword + * for this purpose; it's the one "reserved word" in the bootstrap syntax. + * + * Notice that all the keywords are case-sensitive, and for historical + * reasons some must be upper case. + * + * String tokens return a palloc'd string in yylval.str. + */ + %% -open { return OPEN; } +open { yylval.kw = "open"; return OPEN; } -close { return XCLOSE; } +close { yylval.kw = "close"; return XCLOSE; } -create { return XCREATE; } +create { yylval.kw = "create"; return XCREATE; } -OID { return OBJ_ID; } -bootstrap { return XBOOTSTRAP; } -"shared_relation" { return XSHARED_RELATION; } -"without_oids" { return XWITHOUT_OIDS; } -"rowtype_oid" { return XROWTYPE_OID; } -_null_ { return NULLVAL; } +OID { yylval.kw = "OID"; return OBJ_ID; } +bootstrap { yylval.kw = "bootstrap"; return XBOOTSTRAP; } +shared_relation { yylval.kw = "shared_relation"; return XSHARED_RELATION; } +without_oids { yylval.kw = "without_oids"; return XWITHOUT_OIDS; } +rowtype_oid { yylval.kw = "rowtype_oid"; return XROWTYPE_OID; } + +insert { yylval.kw = "insert"; return INSERT_TUPLE; } -insert { return INSERT_TUPLE; } +_null_ { return NULLVAL; } "," { return COMMA; } "=" { return EQUALS; } @@ -91,32 +104,31 @@ insert { return INSERT_TUPLE; } ")" { return RPAREN; } [\n] { yyline++; } -[\t] ; -" " ; - -^\#[^\n]* ; /* drop everything after "#" for comments */ - - -"declare" { return XDECLARE; } -"build" { return XBUILD; } -"indices" { return INDICES; } -"unique" { return UNIQUE; } -"index" { return INDEX; } -"on" { return ON; } -"using" { return USING; } -"toast" { return XTOAST; } -"FORCE" { return XFORCE; } -"NOT" { return XNOT; } -"NULL" { return XNULL; } +[\r\t ] ; + +^\#[^\n]* ; /* drop everything after "#" for comments */ + +declare { yylval.kw = "declare"; return XDECLARE; } +build { yylval.kw = "build"; return XBUILD; } +indices { yylval.kw = "indices"; return INDICES; } +unique { yylval.kw = "unique"; return UNIQUE; } +index { yylval.kw = "index"; return INDEX; } +on { yylval.kw = "on"; return ON; } +using { yylval.kw = "using"; return USING; } +toast { yylval.kw = "toast"; return XTOAST; } +FORCE { yylval.kw = "FORCE"; return XFORCE; } +NOT { yylval.kw = "NOT"; return XNOT; } +NULL { yylval.kw = "NULL"; return XNULL; } {id} { yylval.str = scanstr(yytext); return ID; } {sid} { - yytext[strlen(yytext)-1] = '\0'; /* strip off quotes */ + /* leading and trailing quotes are not passed to scanstr */ + yytext[strlen(yytext) - 1] = '\0'; yylval.str = scanstr(yytext+1); - yytext[strlen(yytext)] = '"'; /* restore quotes */ + yytext[strlen(yytext)] = '"'; /* restore yytext */ return ID; } @@ -124,8 +136,6 @@ insert { return INSERT_TUPLE; } elog(ERROR, "syntax error at line %d: unexpected character \"%s\"", yyline, yytext); } - - %% /* LCOV_EXCL_STOP */ |