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> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center><hr><h1>compiler.h</h1><div class="fragment"><pre>00001 <font class="comment">//-&lt; COMPILE.H &gt;-----------------------------------------------------*--------*</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 &lt;setjmp.h&gt;</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 &lt;= (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&amp;    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-&gt;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-&gt;cop = cop;00164         this-&gt;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-&gt;cop = cop;00171         this-&gt;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-&gt;cop = cop;00178         this-&gt;offs = (nat2)field-&gt;<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-&gt;cop = cop;00185         this-&gt;ivalue = ivalue;00186         type = tpInteger;00187     }00188     dbExprNode(<font class="keywordtype">int</font> cop, real8 fvalue) { 00189         this-&gt;cop = cop;00190         this-&gt;fvalue = fvalue;00191         type = tpReal;00192     }00193     dbExprNode(<font class="keywordtype">int</font> cop, dbStrLiteral&amp; svalue) { 00194         this-&gt;cop = cop;00195         this-&gt;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-&gt;cop = cop;00200         this-&gt;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-&gt;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 + -
显示快捷键?