! VAX SCAN Token and Placeholder Definitions
!
!
! COPYRIGHT (c) 1986 BY
! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
! ALL RIGHTS RESERVED
!
! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED
! ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE
! INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER
! COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
! OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY
! TRANSFERRED.
!
! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE
! AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT
! CORPORATION.
!
! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS
! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
!
!
!++
!
! FACILITY:
!
!   VAX SCAN Front End.
!
! ABSTRACT:
!
!  This file contains the necessary tokens and placeholders to define
!  the VAX SCAN language.
!
! ENVIRONMENT:
!
!   VAX User Mode.
!
! AUTHOR: T.C.Gorton, CREATION DATE: 18-February-1985
!
! MODIFIED BY:
!
!	  T.C.Gorton, 18-February-1985
! 001-000 Initial creation of module.
! 011-001 Add PRUNE instruction.				SED 04-Aug-86
! 011-002 Update version.					MIZ 26-Sep-86
! 011-003 Fix Prune to be mandatory and have list capabilities. SED 16-Oct-86
! 011-004 Use null lines instead of single-space lines.		MIZ 29-Oct-86
! 012-005 Remove semicolons from expansions of COLUMN,ANY,NOTANY
!	  Version						SLW 08-Dec-88
! 012-006 Update the SCAN identification number to V1.2	
!					    (037 SCAN M)		WSM 20-Jan-89
!
!--
!

DEFINE LANGUAGE SCAN -
    /CAPABILITIES = DIAGNOSTICS -
    /COMPILE_COMMAND="SCAN " -
    /FILE_TYPES=(.SCN) -
    /IDENTIFIER_CHARACTERS= -
	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$_" -
    /INITIAL_STRING="{-scan_module-}" -
    /OPT=("[-","-]") -
    /OPTL=("[-","-]...") -
    /REQ=("{-","-}") -
    /REQL=("{-","-}...") -
    /TAB_INCREMENT=4 -
    /VERSION = "V1.2" -
    /topic="SCAN "


SET LANGUAGE SCAN


! *****************************************************
!               ******** NOTE ********
!    Only characters listed as identifier characters 
!    can be used to name tokens and placeholders.
! *****************************************************
!
!========================================================================
! 
! define the version of the SCAN LSEDIT Definition File
!DEFINE token $version /PLACEHOLDER = $version
!DEFINE PLACEHOLDER $version-
!    /TYPE = terminal
!    "You are using Version V1.2 of the SCAN LSEDIT"
!    "Definitions File."
!END DEFINE
!
!-------------------------------------------------------------------------------
!
!  Module declarations.
!

DEFINE PLACEHOLDER "scan_module" /TYPE=NONTERMINAL /DUPLICATION=VERTICAL
!    /TOPIC_STRING = "Language_topics module"

    "MODULE {-module_name-} [-IDENT '{-module_ident-}'-];"
    "[-module_level_comments-]"
    ""
    "    [-module_statement-]..."
    ""
    "END MODULE /* {-module_name-} */;"
end define

define placeholder "module_name" /type=terminal /autofill
    "the module name"
end define

define placeholder "IDENT '{-module_ident-}'" /type=nonterminal
    "IDENT '{-module_ident-}'"
end define

define placeholder "module_ident" /type=terminal
    "a sequence of characters identifying the module,"
     "for example V1.00"
end define

define token module_block /placeholder=scan_module

define token module_statement /placeholder=module_statement

define placeholder "module_statement" /type=menu /duplication=vertical
    "declarative_statement"		/placeholder
    "directive_statement"		/placeholder
    "comment_line"			/placeholder
end define

define placeholder "declarative_statement" /type=menu /duplication=vertical -
    /topic_string = "Language_topics declarative"

    constant		/token
    declare		/token
    external_procedure	/token
    forward_procedure	/token
    group		/token
    macro		/token
    procedure		/token
    set			/token
    token		/token
    type		/token
end define

define token lf /placeholder=lf

define placeholder "lf"

" "

end define

!-------------------------------------------------------------------------------
!
! Source line comments.
!

define token comment_line /placeholder=comment_line

define placeholder "comment_line"

"!++"
"{-embedded_comments-}..."
"!--"

end define

define placeholder "embedded_comments"-
    /duplication=vertical 

    "!   {-code_commentary-}"

end define

define placeholder "tbs"/type=terminal

    "To be supplied"

end define

define placeholder "code_commentary" /type = terminal

    "Any combination of ASCII chars and symbols, excluding the"
    "comment end markers and nonprinting control characters"

end define

!-------------------------------------------------------------------------------
!
! Module-level comments.
!

DEFINE PLACEHOLDER "module_level_comments"

"LIST TITLE {-ct_string_expression-};"
"!++
"!"
"! ABSTRACT:"
"!"
"!    [-tbs-]"
"!"
"! AUTHORS:"
"!"
"!    [-tbs-]"
"!"
"! CREATION DATE: [-tbs-]"
"!"
"! MODIFICATION HISTORY:"
"!"
"!    [-tbs-]"
"!--"
END DEFINE

!-------------------------------------------------------------------------------
!
! Procedure-level comments.
!

DEFINE PLACEHOLDER "procedure_level_comments"

    "!++"
    "! FUNCTIONAL DESCRIPTION:"
    "!"
    "!   [-tbs-]"
    "!"
    "! FORMAL PARAMETERS:"
    "!"
    "!   [-tbs-]"
    "!"
    "! IMPLICIT INPUTS:"
    "!"
    "!   [-tbs-]"
    "!"
    "! IMPLICIT OUTPUTS:"
    "!"
    "!   [-tbs-]"
    "!"
    "! SIDE EFFECTS:"
    "!"
    "!   [-tbs-]"
    "!--"

END DEFINE

!-------------------------------------------------------------------------------
!
! Procedure title.
!

DEFINE PLACEHOLDER "procedure_title"

""
""
"LIST TITLE {-ct_string_expression-};"

END DEFINE

!-------------------------------------------------------------------------------
!
! Macro-level comments.
!

DEFINE PLACEHOLDER "macro_level_comments"

    "!++"
    "! FUNCTIONAL DESCRIPTION:"
    "!"
    "!   [-tbs-]"
    "!"
    "! PICTURE VARIABLES:"
    "!"
    "!   [-tbs-]"
    "!"
    "! IMPLICIT INPUTS:"
    "!"
    "!   [-tbs-]"
    "!"
    "! IMPLICIT OUTPUTS:"
    "!"
    "!   [-tbs-]"
    "!"
    "! SIDE EFFECTS:"
    "!"
    "!   [-tbs-]"
    "!--"

END DEFINE

!-------------------------------------------------------------------------------
!
! Macro title.
!

DEFINE PLACEHOLDER "macro_title"

""
""
"LIST TITLE {-ct_string_expression-};"

END DEFINE

!-------------------------------------------------------------------------------
!
!  Macro declarations.
!

define token macro /topic_string = "Language macro"
    "[-macro_title-]"
    ""
    "MACRO {-macro_name-} {-req_attribute-} [-EXPOSE-] { [-picture-] };"
    "[-macro_level_comments-]"
    ""
    "    [-macro_body_statement-]..."
    ""
    "END MACRO /* {-macro_name-} */;"
end define

define placeholder "macro_name" /type=terminal /autofill
    "the macro name"
end define

define placeholder "req_attribute" /type=menu -
    /topic_string = "Language macro attribute"
    syntax	/token
    trigger	/token
end define

define placeholder "EXPOSE" /type=nonterminal -
    /topic_string= "Language macro attribute"
    "EXPOSE"
end define

define placeholder "picture" /type=terminal -
    /topic_string = "Language macro picture"
    "a picture specification"
end define

define placeholder "macro_body_statement" /type=menu /duplication=vertical
    "declarative_statement"		/placeholder
    "directive_statement"		/placeholder
    "executable_statement"		/placeholder
    "comment_line"			/placeholder
end define

!-------------------------------------------------------------------------------
!
!  Procedure declarations.
!

define token procedure /topic_string = "language procedure"
    "[-procedure_title-]"
    ""
    "PROCEDURE {-procedure_name-} [-MAIN-] [-parameters-] [-OF {-type-}-];"
    "[-procedure_level_comments-]"
    ""
    "    [-procedure_body_statement-]..."
    ""
    "END PROCEDURE /* {-procedure_name-} */;"
end define


define token forward_procedure /topic_string = "Language forward"
    "FORWARD PROCEDURE {-procedure_name-} [-dummy_params-] [-OF {-type-}-];"
end define

define token external_procedure -
    /topic_string = "Language external_procedure"
    "EXTERNAL PROCEDURE {-procedure_name-} [-dummy_params-] [-OF {-type-}-];"
end define

define placeholder "procedure_name" /type=terminal /autofill
    "the procedure name"
end define

define placeholder "MAIN" /type=nonterminal -
    /topic_string = "Language_topics procedure attributes"
    "MAIN"
end define

define placeholder "parameters" /type=nonterminal
    "( [-parameter-]... )"
end define

define placeholder "parameter" /type=nonterminal /duplication=vertical /separator="," -
    /topic_string = "Language_topics procedure parameter"
    "{-parameter_name-} : [-mechanism-] {-type-}"
end define

define placeholder "dummy_params" /type=nonterminal
    "( [-dummy_param-]... )"
end define

define placeholder "dummy_param" /type=nonterminal /duplication=vertical /separator=","
    "[-mechanism-] {-type-}"
end define

define placeholder "mechanism" /type=menu -
    /topic_string = "Language_topics procedure mechanism"
    descriptor	/token
    reference	/token
    value	/token
end define

define placeholder "OF {-type-}" /type=nonterminal
    "OF {-type-}"
end define

define placeholder "procedure_body_statement" /type=menu /duplication=vertical -
    /Topic_string = "Language_topics procedure"
    "declarative_statement"		/placeholder
    "directive_statement"		/placeholder
    "executable_statement"		/placeholder
    "comment_line"			/placeholder
end define


!-------------------------------------------------------------------------------
!
!   Directive statements.
!

define placeholder "directive_statement" /type=menu -
    /Topic_string = "Language_topics directive"
    include	/token
    list	/token
    redefine	/token
end define

define token list /Topic_string = "Language_topics directive list"
    "LIST {-list_option-};"
end define
    
define placeholder "list_option" /type=menu -
    /Topic_string = "Language_topics directive list"
    "OFF"
    "ON"
    "PAGE"
    "TITLE '{-title_string-}'"
end define

define placeholder "title_string" /type=terminal
    "the new page title"
end define

define token include /Topic_string = "Language_topics directive include"
    "INCLUDE FILE {-ct_vms_file_spec-};"
end define

define placeholder "ct_vms_file_spec" /type=terminal
    "A string expression known at compile time"
end define

define placeholder "vms_file_spec" /type=terminal
    "A string expression"
end define

define token redefine /Topic_string = "Language_topics directive redefine"
    "REDEFINE {-special_SCAN_character-} = {-ct_string_expression-};"
end define

define placeholder "special_SCAN_character" /type=menu 
!    /Topic_string = "Language_topics special_scan_char"
    "S'EOL'"
    "S'EOS'"
    "S'SOS'"
end define


!-------------------------------------------------------------------------------
!
!   Declarative statements.
!

define token constant /Topic_string = "Language_topics constant"
    "CONSTANT {-constant_name-} {-constant_spec-};"
end define

define placeholder "constant_name" /type=terminal
    "an identifier"
end define

define placeholder "constant_spec" /type=menu
    "= {-ct_expression-}"
    external_constant		/token
    global_constant		/token
end define

define token external_constant /Topic_string = "Language_topics constant"
    "EXTERNAL {-external_constant_type-}"
end define

define token global_constant /Topic_string = "Language_topics constant"
    "GLOBAL = {-global_constant-}"
end define

define token type /Topic_string = "Language_topics type"
    "TYPE {-type_name-} : {-type-};"
end define

define token declare /Topic_string = "Language_topics declare"
    "DECLARE {-name_list-}... : [-storage_attribute-] {-type-};"
end define

define placeholder "name_list" /type=nonterminal /separator=", " /duplication=horizontal
    "{-variable_name-}"
end define

define placeholder "storage_attribute" /type=menu -
    /Topic_string = "Language_topics declare storage_attr"
    automatic	/token
    common	/token
    external	/token
    global	/token
    static	/token
end define

define placeholder "type" /type=menu -
    /Topic_string = "Language_topics data_type"
    boolean_type		/token
    dynamic_string_type		/token
    file_type			/token
    fill_type			/token
    fixed_string_type		/token
    integer_type		/token
    pointer_type		/token
    record_type			/token
    tree_type			/token
    treeptr_type		/token
    "type_name"			/placeholder
    overlay_type		/token
    varying_string_type		/token
end define

define token boolean_type /topic="language data boolean"
    "BOOLEAN"
end define

define token file_type /topic="language data file"
    "FILE"
end define

define token fill_type /Topic_string = "Language_topics data_type fill"
    "FILL ({-ct_integer_expression-})"
end define

define token varying_string_type /Topic_string = "Language_topics data_type string"
    "VARYING STRING ({-ct_integer_expression-})"
end define

define token fixed_string_type /Topic_string = "Language_topics data_type string"
    "FIXED STRING ({-ct_integer_expression-})"
end define

define token dynamic_string_type  /Topic_string = "Language_topics data_type string"
    "DYNAMIC STRING"
end define

define token pointer_type /Topic_string = "Language_topics data_type pointer"
    "POINTER TO {-type-}"
end define

define token treeptr_type /Topic_string = "Language_topics data_type treeptr"
    "TREEPTR({-tree_subscript_type-}) TO {-type-}"
end define

define token tree_type /Topic_string = "Language_topics data_type tree"
    "TREE ({-tree_subscript_type-}...) OF {-type-}"
end define

define token overlay_type /Topic_string = "Language_topics data_type overlay"
    "OVERLAY"
    "    {-overlay_field-}..."
    "END OVERLAY"
end define

define placeholder "overlay_field" /type=nonterminal /duplication=vertical
    "{-component_name-} : {-component_type-},"
end define

define token record_type /Topic_string = "Language_topics data_type record"
    "RECORD"
    "    {-record_field-}..."
    "END RECORD"
end define

define placeholder "record_field" /type=nonterminal /duplication=vertical
    "{-component_name-} : {-component_type-},"
end define

define placeholder "component_type" /type=menu -
    /Topic_string = "Language_topics data_type record"
    boolean_type		/token
    fill_type			/token
    fixed_string_type		/token
    integer_type		/token
    pointer_type		/token
    record_type			/token
    treeptr_type		/token
    "type_name"			/placeholder
    overlay_type		/token
    varying_string_type		/token
end define


!-------------------------------------------------------------------------------
!
!   Picture elements.
!

define token set /Topic_string = "Language_topics set"
    "SET {-set_name-} ( {-set_expression-} );"
end define

define placeholder "set_expression" /type=terminal -
    /topic_string = "Language set expression"
    "a set expression"
end define

define token token /Topic_string = "Language_topics Token"
    "TOKEN {-token_name-} [-token_attr-]... { {-token_expression-} };"
end define

define placeholder "token_attr" /type=menu /duplication=horizontal /separator=" " -
    /Topic_string = "Language_topics token"
    alias	/token
    caseless	/token
    ignore	/token
end define

define token alias
    "ALIAS '{-alias_name-}'"
end define

define placeholder "alias_name" /type=terminal
    "a sequence of characters identifying the alias"
end define

define placeholder "token_expression" /type=terminal -
    /topic_string = "Language token expression"
    "a token expression"
end define

define token group /Topic_string = "Language_topics group"
    "GROUP {-group_name-} ( {-group_expression-} );"
end define

define placeholder "group_expression" /type=terminal -
    /topic_string = "Language group expression"
    "a group expression"
end define

!-------------------------------------------------------------------------------
!
!   Executable statements.
!

define placeholder "executable_statement" /type=menu /duplication=vertical
    "{-label_name-}:"
    "{-variable_name-} = {-expression-};"
    allocate	/token
    answer	/token
    call	/token
    case	/token
    close	/token
    fail	/token
    for		/token
    free	/token
    goto	/token
    if		/token
    open	/token
    prune	/token
    read	/token
    return	/token
    start_scan	/token
    stop_scan	/token
    while	/token
    write	/token
end define

define token call /topic="Language call"
    "CALL {-procedure_name-} [-argument_list-];"
end define

define placeholder "argument_list"
    "( [-expression-]... )"
end define

define token goto /topic="Language goto"
    "GOTO {-label_name-};"
end define

define token case /topic="Language case"
    "CASE {-index-} FROM {-low_limit-} TO {-high_limit-};"
    "    {-case_item-}..."
    "END CASE;"
end define

define placeholder "index" /placeholder=integer_expression

define placeholder "low_limit" /placeholder=ct_integer_expression
define placeholder "high_limit" /placeholder=ct_integer_expression

define placeholder "case_item" /type=nonterminal /duplication=vertical
    "[ {-case_value-}... ] :"
    "    [-executable_statement-]..."
end define

define placeholder "case_value" /type=menu /duplication=horizontal /separator=", "
    "{-ct_integer_expression-}"
    "{-ct_integer_expression-} .. {-ct_integer_expression-}"
    inrange	/token
    outrange	/token
end define

define token if /topic="Language if"
    "IF {-boolean_expression-} "
    "THEN
    "    [-executable_statement-]..."
    "[-else_part-]"
    "END IF;"
end define

define placeholder "else_part" /type=nonterminal
    "ELSE"
    "    [-executable_statement-]..."
end define

define token while /topic="Language while"
    "WHILE {-boolean_expression-};"
    "    [-executable_statement-]..."
    "END WHILE;"
end define

define token for /topic="Language for"
    "FOR {-index_variable-} = {-initial_value-} TO {-final_value-} [-STEP {-step_value-}-];
    "    [-executable_statement-]..."
    "END FOR;"
end define

define placeholder "STEP {-step_value-}" /type=nonterminal
    "STEP {-step_value-}"
end define

define placeholder "index_variable" /placeholder=identifier
define placeholder "initial_value" /placeholder=integer_expression
define placeholder "final_value" /placeholder=integer_expression
define placeholder "step_value" /placeholder=integer_expression

define token prune /topic="Language prune"
    "PRUNE {-tree_reference-}...;"
end define

define token return /topic="Language return"
    "RETURN [-return_value-];"
end define

define placeholder "return_value" /placeholder=expression

define token start_scan /topic="Language start_scan"
    "START SCAN"
    "    [-scan_option-]...;"
end define

define placeholder "scan_option" /type=menu /duplication=vertical
    "INPUT FILE {-vms_file_spec-}"
    "INPUT STRING {-string_expression-}"
    "INPUT PROCEDURE {-procedure_name-}"
    "INPUT WIDTH {-integer_expression-}"
    "OUTPUT FILE {-vms_file_spec-}"
    "OUTPUT STRING {-variable_name-}"
    "OUTPUT PROCEDURE {-procedure_name-}"
    "OUTPUT WIDTH {-integer_expression-}"
    "DATA STACK {-integer_expression-}
end define

define placeholder "io_direction" /type=menu
    input	/token 
    output	/token 
end define

define placeholder "file_name" /placeholder=string_expression

define token stop_scan /topic="Language stop_scan"
    "STOP SCAN;"
end define

define token allocate /topic="Language allocate"
    "ALLOCATE {-pointer_variable-};"
end define

define token free /topic="Language free"
    "FREE {-pointer_variable-};"
end define

define token answer /topic="Language answer"
    "ANSWER [-TRIGGER-] {-replacement_text-}...;"
end define

define placeholder "trigger" /type=nonterminal
    "TRIGGER"
end define

define placeholder "replacement_text" /type=nonterminal /duplication=horizontal /separator=", "
    "{-string_expression-}"
end define

define token fail /topic="Language fail"
    "FAIL"
end define

define token open /topic="Language open"
    "OPEN FILE( {-file_variable-} ) AS {-file_name-} FOR {-io_direction-};"
end define

define token close /topic="Language close"
    "CLOSE FILE( {-file_variable-} );"
end define

define token read /topic="Language read"
    "READ [-FILE( {-file_variable-} )-] [-prompt-] {-variable_name-};"
end define

define placeholder "FILE( {-file_variable-} )" /type=nonterminal
    "FILE( {-file_variable-} )"
end define

define placeholder "prompt" /type=nonterminal
    "PROMPT ({-prompt_string-})"
end define

define token write /topic="Language write"
    "WRITE [-FILE( {-file_variable-} )-] {-expression-}...;"
end define


!-------------------------------------------------------------------------------
!
!   General purpose definitions
!

define placeholder "external_constant_type" /type=menu
    boolean_type	/token
    integer_type	/token
end define

define placeholder "tree_subscript_type" /type=menu /duplication=horizontal /separator=", "
    integer_type	/token
    string		/token
end define

define placeholder "identifier" /type=terminal
    "Combination of letters, digits, dollar signs, and underscores;"
    "First character must be a letter; Cannot exceed 31 chars in length."
end define

define placeholder "prompt_string" /placeholder=string_expression
define placeholder "type_name" /placeholder=identifier
define placeholder "file_variable" /placeholder=identifier
define placeholder "pointer_variable" /placeholder=identifier
define placeholder "variable_name" /placeholder=identifier
define placeholder "component_name" /placeholder=identifier
define placeholder "set_name" /placeholder=identifier
define placeholder "token_name" /placeholder=identifier
define placeholder "group_name" /placeholder=identifier
define placeholder "parameter_name" /placeholder=identifier
define placeholder "label_name" /placeholder=identifier
define placeholder "file" /placeholder=identifier

define placeholder "expression" /type=terminal /duplication=horizontal -
    /separator=", "/topic_string = "Language expression"
    "an expression"
end define

define placeholder "integer_expression" /type=terminal 
    "an integer expression"
end define

define placeholder "string_expression" /type=terminal -
    /duplication=horizontal /separator=","
    "a string expression"
end define

define placeholder "boolean_expression" /type=terminal 
    "a boolean expression"
end define

define placeholder "ct_expression" /type=terminal 
    "an expression whose value is known at compile time"
end define

define placeholder "ct_string_expression" /type=terminal
    "a string expression whose value is known at compile time"
end define

define placeholder "ct_integer_expression" /type=terminal
    "an integer expression whose value is known at compile time"
end define

define placeholder "global_constant" /type=terminal
    "an integer or boolean expression whose value is known at compile time"
end define

define placeholder "tree_reference" /type=terminal -
    /duplication=horizontal /separator=","
    "an expression which specifies a node in a tree"
end define

define placeholder "search_expression" /placeholder=string_expression

define placeholder "locate_expression" /placeholder=string_expression

define placeholder "member_expression" /placeholder=string_expression

define placeholder "trim_expression" /placeholder=string_expression

!-------------------------------------------------------------------------------
!
!   Built_in Tokens.
!

define token built_in_token /placeholder=built_in_token

define placeholder "built_in_token" -
    /topic_string = "Language_topics macro built-in-token" -
    /description = "Scan built-in tokens" -
    /type=menu

    any_token		/token
    notany_token	/token
    column_token	/token
    skip_token		/token
    find_token		/token
    sequence_token	/token
    instance_token	/token

end define

define token any_token /description="Match any character in specified string expression."-
    /topic_string = "Language_topics macro built-in-token any" 
    "ANY( {-string_expression-} )"
end define

define token notany_token /description="Match any character NOT in specified string expression."-
    /topic_string = "Language_topics macro built-in-token notany" 
    "NOTANY( {-string_expression-} )"
end define

define token column_token /description="Match up to, but not including specified column number."-
    /topic_string = "Language_topics macro built-in-token column" 
    "COLUMN( {-integer_expression-} )"
end define

define token skip_token /description="Match next specified number of characters in input stream."-
    /topic_string = "Language_topics macro built-in-token skip" 
    "SKIP( {-integer_expression-} )"
end define

define token find_token /description="Match specified string expression in input stream."-
    /topic_string = "Language_topics macro built-in-token find" 
    "FIND( {-string_expression-} [-caseless_flag-] )"
end define

define token sequence_token /description="Match next sequence of characters in input stream against string expression."-
    /topic_string = "Language_topics macro built-in-token sequence" 
    "SEQUENCE( {-string_expression-} [-caseless_flag-] )"
end define

define token instance_token /description="Match next token in input stream against string expression."-
    /topic_string = "Language_topics macro built-in-token instance" 
    "INSTANCE( {-string_expression-} [-caseless_flag-] )"
end define

define placeholder "caseless_flag"
	",{-boolean_expression-}"
end define

!-------------------------------------------------------------------------------
!
!   Built_in functions.
!

define token built_in_functions /placeholder=built_in_functions

define placeholder "built_in_functions" -
    /topic_string = "Language_topics built-in" -
    /description = "Scan built-in functions" -
    /type=menu

    "conversion_functions"		/token    
    "mathematical_functions"		/token    
    "miscellaneous_functions"		/token
    "string_functions"			/token    
    "tree_functions"			/token    

end define

define token tree_functions/placeholder=tree_functions

define placeholder "tree_functions" -
    /topic="language built-in tree_traversing" -
    /description="EXISTS,FIRST,LAST,NEXT,PRIOR,SUBSCRIPT,TREEPTR,VALUE,VALUEPTR" -
    /type=menu

    exists_bif		/token
    first_bif		/token
    last_bif		/token
    next_bif		/token
    prior_bif		/token
    subscript_bif	/token
    treeptr_bif		/token
    value_bif		/token
    valueptr_bif	/token

end define

define token string_functions/placeholder=string_functions

define placeholder "string_functions" -
    /topic="language built-in string_functions" -
    /description ="INDEX,LENGTH,LOWER,MEMBER,TRIM,UPPER" -
    /type=menu

    index_bif		/token
    length_bif		/token
    lower_bif		/token
    member_bif		/token
    trim_bif		/token
    upper_bif		/token

end define

define token conversion_functions/placeholder=conversion_functions

define placeholder "conversion_functions" -
    /topic="language built-in conversion_functions" -
    /description="INTEGER,STRING,POINTER" -
    /type=menu

    integer_bif		/token
    pointer_bif		/token
    string_bif		/token

end define

define token mathematical_functions/placeholder=mathematical_functions

define placeholder "mathematical_functions" -
    /topic="language built-in math_functions" -
    /description="ABS,MAX,MIN,MOD" -
    /type=menu

    abs_bif			/token
    max_bif			/token
    min_bif			/token
    mod_bif			/token

end define

define token miscellaneous_functions/placeholder=misc_functions

define placeholder "misc_functions" -
    /topic="language built-in misc_functions" -
    /description="ENDFILE,TIME" -
    /type=menu

    endfile_bif		/token
    time_bif		/token

end define

define token treeptr_bif-
    /topic="language built-in  treeptr" -
    /description="Returns a treeptr for a node in a tree."

    "TREEPTR( {-tree_reference-} )"

end define

define token exists_bif -
    /topic="language built-in  exists" -
    /description="Tests if a node exists in a tree."

    "EXISTS( {-tree_reference-} )"

end define

define token first_bif -
    /topic="language built-in  FIRST" -
    /description="Find the first node in a tree."

    "FIRST( {-tree_reference-} )"

end define

define token last_bif -
    /topic="language built-in  LAST" -
    /description="Find the last node in a tree."

    "LAST( {-tree_reference-} )"

end define

define token next_bif -
    /topic="language built-in  NEXT" -
    /description="Find the next node in a tree."

    "NEXT( {-tree_reference-} )"

end define

define token prior_bif -
    /topic="language built-in  PRIOR" -
    /description="Find the prior node in a tree."

    "PRIOR( {-tree_reference-} )"

end define

define token value_bif -
    /topic="language built-in  VALUE" -
    /description="Return the value of a leaf node in a tree."

    "VALUE( {-tree_reference-} )"

end define

define token valueptr_bif -
    /topic="language built-in  VALUEPTR" -
    /description="Return a pointer to the value of a leaf node in a tree."

    "VALUEPTR( {-tree_reference-} )"

end define

define token subscript_bif -
    /topic="language built-in  SUBSCRIPT" -
    /description="Return the subscript of a node in a tree."

    "SUBSCRIPT( {-tree_reference-} )"

end define

define token index_bif -
    /topic="language built-in  index" -
    /description="Find the position of one string within another."

    "INDEX( {-search_expression-}, {-locate_expression-} )"

end define

define token length_bif -
    /topic="language built-in  length" -
    /description="Return the current length of a string."

    "LENGTH( {-string_expression-} )"
                                   
end define

define token lower_bif -
    /topic="language built-in  lower" -
    /description="Convert a string expression to lower-case."

    "LOWER( {-string_expression-} )"

end define

define token upper_bif -
    /topic="language built-in  upper" -
    /description="Convert a string expression to upper-case."

    "UPPER( {-string_expression-} )"

end define


define token member_bif -
    /topic="language built-in  member" -
    /description="Find the first member of a set within a string."

    "MEMBER( {-search_expression-}, {-member_expression-} )"

end define

define token trim_bif -
    /topic="language built-in  trim" -
    /description="Trim characters from a string."

    "TRIM( {-string_expression-}, [-trim_expression-] )"

end define

define token integer_bif -
    /topic="language built-in integer" -
    /description="Converts an expression to an integer."

    "INTEGER( {-expression-} )"

end define

define token string_bif -
    /topic="language built-in string" -
    /description="Converts an expression to a string."

    "STRING( {-expression-} )"

end define

define token pointer_bif -
    /topic="language built-in pointer" -
    /description="Returns the address of a variable."

    "POINTER( {-variable_name-} )"

end define

define token abs_bif -
    /topic="language built-in abs" -
    /description="Returns absolute value of an integer expression."

    "ABS( {-integer_expression-} )"

end define

define token max_bif -
    /topic="language built-in max" -
    /description="Returns maximum value of two or more integer expressions."

    "MAX( {-integer_expression-}... )"

end define

define token min_bif -
    /topic="language built-in min" -
    /description="Returns minimum value of two or more integer expressions."

    "MIN( {-integer_expression-}... )"

end define

define token mod_bif -
    /topic="language built-in mod" -
    /description="Returns remainder after division of two integer expressions."

    "MOD( {-integer_expression-}, {-integer_expression-} )"

end define

define token time_bif -
    /topic="language built-in time" -
    /description="Returns the current date and time as a string value"

    "TIME( )"

end define

define token endfile_bif -
    /topic="language built-in endfile" -
    /description="Tests if the end of a Scan file has been reached."

    "ENDFILE( [-file_variable-] )"

end define

!-------------------------------------------------------------------------------
!
!   Simple keyword expansion tokens.
!

define token automatic
    "AUTOMATIC"
end define

define token caseless
    "CASELESS"
end define

define token common
    "COMMON"
end define

define token descriptor
    "DESCRIPTOR"
end define

define token external
    "EXTERNAL"
end define

define token global
    "GLOBAL"
end define

define token ignore
    "IGNORE"
end define

define token input /description ="READ from file"
    "INPUT"
end define

define token inrange
    "INRANGE"
end define

define token integer_type
    "INTEGER"
end define

define token output /description ="WRITE to file"
    "OUTPUT"
end define

define token outrange
    "OUTRANGE"
end define

define token reference
    "REFERENCE"
end define

define token static
    "STATIC"
end define

define token string
    "STRING"
end define

define token syntax
    "SYNTAX"
end define

define token trigger
    "TRIGGER"
end define

define token value
    "VALUE"
end define

