384 lines
7.1 KiB
Ada
384 lines
7.1 KiB
Ada
package Rep_Clause5_Pkg is
|
|
|
|
type ID_Type is mod 65536;
|
|
type String_ID is new ID_Type;
|
|
type LNumber_Type is range 0..99999;
|
|
subtype Long_Type is Integer;
|
|
|
|
type Func_ID is (No_Func, FUN_SGN, FUN_EXP, FUN_LOG, FUN_LOG10);
|
|
|
|
type Token_Kind is (
|
|
No_Token,
|
|
LEX_BINARY,
|
|
LEX_SECTION,
|
|
LEX_003,
|
|
LEX_004,
|
|
LEX_005,
|
|
LEX_006,
|
|
LEX_007,
|
|
LEX_008,
|
|
LEX_009,
|
|
LEX_LF,
|
|
LEX_011,
|
|
LEX_012,
|
|
LEX_013,
|
|
LEX_014,
|
|
LEX_015,
|
|
LEX_016,
|
|
LEX_017,
|
|
LEX_018,
|
|
LEX_019,
|
|
LEX_020,
|
|
LEX_021,
|
|
LEX_022,
|
|
LEX_023,
|
|
LEX_024,
|
|
LEX_025,
|
|
LEX_026,
|
|
LEX_027,
|
|
LEX_028,
|
|
LEX_029,
|
|
LEX_030,
|
|
LEX_031,
|
|
LEX_032,
|
|
'!',
|
|
'"',
|
|
'#',
|
|
'$',
|
|
'%',
|
|
'&',
|
|
''',
|
|
'(',
|
|
')',
|
|
'*',
|
|
'+',
|
|
',',
|
|
'-',
|
|
'.',
|
|
'/',
|
|
'0',
|
|
'1',
|
|
'2',
|
|
'3',
|
|
'4',
|
|
'5',
|
|
'6',
|
|
'7',
|
|
'8',
|
|
'9',
|
|
':',
|
|
';',
|
|
'<',
|
|
'=',
|
|
'>',
|
|
'?',
|
|
'@',
|
|
'A',
|
|
'B',
|
|
'C',
|
|
'D',
|
|
'E',
|
|
'F',
|
|
'G',
|
|
'H',
|
|
'I',
|
|
'J',
|
|
'K',
|
|
'L',
|
|
'M',
|
|
'N',
|
|
'O',
|
|
'P',
|
|
'Q',
|
|
'R',
|
|
'S',
|
|
'T',
|
|
'U',
|
|
'V',
|
|
'W',
|
|
'X',
|
|
'Y',
|
|
'Z',
|
|
'[',
|
|
'\',
|
|
']',
|
|
'^',
|
|
'_',
|
|
'`',
|
|
'a',
|
|
'b',
|
|
'c',
|
|
'd',
|
|
'e',
|
|
'f',
|
|
'g',
|
|
'h',
|
|
'i',
|
|
'j',
|
|
'k',
|
|
'l',
|
|
'm',
|
|
'n',
|
|
'o',
|
|
LEX_SFUN3,
|
|
LEX_SFUN2,
|
|
LEX_SFUN1,
|
|
LEX_SFUNN,
|
|
LEX_FUN3,
|
|
LEX_FUN2,
|
|
LEX_FUN1,
|
|
LEX_FUNN,
|
|
'x',
|
|
'y',
|
|
'z',
|
|
'{',
|
|
'|',
|
|
'}',
|
|
'~',
|
|
LEX_CRTA,
|
|
LEX_ISNULL,
|
|
LEX_USING,
|
|
LEX_HANDLE,
|
|
LEX_CALLX,
|
|
LEX_COMPLEX,
|
|
LEX_FIXED,
|
|
LEX_ENV,
|
|
LEX_SPARSE,
|
|
LEX_SUBROUTINE,
|
|
LEX_CALL,
|
|
LEX_BOX,
|
|
LEX_VLINE,
|
|
LEX_HLINE,
|
|
LEX_MAXLENGTH,
|
|
LEX_DLENGTH,
|
|
LEX_INPUT,
|
|
LEX_INITIALIZE,
|
|
LEX_OUTPUT,
|
|
LEX_UNLINK,
|
|
LEX_SEEK,
|
|
LEX_EXIT,
|
|
LEX_NOT,
|
|
LEX_COMMON,
|
|
LEX_CHAIN,
|
|
LEX_DEF,
|
|
LEX_ARITY,
|
|
LEX_RESUME,
|
|
LEX_PIC_S,
|
|
LEX_BG,
|
|
LEX_FG,
|
|
LEX_PC,
|
|
LEX_CRT,
|
|
LEX_ENUM,
|
|
LEX_DECLARE,
|
|
LEX_CURSOR,
|
|
LEX_DROP,
|
|
LEX_CURRENT,
|
|
LEX_ISOLATION,
|
|
LEX_SET,
|
|
LEX_TRANSACTION,
|
|
LEX_COMMIT,
|
|
LEX_ABORT,
|
|
LEX_BEGIN,
|
|
LEX_PREVIOUS,
|
|
LEX_LAST,
|
|
LEX_FIRST,
|
|
LEX_KEY,
|
|
LEX_START,
|
|
LEX_REWRITE,
|
|
LEX_INDEX,
|
|
LEX_SECONDARY,
|
|
LEX_PRIMARY,
|
|
LEX_COLUMN,
|
|
LEX_TEMP,
|
|
LEX_TABLE,
|
|
LEX_CREATE,
|
|
LEX_HASH,
|
|
LEX_BTREE,
|
|
LEX_UPDATE,
|
|
LEX_ERROR,
|
|
LEX_ACCEPT,
|
|
LEX_AVG,
|
|
LEX_MAX,
|
|
LEX_MIN,
|
|
LEX_FIELD,
|
|
LEX_RESTORE,
|
|
LEX_END,
|
|
LEX_STEP,
|
|
LEX_NEXT,
|
|
LEX_FOR,
|
|
LEX_RETURN,
|
|
LEX_GOSUB,
|
|
LEX_RANGE,
|
|
LEX_EXPON,
|
|
LEX_XOR,
|
|
LEX_OR,
|
|
LEX_AND,
|
|
LEX_SHIFTR,
|
|
LEX_GE,
|
|
LEX_NE,
|
|
LEX_SHIFTL,
|
|
LEX_LE,
|
|
LEX_VARYING,
|
|
LEX_LENGTH,
|
|
LEX_PRINT,
|
|
LEX_IF,
|
|
LEX_GOTO,
|
|
LEX_ON,
|
|
LEX_THEN,
|
|
LEX_DELETE,
|
|
LEX_TO,
|
|
LEX_SEQUENCE,
|
|
LEX_NONUNIQUE,
|
|
LEX_UNIQUE,
|
|
LEX_FILE,
|
|
LEX_CLOSE,
|
|
LEX_OPEN,
|
|
LEX_DATABASE,
|
|
LEX_RECORD,
|
|
LEX_DATA,
|
|
LEX_WRITE,
|
|
LEX_READ,
|
|
LEX_STOP,
|
|
LEX_LET,
|
|
LEX_MOD,
|
|
LEX_LONG,
|
|
LEX_DIM,
|
|
LEX_SHORT,
|
|
LEX_REM,
|
|
LEX_SHELL,
|
|
LEX_TOKEN,
|
|
LEX_FLOAT,
|
|
LEX_SIDENT,
|
|
LEX_INLREM,
|
|
LEX_ENDLIT,
|
|
LEX_STRLIT,
|
|
LEX_IDENT,
|
|
LEX_LNUMBER,
|
|
LEX_HEX,
|
|
LEX_NUMBER,
|
|
LEX_EOF,
|
|
LEX_QUIT,
|
|
LEX_LIST,
|
|
LEX_REMOVE,
|
|
LEX_RENUMBER,
|
|
LEX_CONTINUE,
|
|
LEX_RUN,
|
|
LEX_MERGE,
|
|
LEX_ENTER,
|
|
LEX_NEW,
|
|
LEX_RESET,
|
|
LEX_SYMTAB,
|
|
LEX_CLS,
|
|
LEX_EDIT,
|
|
LEX_SAVE,
|
|
LEX_RESAVE,
|
|
LEX_LOAD,
|
|
LEX_NAME,
|
|
LEX_LISTP,
|
|
LEX_SHOW,
|
|
LEX_STACK,
|
|
LEX_STATUS,
|
|
LEX_CACHE,
|
|
LEX_INSPECT,
|
|
LEX_STOW,
|
|
LEX_PKGRUN,
|
|
LEX_POP,
|
|
LEX_CHECK,
|
|
LEX_INSERT,
|
|
LEX_INTO,
|
|
LEX_VALUES,
|
|
LEX_NULL,
|
|
LEX_WHERE,
|
|
LEX_FROM,
|
|
LEX_EXEC,
|
|
LEX_SELECT,
|
|
LEX_AS,
|
|
LEX_ALL,
|
|
LEX_BY,
|
|
LEX_CROSS,
|
|
LEX_DESC,
|
|
LEX_FULL,
|
|
LEX_GROUP,
|
|
LEX_INNER,
|
|
LEX_JOIN,
|
|
LEX_LEFT,
|
|
LEX_LIMIT,
|
|
LEX_NATURAL,
|
|
LEX_OFFSET,
|
|
LEX_ORDER,
|
|
LEX_OUTER,
|
|
LEX_RIGHT,
|
|
LEX_FETCH,
|
|
LEX_DISTINCT,
|
|
LEX_DEFAULT,
|
|
LEX_RETURNING,
|
|
LEX_LEVEL,
|
|
LEX_COMMITTED,
|
|
LEX_SERIALIZABLE,
|
|
LEX_ONLY,
|
|
LEX_HOLD,
|
|
LEX_FORWARD,
|
|
LEX_WITH,
|
|
LEX_PRIOR,
|
|
LEX_RELATIVE,
|
|
LEX_BACKWARD,
|
|
LEX_OF,
|
|
LEX_SCROLL,
|
|
LEX_NOWAIT,
|
|
LEX_HAVING,
|
|
LEX_END_TOKENS
|
|
);
|
|
|
|
type Aux_Kind is (No_Aux, SID_Aux, FID_Aux, LNO_Aux);
|
|
|
|
type Token_Type(Aux : Aux_Kind := No_Aux) is
|
|
record
|
|
Token : Token_Kind := No_Token;
|
|
case Aux is
|
|
when SID_Aux =>
|
|
SID : String_ID;
|
|
when FID_Aux =>
|
|
FID : Func_ID;
|
|
when LNO_Aux =>
|
|
LNO : LNumber_Type;
|
|
when No_Aux =>
|
|
null;
|
|
end case;
|
|
end record;
|
|
|
|
for Token_Type use
|
|
record
|
|
Aux at 0 range 0..2;
|
|
Token at 0 range 3..12;
|
|
SID at 0 range 16..31;
|
|
FID at 0 range 16..31;
|
|
LNO at 0 range 13..31;
|
|
end record;
|
|
|
|
type Tokens_Index is range 0..999999;
|
|
type Token_Array is array(Tokens_Index range <>) of Token_Type;
|
|
type Token_Line is access all Token_Array;
|
|
|
|
type Line_Node is
|
|
record
|
|
Line : Token_Line;
|
|
LNO : LNumber_Type := 0;
|
|
Numbered : Boolean := False;
|
|
end record;
|
|
|
|
type Nodes_Index is range 0..999999;
|
|
type LNodes_Array is array(Nodes_Index range <>) of Line_Node;
|
|
type LNodes_Ptr is access all LNodes_Array;
|
|
|
|
type VString is
|
|
record
|
|
Max_Length : Natural := 0;
|
|
Fixed : Boolean := False;
|
|
end record;
|
|
|
|
function To_Long(Object : VString; Radix : Natural) return Long_Type;
|
|
|
|
function Element (V : String_ID) return String;
|
|
|
|
end Rep_Clause5_Pkg;
|