compiler_8h-source.html
来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 437 行 · 第 1/2 页
HTML
437 行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>compiler.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.15 --><center><a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center><hr><h1>compiler.h</h1><div class="fragment"><pre>00001 <font class="comment">//-< COMPILE.H >-----------------------------------------------------*--------*</font>00002 <font class="comment">// FastDB Version 1.0 (c) 1999 GARRET * ? *</font>00003 <font class="comment">// (Main Memory Database Management System) * /\| *</font>00004 <font class="comment">// * / \ *</font>00005 <font class="comment">// Created: 20-Nov-98 K.A. Knizhnik * / [] \ *</font>00006 <font class="comment">// Last update: 17-Jan-99 K.A. Knizhnik * GARRET *</font>00007 <font class="comment">//-------------------------------------------------------------------*--------*</font>00008 <font class="comment">// Conditional expresion compiler</font>00009 <font class="comment">//-------------------------------------------------------------------*--------*</font>00010 00011 <font class="preprocessor">#ifndef __COMPILER_H__</font>00012 <font class="preprocessor"></font><font class="preprocessor">#define __COMPILER_H__</font>00013 <font class="preprocessor"></font>00014 <font class="preprocessor">#include <setjmp.h></font>00015 00016 <font class="preprocessor">#if defined(__osf__) || defined(__FreeBSD__)</font>00017 <font class="preprocessor"></font><font class="preprocessor">#define longjmp(b,s) _longjmp(b,s) // do not restore signal context</font>00018 <font class="preprocessor"></font><font class="preprocessor">#define setjmp(b) _setjmp(b)</font>00019 <font class="preprocessor"></font><font class="preprocessor">#endif</font>00020 <font class="preprocessor"></font>00021 <font class="keyword">enum</font> dbvmCodes { 00022 <font class="preprocessor">#define DBVM(cop, type, n_operands, commutative) cop,</font>00023 <font class="preprocessor"></font><font class="preprocessor">#include "compiler.d"</font>00024 dbvmLastCode00025 };00026 00027 <font class="preprocessor">#define IS_CONSTANT(c) \</font>00028 <font class="preprocessor">(unsigned(c) - dbvmLoadVarBool <= (unsigned)dbvmLoadVarStdString - dbvmLoadVarBool)</font>00029 <font class="preprocessor"></font>00030 <font class="keyword">enum</font> nodeType { 00031 tpInteger,00032 tpBoolean,00033 tpReal,00034 tpString,00035 tpReference,00036 tpArray,00037 tpRawBinary, 00038 tpFreeVar, <font class="comment">// index of EXISTS clause </font>00039 tpList, <font class="comment">// list of expressions</font>00040 tpVoid00041 };00042 00043 <font class="keyword">enum</font> tokens { 00044 tkn_ident,00045 tkn_lpar,00046 tkn_rpar,00047 tkn_lbr,00048 tkn_rbr,00049 tkn_dot,00050 tkn_comma,00051 tkn_power,00052 tkn_iconst,00053 tkn_sconst,00054 tkn_fconst,00055 tkn_add,00056 tkn_sub,00057 tkn_mul,00058 tkn_div,00059 tkn_and,00060 tkn_or,00061 tkn_not,00062 tkn_null,00063 tkn_neg,00064 tkn_eq,00065 tkn_ne,00066 tkn_gt,00067 tkn_ge,00068 tkn_lt,00069 tkn_le,00070 tkn_between,00071 tkn_escape,00072 tkn_exists,00073 tkn_like,00074 tkn_in,00075 tkn_length,00076 tkn_lower,00077 tkn_upper,00078 tkn_abs,00079 tkn_is,00080 tkn_integer,00081 tkn_real,00082 tkn_string,00083 tkn_first,00084 tkn_last,00085 tkn_current,00086 tkn_var,00087 tkn_col,00088 tkn_true,00089 tkn_false,00090 tkn_where, 00091 tkn_follow,00092 tkn_start,00093 tkn_from,00094 tkn_order,00095 tkn_by,00096 tkn_asc,00097 tkn_desc, 00098 tkn_eof,00099 tkn_insert, 00100 tkn_into, 00101 tkn_select, 00102 tkn_table,00103 tkn_error,00104 tkn_all, 00105 tkn_last_token00106 }; 00107 00108 <font class="keyword">struct </font>dbStrLiteral { 00109 <font class="keywordtype">char</font>* str;00110 <font class="keywordtype">int</font> len;00111 };00112 00113 00114 <font class="keyword">class </font><a class="code" href="classdbUserFunction.html">dbUserFunction</a>;00115 00116 <font class="keyword">class </font>FASTDB_DLL_ENTRY dbExprNode { 00117 <font class="keyword">friend</font> <font class="keyword">class </font>dbExprNodeSegment;00118 <font class="keyword">public</font>:00119 nat1 cop;00120 nat1 type;00121 nat2 offs;00122 00123 <font class="keyword">static</font> <font class="keyword">const</font> nat1 nodeTypes[];00124 <font class="keyword">static</font> <font class="keyword">const</font> nat1 nodeOperands[];00125 <font class="keyword">static</font> <font class="keyword">const</font> nat1 commutativeOperator[];00126 <font class="keyword">static</font> dbExprNode* freeNodeList;00127 <font class="keyword">static</font> dbMutex& mutex;00128 00129 <font class="keyword">static</font> dbExprNodeSegment* segmentList;00130 00131 <font class="keyword">union </font>{ 00132 dbExprNode* operand[3];00133 dbExprNode* next;00134 oid_t oid;00135 db_int8 ivalue;00136 real8 fvalue;00137 dbStrLiteral svalue;00138 <font class="keywordtype">void</font> <font class="keyword">const</font>* var;00139 00140 <font class="keyword">struct </font>{ 00141 dbExprNode* base; <font class="comment">// the same as operand[0]</font>00142 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field;00143 } ref;00144 00145 <font class="keyword">struct </font>{ 00146 dbExprNode* arg[3]; 00147 <font class="keywordtype">void</font>* fptr;00148 } func;00149 };00150 00151 dbExprNode(dbExprNode* node);00152 00153 dbExprNode(<font class="keywordtype">int</font> cop, dbExprNode* left = NULL, dbExprNode* right = NULL, 00154 dbExprNode* right2 = NULL)00155 {00156 this->cop = cop;00157 type = nodeTypes[cop];00158 operand[0] = left;00159 operand[1] = right;00160 operand[2] = right2;00161 }00162 dbExprNode(<font class="keywordtype">int</font> cop, dbExprNode* expr1, dbExprNode* expr2, <font class="keywordtype">int</font> offs) { 00163 this->cop = cop;00164 this->offs = (nat2)offs;00165 type = nodeTypes[cop];00166 operand[0] = expr1;00167 operand[1] = expr2;00168 }00169 dbExprNode(<font class="keywordtype">int</font> cop, dbExprNode* expr, <font class="keywordtype">int</font> offs) { 00170 this->cop = cop;00171 this->offs = (nat2)offs;00172 type = nodeTypes[cop];00173 operand[0] = expr;00174 }00175 dbExprNode(<font class="keywordtype">int</font> cop, <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field, dbExprNode* base = NULL) 00176 {00177 this->cop = cop;00178 this->offs = (nat2)field-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm17">dbsOffs</a>;00179 type = nodeTypes[cop];00180 ref.field = field;00181 ref.base = base;00182 }00183 dbExprNode(<font class="keywordtype">int</font> cop, db_int8 ivalue) { 00184 this->cop = cop;00185 this->ivalue = ivalue;00186 type = tpInteger;00187 }00188 dbExprNode(<font class="keywordtype">int</font> cop, real8 fvalue) { 00189 this->cop = cop;00190 this->fvalue = fvalue;00191 type = tpReal;00192 }00193 dbExprNode(<font class="keywordtype">int</font> cop, dbStrLiteral& svalue) { 00194 this->cop = cop;00195 this->svalue = svalue;00196 type = tpString;00197 }00198 dbExprNode(<font class="keywordtype">int</font> cop, <font class="keywordtype">void</font> <font class="keyword">const</font>* var) { 00199 this->cop = cop;00200 this->var = var;00201 type = nodeTypes[cop];00202 }00203 dbExprNode(<font class="keywordtype">int</font> cop, <font class="keywordtype">void</font>* fptr, dbExprNode* expr1, dbExprNode* expr2 = NULL, dbExprNode* expr3 = NULL) { 00204 this->cop = cop;00205 func.arg[0] = expr1;00206 func.arg[1] = expr2;00207 func.arg[2] = expr3;00208 func.fptr = fptr;00209 type = nodeTypes[cop];00210 }00211 ~dbExprNode();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?