
!*************************************************************************
!									 *
! © Copyright 2005 Hewlett-Packard Development Company, L.P.		 *
!									 *
! Confidential computer software. Valid license  from  HP  required  for *
! possession, use or copying. Consistent with  FAR  12.211  and  12.212, *
! Commercial Computer Software,  Computer  Software  Documentation,  and *
! Technical  Data  for  Commercial  Items  are  licensed  to  the   U.S. *
! Government under vendor's standard commercial license.		 *
!									 *
!*************************************************************************
 
!++
! Facility:
!   Extended LSE (XLSE)
!
! Abstract:
!   This module defines the SDL language attributes, templates
!   and placeholders.
!
! Author:
!   Joel L. Clinkenbeard, Technical Languages and Environments Group
!   W. Ward Clark, LinkWorks Project
!
! Creation Date: 1-Nov-84
!
! Modification History:
!   X0.3    WWC  15-Nov-84  add BAR and END_BAR aliases
!   X0.3-1  WWC   3-Jan-85  add basic module definitions
!   X0.4    WWC  28-Feb-85  TEMPLATE --> TOKEN
!   X0.6    WWC  14-May-85  /AUTOFILL --> /AUTOSUBSTITUTE
!			    BAR --> BBAR, END_BAR --> EBAR
!   X0.7    JLC  22-Mar-85  define SDL language placeholders and templates
!   X0.7-1  WWC  18-Aug-85  add definitions for SDLDOC
!   X0.7-2  WWC  25-Aug-85  SDL$HELP --> SYS$HELP:HELPLIB.HLB
!   X0.9    WWC  15-Jan-86  Copyright placeholder:  1985 --> 1986
!   X0.9-1  WWC  16-Jan-86  improve BLOCK-DECLARATION template
!   X0.9-2  WWC  17-Jan-86  reformatted many templates, changed ";" generation
!   X0.10   WWC  16-Nov-86  upgrade to LSE V2
!   X1.1    WWC  10-Jan-87  Copyright placeholder:  1986 --> 1987
!   X1.1-1  WWC  30-Mar-87  new DEFINE LANGUAGE /COMMENT qualifier
!   X1.2    WWC  23-Aug-87  remove RUNOFF change bar definitions
!   X1.2-1  WWC  27-Aug-87  '{' is an SDL comment character,
!			       can't be placeholder delimiter
!   X1.2-2  WWC  14-Feb-88  TBS alias --> token, ...
!			    1987 --> 1988
!   X1.3    WWC   3-Dec-88  update help topics
!   X1.3-1  WWC  15-Jan-89  normalize LSE command syntax
!			    1988 --> 1989
!   X1.3-2  WWC  11-Feb-89  remove XLSE-specific definitions
!   X3.0    WWC   1-Jan-90  upgrade to LSE V3.0
!                           1989 --> 1990
!   X3.0-1  WWC  28-Jan-90  add PDF definitions
!   X3.1    WWC  29-Oct-91  1990 --> 1991
!   X4.0a   WWC  24-Feb-93  1991 --> 1993
!--
!
!+
!   SDL Language Definition
!-
DELETE LANGUAGE sdl
DEFINE LANGUAGE sdl -
    /COMMENT=( -
	ASSOCIATED_IDENTIFIER = PREVIOUS, -
	NOBEGIN, -
	NOEND, -
	NOFIXED, -
	NOLINE, -
	TRAILING=("{+","{-","{","/*+","/*-","/*")) -
    /CAPABILITIES=NODIAGNOSTICS -
    /COMPILE_COMMAND="SDL/PARSE/LIST" -
    /EXPAND_CASE=AS_IS -
    /FILE_TYPES=(.SDL) -
    /HELP_LIBRARY=HELPLIB -
    /IDENTIFIER_CHARACTERS= -
	"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%$_0123456789#" -
    /INITIAL_STRING="[module]" -
    /LEFT_MARGIN=CONTEXT_DEPENDENT -
    /OVERVIEW_OPTIONS=( -
        MINIMUM_LINES=1, -
        TAB_RANGE=(4,8)) -
    /PLACEHOLDER_DELIMITERS=( -
        REQUIRED=      ("<",">"), -
        REQUIRED_LIST= ("<",">..."), -
        OPTIONAL=      ("[","]"), -
        OPTIONAL_LIST= ("[","]..."), -
        PSEUDOCODE= ("«","»")) -
    /PUNCTUATION_CHARACTERS=",;()" -
    /QUOTED_ITEM=(QUOTES="""") -
    /RIGHT_MARGIN=80 -
    /TAB_INCREMENT=4 -
    /TOPIC_STRING="sdl" -
    /NOWRAP -
    /VERSION="SDL V3.2 (XLSE X4.0a)"
!+
!   Delete any language definitions
!-
SET LANGUAGE sdl

DELETE PLACEHOLDER *
DELETE TOKEN *
!
!+
!   Language-independent definitions
!-
DELETE PLACEHOLDER "lse$block_comment"
DEFINE PLACEHOLDER "lse$block_comment" -
    /TYPE=NONTERMINAL

    "{ <tbs>"
    "{"

    END DEFINE

DELETE PLACEHOLDER "lse$generic"
DEFINE PLACEHOLDER "lse$generic" -
    /TYPE=NONTERMINAL

    "<tbs>"

    END DEFINE

DELETE PLACEHOLDER "lse$line_comment"
DEFINE PLACEHOLDER "lse$line_comment" -
    /TYPE=NONTERMINAL

    "{ <tbs>"

    END DEFINE

DEFINE PLACEHOLDER "module" -
    /DESCRIPTION="SDL MODULE definition" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Declarations MODULE" -
    /TYPE=NONTERMINAL

    "MODULE <module-name> [ident-option];"
    "{[module-level-comments]"
    ""
    "[statement]..."
    "END_MODULE [module-name];"

    END DEFINE

DEFINE TOKEN "module" /PLACEHOLDER="module"

DEFINE PLACEHOLDER "module-level-comments" -
    /DESCRIPTION="" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "++"
    " Facility:"
    "   <tbs>"
    " "
    " Abstract:"
    "   <tbs>"
    " "
    " Author:"
    "   <tbs>"
    " "
    " Creation Date: <tbs>"
    " "
    " Modification History:"
    "--"

    END DEFINE

DEFINE PLACEHOLDER "module-name" -
    /DESCRIPTION="Valid module name" -
    /AUTO_SUBSTITUTE -
    /TOPIC="Declarations MODULE" -
    /TYPE=TERMINAL

    "Valid module name"

    END DEFINE
!
!+
!   SDL Language Support
!-
DEFINE PLACEHOLDER "IDENT-option" -
    /DESCRIPTION="IDENT option" -
    /TOPIC="Declarations MODULE" -
    /TYPE=NONTERMINAL

    "IDENT ""[ident-text]"""

    END DEFINE

DEFINE TOKEN "IDENT" /PLACEHOLDER="IDENT-option"

DEFINE PLACEHOLDER "ident-text" -
    /DESCRIPTION="Any string of text" -
    /TOPIC="Declarations MODULE" -
    /TYPE=TERMINAL

    "Any string of text"

    END DEFINE

DEFINE PLACEHOLDER "statement" -
    /DESCRIPTION="" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Declarations" -
    /TYPE=MENU

    "AGGREGATE-declaration" /PLACEHOLDER
    "BLOCK-declaration" /PLACEHOLDER
    "CONSTANT-declaration" /PLACEHOLDER
    "ENTRY-declaration" /PLACEHOLDER
    "ITEM-declaration" /PLACEHOLDER
    "local-assignment" /PLACEHOLDER
    "INCLUDE-statement" /PLACEHOLDER
    "output-comment" /PLACEHOLDER

    END DEFINE

DEFINE PLACEHOLDER "declaration-statement" -
    /DESCRIPTION="" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Declarations" -
    /TYPE=MENU

    "CONSTANT-declaration" /PLACEHOLDER
    "BLOCK-declaration" /PLACEHOLDER
    "AGGREGATE-declaration" /PLACEHOLDER
    "ENTRY-declaration" /PLACEHOLDER
    "ITEM-declaration" /PLACEHOLDER

    END DEFINE

DEFINE TOKEN "declaration" /PLACEHOLDER="declaration-statement"

DEFINE PLACEHOLDER "CONSTANT-declaration" -
    /DESCRIPTION="CONSTANT declaration" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Declarations CONSTANT" -
    /TYPE=NONTERMINAL

    "CONSTANT <constant-definition> [PREFIX-option] [TAG-option] [COUNTER-option];"

    END DEFINE

DEFINE TOKEN "CONSTANT" /PLACEHOLDER="CONSTANT-declaration"

DEFINE PLACEHOLDER "constant-definition" -
    /DESCRIPTION="" -
    /SEPARATOR="," -
    /TOPIC="Declarations CONSTANT" -
    /TYPE=MENU

    "<constant-name> EQUALS <CONSTANT-expression>"
    "([constant-name]...) EQUALS <CONSTANT-expression> [INCREMENT-expression]"

    END DEFINE

DEFINE PLACEHOLDER "constant-name" -
    /DESCRIPTION="Name of a constant" -
    /DUPLICATION=HORIZONTAL -
    /SEPARATOR="," -
    /TOPIC="Declarations CONSTANT" -
    /TYPE=TERMINAL

    "Name of a constant"

    END DEFINE

DEFINE PLACEHOLDER "INCREMENT-expression" -
    /DESCRIPTION="Constant increment expression" -
    /TOPIC="Declarations CONSTANT" -
    /TYPE=NONTERMINAL

    "INCREMENT <expression>"

    END DEFINE

DEFINE TOKEN "INCREMENT" /PLACEHOLDER="INCREMENT-expression"

DEFINE PLACEHOLDER "expression" -
    /DESCRIPTION="Valid SDL expression" -
    /TOPIC="Expressions" -
    /TYPE=MENU

    "numeric-constant" /PLACEHOLDER
    "<expression> + <expression>"
    "<expression> - <expression>"
    "<expression> * <expression>"
    "<expression> / <expression>"
    "- <expression>"
    "(<expression>)"
    "logical-shift-expression" /PLACEHOLDER
    "logical-or-expression" /PLACEHOLDER
    "logical-and-expression" /PLACEHOLDER
    "offset-location-symbol" /PLACEHOLDER    

    END DEFINE

DEFINE PLACEHOLDER "constant-expression" /PLACEHOLDER="expression"

DEFINE PLACEHOLDER "numeric-constant" -
    /DESCRIPTION="Numeric constant" -
    /TOPIC="Expressions Numeric_Values" -
    /TYPE=MENU

    "digit-string" /PLACEHOLDER
    "decimal-constant" /PLACEHOLDER
    "hexadecimal-constant" /PLACEHOLDER
    "binary-constant" /PLACEHOLDER
    "octal-constant" /PLACEHOLDER
    "ascii-constant" /PLACEHOLDER

    END DEFINE

DEFINE PLACEHOLDER "digit-string" -
    /DESCRIPTION="String of decimal digits" -
    /TOPIC="Expressions Numeric_Values" -
    /TYPE=TERMINAL

    "String of digits in range 0-9"

    END DEFINE

DEFINE PLACEHOLDER "decimal-constant" -
    /DESCRIPTION="Decimal constant string" -
    /TOPIC="Expressions Numeric_Values" -
    /TYPE=NONTERMINAL

    "%D<digit-string>"

    END DEFINE

DEFINE PLACEHOLDER "hexadecimal-constant" -
    /DESCRIPTION="hexadecimal constant string" -
    /TOPIC="Expressions Numeric_Values" -
    /TYPE=NONTERMINAL

    "%X<hexadecimal-digit-string>"

    END DEFINE

DEFINE PLACEHOLDER "hexadecimal-digit-string" -
    /DESCRIPTION="String of hexadecimal digits" -
    /TOPIC="Expressions Numeric_Values" -
    /TYPE=TERMINAL

    "String of digits in range 0-9, A-F"

    END DEFINE

DEFINE PLACEHOLDER "octal-constant" -
    /DESCRIPTION="octal constant string" -
    /TOPIC="Expressions Numeric_Values" -
    /TYPE=NONTERMINAL

    "%O<octal-digit-string>"

    END DEFINE

DEFINE PLACEHOLDER "octal-digit-string" -
    /DESCRIPTION="String of octal digits" -
    /TOPIC="Expressions Numeric_Values" -
    /TYPE=TERMINAL

    "String of digits in range 0-7"

    END DEFINE

DEFINE PLACEHOLDER "binary-constant" -
    /DESCRIPTION="binary constant string" -
    /TOPIC="Expressions Numeric_Values" -
    /TYPE=NONTERMINAL

    "%B<binary-digit-string>"

    END DEFINE

DEFINE PLACEHOLDER "binary-digit-string" -
    /DESCRIPTION="String of binary digits" -
    /TOPIC="Expressions Numeric_Values" -
    /TYPE=TERMINAL

    "String of digits in range 0-1"

    END DEFINE

DEFINE PLACEHOLDER "ascii-constant" -
    /DESCRIPTION="ascii constant string" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "%A<printable-ascii-string>"

    END DEFINE

DEFINE PLACEHOLDER "printable-ascii-string" -
    /DESCRIPTION="String of printable ascii characters" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "String of printable ascii characters"

    END DEFINE

DEFINE PLACEHOLDER "logical-shift-expression" -
    /DESCRIPTION="Logical shift expression" -
    /TOPIC="Expressions Operators" -
    /TYPE=NONTERMINAL

    "<expression> @ <expression>"

    END DEFINE

DEFINE PLACEHOLDER "logical-or-expression" -
    /DESCRIPTION="Logical OR expression" -
    /TOPIC="Expressions Operators" -
    /TYPE=NONTERMINAL

    "<expression> ! <expression>"

    END DEFINE

DEFINE PLACEHOLDER "logical-and-expression" -
    /DESCRIPTION="Logical AND expression" -
    /TOPIC="Expressions Operators" -
    /TYPE=NONTERMINAL

    "<expression> & <expression>"

    END DEFINE

DEFINE PLACEHOLDER "offset-location-symbol" -
    /DESCRIPTION="AGGREGATE offset location symbols" -
    /TOPIC="Expressions Offset_Symbols" -
    /TYPE=MENU

    "origin-byte-offset-symbol" /PLACEHOLDER
    "first-member-byte-offset-symbol" /PLACEHOLDER
    "bit-offset-symbol" /PLACEHOLDER

    END DEFINE

DEFINE PLACEHOLDER "origin-byte-offset-symbol" -
    /DESCRIPTION="Current byte offset from origin in an AGGREGATE declaration" -
    /TOPIC="Expressions Offset_Symbols" -
    /TYPE=NONTERMINAL

    "."

    END DEFINE

DEFINE PLACEHOLDER "first-member-byte-offset-symbol" -
    /DESCRIPTION="Current byte offset relative to first member in AGGREGATE" -
    /TOPIC="Expressions Offset_Symbols" -
    /TYPE=NONTERMINAL

    ":"

    END DEFINE

DEFINE PLACEHOLDER "bit-offset-symbol" -
    /DESCRIPTION="Bit offset from most recent byte-aligned element" -
    /TOPIC="Expressions Offset_Symbols" -
    /TYPE=NONTERMINAL

    "^"

    END DEFINE

DEFINE PLACEHOLDER "AGGREGATE-declaration" -
    /DESCRIPTION="Declaration of aggregate" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=NONTERMINAL

    "AGGREGATE <aggregate-name> <aggregate-type> [aggregate-options]...;"
    "	<member-declaration>..."
    "	END [aggregate-name];"

    END DEFINE

DEFINE TOKEN "AGGREGATE" /PLACEHOLDER="AGGREGATE-declaration"

DEFINE PLACEHOLDER "aggregate-name" -
    /DESCRIPTION="Name of aggregate" -
    /AUTO_SUBSTITUTE -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=TERMINAL

    "Name of aggregate"

    END DEFINE

DEFINE PLACEHOLDER "aggregate-type" -
    /DESCRIPTION="STRUCTURE, UNION, or implicit union" -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=MENU

    "STRUCTURE"
    "UNION"
    "item-data-type" /PLACEHOLDER

    END DEFINE

DEFINE PLACEHOLDER "aggregate-options" -
    /DESCRIPTION="Aggregate options" -
    /SEPARATOR=" " -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=MENU

    "member-options" /PLACEHOLDER
    "storage-class" /PLACEHOLDER
    "ORIGIN <member-name>"
    "MARKER <marker-string>"

    END DEFINE

DEFINE PLACEHOLDER "STRUCTURE-declaration" -
    /DESCRIPTION="Declaration of structure aggregate" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Declarations STRUCTURE" -
    /TYPE=NONTERMINAL

    "AGGREGATE <aggregate-name> STRUCTURE [aggregate-options]...;"
    "	<member-declaration>..."
    "	END [aggregate-name];"

    END DEFINE

DEFINE TOKEN "STRUCTURE" /PLACEHOLDER="STRUCTURE-declaration"

DEFINE PLACEHOLDER "UNION-declaration" -
    /DESCRIPTION="Declaration of union aggregate" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Declarations UNION" -
    /TYPE=NONTERMINAL

    "AGGREGATE <aggregate-name> UNION [aggregate-options]...;"
    "	<member-declaration>..."
    "	END [aggregate-name];"

    END DEFINE

DEFINE TOKEN "UNION" /PLACEHOLDER="UNION-declaration"

DEFINE PLACEHOLDER "member-declaration" -
    /DESCRIPTION="Declaration of aggregate member" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=MENU

    "<member-name> <member-type> [member-options]...;[description]"
    "substructure-declaration" /PLACEHOLDER
    "subunion-declaration" /PLACEHOLDER

    END DEFINE

DEFINE TOKEN "member" /PLACEHOLDER="member-declaration"
    
DEFINE PLACEHOLDER "member-name" -
    /DESCRIPTION="Name of aggregate member" -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=TERMINAL

    "Name of aggregate member"

    END DEFINE

DEFINE PLACEHOLDER "member-type" /PLACEHOLDER="item-data-type"

DEFINE PLACEHOLDER "substructure-declaration" -
    /DESCRIPTION="Declaration of structure subaggregate" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Declarations STRUCTURE" -
    /TYPE=NONTERMINAL

    "<subaggregate-name> STRUCTURE [member-options]...;[description]"
    "	<member-declaration>..."
    "	END <subaggregate-name>;"

    END DEFINE

DEFINE TOKEN "substructure" /PLACEHOLDER="substructure-declaration"

DEFINE PLACEHOLDER "subunion-declaration" -
    /DESCRIPTION="Declaration of union subaggregate" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Declarations UNION" -
    /TYPE=NONTERMINAL

    "<subaggregate-name> UNION [member-options]...;[description]"
    "	<member-declaration>..."
    "	END <subaggregate-name>;"

    END DEFINE

DEFINE TOKEN "subunion" /PLACEHOLDER="subunion-declaration"

DEFINE PLACEHOLDER "subaggregate-name" /PLACEHOLDER="aggregate-name"

DEFINE PLACEHOLDER "item-data-type" -
    /DESCRIPTION="Data type of item" -
    /TOPIC="Data_Types" -
    /TYPE=MENU

    "LONGWORD [UNSIGNED]"
    "WORD [UNSIGNED]"
    "BYTE [UNSIGNED]"
    "BITFIELD-clause" /PLACEHOLDER
    "CHARACTER-clause" /PLACEHOLDER
    "BOOLEAN"
    "QUADWORD [UNSIGNED]"
    "OCTAWORD [UNSIGNED]"
    "F_FLOATING"
    "D_FLOATING"
    "G_FLOATING"
    "H_FLOATING"
    "ADDRESS-clause" /PLACEHOLDER
    "DECIMAL PRECISION (<precision>, <scale>)"

    END DEFINE

DEFINE TOKEN "LONGWORD" -
    /DESCRIPTION="LONGWORD data type" -
    /TOPIC="Data_Types Integer"

    "LONGWORD [UNSIGNED]"

    END DEFINE

DEFINE TOKEN "WORD" -
    /DESCRIPTION="WORD data type" -
    /TOPIC="Data_Types Integer"

    "WORD [UNSIGNED]"

    END DEFINE

DEFINE TOKEN "BYTE" -
    /DESCRIPTION="BYTE data type" -
    /TOPIC="Data_Types Integer"

    "BYTE [UNSIGNED]"

    END DEFINE

DEFINE TOKEN "QUADWORD" -
    /DESCRIPTION="QUADWORD data type" -
    /TOPIC="Data_Types Integer"

    "QUADWORD [UNSIGNED]"

    END DEFINE

DEFINE TOKEN "OCTAWORD" -
    /DESCRIPTION="OCTAWORD data type" -
    /TOPIC="Data_Types Integer"

    "OCTAWORD [UNSIGNED]"

    END DEFINE

DEFINE PLACEHOLDER "UNSIGNED" -
    /DESCRIPTION="UNSIGNED option" -
    /TYPE=NONTERMINAL

    "UNSIGNED"

    END DEFINE

DEFINE TOKEN "UNSIGNED" /PLACEHOLDER="UNSIGNED"

DEFINE TOKEN "F_FLOATING" -
    /DESCRIPTION="F_FLOATING data type" -
    /TOPIC="Data_Types Floating-Point"

    "F_FLOATING"

    END DEFINE

DEFINE TOKEN "G_FLOATING" -
    /DESCRIPTION="G_FLOATING data type" -
    /TOPIC="Data_Types Floating-Point"

    "G_FLOATING"

    END DEFINE

DEFINE TOKEN "D_FLOATING" -
    /DESCRIPTION="D_FLOATING data type" -
    /TOPIC="Data_Types Floating-Point"

    "D_FLOATING"

    END DEFINE

DEFINE TOKEN "H_FLOATING" -
    /DESCRIPTION="H_FLOATING data type" -
    /TOPIC="Data_Types Floating-Point"

    "H_FLOATING"

    END DEFINE

DEFINE TOKEN "BOOLEAN" -
    /DESCRIPTION="BOOLEAN data type" -
    /TOPIC="Data_Types Floating-Point"

    "BOOLEAN"

    END DEFINE

DEFINE TOKEN "DECIMAL_PRECISION" -
    /DESCRIPTION="DECIMAL PRECISION data type" -
    /TOPIC="Data_Types DECIMAL"

    "DECIMAL PRECISION (<precision>, <scale>)"

    END DEFINE

DEFINE PLACEHOLDER "precision" -
    /DESCRIPTION="Decimal precision attribute" -
    /TOPIC="Data_Types DECIMAL" -
    /TYPE=TERMINAL

    "Any valid SDL constant or constant expression"

    END DEFINE

DEFINE PLACEHOLDER "scale" -
    /DESCRIPTION="Decimal precision scale attribute" -
    /TOPIC="Data_Types DECIMAL" -
    /TYPE=TERMINAL

    "Any valid SDL constant or constant expression"

    END DEFINE



DEFINE PLACEHOLDER "ADDRESS-clause" -
    /DESCRIPTION="Address (pointer) datatype clause" -
    /TOPIC="Data_Types ADDRESS" -
    /TYPE=MENU

    "ADDRESS"
    "ADDRESS (<item-data-type>)"
    "ADDRESS (<aggregate-name>)"

    END DEFINE

DEFINE TOKEN "ADDRESS" /PLACEHOLDER="ADDRESS-clause"

DEFINE PLACEHOLDER "BITFIELD-clause" -
    /DESCRIPTION="Bitfield data type clause" -
    /TOPIC="Data_Types BITFIELD" -
    /TYPE=NONTERMINAL

    "BITFIELD [bitfield-LENGTH-option] [MASK] [SIGNED]"

    END DEFINE

DEFINE TOKEN "BITFIELD" /PLACEHOLDER="BITFIELD-clause"

DEFINE PLACEHOLDER "bitfield-LENGTH-option" -
    /DESCRIPTION="Bitfield length option" -
    /TOPIC="Data_Types BITFIELD" -
    /TYPE=NONTERMINAL

    "LENGTH <length-specifier>"

    END DEFINE

DEFINE PLACEHOLDER "LENGTH-option" -
    /DESCRIPTION="Length option" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "LENGTH <length-specifier>"

    END DEFINE

DEFINE TOKEN "LENGTH" /PLACEHOLDER="LENGTH-option"

DEFINE PLACEHOLDER "signed" -
    /DESCRIPTION="Signed bitfield option" -
    /TOPIC="Data_Types BITFIELD" -
    /TYPE=NONTERMINAL

    "SIGNED"

    END DEFINE

DEFINE TOKEN "SIGNED" /PLACEHOLDER="SIGNED"

DEFINE PLACEHOLDER "mask" -
    /DESCRIPTION="MASK option" -
    /TOPIC="Data_Types BITFIELD" -
    /TYPE=NONTERMINAL

    "MASK"

    END DEFINE

DEFINE TOKEN "MASK" /PLACEHOLDER="MASK"

DEFINE PLACEHOLDER "length-specifier" -
    /DESCRIPTION="Expression evaluating to length of field or string" -
    /TOPIC="Expressions" -
    /TYPE=NONTERMINAL

    "<expression>"

    END DEFINE

DEFINE PLACEHOLDER "CHARACTER-clause" -
    /DESCRIPTION="Character data type clause" -
    /TOPIC="Data_Types CHARACTER" -
    /TYPE=NONTERMINAL

    "CHARACTER [character-LENGTH-option] [VARYING]"

    END DEFINE

DEFINE TOKEN "CHARACTER" /PLACEHOLDER="CHARACTER-clause"

DEFINE PLACEHOLDER "character-LENGTH-option" -
    /DESCRIPTION="Character string length option" -
    /TOPIC="Data_Types CHARACTER" -
    /TYPE=NONTERMINAL

    "LENGTH <length-specifier>"

    END DEFINE

DEFINE PLACEHOLDER "VARYING" -
    /DESCRIPTION="VARYING option" -
    /TOPIC="Data_Types CHARACTER" -
    /TYPE=NONTERMINAL

    "VARYING"

    END DEFINE

DEFINE TOKEN "VARYING" /PLACEHOLDER="VARYING"

DEFINE PLACEHOLDER "member-options" -
    /DESCRIPTION="PREFIX, TAG, or DIMENSION" -
    /SEPARATOR=" " -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=MENU

    "PREFIX <prefix-string>"
    "TAG <tag-string>"
    "DIMENSION-option" /PLACEHOLDER

    END DEFINE

DEFINE PLACEHOLDER "PREFIX-option" -
    /DESCRIPTION="PREFIX option" -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=NONTERMINAL

    "PREFIX <prefix-string>"

    END DEFINE

DEFINE TOKEN "PREFIX" /PLACEHOLDER="PREFIX-option"

DEFINE PLACEHOLDER "prefix-string" -
    /DESCRIPTION="" -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=TERMINAL

    "Prefix string"

    END DEFINE

DEFINE PLACEHOLDER "TAG-option" -
    /DESCRIPTION="TAG option" -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=NONTERMINAL

    "TAG <tag-string>"

    END DEFINE

DEFINE TOKEN "TAG" /PLACEHOLDER="TAG-option"

DEFINE PLACEHOLDER "tag-string" -
    /DESCRIPTION="" -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=TERMINAL

    "Tag string"

    END DEFINE

DEFINE PLACEHOLDER "DIMENSION-option" -
    /DESCRIPTION="DIMENSION option" -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=MENU

    "DIMENSION [lower-bound] <upper-bound>"
    "DIMENSION *"

    END DEFINE

DEFINE TOKEN "DIMENSION" /PLACEHOLDER="DIMENSION-option"

DEFINE PLACEHOLDER "lower-bound" -
    /DESCRIPTION="" -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=NONTERMINAL

    "<bound-specifier>:"

    END DEFINE

DEFINE PLACEHOLDER "bound-specifier" -
    /DESCRIPTION="" -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=NONTERMINAL

    "<expression>"

    END DEFINE

DEFINE PLACEHOLDER "upper-bound" /PLACEHOLDER="bound-specifier"

DEFINE PLACEHOLDER "FILL-option" -
    /DESCRIPTION="FILL option" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "FILL"

    END DEFINE

DEFINE TOKEN "FILL" /PLACEHOLDER="FILL-option"

DEFINE TOKEN "fill_byte" -
    /DESCRIPTION="fill a byte bit field" -
    /TOPIC=""

    "fill BITFIELD LENGTH 8-^ FILL;	{ fill byte"

    END DEFINE

DEFINE TOKEN "fill_word" -
    /DESCRIPTION="fill a word bit field" -
    /TOPIC=""

    "fill BITFIELD LENGTH 16-^ FILL;	{ fill word"

    END DEFINE

DEFINE TOKEN "fill_longword" -
    /DESCRIPTION="fill a longword bit field" -
    /TOPIC=""

    "fill BITFIELD LENGTH 32-^ FILL;	{ fill longword"

    END DEFINE

DEFINE TOKEN "align_word" -
    /DESCRIPTION="align next field on word boundary" -
    /TOPIC=""

    "align CHARACTER LENGTH (((.+1)/2)*2)-. FILL;	{ fill to word"

    END DEFINE

DEFINE TOKEN "align_longword" -
    /DESCRIPTION="align next field on longword boundary" -
    /TOPIC=""

    "align CHARACTER LENGTH (((.+3)/4)*4)-. FILL;	{ fill to longword"

    END DEFINE

DEFINE PLACEHOLDER "storage-class" -
    /DESCRIPTION="" -
    /TOPIC="" -
    /TYPE=MENU

    "COMMON"
    "GLOBAL"
    "BASED <pointer-name>"

    END DEFINE

DEFINE TOKEN "COMMON" -
    /DESCRIPTION="COMMON storage-class" -
    /TOPIC=""

    "COMMON"

    END DEFINE

DEFINE TOKEN "GLOBAL" -
    /DESCRIPTION="GLOBAL storage-class" -
    /TOPIC=""

    "GLOBAL"

    END DEFINE

DEFINE PLACEHOLDER "pointer-name" /PLACEHOLDER="symbol-name"

DEFINE PLACEHOLDER "marker-string" -
    /DESCRIPTION="" -
    /TOPIC="Declarations AGGREGATE" -
    /TYPE=TERMINAL

    "Marker string"

    END DEFINE

DEFINE PLACEHOLDER "COUNTER-option" -
    /DESCRIPTION="Local symbol for last constant value" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "COUNTER "#<local-symbol>"

    END DEFINE

DEFINE PLACEHOLDER "symbol-name" -
    /DESCRIPTION="Name of a symbol" -
    /TOPIC="Names" -
    /TYPE=TERMINAL

    "Name of a symbol"

    END DEFINE

DEFINE PLACEHOLDER "local-symbol" /PLACEHOLDER="symbol-name"

DEFINE PLACEHOLDER "ITEM-declaration" -
    /DESCRIPTION="Declaration of data item" -
    /TOPIC="Declarations ITEM" -
    /TYPE=NONTERMINAL

    "ITEM <item-name> <item-data-type>"
    "	[storage-class]"
    "	[item-options]...;"

    END DEFINE

DEFINE TOKEN "ITEM" /PLACEHOLDER="ITEM-declaration"

DEFINE PLACEHOLDER "item-name" /PLACEHOLDER="symbol-name"

DEFINE PLACEHOLDER "item-options" /PLACEHOLDER="member-options"

DEFINE PLACEHOLDER "ENTRY-declaration" -
    /DESCRIPTION="ENTRY declaration" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "ENTRY <entry-name> 
    "	[parameter-list]"
    "	[RETURNS-clause]"
    "	[returns-TYPENAME-clause]"
    "	[variable-specifier]"
    "	[alias-specifier];"

    END DEFINE

DEFINE TOKEN "ENTRY" /PLACEHOLDER="ENTRY-declaration"

DEFINE PLACEHOLDER "entry-name" /PLACEHOLDER="symbol-name"

DEFINE PLACEHOLDER "PARAMETER-list" -
    /DESCRIPTION="Descriptions of the parameters of an external entry point" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "PARAMETER (<parameter-description>...)"

    END DEFINE

DEFINE TOKEN "PARAMETER_list" /PLACEHOLDER="PARAMETER-list"

DEFINE PLACEHOLDER "RETURNS-clause" -
    /DESCRIPTION="Function result data type" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "RETURNS <item-data-type>"

    END DEFINE

DEFINE TOKEN "RETURNS" /PLACEHOLDER="RETURNS-clause"

DEFINE PLACEHOLDER "returns-TYPENAME-clause" -
    /DESCRIPTION="Named type function value declaration" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "TYPENAME <type-name>"

    END DEFINE

DEFINE TOKEN "TYPENAME" -
    /DESCRIPTION="Named type declaration for function return or parameter" -
    /TOPIC="Declarations ENTRY"

    "TYPENAME <type-name>"

    END DEFINE

DEFINE PLACEHOLDER "type-name" /PLACEHOLDER="symbol-name"

DEFINE PLACEHOLDER "VARIABLE-specifier" -
    /DESCRIPTION="Specifies variable length argument list" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "VARIABLE"

    END DEFINE

DEFINE TOKEN "VARIABLE" /PLACEHOLDER="VARIABLE-specifier"

DEFINE PLACEHOLDER "ALIAS-specifier" -
    /DESCRIPTION="Internal alias for entry point name" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "ALIAS <alias-name>"

    END DEFINE

DEFINE PLACEHOLDER "alias-name" /PLACEHOLDER="symbol-name"

DEFINE TOKEN "ALIAS" /PLACEHOLDER="ALIAS-specifier"

DEFINE token "LINKAGE" -
    /DESCRIPTION="ENTRY LINKAGE definition (MACRO only)" -
    /TOPIC="Declarations ENTRY"

    "LINKAGE <link-name>"

    END DEFINE

DEFINE PLACEHOLDER "link-name" /PLACEHOLDER="symbol-name"

DEFINE PLACEHOLDER "parameter-description" -
    /DESCRIPTION="Description of an entry point parameter" -
    /DUPLICATION=VERTICAL-
    /SEPARATOR="," -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "<parameter-data-type> [IN-clause] [OUT-clause] [NAMED-clause] [OPTIONAL-clause] [parameter-TYPENAME-clause]"

    END DEFINE

DEFINE PLACEHOLDER "parameter-data-type" -
    /DESCRIPTION="" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=MENU

    "predefined-data-type" /PLACEHOLDER
    "ANY [ANY-passing-mechanism]"
    "aggregate-name" /PLACEHOLDER
    "entry-address" /PLACEHOLDER

    END DEFINE

DEFINE TOKEN "ANY" -
    /DESCRIPTION="ANY parameter data type" -
    /TOPIC="Declarations ENTRY"

    "ANY"

    END DEFINE

DEFINE PLACEHOLDER "IN-clause" -
    /DESCRIPTION="IN parameter" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "IN"

    END DEFINE

DEFINE TOKEN "IN" /PLACEHOLDER="IN-clause"

DEFINE PLACEHOLDER "OUT-clause" -
    /DESCRIPTION="OUT parameter" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "OUT"

    END DEFINE

DEFINE TOKEN "OUT" /PLACEHOLDER="OUT-clause"

DEFINE PLACEHOLDER "NAMED-clause" -
    /DESCRIPTION="Keyword parameter" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "NAMED <parameter-name> [default-specifier]"

    END DEFINE

DEFINE TOKEN "NAMED" /PLACEHOLDER="NAMED-clause"

DEFINE PLACEHOLDER "DEFAULT-specifier" -
    /DESCRIPTION="Default value for omitted parameters" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "DEFAULT <constant-expression>"

    END DEFINE

DEFINE TOKEN "DEFAULT" /PLACEHOLDER="DEFAULT-specifier"

DEFINE PLACEHOLDER "OPTIONAL-clause" -
    /DESCRIPTION="OPTIONAL parameter attribute" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "OPTIONAL"

    END DEFINE

DEFINE TOKEN "OPTIONAL" /PLACEHOLDER="OPTIONAL-clause"

DEFINE PLACEHOLDER "parameter-name" /PLACEHOLDER="symbol-name"

DEFINE PLACEHOLDER "predefined-data-type" -
    /DESCRIPTION="Parameter of predefined data type" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "<item-data-type> [parameter-dimension] [passing-mechanism]"

    END DEFINE

DEFINE PLACEHOLDER "parameter-dimension" -
    /DESCRIPTION="" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "DIMENSION <bound-specifier>"

    END DEFINE

DEFINE PLACEHOLDER "passing-mechanism" -
    /DESCRIPTION="Parameter passing mechanism" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=MENU

    "DESCRIPTOR"
    "VALUE"
    "REFERENCE"

    END DEFINE

DEFINE PLACEHOLDER "ANY-passing-mechanism" -
    /DESCRIPTION="Parameter passing mechanism for ANY datatype" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=MENU

    "VALUE"
    "REFERENCE"

    END DEFINE

DEFINE TOKEN "DESCRIPTOR" -
    /DESCRIPTION="Descriptor parameter passing mechanism" -
    /TOPIC="Declarations ENTRY"

    "DESCRIPTOR"

    END DEFINE

DEFINE TOKEN "VALUE" -
    /DESCRIPTION="Value parameter passing mechanism" -
    /TOPIC="Declarations ENTRY"

    "VALUE"

    END DEFINE

DEFINE TOKEN "REFERENCE" -
    /DESCRIPTION="Reference parameter passing mechanism" -
    /TOPIC="Declarations ENTRY"

    "REFERENCE"

    END DEFINE

DEFINE PLACEHOLDER "entry-address" -
    /DESCRIPTION="Address of entry point" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "ADDRESS (<parameter-ENTRY-declaration>)"

    END DEFINE

DEFINE PLACEHOLDER "parameter-ENTRY-declaration" -
    /DESCRIPTION="ENTRY declaration of procedure parameter" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "ENTRY <entry-name> 
    "	[parameter-list]"
    "	[RETURNS-clause]"

    END DEFINE

DEFINE PLACEHOLDER "parameter-TYPENAME-clause" -
    /DESCRIPTION="Parameter named type" -
    /TOPIC="Declarations ENTRY" -
    /TYPE=NONTERMINAL

    "TYPENAME <type-name>"

    END DEFINE

DEFINE PLACEHOLDER "local-assignment" -
    /DESCRIPTION="Local assignment statement" -
    /DUPLICATION=VERTICAL -
    /TOPIC="Expressions Local_Symbols" -
    /TYPE=NONTERMINAL

    "#<local-symbol> = <expression>;"

    END DEFINE

DEFINE TOKEN "assignment_statement" /PLACEHOLDER="local-assignment"

DEFINE PLACEHOLDER "comment-lines" -
    /DESCRIPTION="Output or local comments" -
    /TOPIC="*_Comments" -
    /TYPE=MENU

    "output-comment" /PLACEHOLDER
    "local-comment" /PLACEHOLDER

    END DEFINE

DEFINE TOKEN "comment" /PLACEHOLDER="comment-lines"

DEFINE PLACEHOLDER "output-comment" -
    /DESCRIPTION="Comments to be place in SDL output" -
    /TOPIC="Output_Comments" -
    /TYPE=NONTERMINAL

    "/* [tbs]"

    END DEFINE

DEFINE PLACEHOLDER "local-comment" -
    /DESCRIPTION="Comments local to the SDL source file" -
    /TOPIC="Local_Comments" -
    /TYPE=NONTERMINAL

    "{ [tbs]"

    END DEFINE

DEFINE PLACEHOLDER "tbs" -
    /DESCRIPTION="Arbitrary string of text" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "Any string of text"

    END DEFINE

DEFINE PLACEHOLDER "INCLUDE-statement" -
    /DESCRIPTION="SDL source inclusion" -
    /TOPIC="INCLUDE_Statement" -
    /TYPE=NONTERMINAL

    "INCLUDE ""<filename>"";"

    END DEFINE

DEFINE PLACEHOLDER "filename" -
    /DESCRIPTION="VMS filename" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "Valid VMS filename"

    END DEFINE

DEFINE PLACEHOLDER "block-declaration" -
    /DESCRIPTION="SDLDOC-compatible block declaration" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    ""
    "/*++"
    "/*  <full-block-name> - <block-title>"
    "/*"
    "/*  <block-description>"
    "/*--"
    "AGGREGATE <block-name> STRUCTURE TAG <tag-char><block-prefix> PREFIX <block-prefix><tag-char>;"
    "	<member-declaration>..."
    "	END [block-name];"

    END DEFINE

DEFINE TOKEN "block" /PLACEHOLDER="block-declaration"

DEFINE PLACEHOLDER "full-block-name" -
    /DESCRIPTION="complete name of block" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "complete name of block (including prefix)"

    END DEFINE

DEFINE PLACEHOLDER "block-title" -
    /DESCRIPTION="title of the block" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "title of the block"

    END DEFINE

DEFINE PLACEHOLDER "block-description" -
    /DESCRIPTION="description of the block" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "several sentence description of the block"

    END DEFINE

DEFINE PLACEHOLDER "block-name" -
    /DESCRIPTION="name of the block (except for prefix)" -
    /AUTO_SUBSTITUTE -
    /TOPIC="" -
    /TYPE=TERMINAL

    "name of the block (except for prefix)"

    END DEFINE

DEFINE PLACEHOLDER "tag-char" -
    /DESCRIPTION="DEC or user tag punctuation character" -
    /AUTO_SUBSTITUTE -
    /TOPIC="" -
    /TYPE=MENU

    "DEC-tag-punctuation($)" /PLACEHOLDER
    "user-tag-punctuation(_)" /PLACEHOLDER

    END DEFINE

DEFINE PLACEHOLDER "DEC-tag-punctuation($)" -
    /DESCRIPTION="DEC tag punctuation character ($)" -
    /AUTO_SUBSTITUTE -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "$"

    END DEFINE

DEFINE PLACEHOLDER "user-tag-punctuation(_)" -
    /DESCRIPTION="user tag punctuation character (_)" -
    /AUTO_SUBSTITUTE -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "_"

    END DEFINE

DEFINE PLACEHOLDER "block-prefix" -
    /DESCRIPTION="facility name or field prefix characters" -
    /AUTO_SUBSTITUTE -
    /TOPIC="" -
    /TYPE=TERMINAL

    "facility name or field prefix characters"

    END DEFINE

DEFINE PLACEHOLDER "description" -
    /DESCRIPTION="line-specific comment for SDLDOC" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "	/* [tbs]"

    END DEFINE
