AST Nodes

In defining a grammar, you would use AST nodes and AST node attributes that can be recognized in code engineering in Enterprise Architect, in the AST results that are returned by the attribute, attributeEx and node commands. These nodes and attributes are identified in the following tables. Any others will be ignored in code engineering.

FILE Node

The FILE node represents a file. It isn't mapped to anything, but contains all the required information.

Multiplicity

Contained Nodes/Attributes

Description

0..*

PACKAGE

 

See PACKAGE Node.

0..*

CLASS

 

See CLASS Node.

0..*

IMPORT

 

 

0..*

COMMENT

Field labels as part of a skip rule will be at the root level; the code generator looks for comments of this sort by position relative to the node.

 

0..1

INSERT_POSITION

This gives the position where new Classes, packages and method implementations can be inserted into the file. If it is not found, the code generator will automatically insert new items immediately after the last one is found in code.

 

PACKAGE node

The PACKAGE node corresponds to a namespace or equivalent in the file. When importing with package per namespace, Enterprise Architect will create a package directly under the import for this and place all Classes within it. When not importing namespaces, Enterprise Architect will look for Classes under this point, but it will do nothing with this node.

Additionally, if you are generating with namespaces enabled (see the Code Options topics for generic languages) a generated Class will not match a Class in code unless they are under the same package structure.

Contained in nodes:     FILE

Multiplicity

Contained Nodes/Attributes

Description

1

NAME

 

See NAME Node.

0..*

CLASS

 

See CLASS Node

0..*

PACKAGE

 

 

0..1

OPEN_POSITION

Gives the position where the package body opens. This can also be used as an insert position.

 

0..1

INSERT_POSITION

Gives the position where new Classes and packages can be inserted into the file. If it is not found, the code generator will automatically insert new items immediately after the last one is found in code.

 

0..1

SUPPRESS

Prevents indenting when inserting into this package.

 

CLASS/INTERFACE Node

The CLASS (or INTERFACE) node is the most important in code generation. It is brought in as Class (or Interface) Objects.

See Class DECLARATION (below) and Class BODY.

Contained in Nodes:   FILE, PACKAGE, Class BODY

CLASS Declaration

Contained in Nodes:     CLASS/INTERFACE

Multiplicity

Contained Nodes/Attributes

Description

1

NAME

 

See NAME Node.

0..*

PARENT

 

See PARENT Node.

0..*

TAG

 

See TAG Node.

0..1

DESCRIPTION

See DESCRIPTION Node

 

1

NAME

The name of the Class. If there is a node NAME, that will overwrite this attribute.

 

0..1

SCOPE

The UML Scope of the Class - Public, Private, Protected or Package.

 

0..1

ABSTRACT

If present, indicates that this is an abstract Class.

 

0..1

VERSION

The version of the Class.

 

0..1

STEREOTYPE

The stereotype that Enterprise Architect should assign to the Class. This does not support multiple stereotypes.

 

0..1

ISLEAF

 

 

0..1

MULTIPLICITY

 

 

0..1

LANGUAGE

Generally, you do not need to set this.

 

0..1

NOTE

Generally not used as it is covered by the comments above the Class.

 

0..1

ALIAS

 

 

0..*

MACRO

Adds a numbered Tagged Value that Enterprise Architect can use to round trip macros.

 

Class BODY Node

Contained in Nodes:     CLASS/INTERFACE

Multiplicity

Contained Nodes/Attributes

Description

0..*

METHOD

 

See METHOD Node.

0..*

ATTRIBUTE

 

See ATTRIBUTE Node.

0..*

FIELD

 

See FIELD Node

0..*

CLASS

 

See CLASS Node.

0..*

SCOPE

 

See SCOPE Node.

0..*

PROPERTY

 

 

0..*

TAG

 

See TAG Node.

0..*

PARENT

 

See PARENT Node.

0..1

OPEN_POSITION

Gives the position where the Class body opens. This can also be used as an insert position.

 

0..1

INSERT_POSITION

Gives the position where new Class members can be inserted into the file. If it is not found, the code generator will automatically insert new items immediately after the last one is found in code.

 

SCOPE Node

This is an optional feature for languages resembling C++ that have blocks that specify the scope of elements. The language needs to have a name specified that is used for the scope of all elements in the block. In all other respects it behaves identically to the Class BODY node.

Contained in Nodes:     Class BODY

Multiplicity

Contained Nodes/Attributes

Description

1

NAME

 

Used as the scope for all methods and attributes contained within the scope.

METHOD Node

Contained in Nodes:     Class BODY, SCOPE

Multiplicity

Contained Nodes/Attributes

Description

1

Method DECLARATION

 

See Method DECLARATION Node (below).

Method DECLARATION Node

Contained in Nodes:     METHOD

Multiplicity

Contained Nodes/Attributes

Description

0..1

TYPE

 

See TYPE Node.

0..*

PARAMETER

 

See PARAMETER Node.

0..*

TAG

 

See TAG Node.

0..1

DESCRIPTION

 

See DESCRIPTION Node

0..1

MULTI PARAMETER

Supports Delphi's parameter list style of declaration; see PARAMETER Node.

This is the equivalent of FIELD.

 

1

NAME

 

 

0..1

TYPE

 

 

0..1

SCOPE

 

 

0..1

ABSTRACT

 

 

0..1

STEREOTYPE

 

 

0..1

STATIC

 

 

0..1

CONST  or CONSTANT

 

 

0..1

PURE

 

 

0..1

ISQUERY

 

 

0..1

ARRAY

 

 

0..1

SYNCHRONIZED

 

 

0..*

MACRO

 

 

0..1

CSHARPIMPLEMENTS

Specifies special behavior for C#.

 

0..1

BEHAVIOR

Provides support for Aspect J, using behavior.

 

0..1

SHOWBEHAVIOR

Provides support for Aspect J, using behavior, and shows the reverse-engineered behavior on the diagram.

 

ATTRIBUTE Node

Contained in Nodes:     Class BODY, SCOPE

Multiplicity

Contained Nodes/Attributes

Description

1

TYPE

 

See TYPE Node.

0..*

TAG

 

See TAG Node.

0..1

DESCRIPTION

 

See DESCRIPTION Node.

1

NAME

 

 

0..1

TYPE

 

 

0..1

SCOPE

 

 

0..1

DEFAULT

 

 

0..1

CONTAINER or ARRAY

 

 

0..1

CONTAINMENT

 

Reference or value.

0..1

STEREOTYPE

 

 

0..1

STATIC

 

 

0..1

CONST or CONSTANT

 

 

0..1

ORDERED

 

 

0..1

LOWBOUND

 

 

0..1

HIGHBOUND

 

 

0..1

TRANSIENT or VOLATILE

 

 

FIELD Node

A field corresponds to multiple attribute declarations in one. Anything not defined in the Declarators but defined in the field itself will be set for each declarator. Everything supported in an attribute is supported in the field. If no declarators are found then this works in the same way as an attribute.

Contained in Nodes:     Class BODY, SCOPE

Multiplicity

Contained Nodes/Attributes

Description

0..*

DECLARATOR

 

See ATTRIBUTE Node.

PARAMETER Node

Contained in Nodes:     Method DECLARATION, TEMPLATE

Multiplicity

Contained Nodes/Attributes

Description

1

TYPE

 

See TYPE Node.

0..*

TAG

 

See TAG Node.

0..1

DESCRIPTION

 

See DESCRIPTION Node.

0..1

NAME

 

 

0..1

TYPE

 

 

0..1

KIND

 

Expected to be in, inout, out or return.

0..1

DEFAULT

 

 

0..1

FIXED

 

 

0..1

ARRAY

 

 

NAME Node

Contained in Nodes:     PACKAGE, Class DECLARATION

Multiplicity

Contained Nodes/Attributes

Description

1

NAME

 

 

0..*

QUALIFIER

 

 

0..*

NAMEPART

An alternative to using NAME and QUALIFIER. A string of values, all except the last one taken as qualifiers. The last one is taken as the Name.

 

TYPE Node

Contained in Nodes:     Method DECLARATION, ATTRIBUTE, PARAMETER

Multiplicity

Contained Nodes/Attributes

Description

0..1

TEMPLATE

The entire text of the template is the name of the type.

Only used if NAME is undefined.

See TEMPLATE Node, below.

 

1

NAME

 

 

0..*

QUALIFIER

 

 

0..*

NAMEPART

An alternative to using NAME and QUALIFIER. A string of values, all except the last one taken as qualifiers. The last one is taken as the Name.

 

TEMPLATE Node

Contained in Nodes:     TYPE

Multiplicity

Contained Nodes/Attributes

Description

0..*

PARAMETER

 

See PARAMETER Node.

1

NAME

 

 

PARENT Node

Contained in Nodes:     Class DECLARATION

Multiplicity

Contained Nodes/Attributes

Description

0..1

TYPE

 

Has the value Parent, Implements or VirtualP.

1

NAME

 

 

0..*

QUALIFIER

 

 

0..*

NAMEPART

An alternative to using NAME and QUALIFIER. A string of values, all except the last one taken as qualifiers. The last one is taken as the Name.

 

0..1

INSTANTIATION

 

 

TAG Node

Contained in Nodes:     Class DECLARATION, Method DECLARATION, ATTRIBUTE, PARAMETER

Multiplicity

Contained Nodes/Attributes

Description

1

NAME

 

 

0..*

VALUE

 

 

0..1

MEMO

 

 

0..1

NOMEMO

 

 

0..1

GROUP

 

 

DESCRIPTION Node

Contained in Nodes:     Class DECLARATION, Method DECLARATION, ATTRIBUTE, PARAMETER

Multiplicity

Contained Nodes/Attributes

Description

0..*

VALUE

 

 

Learn more