designFile | ::= | ( designItem )+ |
designItem | ::= | ( <LIBRARY> reference <SEPARATOR> )? ( useClauses )? ( packageItem | facetItem | domainItem | componentItem | interactionItem ) |
operatorLabel | ::= | ( ( <MINUS> | <DOLLAR> | <HASH> | <PERCENT> | <TILDA> | <NOT> ) <OPFORMER> | <OPFORMER> <TICK> | <OPFORMER> ( <AND> | <AT> | <IN> | <QUOTIENT> | <DIVIDE> | <EQEQ> | <EQUAL> | <EXPONENT> | <GREATER> | <GREATEREQUAL> | <IMPLIES> | <IMPLIEDBY> | <LESS> | <LESSEQUAL> | <MAX> | <MIN> | <MINUS> | <MULTIPLY> | <NAND> | <NMAX> | <NMIN> | <NOR> | <NOTEQUAL> | <OR> | <PLUS> | <XNOR> | <XOR> | <SUB> | <PLUSPLUS> | <MINUSMINUS> | <STARSTAR> | <CATENATION> | <TRIPLEGT> | <AMPERSAND> ) <OPFORMER> ) |
reservedLabel | ::= | ( <ENUMERATION> | <FACET> | <COMPONENT> | <DOMAIN> | <INTERACTION> | <PACKAGE> | <SEL> | <EXISTS> | <FORALL> | <RAN> | <SET> | <SEQUENCE> | <ARRAY> | <TYPE> | <SUBTYPE> ) |
label | ::= | <IDENTIFIER> |
domainLabel | ::= | ( label | reservedLabel | operatorLabel ) |
parameterMode | ::= | <IDENTIFIER> |
reference | ::= | ( label | reservedLabel | operatorLabel ) ( <DOT> ( label | reservedLabel | operatorLabel ) )* |
standardItemDeclarations | ::= | label ( ( <COMMA> label )+ | ( <LPAREN> ( functionParameterList )? <RPAREN> ) )? standardItemTail |
domainItemDeclarations | ::= | domainLabel ( ( <COMMA> domainLabel )+ | ( <LPAREN> ( functionParameterList )? <RPAREN> ) )? standardItemTail |
standardItemTail | ::= | <MEMBER> ( ( <TYPE> | ( <SUBTYPE> | <SET> | <ARRAY> | <SEQUENCE> ) expression ) | expression ) ( <IS> ( enumeratedType | constructedTypeExpression | expression ) )? <SEPARATOR> |
useClauses | ::= | ( <USE> reference ( parameterList )? ( <COMMA> reference ( parameterList )? )* <SEPARATOR> )+ |
packageItem | ::= | <PACKAGE> label packageValue ( label )? <SEPARATOR> |
packageValue | ::= | <LPAREN> ( packageParameterList )? <RPAREN> <MEMBER> ( <NULL> | facetEquation ) <IS> ( packageExports )* <BEGIN> ( packageDeclaration | packageExports )* <END> ( <PACKAGE> )? |
packageParameterList | ::= | facetParameterList |
packageDeclaration | ::= | ( designItem | standardItemDeclarations ) |
packageExports | ::= | facetExports |
domainItem | ::= | <DOMAIN> label domainValue ( label )? <SEPARATOR> |
domainValue | ::= | <LPAREN> ( domainParameterList )? <RPAREN> <MEMBER> ( <NULL> | facetEquation ) <IS> ( domainDeclaration | domainExports )* <BEGIN> ( domainTerm )* <END> ( <DOMAIN> )? |
domainParameterList | ::= | facetParameterList |
domainDeclaration | ::= | ( domainItem | facetItem | domainItemDeclarations ) |
domainExports | ::= | facetExports |
domainTerm | ::= | facetTerm |
interactionItem | ::= | <INTERACTION> label interactionValue ( label )? <SEPARATOR> |
interactionValue | ::= | <LPAREN> ( interactionParameterList )? <RPAREN> <MEMBER> ( ( <NULL> | <INTERACTION> ) | facetEquation ) <IS> ( interactionDeclaration | interactionExports )* <BEGIN> ( interactionTerm )* <END> ( <INTERACTION> )? |
interactionParameterList | ::= | facetParameterList |
interactionDeclaration | ::= | ( designItem | standardItemDeclarations ) |
interactionExports | ::= | facetExports |
interactionTerm | ::= | facetTerm |
componentItem | ::= | <COMPONENT> label componentValue ( label )? <SEPARATOR> |
componentValue | ::= | <LPAREN> ( componentParameterList )? <RPAREN> <MEMBER> ( <NULL> | facetEquation ) <IS> ( componentDeclaration | componentExports )* <BEGIN> <ASSUMPTION> ( facetValue | <IS> facetEquation | ( facetTerm )* ) ( <END> )? ( <ASSUMPTION> )? <SEPARATOR> <DEFINITION> ( facetValue | <IS> facetEquation | ( facetTerm )* ) ( <END> )? ( <DEFINITION> )? <SEPARATOR> <IMPLICATION> ( facetValue | <IS> facetEquation | ( facetTerm )* ) ( <END> )? ( <IMPLICATION> )? <SEPARATOR> <END> ( <COMPONENT> )? |
componentParameterList | ::= | facetParameterList |
componentDeclaration | ::= | standardItemDeclarations |
componentExports | ::= | facetExports |
facetItem | ::= | <FACET> label facetValue ( label )? <SEPARATOR> |
facetValue | ::= | <LPAREN> ( facetParameterList )? <RPAREN> <MEMBER> ( <NULL> | facetEquation ) <IS> ( facetDeclaration | facetExports )* <BEGIN> ( facetTerm )* <END> ( <FACET> )? |
facetParameterList | ::= | label ( <COMMA> label )* <MEMBER> ( parameterMode expression | expression ) ( <SEPARATOR> facetParameterList )? |
facetDeclaration | ::= | ( designItem | standardItemDeclarations ) |
facetExports | ::= | ( <EXPORT> <ALL> <SEPARATOR> | ( <EXPORT> reference ( <COMMA> reference )* <SEPARATOR> )+ ) |
facetTerm | ::= | ( label <COLON> expression | <LET> <LPAREN> letParameterList <RPAREN> <IN> ( facetTerm )* <END> <LET> ) <SEPARATOR> |
facetEquation | ::= | expression |
facetInnerEquation | ::= | ( <NOT> )? reference ( <AND> ( <NOT> )? reference )* |
expression | ::= | eqExpression ( ( <EQEQ> | <TRIPLEGT> | <AMPERSAND> ) eqExpression )* |
eqExpression | ::= | opExpression ( ( <EQUAL> | <NOTEQUAL> ) opExpression )* |
opExpression | ::= | boolExpression ( ( <IMPLIES> | <IMPLIEDBY> | <MAX> | <NMAX> | <OR> | <NOR> | <XOR> | <XNOR> ) boolExpression )* |
boolExpression | ::= | ordExpression ( ( <AND> | <NAND> | <MIN> | <NMIN> ) ordExpression )* |
ordExpression | ::= | arithExpression ( ( <GREATER> | <GREATEREQUAL> | <LESS> | <LESSEQUAL> ) arithExpression )* |
arithExpression | ::= | multExpression ( ( <PLUS> | <MINUS> | <PLUSPLUS> | <MINUSMINUS> | <STARSTAR> | <CATENATION> ) multExpression )* |
multExpression | ::= | exponentExpression ( ( <MULTIPLY> | <DIVIDE> | <QUOTIENT> ) exponentExpression )* |
exponentExpression | ::= | unaryExpression ( ( <EXPONENT> | <IN> | <SUB> ) unaryExpression )* |
unaryExpression | ::= | ( <NOT> | <MINUS> | <TILDA> | <HASH> | <DOLLAR> | <PERCENT> )? applicationExpression |
applicationExpression | ::= | unionExpression ( ( parameterList | squareBraceValue ) )* |
unionExpression | ::= | primaryExpression |
primaryExpression | ::= | ( unnamedFunction | letExpression | ifExpression | parenExpression | setValue | arrayValue | quantifierFunctionExpression | literal | atTickExpression ) |
literal | ::= | ( <FLOAT_LITERAL> | <INTEGER_LITERAL> | <BASED_LITERAL> | <SINGLE_CHARACTER_LITERAL> | <UNICODE_CHARACTER_LITERAL> | <STRING_LITERAL> ) |
parenExpression | ::= | <LPAREN> expression <RPAREN> |
parameterList | ::= | <LPAREN> ( ( expression | <UNDERSCORE> ) ( <COMMA> ( expression | <UNDERSCORE> ) )* )? <RPAREN> |
squareBraceValue | ::= | <LSQUARE> expression <RSQUARE> |
arrayValue | ::= | <LSQUARE> ( expression ( <COMMA> expression )* )? <RSQUARE> |
setValue | ::= | <LBRACE> ( expression ( <COMMA> expression )* )? <RBRACE> |
unnamedFunction | ::= | <LFUNCDELIMITER> <LPAREN> ( functionParameterList )? <RPAREN> <MEMBER> expression ( <IS> expression )? <RFUNCDELIMITER> |
functionParameterList | ::= | label ( <COMMA> label )* <MEMBER> expression ( <SEPARATOR> functionParameterList )? |
atTickExpression | ::= | reference ( <TICK> | <AT> primaryExpression )? |
letExpression | ::= | <LET> <LPAREN> letParameterList <RPAREN> <IN> expression <END> <LET> |
letParameterList | ::= | label <MEMBER> expression <BE> expression ( <COMMA> label <MEMBER> expression <BE> expression )* |
ifExpression | ::= | <IF> expression <THEN> expression ( ( <ELSEIF> | <ELSIF> ) expression <THEN> expression )* ( <ELSE> expression )? <END> <IF> |
caseExpression | ::= | <CASE> expression <IS> expression <ARROW> expression ( <PIPE> expression <ARROW> expression )* <END> <CASE> |
quantifierFunctionExpression | ::= | ( <FORALL> | <EXISTS> | <SEL> | <RAN> | <MIN> | <MAX> ) <LPAREN> ( quantifierFunctionParameterList )? <PIPE> expression <RPAREN> |
quantifierFunctionParameterList | ::= | functionParameterList |
enumeratedType | ::= | <ENUMERATION> <LSQUARE> ( literal | label ) ( <COMMA> ( literal | label ) )* <RSQUARE> |
constructedTypeExpression | ::= | <DATA> label ( <LPAREN> constructedParameterList <RPAREN> )? <MEMBER> label ( <PIPE> label ( <LPAREN> constructedParameterList <RPAREN> )? <MEMBER> label )* |
constructedParameterList | ::= | label <MEMBER> expression ( <SEPARATOR> label <MEMBER> expression )* |