#|| 


VHDL Object Model 1.0
---------------------

Copyright (c) 1994 Ohio Board of Regents and the University of
Cincinnati.  All rights reserved.

Authors: David Benz, Phillip Baraona
E-Mail: dbenz@thor.ece.uc.edu, pbaraona@thor.ece.uc.edu


||#

#||

  File: attr-defns.re
  Contains: Attribute definitions for VHDL object model.

  Attribute Naming Conventions:

    - Attribute names which map to a single object are named as the object
    name plus the appendage "-MAP". An example of this is the attribute
    SUBTYPE-INDICATION-MAP, which maps an object to a subtype-indication.

    - Sometimes, however, a one-to-one mapping attribute will be named
    in a manner which suggests to a reader the usage of this attribute. An
    example of this is the attribute TEST-CONDITION. This maps an object to
    an EXPRESSION, but by naming the attribute TEST-CONDITION it provides
    a better description of the attribute.

    - Attributes which map an object to a sequence of objects are named by
    taking the object name and appending "-LIST" to it. An example of this
    is the attribute SEQUENTIAL-STATEMENT-LIST, which maps an object to a 
    sequence of sequential statements. NOTE: multivalued attributes are 
    represented as sequences for now, could CONCURRENT-STATEMENT-LIST be a
    set, though? 

  Organization:

    Mirrors the object-class definitions in class-defns.re. That is, from top
    to bottom of this file, we move from the most general to the most specific
    objects. 

||#


!! in-package("VOM-1-0")
!! in-grammar('user)

%%%%%%%%%%%%%%%%%%%%%%%%%%%% Syntactic-Object %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% This is for storing the line number.
var LINE-NUMBER : map(syntactic-object, integer) = {||}

%% used in objects: everywhere
var IDENTIFIER-MAP: map(syntactic-object, identifier) = {||}

%% used in objects: Library-Clause, Element-Declaration
var IDENTIFIER-LIST: map(syntactic-object, seq(identifier)) = {||}

%% used in objects: everywhere
var END-NAME: map(syntactic-object, identifier) = {||}

%% used in objects: Statement, Declaration, Expression, VHDL-Name
var EXPRESSION-VALUE: map(syntactic-object, expression) = {||}

%% used in objects: For-Generation-Scheme, For-Loop-Statement, 
%%                  Formal-Or-Actual-Part,Choice
var DISCRETE-RANGE-MAP: map(syntactic-object, discrete-range) = {||}

%% used in objects: everywhere
var TYPE-MARK: map(syntactic-object, vhdl-name) = {||}

%% used in objects: Declaration, Interface-Declaration, Type-Definition
var SUBTYPE-INDICATION-MAP: map(syntactic-object, subtype-indication) = {||}

%% used in objects: Entity-Designator, Attribute-Name, Alias-Declaration
var SIGNATURE-MAP: map(syntactic-object, signature) = {||}

%% used in objects: Indexed-Or-Slice-Name, Generic-Map-Aspect, Port-Map-Aspect
var ASSOCIATION-LIST-MAP: map(syntactic-object, seq(association-element)) = {||}

%% used in objects: Attribute-Specification, Entity-Class-Entry
var ENTITY-CLASS-MAP: map(syntactic-object, entity-class) = {||}

%% used in objects: Subprogram-Declaration, Entity-Header
var INTERFACE-LIST-MAP: map(syntactic-object, seq(interface-declaration)) = {||}

%% used in objects: Concurrent-Statement, Sequential-Statement
var TEST-CONDITION: map(syntactic-object, expression) = {||}

%% used in objects: Sequential-Statement, Process-Statement
var SEQUENTIAL-STATEMENT-LIST: map(syntactic-object, seq(sequential-statement)) = {||}

%% used in objects: Library-Unit, Concurrent-Statement
var CONCURRENT-STATEMENT-LIST: map(syntactic-object, seq(concurrent-statement)) = {||}

%% used in objects: Selected-Waveform, Case-Alternative, Element-Association
var CHOICE-LIST: map(syntactic-object, seq(choice)) = {||}

%% used in objects: Library-Unit, Concurrent-Statement, Subprogram-Body
var DECLARATION-LIST: map(syntactic-object, seq(declaration)) = {||}

%% used in objects: Entity-Declaration, Block-Statement, Component-Declaration
var GENERIC-CLAUSE-MAP: map(syntactic-object, generic-clause) = {||}
var PORT-CLAUSE-MAP: map(syntactic-object, port-clause) = {||}

%% used in objects: Component-Configuration, Block-Statement, 
%%                  Component-Instantiation, Configuration-Specification,
var GENERIC-MAP-ASPECT-MAP: map(syntactic-object, generic-map-aspect) = {||}
var PORT-MAP-ASPECT-MAP: map(syntactic-object, port-map-aspect) = {||}

%% used in objects: Component-Configuration, Configuration-Specification
var ENTITY-ASPECT-MAP: map(syntactic-object, entity-aspect) = {||}

%% used in objects:  Component-Configuration, Configuration-Specification
var COMPONENT-SPECIFICATION-MAP: map(syntactic-object, component-specification) = {||}

%% used in objects: Configuration-Declaration, Component-Configuration
var BLOCK-CONFIGURATION-MAP: map(syntactic-object, block-configuration) = {||}




%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Design Files %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

var DESIGN-UNIT-LIST: map(vhdl-design-file, seq(design-unit)) = {||}

form VHDL-DESIGN-FILE-TREE-ATTRIBUTES
  define-tree-attributes('vhdl-design-file, {'design-unit-list})

  

%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Design Units %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Design Unit (11.1)

var CONTEXT-ITEM-LIST: map(design-unit, seq(context-item)) = {||}
var LIBRARY-UNIT-MAP: map(design-unit, library-unit) = {||}


%%%%%%%%%% Library Clause (11.2) 

form DESIGN-UNITS-TREE-ATTRIBUTES
  define-tree-attributes('design-unit, {'context-item-list, 'library-unit-map});
  define-tree-attributes('library-clause, {'identifier-list})



%%%%%%%%%%%%%% Design Entities, Configurations, and Packages %%%%%%%%%%%%%%%%%%

var ENTITY-NAME: map(library-unit, vhdl-name) = {||}

%%%%%%%%%% Entity Declaration (1.1)


%%%%%%%%%% Architecture Body (1.2)


%%%%%%%%%% Configuration Declaration (1.3)

var CONFIGURATION-DECLARATIVE-ITEM-LIST: map(configuration-declaration, 
					     seq(configuration-declarative-item)) = {||}


%%%%%%%%%% Package Declaration (2.5)


%%%%%%%%%% Package Body (2.6)

var PACKAGE-SIMPLE-NAME: map(package-body, simple-name) = {||}


form DESIGN-ENTITIES-CONFIGURATIONS-AND-PACKAGES-TREE-ATTRIBUTES
  define-tree-attributes('entity-declaration, {'identifier-map, 
					       'generic-clause-map,
					       'port-clause-map,
					       'declaration-list,
					       'concurrent-statement-list,
					       'end-name});
  define-tree-attributes('architecture-body, {'identifier-map,
					      'entity-name,
					      'declaration-list,
					      'concurrent-statement-list,
					      'end-name});
  define-tree-attributes('configuration-declaration, {'identifier-map,
						      'entity-name,
						      'configuration-declarative-item-list,
						      'block-configuration-map,
						      'end-name});
  define-tree-attributes('package-declaration, {'identifier-map,
						'declaration-list,
						'end-name});
  define-tree-attributes('package-body, {'package-simple-name,
					 'declaration-list,
					 'end-name})



%%%%%%%%%%%%%%%%%%%%%%% Configuration Items %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Block Configuration (1.3.1)

var BLOCK-SPECIFICATION: map(block-configuration, vhdl-name) = {||}
var CONFIGURATION-ITEM-LIST: map(block-configuration, seq(configuration-item)) = {||}
var USE-CLAUSE-LIST: map(block-configuration, seq(use-clause)) = {||}


%%%%%%%%%% Component Configuration (1.3.2)


form CONFIGURATION-ITEMS-TREE-ATTRIBUTES
  define-tree-attributes('block-configuration, {'block-specification,
					        'use-clause-list,
						'configuration-item-list});
  define-tree-attributes('component-configuration, {'component-specification-map,
						    'entity-aspect-map,
						    'generic-map-aspect-map,
						    'port-map-aspect-map,
						    'block-configuration-map})



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Statements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% used in objects: WAIT-STATEMENT, PROCESS-STATEMENT
var SENSITIVITY-LIST: map(statement, seq(vhdl-name)) = {||}
 
%% used in SIGNAL-ASSIGNMENT, CONCURRENT-SIGNAL-ASSIGNMENT
var WAVEFORM-ELEMENT-LIST: map(statement, seq(waveform-element)) = {||}
var DELAY-MECHANISM-MAP: map(statement, delay-mechanism) = {||}
var TARGET-MAP: map(statement, target) = {||}



%%%%%%%%%%%%%%%%%%%%%%%% Concurrent Statements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Labeled Concurrent Statements

var UNLABELED-CONCURRENT-STMT-MAP: map(labeled-concurrent-stmt,
				       unlabeled-concurrent-stmt) = {||}
var CONCURRENT-STMT-LABEL: map(labeled-concurrent-stmt, identifier) = {||}


%%%%%%%%%% Block Statement (9.1)

var GUARD-EXPRESSION: map(block-statement, expression) = {||}


%%%%%%%%%% Process Statement (9.2)

var PROCESS-POSTPONED-FLAG: map(process-statement, boolean) = {||}
var SECOND-POSTPONED-FLAG: map(process-statement, boolean) = {||}


%%%%%%%%%% Postponed Concurrent Statements

var UNPOSTPONED-CONCURRENT-STMT-MAP: map(postponed-concurrent-stmt, 
					 unpostponed-concurrent-stmt) = {||}


%%%%%%%%%% Concurrent Procedure Call (9.3)

var PROCEDURE-CALL-MAP: map(concurrent-procedure-call, procedure-call) = {||}


%%%%%%%%%% Concurrent Assertion Statement (9.4)

var ASSERTION-STATEMENT-MAP: map(concurrent-assertion-stmt, 
				 assertion-statement) = {||}


%%%%%%%%%% Conditional Signal Assignment (9.5.1)

var CONDITIONAL-WAVEFORM-LIST: map(conditional-signal-assign, 
				   seq(conditional-waveform)) = {||}
var OPTIONAL-END-CONDITION: map(conditional-signal-assign,
				expression) = {||}


%%%%%%%%%% Selected Signal Assignment (9.5.2)

var SELECTED-WAVEFORM-LIST: map(selected-signal-assign,
				seq(selected-waveform)) = {||}


%%%%%%%%%% Component Instantiation Statement (9.6)

var INSTANTIATION-LABEL: map(component-instantiation, identifier) = {||}
var INSTANTIATED-UNIT-MAP: map(component-instantiation, instantiated-unit) = {||}
var SIMPLE-INSTANTIATED-UNIT: map(component-instantiation, vhdl-name) = {||}

var INSTANTIATED-UNIT-NAME: map(instantiated-unit, vhdl-name) = {||}


%%%%%%%%%% Generate Statement (9.7)

var GENERATE-LABEL: map(generate-statement, identifier) = {||}
var GENERATION-SCHEME-MAP: map(generate-statement, generation-scheme) = {||}


form CONCURRENT-STATEMENT-TREE-ATTRIBUTES
  define-tree-attributes('labeled-concurrent-stmt, {'concurrent-stmt-label,
						    'unlabeled-concurrent-stmt-map});
  define-tree-attributes('block-statement, {'guard-expression,
					    'generic-clause-map,
					    'generic-map-aspect-map,
					    'port-clause-map,
					    'port-map-aspect-map,
					    'declaration-list,
					    'concurrent-statement-list,
					    'end-name});
  define-tree-attributes('process-statement, {'process-postponed-flag,
					      'sensitivity-list,
					      'declaration-list,
					      'sequential-statement-list,
					      'second-postponed-flag,
					      'end-name});
  define-tree-attributes('postponed-concurrent-stmt, {'unpostponed-concurrent-stmt-map});
  define-tree-attributes('concurrent-procedure-call, {'procedure-call-map});
  define-tree-attributes('concurrent-assertion-stmt, {'assertion-statement-map});
  define-tree-attributes('conditional-signal-assign, {'target-map,
						      'delay-mechanism-map,
						      'conditional-waveform-list});
  define-tree-attributes('conditional-waveform, {'waveform-element-list, 
						 'test-condition});
  define-tree-attributes('selected-signal-assign, {'expression-value,
						   'target-map,
						   'delay-mechanism-map,
						   'selected-waveform-list});
  define-tree-attributes('selected-waveform, {'waveform-element-list,
					      'choice-list});
  define-tree-attributes('component-instantiation, {'instantiation-label,
						    'instantiated-unit-map,
						    'simple-instantiated-unit,
						    'generic-map-aspect-map,
						    'port-map-aspect-map});
  define-tree-attributes('component-unit-name, {'instantiated-unit-name});
  define-tree-attributes('entity-unit-name, {'instantiated-unit-name});
  define-tree-attributes('configuration-unit-name, {'instantiated-unit-name});
  define-tree-attributes('generate-statement, {'generate-label,
					       'generation-scheme-map,
					       'declaration-list,
					       'concurrent-statement-list,
					       'end-name});
  define-tree-attributes('if-generation-scheme, {'test-condition});
  define-tree-attributes('for-generation-scheme, {'identifier-map, 'discrete-range-map})



%%%%%%%%%%%%%%%%%%%%%%%% Sequential Statements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Labeled Sequential Statements

var SEQUENTIAL-STMT-LABEL: map(labeled-sequential-stmt, identifier) = {||}
var UNLABELED-SEQUENTIAL-STMT-MAP: map(labeled-sequential-stmt, 
				       unlabeled-sequential-stmt) = {||}


%%%%%%%%%% Wait Statement (8.1)

var TIMEOUT-CLAUSE: map(wait-statement, expression) = {||}


%%%%%%%%%% Assertion Statement (8.2)

var REPORT-EXPRESSION: map(unlabeled-sequential-stmt, expression) = {||}
var SEVERITY-EXPRESSION: map(unlabeled-sequential-stmt, expression) = {||}


%%%%%%%%%% Report Statement (8.3)


%%%%%%%%%% Signal Assignment Statement (8.4)

var PULSE-REJECTION-LIMIT: map(inertial-delay-mechanism, expression) = {||}
var DELAY-EXPRESSION: map(waveform-element, expression) = {||}


%%%%%%%%%% Variable Assignment Statement (8.5)


%%%%%%%%%% Procedure Call Statement (8.6)

var PROCEDURE-NAME: map(procedure-call, vhdl-name) = {||}


%%%%%%%%%% If Statement (8.7)

var ELSIF-PART: map(if-statement, seq(elsif-object)) = {||}
var ELSE-STATEMENTS: map(if-statement, seq(sequential-statement)) = {||}


%%%%%%%%%% Case Statement (8.8)

var CASE-STATEMENT-PART: map(case-statement, seq(case-alternative)) = {||}


%%%%%%%%%% Loop Statement (8.9)

%%%%%%%%%% Next Statement (8.10)

%%%%%%%%%% Exit Statement (8.11)

%%%%%%%%%% Return Statement (8.12)

%%%%%%%%%% Null Statement (8.13)


form SEQUENTIAL-STATEMENT-TREE-ATTRIBUTES
  define-tree-attributes('labeled-sequential-stmt, {'sequential-stmt-label, 
						   'unlabeled-sequential-stmt-map});
  define-tree-attributes('wait-statement, {'sensitivity-list,
					   'test-condition,
					   'timeout-clause});
  define-tree-attributes('assertion-statement, {'test-condition,
						'report-expression,
						'severity-expression});
  define-tree-attributes('report-statement, {'report-expression,
					     'severity-expression});
  define-tree-attributes('signal-assignment, {'target-map,
					      'delay-mechanism-map,
					      'waveform-element-list});
  define-tree-attributes('inertial-delay-mechanism, {'pulse-rejection-limit});
  define-tree-attributes('waveform-element, {'expression-value, 
					     'delay-expression});
  define-tree-attributes('variable-assignment, {'target-map, 
						'expression-value});
  define-tree-attributes('procedure-call, {'procedure-name});
  define-tree-attributes('if-statement, {'test-condition,
					 'sequential-statement-list,
					 'elsif-part,
					 'else-statements,
					 'end-name});
  define-tree-attributes('elsif-object, {'test-condition, 
					 'sequential-statement-list});
  define-tree-attributes('case-statement, {'expression-value,
					   'case-statement-part,
					   'end-name});
  define-tree-attributes('case-alternative, {'choice-list,
					     'sequential-statement-list});
  define-tree-attributes('basic-loop-statement, {'sequential-statement-list,
						 'end-name});
  define-tree-attributes('while-loop-statement, {'test-condition,
						 'sequential-statement-list,
						 'end-name});
  define-tree-attributes('for-loop-statement, {'identifier-map,
					       'discrete-range-map,
					       'sequential-statement-list,
					       'end-name});
  define-tree-attributes('next-statement, {'identifier-map,
					   'test-condition});
  define-tree-attributes('exit-statement, {'identifier-map,
					   'test-condition});
  define-tree-attributes('return-statement, {'expression-value})



%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Declarations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

var DECL-OTHERS-FLAG: map(declaration, boolean) = {||}
var DECL-ALL-FLAG: map(declaration, boolean) = {||}


%%%%%%%%%% Type Declarations (4.1)

var TYPE-DEFINITION-MAP: map(full-type-declaration, type-definition) = {||}


%%%%%%%%%% Subtype Declarations (4.2)


%%%%%%%%%% Object Declarations (4.3)

%%%%%%%%%% Signal Declarations  (4.3.1.2)

var SIGNAL-KIND-MAP: map(signal-declaration, signal-kind) = {||}


%%%%%%%%%% File Declarations  (4.3.1.4)

var FILE-OPEN-INFORMATION-MAP: map(file-declaration, file-open-information) = {||}
var FILE-LOGICAL-NAME: map(file-open-information, expression) = {||}


%%%%%%%%%% Alias Declaration  (4.3.3)

var ALIAS-DESIGNATOR: map(alias-declaration, expression) = {||}
var ALIAS-NAME: map(alias-declaration, vhdl-name) = {||}


%%%%%%%%%% Attribute Declaration  (4.4)


%%%%%%%%%% Component Declarations  (4.5)


%%%%%%%%%% Group Template Declarations  (4.6)

var ENTITY-CLASS-ENTRY-LIST: map(group-template-declaration, 
				 seq(entity-class-entry)) = {||}


%%%%%%%%%% Group Declarations  (4.7) 

var GROUP-TEMPLATE-NAME: map(group-declaration, vhdl-name) = {||}


%%%%%%%%%% Use Clause (10.4)

var USE-SELECTED-NAMES-LIST: map(use-clause, seq(selected-name)) = {||}

form DECLARATION-TREE-ATTRIBUTES
  define-tree-attributes('full-type-declaration, {'identifier-map,
						  'type-definition-map});
  define-tree-attributes('incomplete-type-declaration, {'identifier-map});
  define-tree-attributes('subtype-declaration, {'identifier-map,
						'subtype-indication-map});
  define-tree-attributes('constant-declaration, {'identifier-list,
						 'subtype-indication-map,
						 'expression-value});
  define-tree-attributes('signal-declaration, {'identifier-list,
					       'subtype-indication-map,
					       'signal-kind-map,
					       'expression-value});
  define-tree-attributes('variable-declaration, {'identifier-list,
						 'subtype-indication-map,
						 'expression-value});
  define-tree-attributes('file-declaration, {'identifier-list, 
					     'subtype-indication-map,
					     'file-open-information-map});
  define-tree-attributes('file-open-information, {'expression-value,
						  'file-logical-name});
  define-tree-attributes('alias-declaration, {'alias-designator,
					      'subtype-indication-map,
					      'alias-name,
					      'signature-map});
  define-tree-attributes('attribute-declaration, {'identifier-map,
						  'type-mark});
  define-tree-attributes('component-declaration, {'identifier-map,
						  'generic-clause-map,
						  'port-clause-map,
						  'end-name});
  define-tree-attributes('group-template-declaration, {'identifier-map,
						       'entity-class-entry-list});
  define-tree-attributes('entity-class-entry, {'entity-class-map});
  define-tree-attributes('group-declaration, {'identifier-map,
					      'group-template-name});
  define-tree-attributes('use-clause, {'use-selected-names-list})



%%%%%%%%%%%%%%%%%%%%%%%%%%%% Specifications %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Attribute Specification (5.1)

var ATTRIBUTE-DESIGNATOR: map(attribute-specification, simple-name) = {||}
var ENTITY-NAME-LIST: map(attribute-specification, seq(entity-designator)) = {||}

var ENTITY-TAG: map(entity-designator, vhdl-name) = {||}


%%%%%%%%%% Configuration Specification (5.2)

var INSTANTIATION-LIST: map(component-specification, seq(identifier)) = {||}
var COMPONENT-OTHERS-FLAG: map(component-specification, boolean) = {||}
var COMPONENT-ALL-FLAG: map(component-specification, boolean) = {||}
var COMPONENT-NAME: map(component-specification, vhdl-name) = {||}


%%%%%%%%%%% Disconnection Specification (5.3)

var SIGNAL-LIST: map(disconnection-specification, seq(vhdl-name)) = {||}

form SPECIFICATION-TREE-ATTRIBUTES
  define-tree-attributes('attribute-specification, {'attribute-designator,
						    'entity-name-list,
						    'decl-others-flag,
						    'decl-all-flag,
						    'entity-class-map,
						    'expression-value});
  define-tree-attributes('entity-designator, {'entity-tag,
					      'signature-map});
  define-tree-attributes('configuration-specification, {'component-specification-map,
							'entity-aspect-map,
							'generic-map-aspect-map,
							'port-map-aspect-map});
  define-tree-attributes('component-specification, {'instantiation-list,
						    'component-others-flag,
						    'component-all-flag});
  define-tree-attributes('disconnection-specification, {'signal-list,
							'decl-others-flag,
							'decl-all-flag,
							'type-mark,
							'expression-value})



%%%%%%%%%%%%%%%%%%%%% Subprogram Declarations and Bodies %%%%%%%%%%%%%%%%%%%%%%

%% NOTE: what VHDL refers to as a "subprogram declaration" is a 
%%       Subprogram-Specification object-class in this model. A Subprogram-Declaration
%%       is an object-class used to group together Subprogram-Specification and 
%%       Subprogram-Body

var DESIGNATOR-MAP: map(subprogram-declaration, designator) = {||}


%%%%%%%%%%% Subprogram Specification (2.1)

form SUBPROGRAM-DECLARATION-TREE-ATTRIBUTES
  define-tree-attributes('procedure-declaration, {'designator-map,
						  'interface-list-map});
  define-tree-attributes('pure-function-decl, {'designator-map,
					       'interface-list-map,
					       'type-mark});
  define-tree-attributes('impure-function-decl, {'designator-map,
						 'interface-list-map,
						 'type-mark})


%%%%%%%%%%% Subprogram Body (2.2)

var SUBPROGRAM-SPECIFICATION-MAP: map(subprogram-body, 
				      subprogram-specification) = {||}
var SUBPROGRAM-KIND-MAP: map(subprogram-body, subprogram-kind) = {||}

form SUBPROGRAM-BODY-TREE-ATTRIBUTES
  define-tree-attributes('subprogram-body, {'subprogram-specification-map,
					    'declaration-list,
					    'sequential-statement-list,
					    'subprogram-kind-map,
					    'designator-map})



%%%%%%%%%%%%%%%%%%%%%%%%% Interface Declarations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%% Interface Declarations (4.3.2) 

var MODE-MAP: map(interface-declaration, mode) = {||}
var OPTIONAL-SIGNAL-KIND: map(interface-declaration, signal-kind) = {||}

form INTERFACE-DECLARATION-TREE-ATTRIBUTES
  define-tree-attributes('interface-declaration, {'identifier-list,
						  'subtype-indication-map,
						  'optional-signal-kind,
						  'expression-value});
  define-tree-attributes('interface-file-decl, {'identifier-list,
						'subtype-indication-map})



%%%%%%%%%%%%%%%%%%%%%%%%%%% Binding Indications %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%% Binding Indication (5.2.1)

var ASPECT-NAME: map(entity-aspect, vhdl-name) = {||}

form BINDING-INDICATION-TREE-ATTRIBUTES
  define-tree-attributes('entity-aspect, {'aspect-name});
  define-tree-attributes('generic-map-aspect, {'association-list-map});
  define-tree-attributes('port-map-aspect, {'association-list-map})



%%%%%%%%%%%%%%%%%%%%%%%%%% Entity Header Clauses %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%% Entity Header (1.1.1)

form ENTITY-HEADER-TREE-ATTRIBUTES
  define-tree-attributes('generic-clause, {'interface-list-map});
  define-tree-attributes('port-clause, {'interface-list-map})



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Types %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Scalar Types (3.1)

var RANGE-CONSTRAINT-MAP: map(scalar-type-definition, range-constraint) = {||}


%%%%%%%%%% Enumeration Types (3.1.1)

var ENUMERATION-LITERAL-LIST:
   map(enumeration-type-def, seq(enumeration-literal)) = {||}


%%%%%%%%%% Physical Types (3.1.3)

var BASE-UNIT-DECLARATION: map(physical-type-def, identifier) = {||}
var SECONDARY-UNIT-LIST: 
   map(physical-type-def, seq(secondary-unit-declaration)) = {||}
var SECONDARY-UNIT-NAME: 
   map(secondary-unit-declaration, identifier) = {||}
var PHYSICAL-LITERAL-OR-NAME-MAP: 
   map(secondary-unit-declaration, physical-literal-or-name) = {||}


%%%%%%%%%% Composite Types (3.2)

%%%%%%%%%% Array Types (3.2.1)

var INDEX-SUBTYPE-LIST:
   map(unconstrained-array-def, seq(index-subtype-definition)) = {||}
var INDEX-CONSTRAINT-MAP:
   map(constrained-array-def, index-constraint) = {||}


%%%%%%%%%% Record Types (3.2.2)

var ELEMENT-LIST:
   map(record-type-def, seq(element-declaration)) = {||}
var ELEMENT-SUBTYPE-DEFINITION: 
   map(element-declaration, subtype-indication) = {||}


%%%%%%%%%% Access Types (3.3)


form TYPE-DEFINITION-TREE-ATTRIBUTES
  define-tree-attributes('scalar-type-definition, {'range-constraint-map});
  define-tree-attributes('enumeration-type-def, {'enumeration-literal-list});
  define-tree-attributes('physical-type-def, {'range-constraint-map,
					      'base-unit-declaration,
					      'secondary-unit-list,
					      'end-name});
  define-tree-attributes('secondary-unit-declaration, {'secondary-unit-name,
						       'physical-literal-or-name-map});
  define-tree-attributes('unconstrained-array-def, {'index-subtype-list,
						    'subtype-indication-map});
  define-tree-attributes('constrained-array-def, {'index-constraint-map,
						  'subtype-indication-map});
  define-tree-attributes('index-subtype-definition, {'type-mark});
  define-tree-attributes('record-type-def, {'element-list,
					    'end-name});
  define-tree-attributes('element-declaration, {'identifier-list,
						'element-subtype-definition});
  define-tree-attributes('access-type-definition, {'subtype-indication-map});
  define-tree-attributes('file-type-definition, {'type-mark})



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Constraints %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Constraints (4.2, 3.1, 3.2.1)

var DISCRETE-RANGE-LIST: map(index-constraint, seq(discrete-range)) = {||}
var RANGE-MAP: map(range-constraint, vhdl-range) = {||}

%% attributes map from syntactic-object because they are needed in 
%% range as well
var LEFT-BOUND: map(syntactic-object, expression) = {||}
var RIGHT-BOUND: map(syntactic-object, expression) = {||}
var DIRECTION-MAP: map(syntactic-object, direction) = {||}


form RANGE-CONSTRAINT-TREE-ATTRIBUTES
  define-tree-attributes('range-constraint, {'left-bound, 
					     'direction-map,
					     'right-bound});
  define-tree-attributes('index-constraint, {'discrete-range-list})



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Range %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Range (3.1)

form RANGE-TREE-ATTRIBUTES
  define-tree-attributes('simple-range, {'left-bound,
					 'direction-map,
					 'right-bound})

%%%%%%%%%% Discrete Range (3.2.1 Array Types)

%% A discrete range simply groups together the classes: 
%%   Expression, Simple-Subtype-Indication, Simple-Range



%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Subtype-Indication %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Subtype Indication (4.2)

var RES-FUNC-NAME: map(simple-subtype-indication, vhdl-name) = {||}
var SUBTYPE-CONSTRAINT: map(simple-subtype-indication, range-constraint) = {||}

form SIMPLE-SUBTYPE-INDICATION-TREE-ATTRIBUTES
  define-tree-attributes('simple-subtype-indication, {'type-mark,
						      'res-func-name,
						      'subtype-constraint});
  define-tree-attributes('subtype-indication, {'type-mark})



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Signatures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Signature (2.3.2)

var TYPE-MARK-LIST: map(signature, seq(vhdl-name)) = {||}

form SIGNATURE-TREE-ATTRIBUTES
  define-tree-attributes('signature, {'type-mark, 'type-mark-list})



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Expressions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

var ARGUMENT-1: map(expression, expression) = {||}
var ARGUMENT-2: map(expression, expression) = {||}


%%%%%%%%%% Logical Expressions (7.2.1)

form LOGICAL-EXPR-TREE-ATTRIBUTES
  define-tree-attributes('logical-and, {'argument-1, 'argument-2});
  define-tree-attributes('logical-or, {'argument-1, 'argument-2});
  define-tree-attributes('logical-xor, {'argument-1, 'argument-2});
  define-tree-attributes('logical-nand, {'argument-1, 'argument-2});
  define-tree-attributes('logical-nor, {'argument-1, 'argument-2});
  define-tree-attributes('logical-xnor, {'argument-1, 'argument-2})


%%%%%%%%%% Compare Expressions (7.2.2)

form COMPARE-EXPR-TREE-ATTRIBUTES
  define-tree-attributes('compare-equal, {'argument-1, 'argument-2});
  define-tree-attributes('compare-greater, {'argument-1, 'argument-2});
  define-tree-attributes('compare-less, {'argument-1, 'argument-2});
  define-tree-attributes('compare-greater-equal, {'argument-1, 'argument-2});
  define-tree-attributes('compare-less-equal, {'argument-1, 'argument-2});
  define-tree-attributes('compare-not-equal, {'argument-1, 'argument-2})


%%%%%%%%%% Shift Expressions (7.2.3)

form SHIFT-EXPR-TREE-ATTRIBUTES
  define-tree-attributes('shift-left-logic, {'argument-1, 'argument-2});
  define-tree-attributes('shift-left-arith, {'argument-1, 'argument-2});
  define-tree-attributes('shift-right-logic, {'argument-1, 'argument-2});
  define-tree-attributes('shift-right-arith, {'argument-1, 'argument-2});
  define-tree-attributes('rotate-left-logic, {'argument-1, 'argument-2});
  define-tree-attributes('rotate-right-logic, {'argument-1, 'argument-2})


%%%%%%%%%% Add Expressions (7.2.4)

form ADD-EXPR-TREE-ATTRIBUTES
  define-tree-attributes('add-operator-plus, {'argument-1, 'argument-2});
  define-tree-attributes('add-operator-minus, {'argument-1, 'argument-2});
  define-tree-attributes('add-operator-and, {'argument-1, 'argument-2})


%%%%%%%%%% Signed Expressions (7.2.5)

form SIGN-EXPR-TREE-ATTRIBUTES
  define-tree-attributes('sign-operator-plus, {'argument-1});
  define-tree-attributes('sign-operator-minus, {'argument-1})


%%%%%%%%%% Multiply Expressions (7.2.6)

form MULTIPLY-EXPR-TREE-ATTRIBUTES
  define-tree-attributes('mult-operator-times, {'argument-1, 'argument-2});
  define-tree-attributes('mult-operator-divide, {'argument-1, 'argument-2});
  define-tree-attributes('mult-operator-mod, {'argument-1, 'argument-2});
  define-tree-attributes('mult-operator-rem, {'argument-1, 'argument-2})


%%%%%%%%%% Miscellaneous Expressions (7.2.7)

form MISC-EXPR-TREE-ATTRIBUTES
  define-tree-attributes('misc-operator-square, {'argument-1, 'argument-2});
  define-tree-attributes('misc-operator-abs, {'argument-1});
  define-tree-attributes('misc-operator-not, {'argument-1})


%%%%%%%%%% Aggregate Expression (7.3.2)

var ELEMENT-ASSOCIATION-LIST: map(aggregate-expression, 
				  seq(element-association)) = {||}
var ELEMENT-ASSOCIATION-MAP: map(aggregate-expression,
				 element-association) = {||}


%%%%%%%%%% Function Calls (7.3.3)

%% See indexed-or-slice-name (6.4, 6.5)


%%%%%%%%%% Qualified Expression (7.3.4)

var AGGREGATE-MAP: map(qualified-expression, aggregate-expression) = {||}

form QUALIFIED-EXPR-TREE-ATTRIBUTES
  define-tree-attributes('qualified-expression, {'type-mark,
						 'expression-value})


%%%%%%%%%% Type Conversions (7.3.5)

%% See indexed-or-slice-name (6.4, 6.5)


%%%%%%%%%% Allocators (7.3.6)

var QUALIFIED-EXPR-MAP: map(allocator, qualified-expression) = {||}

form ALLOCATOR-EXPR-TREE-ATTRIBUTES
  define-tree-attributes('allocator, {'qualified-expr-map})



%%%%%%%%%%%%%%%%%%%%%%%%%%%% Association Lists %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

%%%%%%%%%% Association Element (4.3.2.2)

var FORMAL-OR-ACTUAL-PART-MAP: map(association-element, formal-or-actual-part) = {||}
var ACTUAL-PART-MAP: map(association-element, formal-or-actual-part) = {||}

var OPEN-FLAG: map(formal-or-actual-part, boolean) = {||}

form ASSOCIATION-LIST-TREE-ATTRIBUTES
  define-tree-attributes('association-element, {'formal-or-actual-part-map,
						'actual-part-map});
  define-tree-attributes('formal-or-actual-part, {'discrete-range-map,
						  'open-flag})



%%%%%%%%%%%%%%%%%%%%%%%%%%% Element Associations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

%%%%%%%%%%% Element Associations, Choices (7.3.2)

var CHOICE-OR-EXPRESSION-VALUE: map(element-association, choice) = {||}

form ELEMENT-ASSOCIATION-TREE-ATTRIBUTES
  define-tree-attributes('element-association, {'choice-or-expression-value,
						'choice-list,
						'expression-value})


%%%%%%%%%%% Choices (7.3.2)

var CHOICE-OTHERS-FLAG: map(choice, boolean) = {||}

form CHOICE-TREE-ATTRIBUTES
  define-tree-attributes('choice, {'discrete-range-map,
				   'choice-others-flag})


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

var PREFIX-MAP: map(vhdl-name, vhdl-name) = {||}

%%%%%%%%%% Simple Names (6.2)


%%%%%%%%%% Selected Names (6.3)

var SUFFIX-ALL-FLAG: map(selected-name, boolean) = {||}
var SUFFIX-CHARACTER-LITERAL: map(selected-name, character-literal) = {||}
var SUFFIX-SIMPLE-NAME: map(selected-name, identifier) = {||}
var SUFFIX-OPERATOR-SYMBOL: map(selected-name, string-literal) = {||}


%%%%%%%%%% Indexed Names and Slice Names (6.4, 6.5)


%%%%%%%%%% Attribute Names (6.6)

form VHDL-NAME-TREE-ATTRIBUTES
  define-tree-attributes('simple-name, {'identifier-map});  
  define-tree-attributes('selected-name, {'prefix-map, 
					  'suffix-all-flag,
					  'suffix-simple-name,
					  'suffix-operator-symbol});
  define-tree-attributes('indexed-or-slice-name, {'prefix-map, 
					 'association-list-map});
  define-tree-attributes('attribute-name, {'prefix-map, 
					   'identifier-map,
					   'signature-map, 
					   'expression-value});
  define-tree-attributes('range-attribute-name, {'prefix-map,
						 'signature-map})



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Literals %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Real Literals (13.4)

var REAL-VALUE-OF: map(real-literal, real) = {||}


%%%%%%%%%% Integer Literals (13.4)

var INTEGER-VALUE-OF: map(integer-literal, integer) = {||}


%%%%%%%%%% Character Literals (13.5)

var CHAR-VALUE-OF: map(character-literal, char) = {||}


%%%%%%%%%% String Literals (13.6)

var STRING-VALUE-OF: map(string-literal, string) = {||}


%%%%%%%%%% Bit String Literals (13.7)

var BIT-STRING-VALUE-OF: map(bit-string-literal, any-type) = {||}


%%%%%%%%%% Physical Literals (3.1.3)

var UNIT-QUANTIFIER: map(physical-literal, integer-literal) = {||}
var UNIT-NAME: map(physical-literal, symbol) = {||}


form LITERAL-TREE-ATTRIBUTES
  define-tree-attributes('real-literal, {'real-value-of}); 
  define-tree-attributes('integer-literal, {'integer-value-of});
  define-tree-attributes('character-literal, {'char-value-of});
  define-tree-attributes('string-literal, {'string-value-of});
  define-tree-attributes('bit-string-literal, {'bit-string-value-of})








<div align="center"><br /><script type="text/javascript"><!--
google_ad_client = "pub-7293844627074885";
//468x60, Created at 07. 11. 25
google_ad_slot = "8619794253";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />&nbsp;</div>