parse_AcmeDesign |
::= |
( <IMPORT> ( Filename
";" | <STRING_LITERAL> ";" ) )* ( TypeDeclaration
| FamilyDeclaration
| DesignAnalysisDeclaration
| PropertyDeclaration
| PropertiesBlock
| SystemDeclaration
)* <EOF> |
Filename |
::= |
( "$" | "%" )? <IDENTIFIER> ( ( ( "."
| ":" | "-" | "+" | "\\" | "\\\\" | "/" | "$" | "%" ) )+
<IDENTIFIER> )* |
FamilyDeclaration |
::= |
( <FAMILY> | <STYLE> )
<IDENTIFIER> ( ";" | ( "=" FamilyBody
( ";" )? ) | ( <EXTENDS> lookup_SystemTypeByName
( "," lookup_SystemTypeByName
)* <WITH> FamilyBody
( ";" )? ) ) |
FamilyBody |
::= |
"{" "}" |
|
| |
"{" ( TypeDeclaration
| SystemStructure
)+ "}" |
TypeDeclaration |
::= |
ElementTypeDeclaration |
|
| |
PropertyTypeDeclaration |
ElementTypeDeclaration |
::= |
ElementProtoTypeDeclaration |
|
| |
ComponentTypeDeclaration |
|
| |
GroupTypeDeclaration |
|
| |
ConnectorTypeDeclaration |
|
| |
PortTypeDeclaration |
|
| |
RoleTypeDeclaration |
ElementProtoTypeDeclaration |
::= |
( <ELEMENT> <TYPE>
<IDENTIFIER> ( "=" parse_ElementProtoTypeDescription
( ";" )? | ";" ) | <ELEMENT> <TYPE> <IDENTIFIER>
<EXTENDS> lookup_ComponentTypeByName
( "," lookup_ComponentTypeByName
)* <WITH> parse_ElementProtoTypeDescription
( ";" )? ) |
ComponentTypeDeclaration |
::= |
( <COMPONENT> <TYPE>
<IDENTIFIER> ( "=" parse_ComponentDescription
( ";" )? | ";" ) | <COMPONENT> <TYPE> <IDENTIFIER>
<EXTENDS> lookup_ComponentTypeByName
( "," lookup_ComponentTypeByName
)* <WITH> parse_ComponentDescription
( ";" )? ) |
GroupTypeDeclaration |
::= |
( <GROUP> <TYPE>
<IDENTIFIER> ( "=" parse_GroupDescription
( ";" )? | ";" ) | <GROUP> <TYPE> <IDENTIFIER>
<EXTENDS> lookup_GroupTypeByName
( "," lookup_GroupTypeByName
)* <WITH> parse_GroupDescription
( ";" )? ) |
ConnectorTypeDeclaration |
::= |
( <CONNECTOR> <TYPE>
<IDENTIFIER> ( "=" parse_ConnectorDescription
( ";" )? | ";" ) | <CONNECTOR> <TYPE> <IDENTIFIER>
<EXTENDS> lookup_ConnectorTypeByName
( "," lookup_ConnectorTypeByName
)* <WITH> parse_ConnectorDescription
( ";" )? ) |
PortTypeDeclaration |
::= |
( <PORT> <TYPE>
<IDENTIFIER> ( "=" parse_PortDescription
( ";" )? | ";" ) | <PORT> <TYPE> <IDENTIFIER>
<EXTENDS> lookup_PortTypeByName
( "," lookup_PortTypeByName
)* <WITH> parse_PortDescription
( ";" )? ) |
RoleTypeDeclaration |
::= |
( <ROLE> <TYPE>
<IDENTIFIER> ( "=" parse_RoleDescription
( ";" )? | ";" ) | <ROLE> <TYPE> <IDENTIFIER>
<EXTENDS> lookup_RoleTypeByName
( "," lookup_RoleTypeByName
)* <WITH> parse_RoleDescription
( ";" )? ) |
lookup_SystemTypeByName |
::= |
<IDENTIFIER> |
lookup_ComponentTypeByName |
::= |
( <IDENTIFIER> "." )?
<IDENTIFIER> |
lookup_GroupTypeByName |
::= |
( <IDENTIFIER> "." )?
<IDENTIFIER> |
lookup_ConnectorTypeByName |
::= |
( <IDENTIFIER> "." )?
<IDENTIFIER> |
lookup_PortTypeByName |
::= |
( <IDENTIFIER> "." )?
<IDENTIFIER> |
lookup_RoleTypeByName |
::= |
( <IDENTIFIER> "." )?
<IDENTIFIER> |
lookup_PropertyTypeByName |
::= |
( <IDENTIFIER> "." )?
<IDENTIFIER> |
lookup_arbitraryTypeByName |
::= |
( PropertyTypeDescription
| <SYSTEM> | <COMPONENT> | <GROUP> | <CONNECTOR> |
<PORT> | <ROLE> | <PROPERTY> | <REPRESENTATION> |
NonPropertySetTypeExpression
) |
SystemDeclaration |
::= |
<SYSTEM> <IDENTIFIER> ( ":" lookup_SystemTypeByName
( "," lookup_SystemTypeByName
)* )? ( "=" SystemBody
( ";" )? | ";" ) |
SystemBody |
::= |
( <NEW> lookup_SystemTypeByName
( "," lookup_SystemTypeByName
)* | "{" "}" | "{" ( SystemStructure
)+ "}" ) ( <EXTENDED> <WITH> SystemBody
)? |
SystemStructure |
::= |
ComponentDeclaration |
|
| |
ComponentsBlock |
|
| |
GroupDeclaration |
|
| |
ConnectorDeclaration |
|
| |
ConnectorsBlock |
|
| |
PortDeclaration |
|
| |
PortsBlock |
|
| |
RoleDeclaration |
|
| |
RolesBlock |
|
| |
PropertyDeclaration |
|
| |
PropertiesBlock |
|
| |
AttachmentsDeclaration |
|
| |
RepresentationDeclaration |
|
| |
DesignAnalysisDeclaration |
|
| |
parse_DesignRule |
parse_ElementProtoTypeDescription |
::= |
"{" ( PropertyDeclaration
| PropertiesBlock
| RepresentationDeclaration
)* "}" |
GroupDeclaration |
::= |
<GROUP> <IDENTIFIER> ( ":" lookup_GroupTypeByName
( "," lookup_GroupTypeByName
)* )? ( "=" parse_GroupDescription
";" | ";" ) |
parse_GroupDescription |
::= |
( <NEW> lookup_GroupTypeByName
( "," lookup_GroupTypeByName
)* | "{" ( MembersBlock
| PropertyDeclaration
| PropertiesBlock
| parse_DesignRule
)* "}" ) ( <EXTENDED> <WITH> parse_GroupDescription
)? |
ComponentDeclaration |
::= |
<COMPONENT> <IDENTIFIER> ( ":"
lookup_ComponentTypeByName
( "," lookup_ComponentTypeByName
)* )? ( "=" parse_ComponentDescription
";" | ";" ) |
ComponentsBlock |
::= |
<COMPONENTS> "{" ( <IDENTIFIER>
( ":" lookup_ComponentTypeByName
( "," lookup_ComponentTypeByName
)* )? ( "=" parse_ComponentDescription
";" | ";" ) )* "}" ( ";" )? |
parse_ComponentDescription |
::= |
( <NEW> lookup_ComponentTypeByName
( "," lookup_ComponentTypeByName
)* | "{" ( PortDeclaration
| PortsBlock
| PropertyDeclaration
| PropertiesBlock
| RepresentationDeclaration
| parse_DesignRule
)* "}" ) ( <EXTENDED> <WITH> parse_ComponentDescription
)? |
ConnectorDeclaration |
::= |
<CONNECTOR> <IDENTIFIER> ( ":"
lookup_ConnectorTypeByName
( "," lookup_ConnectorTypeByName
)* )? ( "=" parse_ConnectorDescription
";" | ";" ) |
ConnectorsBlock |
::= |
<CONNECTORS> "{" ( <IDENTIFIER>
( ":" lookup_ConnectorTypeByName
( "," lookup_ConnectorTypeByName
)* )? ( "=" parse_ConnectorDescription
";" | ";" ) )* "}" ( ";" )? |
parse_ConnectorDescription |
::= |
( <NEW> lookup_ConnectorTypeByName
( "," lookup_ConnectorTypeByName
)* | "{" ( RoleDeclaration
| RolesBlock
| PropertyDeclaration
| PropertiesBlock
| RepresentationDeclaration
| parse_DesignRule
)* "}" ) ( <EXTENDED> <WITH> parse_ConnectorDescription
)? |
PortDeclaration |
::= |
<PORT> <IDENTIFIER> ( ":" lookup_PortTypeByName
( "," lookup_PortTypeByName
)* )? ( "=" parse_PortDescription
";" | ";" ) |
PortsBlock |
::= |
<PORTS> "{" ( <IDENTIFIER> (
":" lookup_PortTypeByName
( "," lookup_PortTypeByName
)* )? ( "=" parse_PortDescription
";" | ";" ) )* "}" ( ";" )? |
parse_PortDescription |
::= |
( <NEW> lookup_PortTypeByName
( "," lookup_PortTypeByName
)* | "{" ( PropertyDeclaration
| PropertiesBlock
| RepresentationDeclaration
| parse_DesignRule
)* "}" ) ( <EXTENDED> <WITH> parse_PortDescription
)? |
RoleDeclaration |
::= |
<ROLE> <IDENTIFIER> ( ":" lookup_RoleTypeByName
( "," lookup_RoleTypeByName
)* )? ( "=" parse_RoleDescription
";" | ";" ) |
MembersBlock |
::= |
<MEMBERS> "{" ( QualifiedReference
( ";" ) )* "}" ( ";" )? |
QualifiedReference |
::= |
<IDENTIFIER> ( ( "."
<IDENTIFIER> ) )* |
RolesBlock |
::= |
<ROLES> "{" ( <IDENTIFIER> (
":" lookup_RoleTypeByName
( "," lookup_RoleTypeByName
)* )? ( "=" parse_RoleDescription
";" | ";" ) )* "}" ( ";" )? |
parse_RoleDescription |
::= |
( <NEW> lookup_RoleTypeByName
( "," lookup_RoleTypeByName
)* | "{" ( PropertyDeclaration
| PropertiesBlock
| RepresentationDeclaration
| parse_DesignRule
)* "}" ) ( <EXTENDED> <WITH> parse_RoleDescription
)? |
AttachmentsDeclaration |
::= |
( ( <ATTACHMENTS> "{" (
<IDENTIFIER> "." <IDENTIFIER> "to" <IDENTIFIER> "."
<IDENTIFIER> ( "{" ( PropertyDeclaration
| PropertiesBlock
)* "}" )? ";" )* "}" ( ";" )? ) | ( <ATTACHMENT> <IDENTIFIER>
"." <IDENTIFIER> "to" <IDENTIFIER> "." <IDENTIFIER> (
"{" ( PropertyDeclaration
| PropertiesBlock
)* "}" )? ";" ) ) |
PropertyDeclaration |
::= |
<PROPERTY> parse_PropertyDescription
";" |
PropertiesBlock |
::= |
<PROPERTIES> "{" ( parse_PropertyDescription
( ";" parse_PropertyDescription
| ";" )* )? "}" ( ";" )? |
parse_PropertyDescription |
::= |
( <PROPERTY> )? <IDENTIFIER> (
":" PropertyTypeDescription
)? ( "=" PropertyValueDeclaration
)? ( <PROPBEGIN> parse_PropertyDescription
( ";" parse_PropertyDescription
| ";" )* <PROPEND> | <PROPBEGIN> <PROPEND> )? |
PropertyTypeDeclaration |
::= |
<PROPERTY> <TYPE>
<IDENTIFIER> ( "=" ( <INT> ";" | <FLOAT> ";" |
<STRING> ";" | <BOOLEAN> ";" | <ENUM> ( "{"
<IDENTIFIER> ( "," <IDENTIFIER> )* "}" )? ";" | <SET> (
"{" "}" )? ";" | <SET> "{" PropertyTypeDescription
"}" ";" | <SEQUENCE> ( "<" ">" )? ";" | <SEQUENCE>
"<" PropertyTypeDescription
">" ";" | <RECORD> "[" parse_RecordFieldDescription
( ";" parse_RecordFieldDescription
| ";" )* "]" ";" | <RECORD> ( "[" "]" )? ";" | <IDENTIFIER>
";" ) ) |
PropertyTypeDescription |
::= |
<ANY> |
|
| |
<INT> |
|
| |
<FLOAT> |
|
| |
<STRING> |
|
| |
<BOOLEAN> |
|
| |
<SET> ( "{" ( PropertyTypeDescription
)? "}" )? |
|
| |
<SEQUENCE> ( "<" ( PropertyTypeDescription
)? ">" )? |
|
| |
<RECORD> "[" parse_RecordFieldDescription
( ";" parse_RecordFieldDescription
| ";" )* "]" |
|
| |
<RECORD> ( "[" "]" )? |
|
| |
<ENUM> ( "{" <IDENTIFIER> ( ","
<IDENTIFIER> )* "}" )? |
|
| |
<ENUM> ( "{" "}" )? |
|
| |
lookup_PropertyTypeByName |
parse_RecordFieldDescription |
::= |
<IDENTIFIER> ( "," <IDENTIFIER>
)* ( ":" PropertyTypeDescription
)? |
PropertyValueDeclaration |
::= |
<INTEGER_LITERAL> |
|
| |
<FLOATING_POINT_LITERAL> |
|
| |
<STRING_LITERAL> |
|
| |
<FALSE> |
|
| |
<TRUE> |
|
| |
AcmeSetValue |
|
| |
AcmeSequenceValue |
|
| |
AcmeRecordValue |
|
| |
<IDENTIFIER> |
AcmeSetValue |
::= |
"{" "}" |
|
| |
"{" PropertyValueDeclaration
( "," PropertyValueDeclaration
)* "}" |
AcmeSequenceValue |
::= |
"<" ">" |
|
| |
"<" PropertyValueDeclaration
( "," PropertyValueDeclaration
)* ">" |
AcmeRecordValue |
::= |
( "[" RecordFieldValue
( ";" RecordFieldValue
| ";" )* "]" | "[" "]" ) |
RecordFieldValue |
::= |
<IDENTIFIER> ( ":" PropertyTypeDescription
)? "=" PropertyValueDeclaration |
RepresentationDeclaration |
::= |
<REPRESENTATION> ( <IDENTIFIER>
"=" )? "{" SystemDeclaration
( BindingsMapDeclaration
)? "}" ( ";" )? |
BindingsMapDeclaration |
::= |
<BINDINGS> "{" ( BindingDeclaration
)* "}" ( ";" )? |
BindingDeclaration |
::= |
( <IDENTIFIER> "." )?
<IDENTIFIER> "to" ( <IDENTIFIER> "." )? <IDENTIFIER> (
"{" ( PropertyDeclaration
| PropertiesBlock
)* "}" )? ";" |
DesignAnalysisDeclaration |
::= |
( ( <EXTERNAL> ( <DESIGN> )?
<ANALYSIS> <IDENTIFIER> "(" FormalParams
")" ":" ( PropertyTypeDescription
| <COMPONENT> | <GROUP> | <CONNECTOR> | <PORT> |
<ROLE> | <SYSTEM> | <ELEMENT> | <TYPE> ) "=" JavaMethodCallExpr
";" ) | ( ( <DESIGN> )? <ANALYSIS> <IDENTIFIER> "(" FormalParams
")" ":" ( PropertyTypeDescription
| <COMPONENT> | <GROUP> | <CONNECTOR> | <PORT> |
<ROLE> | <SYSTEM> | <ELEMENT> | <TYPE> ) "=" DesignRuleExpression
";" ) ) |
parse_DesignRule |
::= |
( <DESIGN> )? ( <INVARIANT> |
<HEURISTIC> ) DesignRuleExpression
( <PROPBEGIN> parse_PropertyDescription
( ";" parse_PropertyDescription
| ";" )* <PROPEND> )? ";" |
DesignRuleExpression |
::= |
QuantifiedExpression |
|
| |
BooleanExpression |
QuantifiedExpression |
::= |
( ( <FORALL> | <EXISTS> (
<UNIQUE> )? ) <IDENTIFIER> ( ( ":" | <SET_DECLARE> ) (
Type
| lookup_arbitraryTypeByName
) )? <IN> ( SetExpression
| Reference
) "|" DesignRuleExpression
) |
BooleanExpression |
::= |
OrExpression
( <AND> OrExpression
)* |
OrExpression |
::= |
ImpliesExpression
( <OR> ImpliesExpression
)* |
ImpliesExpression |
::= |
IffExpression
( <IMPLIES> IffExpression
)* |
IffExpression |
::= |
EqualityExpression
( <IFF> EqualityExpression
)* |
EqualityExpression |
::= |
RelationalExpression
( <EQ> RelationalExpression
| <NE> RelationalExpression
)* |
RelationalExpression |
::= |
AdditiveExpression
( "<" AdditiveExpression
| ">" AdditiveExpression
| <LE> AdditiveExpression
| <GE> AdditiveExpression
)* |
AdditiveExpression |
::= |
MultiplicativeExpression
( <PLUS> MultiplicativeExpression
| <MINUS> MultiplicativeExpression
)* |
MultiplicativeExpression |
::= |
UnaryExpression
( <STAR> UnaryExpression
| <SLASH> UnaryExpression
| <REM> UnaryExpression
)* |
UnaryExpression |
::= |
<BANG> UnaryExpression |
|
| |
<MINUS> UnaryExpression |
|
| |
PrimitiveExpression |
PrimitiveExpression |
::= |
"(" DesignRuleExpression
")" |
|
| |
LiteralConstant |
|
| |
Reference |
|
| |
SetExpression |
Reference |
::= |
<IDENTIFIER> ( ( "."
<IDENTIFIER> ) | ( "." <TYPE> ) | ( "." <COMPONENTS> ) |
( "." <CONNECTORS> ) | ( "." <PORTS> ) | ( "." <ROLES> )
| ( "." <MEMBERS> ) | ( "." <PROPERTIES> ) | ( "."
<REPRESENTATIONS> ) | ( "." <ATTACHEDPORTS> ) | ( "."
<ATTACHEDROLES> ) )* ( "(" ActualParams
")" )? |
JavaMethodCallExpr |
::= |
<IDENTIFIER> ( "." <IDENTIFIER>
)* "(" ActualParams
")" |
LiteralConstant |
::= |
( <INTEGER_LITERAL> ) |
|
| |
( <FLOATING_POINT_LITERAL> ) |
|
| |
( <STRING_LITERAL> ) |
|
| |
( <TRUE> ) |
|
| |
( <FALSE> ) |
|
| |
( <COMPONENT> ) |
|
| |
( <GROUP> ) |
|
| |
( <CONNECTOR> ) |
|
| |
( <PORT> ) |
|
| |
( <ROLE> ) |
|
| |
( <SYSTEM> ) |
|
| |
( <ELEMENT> ) |
|
| |
( <PROPERTY> ) |
|
| |
( <INT> ) |
|
| |
( <FLOAT> ) |
|
| |
( <STRING> ) |
|
| |
( <BOOLEAN> ) |
|
| |
( <ENUM> ) |
|
| |
( <SET> ) |
|
| |
( <SEQUENCE> ) |
|
| |
( <RECORD> ) |
ActualParams |
::= |
( ActualParam
( "," ActualParam
)* )? |
FormalParams |
::= |
( FormalParam
( "," FormalParam
)* )? |
ActualParam |
::= |
DesignRuleExpression |
FormalParam |
::= |
<IDENTIFIER> ( "," <IDENTIFIER>
)* ":" ( <ELEMENT> | <SYSTEM> | <COMPONENT> |
<CONNECTOR> | <PORT> | <ROLE> | <TYPE> |
<PROPERTY> | <REPRESENTATION> | <ANY> | NonPropertySetTypeExpression
| PropertyTypeDescription
) |
NonPropertySetTypeExpression |
::= |
<SET> "{" ( <ELEMENT> |
<SYSTEM> | <COMPONENT> | <CONNECTOR> | <PORT> |
<ROLE> | <TYPE> | <PROPERTY> | <REPRESENTATION> |
<ANY> ) "}" |
SetExpression |
::= |
( LiteralSet
| SetConstructor
) |
LiteralSet |
::= |
( "{" "}" | "{" ( LiteralConstant
| Reference
) ( "," ( LiteralConstant
| Reference
) )* "}" ) |
SetConstructor |
::= |
( "{" <SELECT> <IDENTIFIER> (
":" lookup_arbitraryTypeByName
)? <IN> ( SetExpression
| Reference
) "|" DesignRuleExpression
"}" | ( "{" <COLLECT> <IDENTIFIER> "." <IDENTIFIER> ":"
lookup_arbitraryTypeByName
"." lookup_arbitraryTypeByName
<IN> ( SetExpression
| Reference
) "|" DesignRuleExpression
"}" ) ) |
RecordType |
::= |
<RECORD> "[" RecordItem
( "," RecordItem
)* "]" |
RecordItem |
::= |
<IDENTIFIER> ":" Type |
SetType |
::= |
<SET> "{" Type
"}" |
SequenceType |
::= |
<SEQUENCE> "{" Type
"}" |
Signature |
::= |
Type
"<->" Type |
Type |
::= |
( <IDENTIFIER> ( "."
<IDENTIFIER> )* ) |
PrimitiveType |
::= |
<COMPONENT> |
|
| |
<GROUP> |
|
| |
<CONNECTOR> |
|
| |
<PORT> |
|
| |
<ROLE> |
|
| |
<SYSTEM> |
Element |
::= |
( <IDENTIFIER> ( "."
<IDENTIFIER> )* ) |
|
| |
CompoundElement |
CompoundElement |
::= |
Set |
|
| |
Record |
|
| |
Sequence |
Set |
::= |
"{" Element
( "," Element
)* "}" |
Record |
::= |
"[" <IDENTIFIER> "=" Element
( "," <IDENTIFIER> "=" Element
)* "]" |
Sequence |
::= |
"<" Element
( "," Element
)* ">" |