00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 # include "lclintMacros.nf"
00038 # include "basic.h"
00039 # include "tokentable.h"
00040 # include "syntable.h"
00041
00042
00043
00044 typedef lsymbol *lsymbolTable;
00045
00046 static lsymbolTable SynTable;
00047 static unsigned long int SynTableEntries;
00048
00049 static void SynTable_grow (int p_size);
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093 void
00094 LSLAddSyn (lsymbol ntok, lsymbol otok)
00095 {
00096 if (ntok >= SynTableEntries)
00097 {
00098 SynTable_grow (otok);
00099 }
00100
00101 llassert (SynTable != NULL);
00102
00103 if (SynTable[ntok] == (lsymbol) 0)
00104 {
00105 SynTable[ntok] = otok;
00106 LSLSetTokenHasSyn (otok, TRUE);
00107 }
00108 else
00109 {
00110 llbuglit ("LSLAddSyn: duplicate SynTable entry");
00111 }
00112 }
00113
00114 ltoken
00115 LSLGetTokenForSyn (lsymbol ntok)
00116 {
00117 llassert (SynTable != NULL);
00118 llassert (!(!((ntok < SynTableEntries) || (SynTable[ntok] != 0))));
00119
00120 return LSLGetToken (SynTable[ntok]);
00121 }
00122
00123 bool
00124 LSLIsSyn (lsymbol str)
00125 {
00126 if (str < SynTableEntries)
00127 {
00128 llassert (SynTable != NULL);
00129 return (SynTable[str] != 0);
00130 }
00131 else
00132 {
00133 return FALSE;
00134 }
00135 }
00136
00137 static void
00138 SynTable_grow (int size)
00139 {
00140 int oldSize;
00141 int i;
00142 lsymbolTable oldSynTable = SynTable;
00143
00144 llassert (oldSynTable != NULL);
00145 oldSize = SynTableEntries;
00146
00147 if (size <= oldSize)
00148 {
00149 llcontbuglit ("SynTable_grow: goal size is smaller than oldSize");
00150 return;
00151 }
00152
00153 if (size < (oldSize + SYNTABLE_BASESIZE))
00154 {
00155 size = oldSize + SYNTABLE_BASESIZE;
00156 }
00157
00158 SynTable = (lsymbolTable) dmalloc (size * sizeof (*SynTable));
00159 SynTableEntries = size;
00160
00161 for (i = 0; i < oldSize; i++)
00162 {
00163 SynTable[i] = oldSynTable[i];
00164 }
00165
00166
00167
00168
00169
00170 for (i = oldSize; i < size; i++)
00171 {
00172 SynTable[i] = (lsymbol) 0;
00173 }
00174
00175
00176 sfree (oldSynTable);
00177 }
00178
00179 void
00180 lsynTableInit (void)
00181 {
00182 int i;
00183
00184 SynTable = (lsymbolTable) dmalloc (sizeof (*SynTable) * SYNTABLE_BASESIZE);
00185
00186
00187 for (i = 0; i < SYNTABLE_BASESIZE; i++)
00188 {
00189 SynTable[i] = (lsymbol) 0;
00190 }
00191
00192
00193 SynTableEntries = SYNTABLE_BASESIZE;
00194 }
00195
00196 void
00197 lsynTableReset (void)
00198 {
00199 }
00200
00201 void
00202 lsynTableCleanup (void)
00203 {
00204 sfree (SynTable);
00205 SynTable = NULL;
00206 }
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218