MODULE VTLDEF IDENT "VTLDEF-1-X"; /*++ /* /* Facility: /* VMS Tool Language /* /* Abstract: /* This is an interface module contains data structures definitions, /* constants, functions/procedures prototypes. /* /* Author: /* Ruslan R. Laishev /* /* Creation Date: 19-MAR-2009 /* /* Modification History: /* /*-- /* /* Token definition structure see %union in the vtl.bison /* AGGREGATE tok UNION PREFIX tok_ TAG vtl; vchar STRUCTURE; len LONGWORD UNSIGNED; ptr ADDRESS (BYTE UNSIGNED); END vchar; digit LONGWORD UNSIGNED; END tok; /* /* VTL Tokens, Simple (single-byte) tokens /* CONSTANT QUOTE EQUALS """" PREFIX VTL_ TAG TOK; CONSTANT HASH EQUALS "#" PREFIX VTL_ TAG TOK; CONSTANT COMMENT EQUALS "#" PREFIX VTL_ TAG TOK; CONSTANT DOT EQUALS "." PREFIX VTL_ TAG TOK; CONSTANT MINUS EQUALS "-" PREFIX VTL_ TAG TOK; CONSTANT SLASH EQUALS "/" PREFIX VTL_ TAG TOK; CONSTANT STAR EQUALS "*" PREFIX VTL_ TAG TOK; CONSTANT DOLLAR EQUALS "$" PREFIX VTL_ TAG TOK; CONSTANT BRK_OP EQUALS "(" PREFIX VTL_ TAG TOK; CONSTANT BRK_CL EQUALS ")" PREFIX VTL_ TAG TOK; CONSTANT BLK_OP EQUALS "{" PREFIX VTL_ TAG TOK; CONSTANT BLK_CL EQUALS "}" PREFIX VTL_ TAG TOK; CONSTANT SQ_OP EQUALS "[" PREFIX VTL_ TAG TOK; CONSTANT SQ_CL EQUALS "]" PREFIX VTL_ TAG TOK; CONSTANT AN_OP EQUALS "<" PREFIX VTL_ TAG TOK; CONSTANT AN_CL EQUALS ">" PREFIX VTL_ TAG TOK; CONSTANT COMMA EQUALS "," PREFIX VTL_ TAG TOK; CONSTANT TILDA EQUALS "~" PREFIX VTL_ TAG TOK; CONSTANT COLON EQUALS ":" PREFIX VTL_ TAG TOK; CONSTANT SEMI EQUALS ";" PREFIX VTL_ TAG TOK; CONSTANT PERCENT EQUALS "%" PREFIX VTL_ TAG TOK; CONSTANT SET EQUALS "=" PREFIX VTL_ TAG TOK; CONSTANT GT EQUALS ">" PREFIX VTL_ TAG TOK; CONSTANT LT EQUALS "<" PREFIX VTL_ TAG TOK; CONSTANT ADD EQUALS "+" PREFIX VTL_ TAG TOK; CONSTANT SUB EQUALS "-" PREFIX VTL_ TAG TOK; CONSTANT MUL EQUALS "*" PREFIX VTL_ TAG TOK; CONSTANT DIV EQUALS "/" PREFIX VTL_ TAG TOK; CONSTANT AND EQUALS "&" PREFIX VTL_ TAG TOK; CONSTANT OR EQUALS "|" PREFIX VTL_ TAG TOK; CONSTANT XOR EQUALS "^" PREFIX VTL_ TAG TOK; CONSTANT NOT EQUALS "!" PREFIX VTL_ TAG TOK; CONSTANT NEG EQUALS "~" PREFIX VTL_ TAG TOK; CONSTANT RMDR EQUALS "%" PREFIX VTL_ TAG TOK; CONSTANT UNAR EQUALS %x400 PREFIX VTL_ TAG TOK; CONSTANT SHFT EQUALS %x200 PREFIX VTL_ TAG TOK; CONSTANT UADD EQUALS VTL_TOK_ADD+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* += CONSTANT USUB EQUALS VTL_TOK_SUB+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* -= CONSTANT UMUL EQUALS VTL_TOK_MUL+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* *= CONSTANT UDIV EQUALS VTL_TOK_DIV+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* /= CONSTANT UAND EQUALS VTL_TOK_AND+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* &= CONSTANT UOR EQUALS VTL_TOK_OR+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* |= CONSTANT UXOR EQUALS VTL_TOK_XOR+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* ^= CONSTANT NEQ EQUALS "!"+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* != CONSTANT UNEG EQUALS VTL_TOK_NEG+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* ~= CONSTANT URMDR EQUALS VTL_TOK_RMDR+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* %= CONSTANT SHRT EQUALS ">"+VTL_TOK_SHFT PREFIX VTL_ TAG TOK; /* >> CONSTANT SHLF EQUALS "<"+VTL_TOK_SHFT PREFIX VTL_ TAG TOK; /* << CONSTANT USHRT EQUALS VTL_TOK_SHRT+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* >>= CONSTANT USHLF EQUALS VTL_TOK_SHLF+VTL_TOK_UNAR PREFIX VTL_ TAG TOK; /* <<= /* /* VTL Tokens, Complez (multi-bytes) tokens /* CONSTANT ( INCLUDE, /* .INCLUDE DIRECTIVE DEFS, /* .DEFS DIRECTIVE CDD, /* .CDD DIRECTIVE DEFINE, /* .DEFINE DIRECTIVE ENTRY, /* entry () ROUTINE, /* Routine STRUCT, /* Structure type TYPEDEF, /* Type declaration CONST, /* Constant object UNSIGNED, /* Unsigned "VOID", /* Void BYTE, /* Byte WORD, /* Word LONG, /* Longword QUAD, /* Quadword FLOAT, /* Float DOUBLE, /* Double float "STRING", /* A general string DIM, /* A dimension of array ID, /* Identificator: variable or routine name FSPEC, /* File specification EOL, /* End of Line EOS, /* End of Stream DIGIT, /* Digit EQ, /* == GE, /* => LE, /* =< LAND, /* && LOR, /* || INCR, /* ++ DECR, /* -- QUOTED /* String in quotes "...." ) EQUALS 258 INCREMENT 1 PREFIX VTL_ TAG TOK; /* /* Data types definition /* AGGREGATE type STRUCTURE PREFIX type_ TAG vtl; byte BITFIELD LENGTH 1 MASK; word BITFIELD LENGTH 1 MASK; long BITFIELD LENGTH 1 MASK; quad BITFIELD LENGTH 1 MASK; float BITFIELD LENGTH 1 MASK; double BITFIELD LENGTH 1 MASK; "string" BITFIELD LENGTH 1 MASK; unsign BITFIELD LENGTH 1 MASK; /* Signed/unsigned type of variable const BITFIELD LENGTH 1 MASK; /* Constant entry BITFIELD LENGTH 1 MASK; /* Routine END type; /* /* Tree/node stuff /* AGGREGATE key STRUCTURE PREFIX key_ TAG vtl; len BYTE UNSIGNED; sts CHARACTER LENGTH 32; END key; AGGREGATE node STRUCTURE PREFIX tree_ TAG vtl; flink ADDRESS; blink ADDRESS; spare WORD UNSIGNED; ptr ADDRESS; END node; /* /* Constant/Variable (id) structure /* AGGREGATE id STRUCTURE PREFIX id_ TAG vtl; name STRUCTURE; len BYTE UNSIGNED; name CHARACTER DIMENSION 32; END name; _u UNION; type LONGWORD UNSIGNED; type vtl_type; END _u; dim LONGWORD UNSIGNED; /* Dimension sz LONGWORD UNSIGNED; /* An element size for STRING CONSTANT hdrsz EQUALS . PREFIX vtl_ TAG id; #objvar = .; val UNION; val CHARACTER; val BYTE; val WORD; val LONGWORD; val QUADWORD; val ADDRESS; END val; CONSTANT valsz EQUALS .-#objvar PREFIX vtl_ TAG id; END id; /* /* Routine /* #maxargs = 10; CONSTANT maxargs EQUALS #maxargs PREFIX rtn_ TAG vtl; AGGREGATE rtn STRUCTURE PREFIX rtn_ TAG vtl; name STRUCTURE; len BYTE UNSIGNED; name CHARACTER DIMENSION 32; END name; argc LONGWORD UNSIGNED; argv STRUCTURE DIMENSION #maxargs; type UNION; type LONGWORD UNSIGNED; type vtl_type; END type; END argv; END rtn; /* /* A parser context structure /* AGGREGATE ctx STRUCTURE PREFIX ctx_ TAG vtl; line LONGWORD UNSIGNED; /* Line number line STRUCTURE PREFIX line_ TAG ctx; len BYTE UNSIGNED; /* Line length line CHARACTER DIMENSION 1024;/* A line string buffer END line; pos LONGWORD UNSIGNED; /* A current position in the line buffer lvl LONGWORD UNSIGNED; /* A current recursion level globals ADDRESS (id); /* A global symbol table locals ADDRESS (id); /* A local symbol table END ctx; /* /* Reverse Polish Notaion block /* /*AGGREGATE rpn STRUCTURE PREFIX VTL_ TAG RPN; /*END rpn; END_MODULE VTLDEF;