BNF for Scanner.jj

NON-TERMINALS

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 )*