⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.y

📁 PHP v6.0 For Linux 运行环境:Win9X/ WinME/ WinNT/ Win2K/ WinXP
💻 Y
📖 第 1 页 / 共 3 页
字号:
multiselect_op(A) ::= INTERSECT.  {A = TK_INTERSECT;}multiselect_op(A) ::= EXCEPT.     {A = TK_EXCEPT;}oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)                 groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {  A = sqliteSelectNew(W,X,Y,P,Q,Z,D,L.limit,L.offset);}// The "distinct" nonterminal is true (1) if the DISTINCT keyword is// present and false (0) if it is not.//%type distinct {int}distinct(A) ::= DISTINCT.   {A = 1;}distinct(A) ::= ALL.        {A = 0;}distinct(A) ::= .           {A = 0;}// selcollist is a list of expressions that are to become the return// values of the SELECT statement.  The "*" in statements like// "SELECT * FROM ..." is encoded as a special expression with an// opcode of TK_ALL.//%type selcollist {ExprList*}%destructor selcollist {sqliteExprListDelete($$);}%type sclp {ExprList*}%destructor sclp {sqliteExprListDelete($$);}sclp(A) ::= selcollist(X) COMMA.             {A = X;}sclp(A) ::= .                                {A = 0;}selcollist(A) ::= sclp(P) expr(X) as(Y).     {   A = sqliteExprListAppend(P,X,Y.n?&Y:0);}selcollist(A) ::= sclp(P) STAR. {  A = sqliteExprListAppend(P, sqliteExpr(TK_ALL, 0, 0, 0), 0);}selcollist(A) ::= sclp(P) nm(X) DOT STAR. {  Expr *pRight = sqliteExpr(TK_ALL, 0, 0, 0);  Expr *pLeft = sqliteExpr(TK_ID, 0, 0, &X);  A = sqliteExprListAppend(P, sqliteExpr(TK_DOT, pLeft, pRight, 0), 0);}// An option "AS <id>" phrase that can follow one of the expressions that// define the result set, or one of the tables in the FROM clause.//%type as {Token}as(X) ::= AS nm(Y).    { X = Y; }as(X) ::= ids(Y).      { X = Y; }as(X) ::= .            { X.n = 0; }%type seltablist {SrcList*}%destructor seltablist {sqliteSrcListDelete($$);}%type stl_prefix {SrcList*}%destructor stl_prefix {sqliteSrcListDelete($$);}%type from {SrcList*}%destructor from {sqliteSrcListDelete($$);}// A complete FROM clause.//from(A) ::= .                                 {A = sqliteMalloc(sizeof(*A));}from(A) ::= FROM seltablist(X).               {A = X;}// "seltablist" is a "Select Table List" - the content of the FROM clause// in a SELECT statement.  "stl_prefix" is a prefix of this list.//stl_prefix(A) ::= seltablist(X) joinop(Y).    {   A = X;   if( A && A->nSrc>0 ) A->a[A->nSrc-1].jointype = Y;}stl_prefix(A) ::= .                           {A = 0;}seltablist(A) ::= stl_prefix(X) nm(Y) dbnm(D) as(Z) on_opt(N) using_opt(U). {  A = sqliteSrcListAppend(X,&Y,&D);  if( Z.n ) sqliteSrcListAddAlias(A,&Z);  if( N ){    if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pOn = N; }    else { sqliteExprDelete(N); }  }  if( U ){    if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pUsing = U; }    else { sqliteIdListDelete(U); }  }}seltablist(A) ::= stl_prefix(X) LP seltablist_paren(S) RP                  as(Z) on_opt(N) using_opt(U). {  A = sqliteSrcListAppend(X,0,0);  A->a[A->nSrc-1].pSelect = S;  if( Z.n ) sqliteSrcListAddAlias(A,&Z);  if( N ){    if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pOn = N; }    else { sqliteExprDelete(N); }  }  if( U ){    if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pUsing = U; }    else { sqliteIdListDelete(U); }  }}// A seltablist_paren nonterminal represents anything in a FROM that// is contained inside parentheses.  This can be either a subquery or// a grouping of table and subqueries.//%type seltablist_paren {Select*}%destructor seltablist_paren {sqliteSelectDelete($$);}seltablist_paren(A) ::= select(S).      {A = S;}seltablist_paren(A) ::= seltablist(F).  {   A = sqliteSelectNew(0,F,0,0,0,0,0,-1,0);}%type dbnm {Token}dbnm(A) ::= .          {A.z=0; A.n=0;}dbnm(A) ::= DOT nm(X). {A = X;}%type joinop {int}%type joinop2 {int}joinop(X) ::= COMMA.                   { X = JT_INNER; }joinop(X) ::= JOIN.                    { X = JT_INNER; }joinop(X) ::= JOIN_KW(A) JOIN.         { X = sqliteJoinType(pParse,&A,0,0); }joinop(X) ::= JOIN_KW(A) nm(B) JOIN.   { X = sqliteJoinType(pParse,&A,&B,0); }joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.                                       { X = sqliteJoinType(pParse,&A,&B,&C); }%type on_opt {Expr*}%destructor on_opt {sqliteExprDelete($$);}on_opt(N) ::= ON expr(E).   {N = E;}on_opt(N) ::= .             {N = 0;}%type using_opt {IdList*}%destructor using_opt {sqliteIdListDelete($$);}using_opt(U) ::= USING LP idxlist(L) RP.  {U = L;}using_opt(U) ::= .                        {U = 0;}%type orderby_opt {ExprList*}%destructor orderby_opt {sqliteExprListDelete($$);}%type sortlist {ExprList*}%destructor sortlist {sqliteExprListDelete($$);}%type sortitem {Expr*}%destructor sortitem {sqliteExprDelete($$);}orderby_opt(A) ::= .                          {A = 0;}orderby_opt(A) ::= ORDER BY sortlist(X).      {A = X;}sortlist(A) ::= sortlist(X) COMMA sortitem(Y) collate(C) sortorder(Z). {  A = sqliteExprListAppend(X,Y,0);  if( A ) A->a[A->nExpr-1].sortOrder = C+Z;}sortlist(A) ::= sortitem(Y) collate(C) sortorder(Z). {  A = sqliteExprListAppend(0,Y,0);  if( A ) A->a[0].sortOrder = C+Z;}sortitem(A) ::= expr(X).   {A = X;}%type sortorder {int}%type collate {int}sortorder(A) ::= ASC.           {A = SQLITE_SO_ASC;}sortorder(A) ::= DESC.          {A = SQLITE_SO_DESC;}sortorder(A) ::= .              {A = SQLITE_SO_ASC;}collate(C) ::= .                {C = SQLITE_SO_UNK;}collate(C) ::= COLLATE id(X).   {C = sqliteCollateType(X.z, X.n);}%type groupby_opt {ExprList*}%destructor groupby_opt {sqliteExprListDelete($$);}groupby_opt(A) ::= .                      {A = 0;}groupby_opt(A) ::= GROUP BY exprlist(X).  {A = X;}%type having_opt {Expr*}%destructor having_opt {sqliteExprDelete($$);}having_opt(A) ::= .                {A = 0;}having_opt(A) ::= HAVING expr(X).  {A = X;}%type limit_opt {struct LimitVal}limit_opt(A) ::= .                     {A.limit = -1; A.offset = 0;}limit_opt(A) ::= LIMIT signed(X).      {A.limit = X; A.offset = 0;}limit_opt(A) ::= LIMIT signed(X) OFFSET signed(Y).                                        {A.limit = X; A.offset = Y;}limit_opt(A) ::= LIMIT signed(X) COMMA signed(Y).                                        {A.limit = Y; A.offset = X;}/////////////////////////// The DELETE statement ///////////////////////////////cmd ::= DELETE FROM nm(X) dbnm(D) where_opt(Y). {   sqliteDeleteFrom(pParse, sqliteSrcListAppend(0,&X,&D), Y);}%type where_opt {Expr*}%destructor where_opt {sqliteExprDelete($$);}where_opt(A) ::= .                    {A = 0;}where_opt(A) ::= WHERE expr(X).       {A = X;}%type setlist {ExprList*}%destructor setlist {sqliteExprListDelete($$);}////////////////////////// The UPDATE command //////////////////////////////////cmd ::= UPDATE orconf(R) nm(X) dbnm(D) SET setlist(Y) where_opt(Z).    {sqliteUpdate(pParse,sqliteSrcListAppend(0,&X,&D),Y,Z,R);}setlist(A) ::= setlist(Z) COMMA nm(X) EQ expr(Y).    {A = sqliteExprListAppend(Z,Y,&X);}setlist(A) ::= nm(X) EQ expr(Y).   {A = sqliteExprListAppend(0,Y,&X);}////////////////////////// The INSERT command ///////////////////////////////////cmd ::= insert_cmd(R) INTO nm(X) dbnm(D) inscollist_opt(F)         VALUES LP itemlist(Y) RP.            {sqliteInsert(pParse, sqliteSrcListAppend(0,&X,&D), Y, 0, F, R);}cmd ::= insert_cmd(R) INTO nm(X) dbnm(D) inscollist_opt(F) select(S).            {sqliteInsert(pParse, sqliteSrcListAppend(0,&X,&D), 0, S, F, R);}%type insert_cmd {int}insert_cmd(A) ::= INSERT orconf(R).   {A = R;}insert_cmd(A) ::= REPLACE.            {A = OE_Replace;}%type itemlist {ExprList*}%destructor itemlist {sqliteExprListDelete($$);}itemlist(A) ::= itemlist(X) COMMA expr(Y).  {A = sqliteExprListAppend(X,Y,0);}itemlist(A) ::= expr(X).                    {A = sqliteExprListAppend(0,X,0);}%type inscollist_opt {IdList*}%destructor inscollist_opt {sqliteIdListDelete($$);}%type inscollist {IdList*}%destructor inscollist {sqliteIdListDelete($$);}inscollist_opt(A) ::= .                       {A = 0;}inscollist_opt(A) ::= LP inscollist(X) RP.    {A = X;}inscollist(A) ::= inscollist(X) COMMA nm(Y).  {A = sqliteIdListAppend(X,&Y);}inscollist(A) ::= nm(Y).                      {A = sqliteIdListAppend(0,&Y);}/////////////////////////// Expression Processing ///////////////////////////////%type expr {Expr*}%destructor expr {sqliteExprDelete($$);}expr(A) ::= LP(B) expr(X) RP(E). {A = X; sqliteExprSpan(A,&B,&E); }expr(A) ::= NULL(X).             {A = sqliteExpr(TK_NULL, 0, 0, &X);}expr(A) ::= ID(X).               {A = sqliteExpr(TK_ID, 0, 0, &X);}expr(A) ::= JOIN_KW(X).          {A = sqliteExpr(TK_ID, 0, 0, &X);}expr(A) ::= nm(X) DOT nm(Y). {  Expr *temp1 = sqliteExpr(TK_ID, 0, 0, &X);  Expr *temp2 = sqliteExpr(TK_ID, 0, 0, &Y);  A = sqliteExpr(TK_DOT, temp1, temp2, 0);}expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {  Expr *temp1 = sqliteExpr(TK_ID, 0, 0, &X);  Expr *temp2 = sqliteExpr(TK_ID, 0, 0, &Y);  Expr *temp3 = sqliteExpr(TK_ID, 0, 0, &Z);  Expr *temp4 = sqliteExpr(TK_DOT, temp2, temp3, 0);  A = sqliteExpr(TK_DOT, temp1, temp4, 0);}expr(A) ::= INTEGER(X).      {A = sqliteExpr(TK_INTEGER, 0, 0, &X);}expr(A) ::= FLOAT(X).        {A = sqliteExpr(TK_FLOAT, 0, 0, &X);}expr(A) ::= STRING(X).       {A = sqliteExpr(TK_STRING, 0, 0, &X);}expr(A) ::= VARIABLE(X).     {  A = sqliteExpr(TK_VARIABLE, 0, 0, &X);  if( A ) A->iTable = ++pParse->nVar;}expr(A) ::= ID(X) LP exprlist(Y) RP(E). {  A = sqliteExprFunction(Y, &X);  sqliteExprSpan(A,&X,&E);}expr(A) ::= ID(X) LP STAR RP(E). {  A = sqliteExprFunction(0, &X);  sqliteExprSpan(A,&X,&E);}expr(A) ::= expr(X) AND expr(Y).   {A = sqliteExpr(TK_AND, X, Y, 0);}expr(A) ::= expr(X) OR expr(Y).    {A = sqliteExpr(TK_OR, X, Y, 0);}expr(A) ::= expr(X) LT expr(Y).    {A = sqliteExpr(TK_LT, X, Y, 0);}expr(A) ::= expr(X) GT expr(Y).    {A = sqliteExpr(TK_GT, X, Y, 0);}expr(A) ::= expr(X) LE expr(Y).    {A = sqliteExpr(TK_LE, X, Y, 0);}expr(A) ::= expr(X) GE expr(Y).    {A = sqliteExpr(TK_GE, X, Y, 0);}expr(A) ::= expr(X) NE expr(Y).    {A = sqliteExpr(TK_NE, X, Y, 0);}expr(A) ::= expr(X) EQ expr(Y).    {A = sqliteExpr(TK_EQ, X, Y, 0);}expr(A) ::= expr(X) BITAND expr(Y). {A = sqliteExpr(TK_BITAND, X, Y, 0);}expr(A) ::= expr(X) BITOR expr(Y).  {A = sqliteExpr(TK_BITOR, X, Y, 0);}expr(A) ::= expr(X) LSHIFT expr(Y). {A = sqliteExpr(TK_LSHIFT, X, Y, 0);}expr(A) ::= expr(X) RSHIFT expr(Y). {A = sqliteExpr(TK_RSHIFT, X, Y, 0);}expr(A) ::= expr(X) likeop(OP) expr(Y).  [LIKE]  {  ExprList *pList = sqliteExprListAppend(0, Y, 0);  pList = sqliteExprListAppend(pList, X, 0);  A = sqliteExprFunction(pList, 0);  if( A ) A->op = OP;  sqliteExprSpan(A, &X->span, &Y->span);}expr(A) ::= expr(X) NOT likeop(OP) expr(Y). [LIKE] {  ExprList *pList = sqliteExprListAppend(0, Y, 0);  pList = sqliteExprListAppend(pList, X, 0);  A = sqliteExprFunction(pList, 0);  if( A ) A->op = OP;  A = sqliteExpr(TK_NOT, A, 0, 0);  sqliteExprSpan(A,&X->span,&Y->span);}%type likeop {int}likeop(A) ::= LIKE. {A = TK_LIKE;}likeop(A) ::= GLOB. {A = TK_GLOB;}expr(A) ::= expr(X) PLUS expr(Y).  {A = sqliteExpr(TK_PLUS, X, Y, 0);}expr(A) ::= expr(X) MINUS expr(Y). {A = sqliteExpr(TK_MINUS, X, Y, 0);}expr(A) ::= expr(X) STAR expr(Y).  {A = sqliteExpr(TK_STAR, X, Y, 0);}expr(A) ::= expr(X) SLASH expr(Y). {A = sqliteExpr(TK_SLASH, X, Y, 0);}expr(A) ::= expr(X) REM expr(Y).   {A = sqliteExpr(TK_REM, X, Y, 0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -