bootscanner.l
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. %{
  2. /*-------------------------------------------------------------------------
  3.  *
  4.  * bootscanner.lex
  5.  *   a lexical scanner for the bootstrap parser
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  *
  10.  * IDENTIFICATION
  11.  *   $Header: /usr/local/cvsroot/pgsql/src/backend/bootstrap/bootscanner.l,v 1.12.2.1 1999/08/02 05:56:52 scrappy Exp $
  12.  *
  13.  *-------------------------------------------------------------------------
  14.  */
  15. #include <time.h>
  16. #include "postgres.h"
  17. #include "access/attnum.h"
  18. #include "access/funcindex.h"
  19. #include "access/htup.h"
  20. #include "access/itup.h"
  21. #include "access/skey.h"
  22. #include "access/strat.h"
  23. #include "access/tupdesc.h"
  24. #include "bootstrap/bootstrap.h"
  25. #include "catalog/pg_am.h"
  26. #include "catalog/pg_attribute.h"
  27. #include "catalog/pg_class.h"
  28. #include "nodes/nodes.h"
  29. #include "nodes/parsenodes.h"
  30. #include "nodes/pg_list.h"
  31. #include "nodes/primnodes.h"
  32. #include "parser/scansup.h"
  33. #include "rewrite/prs2lock.h"
  34. #include "storage/block.h"
  35. #include "storage/fd.h"
  36. #include "storage/itemptr.h"
  37. #include "storage/off.h"
  38. #include "utils/nabstime.h"
  39. #include "utils/rel.h"
  40. #include "bootstrap_tokens.h"
  41. #define YY_NO_UNPUT
  42. /* some versions of lex define this as a macro */
  43. #if defined(yywrap)
  44. #undef yywrap
  45. #endif /* yywrap */
  46. YYSTYPE yylval;
  47. int yyline;  /* keep track of the line number for error reporting */
  48. %}
  49. D [0-9]
  50. oct \{D}{D}{D}
  51. Exp [Ee][-+]?{D}+
  52. id ([A-Za-z0-9_]|{oct}|-)+
  53. sid "([^"])*"
  54. arrayid [A-Za-z0-9_]+[{D}*]
  55. %%
  56. open { return(OPEN); }
  57. close { return(XCLOSE); }
  58. create { return(XCREATE); }
  59. OID { return(OBJ_ID); }
  60. bootstrap { return(XBOOTSTRAP); }
  61. _null_ { return(NULLVAL); }
  62. insert { return(INSERT_TUPLE); }
  63. "," { return(COMMA); }
  64. "=" { return(EQUALS); }
  65. "(" { return(LPAREN); }
  66. ")" { return(RPAREN); }
  67. [n] { yyline++; }
  68. [t] ;
  69. " " ;
  70. ^#[^n]* ; /* drop everything after "#" for comments */
  71. "declare" { return(XDECLARE); }
  72. "build" { return(XBUILD); }
  73. "indices" { return(INDICES); }
  74. "index" { return(INDEX); }
  75. "on" { return(ON); }
  76. "using" { return(USING); }
  77. {arrayid} {
  78. yylval.ival = EnterString(MapArrayTypeName((char*)yytext));
  79. return(ID);
  80. }
  81. {id} {
  82. yylval.ival = EnterString(scanstr((char*)yytext));
  83. return(ID);
  84. }
  85. {sid} {
  86. yytext[strlen(yytext)-1] = ''; /* strip off quotes */
  87. yylval.ival = EnterString(scanstr((char*)yytext+1));
  88. yytext[strlen(yytext)] = '"'; /* restore quotes */
  89. return(ID);
  90. }
  91. (-)?{D}+"."{D}*({Exp})? |
  92. (-)?{D}*"."{D}+({Exp})? |
  93. (-)?{D}+{Exp} {
  94. yylval.ival = EnterString((char*)yytext);
  95. return(CONST);
  96. }
  97. . {
  98. printf("syntax error %d : -> %sn", yyline, yytext);
  99. }
  100. %%
  101. int
  102. yywrap(void)
  103. {
  104. return 1;
  105. }
  106. void
  107. yyerror(const char *str)
  108. {
  109. fprintf(stderr,"tsyntax error %d : %s",yyline, str);
  110. }