MOML Grammar ============ This is the full abstract grammar of MOML: .. code-block:: bnf ::= | [] * ::= | ‘model_type’ MODEL-TYPE ::= | | | | | | | ::= | ‘metadata’ ‘:’ INDENT * DEDENT ::= | [‘transient’] ‘variable’ IDENTIFIER ‘:’ [‘:=’ ] [] ::= | ‘constant’ IDENTIFIER ‘:’ [‘:=’ ] [] ::= | ‘action’ IDENTIFIER [‘(’ [ [(‘,’ )+]] ‘)’] [] ::= | ‘automaton’ IDENTIFIER ‘:’ INDENT * DEDENT ::= | ‘network’ [IDENTIFIER] ‘:’ INDENT * DEDENT ::= | ‘property’ IDENTIFIER ‘:=’ [] ::= | ‘:’ ::= | [] ::= | | | ::= | | | ::= | [‘initial’] ‘location’ IDENTIFIER [‘:’ INDENT * DEDENT] ::= | ‘invariant’ | ::= | ‘edge’ ‘from’ IDENTIFIER ‘:’ INDENT * DEDENT ::= | ‘action’ IDENTIFIER | ‘guard’ [] | ‘rate’ [] | ‘to’ IDENTIFIER [‘:’ INDENT * DEDENT] ::= | ‘probability’ [] | ::= | ‘assign’ [/\d+/] IDENTIFIER ‘:=’ ::= | ‘instance’ IDENTIFIER IDENTIFIER [‘:’ INDENT * DEDENT] ::= | ‘input’ ‘enable’ IDENTIFIER [‘,’ IDENTIFIER] ::= | ‘restrict’ ‘initial’ ::= | ‘composition’ IDENTIFIER [‘|’ IDENTIFIER] [‘:’ INDENT * DEDENT] ::= | ‘synchronize’ [(‘|’ )+] (‘->’ | ‘→’) ::= | IDENTIFIER [‘(’ [IDENTIFIER [(‘,’ IDENTIFIER)+]] ‘)’] | ‘-’ | ‘τ’ ::= | | IDENTIFIER ‘(’ [ [‘,’ ]] ‘)’ | IDENTIFIER | | | ‘?’ ‘:’ ::= | ‘true’ | ‘false’ | /[0-9]+/ ‘.’ /[0-9]+/ | ‘real[’ ‘]’ | /[0-9]+/ ::= | ‘¬’ | ‘not’ ::= | ‘∨’ | ‘or’ | ‘∧’ | ‘and’ | ‘⊕’ | ‘xor’ | ‘⇒’ | ‘==>’ | ‘⇔’ | ‘<=>’ | ‘=’ | ‘!=’ | ‘≠’ | ‘<’ | ‘≤’ | ‘≥’ | ‘>’ | ‘+’ | ‘-’ | ‘*’ | ‘%’ | ‘/’ | ‘//’ ::= | | … TODO … ::= | ‘"’ /([^"]|\")/ ‘"’ ::= | ‘"’ /([^"]|\")/ ‘"’ ::= | | | ::= | ‘bool’ | ::= | ‘int’ | ‘real’ | ‘clock’ | ‘continuous’ ::= | ‘[’ ‘,’ ‘]’ ::= | ‘[]’ If the model type is omitted the file must not contain anything else than property definitions. This allows to separate property and model definitions.