1package Rep_Clause5_Pkg is
2
3    type ID_Type      is mod 65536;
4    type String_ID    is new ID_Type;
5    type LNumber_Type is range 0..99999;
6    subtype Long_Type is Integer;
7
8    type Func_ID is (No_Func, FUN_SGN, FUN_EXP, FUN_LOG, FUN_LOG10);
9
10    type Token_Kind is (
11        No_Token,
12        LEX_BINARY,
13        LEX_SECTION,
14        LEX_003,
15        LEX_004,
16        LEX_005,
17        LEX_006,
18        LEX_007,
19        LEX_008,
20        LEX_009,
21        LEX_LF,
22        LEX_011,
23        LEX_012,
24        LEX_013,
25        LEX_014,
26        LEX_015,
27        LEX_016,
28        LEX_017,
29        LEX_018,
30        LEX_019,
31        LEX_020,
32        LEX_021,
33        LEX_022,
34        LEX_023,
35        LEX_024,
36        LEX_025,
37        LEX_026,
38        LEX_027,
39        LEX_028,
40        LEX_029,
41        LEX_030,
42        LEX_031,
43        LEX_032,
44        '!',
45        '"',
46        '#',
47        '$',
48        '%',
49        '&',
50        ''',
51        '(',
52        ')',
53        '*',
54        '+',
55        ',',
56        '-',
57        '.',
58        '/',
59        '0',
60        '1',
61        '2',
62        '3',
63        '4',
64        '5',
65        '6',
66        '7',
67        '8',
68        '9',
69        ':',
70        ';',
71        '<',
72        '=',
73        '>',
74        '?',
75        '@',
76        'A',
77        'B',
78        'C',
79        'D',
80        'E',
81        'F',
82        'G',
83        'H',
84        'I',
85        'J',
86        'K',
87        'L',
88        'M',
89        'N',
90        'O',
91        'P',
92        'Q',
93        'R',
94        'S',
95        'T',
96        'U',
97        'V',
98        'W',
99        'X',
100        'Y',
101        'Z',
102        '[',
103        '\',
104        ']',
105        '^',
106        '_',
107        '`',
108        'a',
109        'b',
110        'c',
111        'd',
112        'e',
113        'f',
114        'g',
115        'h',
116        'i',
117        'j',
118        'k',
119        'l',
120        'm',
121        'n',
122        'o',
123        LEX_SFUN3,
124        LEX_SFUN2,
125        LEX_SFUN1,
126        LEX_SFUNN,
127        LEX_FUN3,
128        LEX_FUN2,
129        LEX_FUN1,
130        LEX_FUNN,
131        'x',
132        'y',
133        'z',
134        '{',
135        '|',
136        '}',
137        '~',
138        LEX_CRTA,
139        LEX_ISNULL,
140        LEX_USING,
141        LEX_HANDLE,
142        LEX_CALLX,
143        LEX_COMPLEX,
144        LEX_FIXED,
145        LEX_ENV,
146        LEX_SPARSE,
147        LEX_SUBROUTINE,
148        LEX_CALL,
149        LEX_BOX,
150        LEX_VLINE,
151        LEX_HLINE,
152        LEX_MAXLENGTH,
153        LEX_DLENGTH,
154        LEX_INPUT,
155        LEX_INITIALIZE,
156        LEX_OUTPUT,
157        LEX_UNLINK,
158        LEX_SEEK,
159        LEX_EXIT,
160        LEX_NOT,
161        LEX_COMMON,
162        LEX_CHAIN,
163        LEX_DEF,
164        LEX_ARITY,
165        LEX_RESUME,
166        LEX_PIC_S,
167        LEX_BG,
168        LEX_FG,
169        LEX_PC,
170        LEX_CRT,
171        LEX_ENUM,
172        LEX_DECLARE,
173        LEX_CURSOR,
174        LEX_DROP,
175        LEX_CURRENT,
176        LEX_ISOLATION,
177        LEX_SET,
178        LEX_TRANSACTION,
179        LEX_COMMIT,
180        LEX_ABORT,
181        LEX_BEGIN,
182        LEX_PREVIOUS,
183        LEX_LAST,
184        LEX_FIRST,
185        LEX_KEY,
186        LEX_START,
187        LEX_REWRITE,
188        LEX_INDEX,
189        LEX_SECONDARY,
190        LEX_PRIMARY,
191        LEX_COLUMN,
192        LEX_TEMP,
193        LEX_TABLE,
194        LEX_CREATE,
195        LEX_HASH,
196        LEX_BTREE,
197        LEX_UPDATE,
198        LEX_ERROR,
199        LEX_ACCEPT,
200        LEX_AVG,
201        LEX_MAX,
202        LEX_MIN,
203        LEX_FIELD,
204        LEX_RESTORE,
205        LEX_END,
206        LEX_STEP,
207        LEX_NEXT,
208        LEX_FOR,
209        LEX_RETURN,
210        LEX_GOSUB,
211        LEX_RANGE,
212        LEX_EXPON,
213        LEX_XOR,
214        LEX_OR,
215        LEX_AND,
216        LEX_SHIFTR,
217        LEX_GE,
218        LEX_NE,
219        LEX_SHIFTL,
220        LEX_LE,
221        LEX_VARYING,
222        LEX_LENGTH,
223        LEX_PRINT,
224        LEX_IF,
225        LEX_GOTO,
226        LEX_ON,
227        LEX_THEN,
228        LEX_DELETE,
229        LEX_TO,
230        LEX_SEQUENCE,
231        LEX_NONUNIQUE,
232        LEX_UNIQUE,
233        LEX_FILE,
234        LEX_CLOSE,
235        LEX_OPEN,
236        LEX_DATABASE,
237        LEX_RECORD,
238        LEX_DATA,
239        LEX_WRITE,
240        LEX_READ,
241        LEX_STOP,
242        LEX_LET,
243        LEX_MOD,
244        LEX_LONG,
245        LEX_DIM,
246        LEX_SHORT,
247        LEX_REM,
248        LEX_SHELL,
249        LEX_TOKEN,
250        LEX_FLOAT,
251        LEX_SIDENT,
252        LEX_INLREM,
253        LEX_ENDLIT,
254        LEX_STRLIT,
255        LEX_IDENT,
256        LEX_LNUMBER,
257        LEX_HEX,
258        LEX_NUMBER,
259        LEX_EOF,
260        LEX_QUIT,
261        LEX_LIST,
262        LEX_REMOVE,
263        LEX_RENUMBER,
264        LEX_CONTINUE,
265        LEX_RUN,
266        LEX_MERGE,
267        LEX_ENTER,
268        LEX_NEW,
269        LEX_RESET,
270        LEX_SYMTAB,
271        LEX_CLS,
272        LEX_EDIT,
273        LEX_SAVE,
274        LEX_RESAVE,
275        LEX_LOAD,
276        LEX_NAME,
277        LEX_LISTP,
278        LEX_SHOW,
279        LEX_STACK,
280        LEX_STATUS,
281        LEX_CACHE,
282        LEX_INSPECT,
283        LEX_STOW,
284        LEX_PKGRUN,
285        LEX_POP,
286        LEX_CHECK,
287        LEX_INSERT,
288        LEX_INTO,
289        LEX_VALUES,
290        LEX_NULL,
291        LEX_WHERE,
292        LEX_FROM,
293        LEX_EXEC,
294        LEX_SELECT,
295        LEX_AS,
296        LEX_ALL,
297        LEX_BY,
298        LEX_CROSS,
299        LEX_DESC,
300        LEX_FULL,
301        LEX_GROUP,
302        LEX_INNER,
303        LEX_JOIN,
304        LEX_LEFT,
305        LEX_LIMIT,
306        LEX_NATURAL,
307        LEX_OFFSET,
308        LEX_ORDER,
309        LEX_OUTER,
310        LEX_RIGHT,
311        LEX_FETCH,
312        LEX_DISTINCT,
313        LEX_DEFAULT,
314        LEX_RETURNING,
315        LEX_LEVEL,
316        LEX_COMMITTED,
317        LEX_SERIALIZABLE,
318        LEX_ONLY,
319        LEX_HOLD,
320        LEX_FORWARD,
321        LEX_WITH,
322        LEX_PRIOR,
323        LEX_RELATIVE,
324        LEX_BACKWARD,
325        LEX_OF,
326        LEX_SCROLL,
327        LEX_NOWAIT,
328        LEX_HAVING,
329        LEX_END_TOKENS
330    );
331
332    type Aux_Kind is (No_Aux, SID_Aux, FID_Aux, LNO_Aux);
333
334    type Token_Type(Aux : Aux_Kind := No_Aux) is
335        record
336            Token : Token_Kind := No_Token;
337            case Aux is
338                when SID_Aux =>
339                    SID :       String_ID;
340                when FID_Aux =>
341                    FID :       Func_ID;
342                when LNO_Aux =>
343                    LNO :       LNumber_Type;
344                when No_Aux =>
345                    null;
346            end case;
347        end record;
348
349    for Token_Type use
350        record
351            Aux     at 0 range 0..2;
352            Token   at 0 range 3..12;
353            SID     at 0 range 16..31;
354            FID     at 0 range 16..31;
355            LNO     at 0 range 13..31;
356        end record;
357
358    type Tokens_Index is range 0..999999;
359    type Token_Array is array(Tokens_Index range <>) of Token_Type;
360    type Token_Line is access all Token_Array;
361
362    type Line_Node is
363        record
364            Line :     Token_Line;
365            LNO :      LNumber_Type := 0;
366            Numbered : Boolean := False;
367        end record;
368
369    type Nodes_Index is range 0..999999;
370    type LNodes_Array is array(Nodes_Index range <>) of Line_Node;
371    type LNodes_Ptr is access all LNodes_Array;
372
373    type VString is
374        record
375            Max_Length : Natural := 0;
376            Fixed :      Boolean := False;
377        end record;
378
379    function To_Long(Object : VString; Radix : Natural) return Long_Type;
380
381    function Element (V : String_ID) return String;
382
383end Rep_Clause5_Pkg;
384