📄 parse.c
字号:
typedef struct yyStackEntry yyStackEntry;/* The state of the parser is completely contained in an instance of** the following structure */struct yyParser { int yyidx; /* Index of top element in stack */#ifdef YYTRACKMAXSTACKDEPTH int yyidxMax; /* Maximum value of yyidx */#endif int yyerrcnt; /* Shifts left before out of the error */ sqlite3ParserARG_SDECL /* A place to hold %extra_argument */#if YYSTACKDEPTH<=0 int yystksz; /* Current side of the stack */ yyStackEntry *yystack; /* The parser's stack */#else yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */#endif};typedef struct yyParser yyParser;#ifndef NDEBUG#include <stdio.h>static FILE *yyTraceFILE = 0;static char *yyTracePrompt = 0;#endif /* NDEBUG */#ifndef NDEBUG/* ** Turn parser tracing on by giving a stream to which to write the trace** and a prompt to preface each trace message. Tracing is turned off** by making either argument NULL **** Inputs:** <ul>** <li> A FILE* to which trace output should be written.** If NULL, then tracing is turned off.** <li> A prefix string written at the beginning of every** line of trace output. If NULL, then tracing is** turned off.** </ul>**** Outputs:** None.*/void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){ yyTraceFILE = TraceFILE; yyTracePrompt = zTracePrompt; if( yyTraceFILE==0 ) yyTracePrompt = 0; else if( yyTracePrompt==0 ) yyTraceFILE = 0;}#endif /* NDEBUG */#ifndef NDEBUG/* For tracing shifts, the names of all terminals and nonterminals** are required. The following table supplies these names */static const char *const yyTokenName[] = { "$", "SEMI", "EXPLAIN", "QUERY", "PLAN", "BEGIN", "TRANSACTION", "DEFERRED", "IMMEDIATE", "EXCLUSIVE", "COMMIT", "END", "ROLLBACK", "SAVEPOINT", "RELEASE", "TO", "CREATE", "TABLE", "IF", "NOT", "EXISTS", "TEMP", "LP", "RP", "AS", "COMMA", "ID", "ABORT", "AFTER", "ANALYZE", "ASC", "ATTACH", "BEFORE", "BY", "CASCADE", "CAST", "COLUMNKW", "CONFLICT", "DATABASE", "DESC", "DETACH", "EACH", "FAIL", "FOR", "IGNORE", "INITIALLY", "INSTEAD", "LIKE_KW", "MATCH", "KEY", "OF", "OFFSET", "PRAGMA", "RAISE", "REPLACE", "RESTRICT", "ROW", "TRIGGER", "VACUUM", "VIEW", "VIRTUAL", "REINDEX", "RENAME", "CTIME_KW", "ANY", "OR", "AND", "IS", "BETWEEN", "IN", "ISNULL", "NOTNULL", "NE", "EQ", "GT", "LE", "LT", "GE", "ESCAPE", "BITAND", "BITOR", "LSHIFT", "RSHIFT", "PLUS", "MINUS", "STAR", "SLASH", "REM", "CONCAT", "COLLATE", "UMINUS", "UPLUS", "BITNOT", "STRING", "JOIN_KW", "CONSTRAINT", "DEFAULT", "NULL", "PRIMARY", "UNIQUE", "CHECK", "REFERENCES", "AUTOINCR", "ON", "DELETE", "UPDATE", "INSERT", "SET", "DEFERRABLE", "FOREIGN", "DROP", "UNION", "ALL", "EXCEPT", "INTERSECT", "SELECT", "DISTINCT", "DOT", "FROM", "JOIN", "INDEXED", "USING", "ORDER", "GROUP", "HAVING", "LIMIT", "WHERE", "INTO", "VALUES", "INTEGER", "FLOAT", "BLOB", "REGISTER", "VARIABLE", "CASE", "WHEN", "THEN", "ELSE", "INDEX", "ALTER", "ADD", "error", "input", "cmdlist", "ecmd", "explain", "cmdx", "cmd", "transtype", "trans_opt", "nm", "savepoint_opt", "create_table", "create_table_args", "temp", "ifnotexists", "dbnm", "columnlist", "conslist_opt", "select", "column", "columnid", "type", "carglist", "id", "ids", "typetoken", "typename", "signed", "plus_num", "minus_num", "carg", "ccons", "term", "expr", "onconf", "sortorder", "autoinc", "idxlist_opt", "refargs", "defer_subclause", "refarg", "refact", "init_deferred_pred_opt", "conslist", "tcons", "idxlist", "defer_subclause_opt", "orconf", "resolvetype", "raisetype", "ifexists", "fullname", "oneselect", "multiselect_op", "distinct", "selcollist", "from", "where_opt", "groupby_opt", "having_opt", "orderby_opt", "limit_opt", "sclp", "as", "seltablist", "stl_prefix", "joinop", "indexed_opt", "on_opt", "using_opt", "joinop2", "inscollist", "sortlist", "sortitem", "nexprlist", "setlist", "insert_cmd", "inscollist_opt", "itemlist", "exprlist", "likeop", "escape", "between_op", "in_op", "case_operand", "case_exprlist", "case_else", "uniqueflag", "collate", "nmnum", "plus_opt", "number", "trigger_decl", "trigger_cmd_list", "trigger_time", "trigger_event", "foreach_clause", "when_clause", "trigger_cmd", "database_kw_opt", "key_opt", "add_column_fullname", "kwcolumn_opt", "create_vtab", "vtabarglist", "vtabarg", "vtabargtoken", "lp", "anylist", };#endif /* NDEBUG */#ifndef NDEBUG/* For tracing reduce actions, the names of all rules are required.*/static const char *const yyRuleName[] = { /* 0 */ "input ::= cmdlist", /* 1 */ "cmdlist ::= cmdlist ecmd", /* 2 */ "cmdlist ::= ecmd", /* 3 */ "ecmd ::= SEMI", /* 4 */ "ecmd ::= explain cmdx SEMI", /* 5 */ "explain ::=", /* 6 */ "explain ::= EXPLAIN", /* 7 */ "explain ::= EXPLAIN QUERY PLAN", /* 8 */ "cmdx ::= cmd", /* 9 */ "cmd ::= BEGIN transtype trans_opt", /* 10 */ "trans_opt ::=", /* 11 */ "trans_opt ::= TRANSACTION", /* 12 */ "trans_opt ::= TRANSACTION nm", /* 13 */ "transtype ::=", /* 14 */ "transtype ::= DEFERRED", /* 15 */ "transtype ::= IMMEDIATE", /* 16 */ "transtype ::= EXCLUSIVE", /* 17 */ "cmd ::= COMMIT trans_opt", /* 18 */ "cmd ::= END trans_opt", /* 19 */ "cmd ::= ROLLBACK trans_opt", /* 20 */ "savepoint_opt ::= SAVEPOINT", /* 21 */ "savepoint_opt ::=", /* 22 */ "cmd ::= SAVEPOINT nm", /* 23 */ "cmd ::= RELEASE savepoint_opt nm", /* 24 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm", /* 25 */ "cmd ::= create_table create_table_args", /* 26 */ "create_table ::= CREATE temp TABLE ifnotexists nm dbnm", /* 27 */ "ifnotexists ::=", /* 28 */ "ifnotexists ::= IF NOT EXISTS", /* 29 */ "temp ::= TEMP", /* 30 */ "temp ::=", /* 31 */ "create_table_args ::= LP columnlist conslist_opt RP", /* 32 */ "create_table_args ::= AS select", /* 33 */ "columnlist ::= columnlist COMMA column", /* 34 */ "columnlist ::= column", /* 35 */ "column ::= columnid type carglist", /* 36 */ "columnid ::= nm", /* 37 */ "id ::= ID", /* 38 */ "ids ::= ID|STRING", /* 39 */ "nm ::= ID", /* 40 */ "nm ::= STRING", /* 41 */ "nm ::= JOIN_KW", /* 42 */ "type ::=", /* 43 */ "type ::= typetoken", /* 44 */ "typetoken ::= typename", /* 45 */ "typetoken ::= typename LP signed RP", /* 46 */ "typetoken ::= typename LP signed COMMA signed RP", /* 47 */ "typename ::= ids", /* 48 */ "typename ::= typename ids", /* 49 */ "signed ::= plus_num", /* 50 */ "signed ::= minus_num", /* 51 */ "carglist ::= carglist carg", /* 52 */ "carglist ::=", /* 53 */ "carg ::= CONSTRAINT nm ccons", /* 54 */ "carg ::= ccons", /* 55 */ "ccons ::= DEFAULT term", /* 56 */ "ccons ::= DEFAULT LP expr RP", /* 57 */ "ccons ::= DEFAULT PLUS term", /* 58 */ "ccons ::= DEFAULT MINUS term", /* 59 */ "ccons ::= DEFAULT id", /* 60 */ "ccons ::= NULL onconf", /* 61 */ "ccons ::= NOT NULL onconf", /* 62 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", /* 63 */ "ccons ::= UNIQUE onconf", /* 64 */ "ccons ::= CHECK LP expr RP", /* 65 */ "ccons ::= REFERENCES nm idxlist_opt refargs", /* 66 */ "ccons ::= defer_subclause", /* 67 */ "ccons ::= COLLATE ids", /* 68 */ "autoinc ::=", /* 69 */ "autoinc ::= AUTOINCR", /* 70 */ "refargs ::=", /* 71 */ "refargs ::= refargs refarg", /* 72 */ "refarg ::= MATCH nm", /* 73 */ "refarg ::= ON DELETE refact", /* 74 */ "refarg ::= ON UPDATE refact", /* 75 */ "refarg ::= ON INSERT refact", /* 76 */ "refact ::= SET NULL", /* 77 */ "refact ::= SET DEFAULT", /* 78 */ "refact ::= CASCADE", /* 79 */ "refact ::= RESTRICT", /* 80 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", /* 81 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", /* 82 */ "init_deferred_pred_opt ::=", /* 83 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", /* 84 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", /* 85 */ "conslist_opt ::=", /* 86 */ "conslist_opt ::= COMMA conslist", /* 87 */ "conslist ::= conslist COMMA tcons", /* 88 */ "conslist ::= conslist tcons", /* 89 */ "conslist ::= tcons", /* 90 */ "tcons ::= CONSTRAINT nm", /* 91 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf", /* 92 */ "tcons ::= UNIQUE LP idxlist RP onconf", /* 93 */ "tcons ::= CHECK LP expr RP onconf", /* 94 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt", /* 95 */ "defer_subclause_opt ::=", /* 96 */ "defer_subclause_opt ::= defer_subclause", /* 97 */ "onconf ::=", /* 98 */ "onconf ::= ON CONFLICT resolvetype", /* 99 */ "orconf ::=", /* 100 */ "orconf ::= OR resolvetype", /* 101 */ "resolvetype ::= raisetype", /* 102 */ "resolvetype ::= IGNORE", /* 103 */ "resolvetype ::= REPLACE", /* 104 */ "cmd ::= DROP TABLE ifexists fullname", /* 105 */ "ifexists ::= IF EXISTS", /* 106 */ "ifexists ::=", /* 107 */ "cmd ::= CREATE temp VIEW ifnotexists nm dbnm AS select", /* 108 */ "cmd ::= DROP VIEW ifexists fullname", /* 109 */ "cmd ::= select", /* 110 */ "select ::= oneselect", /* 111 */ "select ::= select multiselect_op oneselect", /* 112 */ "multiselect_op ::= UNION", /* 113 */ "multiselect_op ::= UNION ALL", /* 114 */ "multiselect_op ::= EXCEPT|INTERSECT", /* 115 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", /* 116 */ "distinct ::= DISTINCT", /* 117 */ "distinct ::= ALL", /* 118 */ "distinct ::=", /* 119 */ "sclp ::= selcollist COMMA", /* 120 */ "sclp ::=", /* 121 */ "selcollist ::= sclp expr as", /* 122 */ "selcollist ::= sclp STAR", /* 123 */ "selcollist ::= sclp nm DOT STAR", /* 124 */ "as ::= AS nm", /* 125 */ "as ::= ids", /* 126 */ "as ::=", /* 127 */ "from ::=", /* 128 */ "from ::= FROM seltablist", /* 129 */ "stl_prefix ::= seltablist joinop", /* 130 */ "stl_prefix ::=", /* 131 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", /* 132 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", /* 133 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -