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: /* /*-- /* /* 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 MOD EQUALS "%" PREFIX VTL_ TAG TOK; CONSTANT OR EQUALS "|" PREFIX VTL_ TAG TOK; CONSTANT AND 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 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_MOD+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 type QUOTED, /* A quoted string like "...." DIM, /* A dimension of array ID, /* Identificator: variable or routine name FSPEC, /* File specification EOL, /* End of Line EOS, /* End of Stream DIGIT, /* Digit IF, THEN, "ELSE", ENDIF, EQ, /* == GE, /* => LE, /* =< LAND, /* && LOR, /* || INCR, /* ++ DECR /* -- ) EQUALS 258 INCREMENT 1 PREFIX VTL_ TAG TOK; /* /* Data (operand) 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 label BITFIELD LENGTH 1 MASK; /* Label id BITFIELD LENGTH 1 MASK; /* Id END type; AGGREGATE llist STRUCTURE PREFIX llist_ TAG vtl ALIGN; flink ADDRESS; blink ADDRESS; spare LONGWORD UNSIGNED FILL; END llist; /* /* 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 ALIGN; llist vtl_llist; 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; line LONGWORD UNSIGNED; /* A references to line and position pos LONGWORD UNSIGNED; /* in the source file _u UNION; type LONGWORD UNSIGNED; type vtl_type; END _u; dim WORD UNSIGNED; /* Dimension sz WORD UNSIGNED; /* An element size for STRING CONSTANT hdrsz EQUALS . PREFIX vtl_ TAG id; #objvar = .; val UNION; val CHARACTER DIMENSION 1; val BYTE; val WORD; val LONGWORD; val QUADWORD; END val; CONSTANT valsz EQUALS .-#objvar PREFIX vtl_ TAG id; END id; /* /* Internal variable structure /* AGGREGATE tmp STRUCTURE PREFIX tmp_ TAG vtl; id LONGWORD UNSIGNED; type UNION LONGWORD UNSIGNED;; type vtl_type; END type; val UNION; val CHARACTER DIMENSION 1; val BYTE; val WORD; val LONGWORD; val QUADWORD; END val; END tmp; /* /* /* CONSTANT ( SET, ARITH, LOGIC, ) EQUALS %x200 INCREMENT %x100 PREFIX VTL_ TAG OPTP; CONSTANT ( SET, ADD, SUB, MUL, DIV, MOD, OR, AND, XOR, NOT, NEG ) EQUALS VTL_OPTP_ARITH INCREMENT 1 PREFIX VTL_ TAG OPER; CONSTANT ( IF, IFELSE ) EQUALS VTL_OPTP_LOGIC INCREMENT 1 PREFIX VTL_ TAG OPER; AGGREGATE instr STRUCTURE PREFIX instr_ TAG vtl ALIGN; llist vtl_llist; opcode STRUCTURE LONGWORD UNSIGNED; opcode WORD UNSIGNED; END opcode; lbl LONGWORD UNSIGNED; /* Expression index/order number op1 STRUCTURE PREFIX op1_; type UNION LONGWORD UNSIGNED;; type vtl_type; END type; op1 UNION LONGWORD UNSIGNED PREFIX op1_; op1 ADDRESS; END op1; END op1; op2 STRUCTURE PREFIX op2_; type UNION LONGWORD UNSIGNED;; type vtl_type; END type; op2 UNION LONGWORD UNSIGNED PREFIX op2_; op2 ADDRESS; END op2; END op2; END instr; /* /* Token definition structure see %union in the vtl.bison /* AGGREGATE tok STRUCTURE PREFIX tok_ TAG vtl ALIGN; type STRUCTURE LONGWORD UNSIGNED;; vchar BITFIELD LENGTH 1 MASK; digit BITFIELD LENGTH 1 MASK; id BITFIELD LENGTH 1 MASK; instr BITFIELD LENGTH 1 MASK; END type; vchar STRUCTURE; vchar LONGWORD UNSIGNED; vchar ADDRESS (CHARACTER); END vchar; digit LONGWORD UNSIGNED; instr ADDRESS (vtl_instr); END tok; /* /* Routine /* #maxargs = 8; /* P1 ... P8 CONSTANT maxargs EQUALS #maxargs PREFIX rtn_ TAG vtl; AGGREGATE rtn STRUCTURE PREFIX rtn_ TAG vtl ALIGN; name STRUCTURE; len BYTE UNSIGNED; name CHARACTER DIMENSION 32; END name; line LONGWORD UNSIGNED; /* A references to line and position pos LONGWORD UNSIGNED; /* in the source file instrc LONGWORD UNSIGNED; /* Expression count instr vtl_llist; /* Expression stack/llist vars ADDRESS; /* A pointer to local variables area ret UNION LONGWORD; ret vtl_type; END ret; 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 pos LONGWORD UNSIGNED; /* A current position in the line buffer lvl LONGWORD UNSIGNED; /* A current recursion level rtn vtl_rtn; END ctx; END_MODULE VTLDEF;