#|| 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})