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

📄 scan.l

📁 关系型数据库 Postgresql 6.5.2
💻 L
字号:
%{/********************************************************************** * scan.l		- Scanner for the PL/pgSQL *			  procedural language * * IDENTIFICATION *    $Header: /usr/local/cvsroot/pgsql/src/pl/plpgsql/src/scan.l,v 1.3 1999/05/26 20:55:06 momjian Exp $ * *    This software is copyrighted by Jan Wieck - Hamburg. * *    The author hereby grants permission  to  use,  copy,  modify, *    distribute,  and  license this software and its documentation *    for any purpose, provided that existing copyright notices are *    retained  in  all  copies  and  that  this notice is included *    verbatim in any distributions. No written agreement, license, *    or  royalty  fee  is required for any of the authorized uses. *    Modifications to this software may be  copyrighted  by  their *    author  and  need  not  follow  the licensing terms described *    here, provided that the new terms are  clearly  indicated  on *    the first page of each file where they apply. * *    IN NO EVENT SHALL THE AUTHOR OR DISTRIBUTORS BE LIABLE TO ANY *    PARTY  FOR  DIRECT,   INDIRECT,   SPECIAL,   INCIDENTAL,   OR *    CONSEQUENTIAL   DAMAGES  ARISING  OUT  OF  THE  USE  OF  THIS *    SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN *    IF  THE  AUTHOR  HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH *    DAMAGE. * *    THE  AUTHOR  AND  DISTRIBUTORS  SPECIFICALLY   DISCLAIM   ANY *    WARRANTIES,  INCLUDING,  BUT  NOT  LIMITED  TO,  THE  IMPLIED *    WARRANTIES  OF  MERCHANTABILITY,  FITNESS  FOR  A  PARTICULAR *    PURPOSE,  AND NON-INFRINGEMENT.  THIS SOFTWARE IS PROVIDED ON *    AN "AS IS" BASIS, AND THE AUTHOR  AND  DISTRIBUTORS  HAVE  NO *    OBLIGATION   TO   PROVIDE   MAINTENANCE,   SUPPORT,  UPDATES, *    ENHANCEMENTS, OR MODIFICATIONS. * **********************************************************************/static char	*plpgsql_source;static int	plpgsql_bytes_left;static int	scanner_functype;static int	scanner_typereported;int	plpgsql_SpaceScanned = 0;extern int yylineno;static void plpgsql_input(char *buf, int *result, int max);#define YY_INPUT(buf,res,max)	plpgsql_input(buf, &res, max)%}WS	[[:alpha:]_"]WC	[[:alnum:]_"]%x	IN_STRING IN_COMMENT%%    /* ----------     * Local variable in scanner to remember where     * a string or comment started     * ----------     */    int	start_lineno = 0;    /* ----------     * Reset the state when entering the scanner     * ----------     */    BEGIN INITIAL;    plpgsql_SpaceScanned = 0;    /* ----------     * On the first call to a new source report the     * functions type (T_FUNCTION or T_TRIGGER)     * ----------     */    if (!scanner_typereported) {        scanner_typereported = 1;	return scanner_functype;    }    /* ----------     * The keyword rules     * ----------     */:=			{ return K_ASSIGN;			}=			{ return K_ASSIGN;			}\.\.			{ return K_DOTDOT;			}alias			{ return K_ALIAS;			}begin			{ return K_BEGIN;			}bpchar			{ return T_BPCHAR;			}char			{ return T_CHAR;			}constant		{ return K_CONSTANT;			}debug			{ return K_DEBUG;			}declare			{ return K_DECLARE;			}default			{ return K_DEFAULT;			}else			{ return K_ELSE;			}end			{ return K_END;				}exception		{ return K_EXCEPTION;			}exit			{ return K_EXIT;			}for			{ return K_FOR;				}from			{ return K_FROM;			}if			{ return K_IF;				}in			{ return K_IN;				}into			{ return K_INTO;			}loop			{ return K_LOOP;			}not			{ return K_NOT;				}notice			{ return K_NOTICE;			}null			{ return K_NULL;			}perform			{ return K_PERFORM;			}raise			{ return K_RAISE;			}record			{ return K_RECORD;			}rename			{ return K_RENAME;			}return			{ return K_RETURN;			}reverse			{ return K_REVERSE;			}select			{ return K_SELECT;			}then			{ return K_THEN;			}to			{ return K_TO;				}type			{ return K_TYPE;			}varchar			{ return T_VARCHAR;			}when			{ return K_WHEN;			}while			{ return K_WHILE;			}^#option		{ return O_OPTION;			}dump			{ return O_DUMP;			}    /* ----------     * Special word rules     * ----------     */{WS}{WC}*		{ return plpgsql_parse_word(yytext);	}{WS}{WC}*\.{WS}{WC}*	{ return plpgsql_parse_dblword(yytext);	}{WS}{WC}*\.{WS}{WC}*\.{WS}{WC}*	{ return plpgsql_parse_tripword(yytext); }{WS}{WC}*%TYPE		{ return plpgsql_parse_wordtype(yytext);	}{WS}{WC}*\.{WS}{WC}*%TYPE	{ return plpgsql_parse_dblwordtype(yytext); }{WS}{WC}*%ROWTYPE	{ return plpgsql_parse_wordrowtype(yytext);	}\$[0-9]+		{ return plpgsql_parse_word(yytext);	}[0-9]+			{ return T_NUMBER;			}    /* ----------     * Ignore whitespaces but remember this happened     * ----------     */[ \t\n]+		{ plpgsql_SpaceScanned = 1;		}    /* ----------     * Eat up comments     * ----------     */--[^\n]*		;\/\*			{ start_lineno = yylineno;			  BEGIN IN_COMMENT;			}<IN_COMMENT>\*\/	{ BEGIN INITIAL;			}<IN_COMMENT>\n		;<IN_COMMENT>.		;<IN_COMMENT><<EOF>>	{ plpgsql_comperrinfo();			  elog(ERROR, "unterminated comment starting on line %d",				start_lineno);			}    /* ----------     * Collect anything inside of ''s and return one STRING     * ----------     */'			{ start_lineno = yylineno;			  BEGIN IN_STRING;			  yymore();			}<IN_STRING>\\.		|<IN_STRING>''		{ yymore();				}<IN_STRING>'		{ BEGIN INITIAL;			  return T_STRING;			}<IN_STRING><<EOF>>	{ plpgsql_comperrinfo();			  elog(ERROR, "unterminated string starting on line %d", 				start_lineno);			}<IN_STRING>[^'\\]*	{ yymore();				}    /* ----------     * Any unmatched character is returned as is     * ----------     */.			{ return yytext[0];			}%%int yywrap(){    return 1;}static void plpgsql_input(char *buf, int *result, int max){    int n = max;    if (n > plpgsql_bytes_left) {        n = plpgsql_bytes_left;    }    if (n == 0) {        *result = YY_NULL;	return;    }    *result = n;    memcpy(buf, plpgsql_source, n);    plpgsql_source += n;    plpgsql_bytes_left -= n;}void plpgsql_setinput(char *source, int functype){    yyrestart(NULL);    yylineno = 1;    plpgsql_source = source;    if (*plpgsql_source == '\n')        plpgsql_source++;    plpgsql_bytes_left = strlen(plpgsql_source);    scanner_functype     = functype;    scanner_typereported = 0;}

⌨️ 快捷键说明

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