diff --git a/.gitignore b/.gitignore index b4874ece2..cc555c854 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ dependency-reduced-pom.xml # MacOS Finder .DS_Store +# Generated Python files +*.pyc diff --git a/tool-support/bnf_grammar_tools/.gitignore b/tool-support/bnf_grammar_tools/.gitignore new file mode 100644 index 000000000..ab3023ea6 --- /dev/null +++ b/tool-support/bnf_grammar_tools/.gitignore @@ -0,0 +1,3 @@ +build/ +dist/ +scratch/ diff --git a/tool-support/bnf_grammar_tools/README.adoc b/tool-support/bnf_grammar_tools/README.adoc new file mode 100644 index 000000000..0f17c09ed --- /dev/null +++ b/tool-support/bnf_grammar_tools/README.adoc @@ -0,0 +1,190 @@ += bnf_grammar_tools + +Tools that process KerML and SysML2 concrete language grammars from their respective specifications, check them for correctness and generates two kinds of grammar listings: (1) machine-readable plain text BNF files and (2) human-readable hyperlinked BNF files in HTML format. + +== Usage of the Tools + +=== Obtain a Complete KerML or SysML Specification in HTML Source Format + +Instructions on how to export a selected version of the specification from View Editor to a self-standing HTML file. + +> Note: These instructions are tested with View Editor version 4 with the FireFox browser v130.0.1 on Windows 11. In other browsers the menu or key to inspect the source code may be different. + +1. Open the selected spec in View Editor. +2. Load the full document by clicking the "Full Document" icon (image:VE-full-document-icon.png[]) at the top of the left panel. This may take several minutes. +3. Click the print icon, image:VE-print-icon.png[] left next to the EXPORT icon at the top of the document panel. +4. Wait for a new browser tab to appear with the complete HTML document and a popup print dialog. Again, be patient, this may take several minutes. +5. Cancel the popup print dialog. +6. In the complete HTML document tab, open a Developer / Inspector panel via menu *More tools > Web Developer Tools* or by hitting `Ctrl+Shift+I`. (Note: a direct *Save page as ...* or `Ctlr+S` does not work, as it saves a script.) +7. In the Inspector tab of the Developer panel, right-click the top level `` element, and select *Copy > Outer HTML* from the context menu. +8. Open a new, appropriately named `.html` file in a text editor, paste the contents and save. +9. Close the complete HTML document tab. + +=== Install the Python Environment + +Ensure that Python version 3.8 or higher is installed on your machine. The most convenient way is to use the https://www.jetbrains.com/pycharm/[PyCharm] tool. Create a dedicated `conda` or `venv` development environment and activate it. The best tool to install a Python base environment is https://github.com/conda-forge/miniforge[miniforge]. + +After installation check the active Python version, e.g.: + +[source,shell] +---- + $ python --version + Python 3.12.12 +---- + +Also ensure that the latest version of the following packages are installed. You can use `pip` or `conda` or `mamba`. + +* Package https://pypi.org/project/beautifulsoup4/[beautifulsoup4] is used to parse the HTML input file. +* Package https://pypi.org/project/lark/[lark] is used to parse and verify the extracted BNF source. +* Package https://pypi.org/project/pytest/[pytest] is used to run unit tests. + +for example with the following commands: + +[source,shell] +---- + $ pip install beautifulsoup4 + $ pip install lark + $ pip install pytest +---- + +=== Run the bnf_grammar_processor + +The usage info for the `bnf_grammar_processor` is as below, as usual obtained with the `-h` or `--help` option. +Go to the `tool-support/bnf_grammar_tools` directory and run `python .\bnf_grammar\bnf_grammar_processor.py -h`. + +[source,shell] +---- +usage: python bnf_grammar_processor [-h] [-i [INPUT_DIR]] [-o [OUTPUT_DIR]] SOURCE_DATA + +Extract or parse textual and/or graphical grammars from given KerML or SysML specifications and generate plain text and html BNF grammar files. + +positional arguments: + SOURCE_DATA JSON file defining source data - see examples under + the tests directory + +options: + -h, --help show this help message and exit + -i [INPUT_DIR], --input-dir [INPUT_DIR] + input directory path + -o [OUTPUT_DIR], --output-dir [OUTPUT_DIR] + output directory path + +The processor supports to two main capabilities: +1) Extract the KerML or SysML grammar(s) + from provided raw .html file(s) exported from KerML and SysML specifications in the View Editor tool, + and then validate the extracted grammars, report possible errors, and generate these outputs: + - .json dumps of the processed intermediate data model(s), + - .kebnf and/or .kgbnf plain text files, + - -marked_up.kebnf and/or -marked_up.kgbnf marked up text files, that can be used as a basis for corrected grammars, + - .html files with hyperlinked, human-readable versions of the grammars. +2) Validate corrected -marked_up.kebnf or -marked_up.kgbnf input files + and generate the same files as under 1), but now for the corrected grammars. + +Option 2) is selected when the input filename(s) end on '-marked_up.kebnf' or '-marked_up.kgbnf', otherwise option 1). +Both options will produce a log file named 'bnf_grammar_processor.log' in the working directory. +In SOURCE_DATA the input files should be given in reverse dependendy order, i.e., first KerML textual, then SysML textual, then SysML graphical notation. +Via diff'ing of the extracted and corrected .kebnf and/or .kgbnf files a list of corrections to be fed into the OMG issue trackers can be compiled. +---- + +Note. The file extensions `.kebnf` and `.kgbnf` are inspired by the `.kpar` extension for the KerML archive files. + +The BNF grammars are defined in the format of the https://github.com/lark-parser/lark[Lark] parsing toolkit for Python. The definitions are in: + +* `bnf_grammar/kebnf_textual_grammar.lark`, and, +* `bnf_grammar/kgbnf_graphical_grammar.lark`. + +Inside the `bnf_grammar_processer` Lark is used to check each production individually. Some additional heuristic validation is also performed to permit processing of incorrect grammar or note fragments. All diagnostics are reported in the `bnf_grammar_processor.log` file. For the graphical grammar this includes a mapping table between the existing (PNG) images in the specs from the View Editor source and the new SVG images in `images` subdirectory. + +.Example command line arguments +For the time being, example input and output directories with `SOURCE_DATA` files can be found under the `tests` folder. + +For option 1): + +- `INPUT_DIR` = `tests/KerML_and_SysML_spec_sources` +- `OUTPUT-DIR` = `tests/KerML_and_SysML_grammars` +- `SOURCE_DATA` = `source_specs.json` (in `INPUT_DIR`) + +The style information for the generated HTML outputs resides in `tests/KerML_and_SysML_grammars/bnf_styles.css`. + +For option 2): + +- `INPUT_DIR` = `tests/KerML_and_SysML_grammars` +- `OUTPUT-DIR` = `tests/KerML_and_SysML_grammars` +- `SOURCE_DATA` = `source_marked_ups.json` (in `INPUT_DIR`) + +.Example generated outputs for option 1) (extract) +The bnf_grammar_processor with produces the following outputs (see directory `tests/KerML_and_SysML_grammars`): + +[cols="2,3"] +|=== +| `KerML-textual-bnf-elements.json` | dump of the processed intermediate data model(s) +| `KerML-textual-bnf.kebnf` | generated plain text KerML textual grammar file +| `KerML-textual-bnf-marked_up.kebnf` | generated editable marked up KerML textual grammar file +| `KerML-textual-bnf.html` | generated browsable, hyperlinked HTML KerML textual grammar file +| `SysML-textual-bnf-elements.json` | dump of the processed intermediate data model(s) +| `SysML-textual-bnf.kebnf` | generated plain text SysML textual grammar file +| `SysML-textual-bnf-marked_up.kebnf` | generated editable marked up SysML textual grammar file +| `SysML-textual-bnf.html` | generated browsable, hyperlinked HTML SysML textual grammar file +| `SysML-graphical-bnf-elements.json` | dump of the processed intermediate data model(s) +| `SysML-graphical-bnf.kgbnf` | generated plain text SysML graphical grammar file +| `SysML-graphical-bnf-marked_up.kgbnf` | generated editable marked up SysML textual grammar file +| `SysML-graphical-bnf.html` | generated browsable, hyperlinked HTML SysML textual grammar file (See Note) +|=== + +Note. The SVG images for the graphical BNF productions reside in `tests/KerML_and_SysML_grammars/images`. They are copied from the source in https://github.com/Systems-Modeling/Graphical-Specification-WG/tree/main/src/Graphical-BNF/_svg[Graphical-Specification-WG github repo]. + +Each run of the `bnf_grammar_processor` produces a log on the console and in file `bnf_grammar_processor.log`. The log of the previous run is saved in `bnf_grammar_processor.log.backup`, which can be used to detect differences between runs. + +=== Correct the Extracted Grammar Files and Reprocess with the bnf_grammar_processor + +If there are errors in the grammar files, the following workflow can be used to apply bulk corrections. + +. Copy `KerML-textual-bnf-marked_up.kebnf` to `KerML-textual-bnf-corrected-marked_up.kebnf` +. Copy `SysML-textual-bnf-marked_up.kebnf` to `SysML-textual-bnf-corrected-marked_up.kebnf` +. Copy `SysML-graphical-bnf-marked_up.kgbnf` to `SysML-graphical-bnf-corrected-marked_up.kgbnf` +. Check the errors in the log files, and modify the `...-corrected-marked_up.k*bnf` files in a text editor to correct the errors. +. After every couple of corrections, run the `bnf_grammar_processor` with the option 2) arguments. This will validate the corrected `.kebnf` and `.kgbnf` and generate the set of files described in the table below, similar to option 1) +. Iterate the steps 4 and 5, until satisfied. +. By making a diff between pairs of original (`...-bnf-marked_up.k*bnf`) and corrected (`...-bnf-corrected-marked_up.k*bnf`) files the required changes to be raised in OMG issues can be systematically compiled. + +.Example generated files for option 2) +[cols="2,3"] +|=== +| `KerML-textual-bnf-corrected-elements.json` | dump of the corrected intermediate data model(s) +| `KerML-textual-bnf-corrected.kebnf` | generated corrected plain text KerML textual grammar file +| `KerML-textual-bnf-corrected.html` | generated corrected browsable, hyperlinked HTML KerML textual grammar file +| `SysML-textual-bnf-corrected-elements.json` | dump of the processed intermediate corrected data model(s) +| `SysML-textual-bnf-corrected.kebnf` | generated corrected plain text SysML textual grammar file +| `SysML-textual-bnf-corrected.html` | generated corrected browsable, hyperlinked HTML SysML textual grammar file +| `SysML-graphical-bnf-corrected-elements.json` | dump of the corrected intermediate data model(s) +| `SysML-graphical-bnf-corrected.kgbnf` | generated corrected plain text SysML graphical grammar file +| `SysML-graphical-bnf-corrected.html` | generated corrected browsable, hyperlinked HTML SysML textual grammar file +|=== + +=== Use the bnf_file_parser for Final Checks + +As a final check the `bnf_file_parser` can be used to validate complete, corrected BNF grammar files. + +The usage info for the `bnf_file_parser` is as below, as usual obtained with the `-h` or `--help` option. +Go to the `tool-support/bnf_grammar_tools` directory and run `python .\bnf_grammar\bnf_file_parser.py -h`. + +[source,shell] +---- +usage: bnf_file_parser [-h] BNF_PATH + +Parse KerML or SysML grammar files in textual or graphical BNF format. + +positional arguments: + BNF_PATH Path to plain text BNF file with extension .kebnf or .kgbnf + +options: + -h, --help show this help message and exit +---- + +Run `bnf_file_parser` on the following files: + +* `KerML-textual-bnf-corrected.kebnf` +* `SysML-textual-bnf-corrected.kebnf` +* `SysML-graphical-bnf-corrected.kgbnf` + +The console and the log file `bnf_file_parser.log` will list any errors still present. Otherwise, if the parse is completely successful, a dump of the resulting abstract syntax tree (in Lark's pretty print format) will be listed. diff --git a/tool-support/bnf_grammar_tools/VE-full-document-icon.png b/tool-support/bnf_grammar_tools/VE-full-document-icon.png new file mode 100644 index 000000000..709493157 Binary files /dev/null and b/tool-support/bnf_grammar_tools/VE-full-document-icon.png differ diff --git a/tool-support/bnf_grammar_tools/VE-print-icon.png b/tool-support/bnf_grammar_tools/VE-print-icon.png new file mode 100644 index 000000000..7089eedd7 Binary files /dev/null and b/tool-support/bnf_grammar_tools/VE-print-icon.png differ diff --git a/tool-support/bnf_grammar_tools/__init__.py b/tool-support/bnf_grammar_tools/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tool-support/bnf_grammar_tools/bnf_file_parser.log b/tool-support/bnf_grammar_tools/bnf_file_parser.log new file mode 100644 index 000000000..e69de29bb diff --git a/tool-support/bnf_grammar_tools/bnf_file_parser.log.backup b/tool-support/bnf_grammar_tools/bnf_file_parser.log.backup new file mode 100644 index 000000000..e69de29bb diff --git a/tool-support/bnf_grammar_tools/bnf_grammar/__init__.py b/tool-support/bnf_grammar_tools/bnf_grammar/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tool-support/bnf_grammar_tools/bnf_grammar/bnf_file_parser.py b/tool-support/bnf_grammar_tools/bnf_grammar/bnf_file_parser.py new file mode 100644 index 000000000..4e8ad4f22 --- /dev/null +++ b/tool-support/bnf_grammar_tools/bnf_grammar/bnf_file_parser.py @@ -0,0 +1,110 @@ +#!python + +""" +bnf_file_parser is a command line tool that parses a KerML or SysML plain text grammar file. + +The supported file formats are: +- .kebnf for a KerML or SysML textual notation grammar +- .kgbnf for a SysML graphical notation grammar + +Its usage is described below in the main() function. + +@author: Hans Peter de Koning (DEKonsult) + +Requirements: + +This tool requires installation of the following packages: +- lark (See https://pypi.org/project/lark) + +""" + +import sys +import os +import shutil +import argparse +from datetime import datetime, timezone +from typing import Optional +from lark import Lark, UnexpectedInput + +# Create logger for debug, info, warning, error, critical messages +import logging +LOGGER = logging.getLogger() + + +class BnfParser: + def __init__(self) -> None: + self.start_timestamp: Optional[datetime] = None + self.bnf_filepath: Optional[str] = None + self.parser: Optional[Lark] = None + + def parse(self, bnf_filepath: str) -> None: + self.start_timestamp = datetime.now(timezone.utc).isoformat(timespec="seconds").replace("+00:00", "Z") + self.bnf_filepath = bnf_filepath + + LOGGER.info(f"Started parsing {self.bnf_filepath} at {self.start_timestamp}") + + basename, ext = os.path.splitext(bnf_filepath) + grammar_file = None + if ext == ".kebnf": + grammar_file = "kebnf_textual_grammar.lark" + elif ext == ".kgbnf": + grammar_file = "kgbnf_graphical_grammar.lark" + else: + LOGGER.critical(f"Unrecognized file extension for BNF_PATH {bnf_filepath}, terminating ...") + sys.exit(1) + + self.parser = Lark.open(grammar_file, rel_to=__file__, parser="lalr") + + bnf_file = open(bnf_filepath, "r", encoding="utf-8") + bnf_input = bnf_file.read() + bnf_file.close() + + try: + parse_tree = self.parser.parse(bnf_input) + except UnexpectedInput as e: + LOGGER.error(f"Parse error in {self.bnf_filepath}:\n{e}") + else: + LOGGER.info(f"Parse completed successfully") + LOGGER.info(f"The resulting (AST) parse tree is:\n\n{parse_tree.pretty()}") + + +def main() -> None: + # Initialize logging + LOGGER.setLevel(logging.DEBUG) + formatter = logging.Formatter("%(levelname)-8s: %(message)s") + + console_handler = logging.StreamHandler() + console_handler.set_name("console") + console_handler.setLevel(logging.INFO) + console_handler.setFormatter(formatter) + LOGGER.addHandler(console_handler) + + log_file_name = "bnf_file_parser.log" + if os.path.exists(log_file_name): + # Create backup copy of the log-file to inspect differences between runs + shutil.copy2(log_file_name, log_file_name + ".backup") + + file_handler = logging.FileHandler(log_file_name, mode="w", encoding="utf-8") + file_handler.set_name("logfile") + file_handler.setLevel(logging.INFO) + file_handler.setFormatter(formatter) + LOGGER.addHandler(file_handler) + + LOGGER.debug(f"bnf_grammar_parser started in {os.getcwd()}") + + # Parse command line + parser = argparse.ArgumentParser( + prog="bnf_file_parser", + allow_abbrev=False, + description="Parse KerML or SysML grammar files in textual or graphical BNF format.") + parser.add_argument("bnf_path", metavar="BNF_PATH", type=str, help="Path to plain text BNF file with extension .kebnf or .kgbnf") + args = parser.parse_args() + LOGGER.debug(f"args={args}") + + # Run the parser + bnf_parser = BnfParser() + bnf_parser.parse(args.bnf_path) + + +if __name__ == "__main__": + main() diff --git a/tool-support/bnf_grammar_tools/bnf_grammar/bnf_grammar_processor.py b/tool-support/bnf_grammar_tools/bnf_grammar/bnf_grammar_processor.py new file mode 100644 index 000000000..db2d0cf75 --- /dev/null +++ b/tool-support/bnf_grammar_tools/bnf_grammar/bnf_grammar_processor.py @@ -0,0 +1,1431 @@ +#!python + +""" +bnf_grammar_processor is a command line tool that +1. can extract the textual and graphical BNF grammars from + exports of the KerML and SysML specifications in raw HTML format +2. can parse and validate (manually) corrected BNF grammar files. + +Detailed usage documentation is below in the main() function, +and also be obtained by running the tool with the --help option. + +@author: Hans Peter de Koning (DEKonsult) + +Requirements: +This tool requires installation of the following packages: +- beautifulsoup4 (See https://pypi.org/project/beautifulsoup4/) +- lark (See https://pypi.org/project/lark) +""" + +import os +import shutil +import sys +import json +import re +import argparse +from datetime import datetime, timezone +from dataclasses import dataclass, asdict +from enum import Enum, auto +from logging import Logger +from textwrap import wrap +from types import NoneType +from typing import Any, ClassVar, Iterable, Optional + +from bs4 import BeautifulSoup, Tag, PageElement, NavigableString + +from lark import Lark, Transformer, Tree, UnexpectedInput + +# Create logger for diagnostic messages at debug, info, warning, error and critical levels +import logging + +from lxml.html.defs import list_tags + +LOGGER: Logger = logging.getLogger() + +# Marker denoting start of a line comment in generated output +LINE_COMMENT_MARKER = "//" + +# Images directory to hold SVG images as part of graphical BNF productions +IMAGES_DIR = "images" + +# Scaling factor for right-sizing SVG images in graphical BNF productions +SVG_SCALING_FACTOR = 1.5 + + +class TokenKind(Enum): + TERMINAL = auto() + NON_TERMINAL = auto() + NOTE = auto() + EQUALS = auto() + COLON = auto() + IMAGE = auto() + INTERPUNCTION = auto() + WHITESPACE = auto() + LINE_COMMENT = auto() + + +class RenderMode(Enum): + HTML = auto() + TXT = auto() + +@dataclass +class Token: + kind: TokenKind = None + text: str = "" + + +@dataclass +class ListStackItem: + kind: str = "" + level: int = 0 + item_count: int = 0 + + +@dataclass +class Grammar: + name: str + production_names: set[str] + + +@dataclass +class GrammarElement: + """Abstract superclass for any element of the internal grammar metamodel""" + processor: ClassVar["GrammarProcessor"] + """the activated GrammarProcessor instance""" + clause_id: str + lines: list[str] + + def get_marked_up_txt(self) -> str: + LOGGER.error(f"GrammarElement.get_marked_up_txt() should be overridden in subclass {self.__class__.__name__}, never called.") + return "" + + def get_txt(self) -> str: + LOGGER.error(f"GrammarElement.get_txt() should be overridden in subclass {self.__class__.__name__}, never called.") + return "" + + def get_html(self) -> str: + rendered_lines = "\n".join(self.lines) + return f"
\n{rendered_lines}\n\n
\n" + + def get_as_dict(self) -> dict[str, Any]: + self_as_dict = asdict(self) + self_as_dict["@type"] = self.__class__.__name__ + return self_as_dict + + @staticmethod + def get_safe_anchor_id(candidate_anchor_id: str) -> str: + """ + Return safe anchor id for given candidate string. + + To avoid name collisions between PascalCase and UPPER_SNAKE_CASE identifiers, + append "_" to all uppercase tokens because the HTML anchor id attribute is not case-sensitive + """ + return f"{candidate_anchor_id}_" if candidate_anchor_id.isupper() else candidate_anchor_id + + +#dataclass +class Comment(GrammarElement): + def get_marked_up_txt(self) -> str: + return self.get_txt() + + def get_txt(self) -> str: + rendered_string = "\n".join(self.lines) + return f"{rendered_string}\n\n" + + def get_html(self) -> str: + if self.lines[0].startswith("<"): + rendered_string = "".join(self.lines) + else: + rendered_string = "
\n".join(self.lines) + return f"

{rendered_string}\n

\n" + + +@dataclass +class Info(GrammarElement): + source: str + timestamp: str + + def get_marked_up_txt(self) -> str: + return self.get_txt() + + def get_txt(self) -> str: + rendered_lines = [ + line_comment(f"Source document: {self.source}"), + line_comment(f"Generated by bnf_grammar_processor at: {self.timestamp}") + ] + [line_comment(x) for x in self.lines] + rendered_string = "".join(rendered_lines) + return f"{rendered_string}\n\n" + + def get_html(self) -> str: + rendered_lines = [ + f"{LINE_COMMENT_MARKER} Source document: {self.source}", + f"{LINE_COMMENT_MARKER} Generated by bnf_grammar_processor at: {self.timestamp}" + ] + [f"{LINE_COMMENT_MARKER} {x}" for x in self.lines] + rendered_string = "
\n".join(rendered_lines) + return f"

{rendered_string}\n

\n" + + +@dataclass +class Heading(GrammarElement): + def get_marked_up_txt(self) -> str: + return self.get_txt() + + def get_txt(self) -> str: + assert len(self.lines) == 1 + return f"{line_comment(self.lines[0])}\n" + + def get_html(self) -> str: + assert len(self.lines) == 1 + if self.clause_id: + anchor = f'' + level = self.clause_id.count(".") + 1 + else: + anchor = "" + level = 1 + html_string = f'{anchor}{LINE_COMMENT_MARKER} {self.lines[0]}\n' + return html_string + + +@dataclass +class Production(GrammarElement): + name: str + abstract_syntax_type: str + is_partial: bool = False + + def get_marked_up_txt(self) -> str: + return self.get_txt() + + def get_txt(self) -> str: + rendered_lines = "\n".join(self.lines) + return f"{rendered_lines}\n\n" + + def get_html(self) -> str: + # Resolve non-terminal references to create HTML hyperlinks + html_lines: list[str] = [] + # is_textual = self.processor.syntax_kind == "textual-bnf" + is_graphical = self.processor.syntax_kind == "graphical-bnf" + for html_line in self.lines: + tokens = GrammarProcessor.tokenize(html_line) + # TODO: Refactor term resolution using the Lark grammar parsing instead of the tokenize function + pieces = [] + for token in tokens: + is_hyperlink_resolved = False + if token.kind == TokenKind.NON_TERMINAL: + if token.text == self.name: + # Do not link to own production + pass + elif token.text == self.abstract_syntax_type: + # TODO: Link abstract syntax term to declaration in KERML.kerml or SYSML.sysml standard library + # Do not link to abstract syntax term + pass + elif is_pascal_case(token.text) or is_upper_snake_case(token.text) or (is_graphical and is_lower_kebab_case(token.text)): + # Try to resolve hyperlink to identifier in reverse order of known grammars + for grammar in reversed(self.processor.grammars): + if token.text in grammar.production_names: + # Production declaration found, so add hyperlink to declaration anchor + # The hyperlink works if other HTML grammar files are in the same directory as the current one + html_path = "" if grammar.name == self.processor.bnf_path else f"{grammar.name}.html" + anchor_id = self.get_safe_anchor_id(token.text) + pieces.append(f'{token.text}') + is_hyperlink_resolved = True + break + if not is_hyperlink_resolved: + # Record unresolved non-terminal and line where it occurred + if token.text not in self.processor.unresolved_non_terminals_dict: + self.processor.unresolved_non_terminals_dict[token.text] = [] + self.processor.unresolved_non_terminals_dict[token.text].append(f"{self.clause_id}: {html_line}") + else: + # Do not link to symbol or terminal or property + pass + + if not is_hyperlink_resolved: + pieces.append(token.text) + # end of token loop + + html_lines.append("".join(pieces)) + + # Construct HTML hyperlinked markup + rendered_lines = "\n".join(html_lines) + if self.is_partial: + production_anchor = "" + else: + anchor_id = self.get_safe_anchor_id(self.name) + production_anchor = f'\n' + hyperlinked_production = f"{production_anchor}
{rendered_lines}\n
\n" + return hyperlinked_production + + +@dataclass +class Image(GrammarElement): + def get_marked_up_txt(self) -> str: + return self.get_txt() + + def get_txt(self) -> str: + rendered_lines = "\n".join(self.lines) + return f"{rendered_lines}\n" + + def get_html(self) -> str: + rendered_lines = "\n".join(self.lines) + return f"{rendered_lines}\n" + + +@dataclass +class NoteRef(GrammarElement): + def get_marked_up_txt(self) -> str: + return self.get_txt() + + def get_txt(self) -> str: + rendered_lines = "".join(self.lines) + return f"{line_comment(rendered_lines)}\n" + + def get_html(self) -> str: + rendered_lines = "".join(self.lines) + return f"

{line_comment(rendered_lines, False)}

\n" + + +@dataclass +class NoteList(GrammarElement): + html_snippet: str + + def get_marked_up_txt(self) -> str: + list_tag_pattern = re.compile(r"(<(ol|ul|li)>)") + snippet_with_linebreaks = list_tag_pattern.sub(r"\n\1", self.html_snippet).strip() + rendered_lines = ["Notes:"] + rendered_lines += snippet_with_linebreaks.split("\n") + comment_prefix = f"{LINE_COMMENT_MARKER} " + rendered_string = comment_prefix + f"\n{comment_prefix}".join(rendered_lines) + "\n\n" + return rendered_string + + def get_txt(self) -> str: + rendered_lines = ["Notes:"] + rendered_lines += render_nested_lists(self.html_snippet, mode=RenderMode.TXT, apply_line_comment=False).split("\n") + rendered_string = block_comment(rendered_lines) + rendered_string = remove_html_tags(rendered_string) + return rendered_string + + def get_html(self) -> str: + rendered_lines = [f"

{LINE_COMMENT_MARKER} Notes:

"] + rendered_lines.extend(render_nested_lists(self.html_snippet, mode=RenderMode.HTML, apply_line_comment=True).split("\n")) + rendered_string = "\n".join(rendered_lines) + return rendered_string + + +class GrammarProcessor: + """ + Grammar processor that handles KerML and SysML2 BNF grammars + + The processor has two main methods: + - extract_bnf_from_spec(...): extracts BNF grammar snippets from a given KerML or SysML spec file in raw (View Editor) HTML format + - process_marked_up_bnf(...): processes a (corrected) BNF grammar from a given KerML or SysML marked_up text file + + Both can process two kinds of grammars: + - concrete textual notation + - concrete graphical notation + + Mistakes or ambiguous productions and notes are logged in the form of WARNING or ERROR messages. + """ + def __init__(self): + self.start_timestamp = datetime.now(timezone.utc).isoformat(timespec="seconds").replace("+00:00", "Z") + self.input_dir = "" + self.output_dir = "" + self.input_path: str = "" + self.input_path_previous: Optional[str] = None + self.soup: Optional[BeautifulSoup] = None + self.spec_title = "" + self.bnf_clause_id: str = "" + self.bnf_path: str = "" + self.syntax_kind: str = "" + self.elements: list[GrammarElement] = [] + self.grammars: list[Grammar] = [] + self.reserved_keyword_set: set[str] = set() + self.extracted_keyword_set: set[str] = set() + self.reserved_symbol_set: set[str] = set() + self.extracted_symbol_set: set[str] = set() + self.parser: Optional[Lark] = None + self.partial_productions: dict[str, list[str]] = dict() + self.missing_svgs: list[str] = [] + self.image_map: dict[str, str] = dict() + self.unresolved_non_terminals_dict: dict[str, list[str]] = dict() + + # Provide a backlink to this GrammarExtractor inside the GrammarElements + GrammarElement.processor = self + + def extract_bnf_from_spec(self, input_dir: str, output_dir: str, input_file: str, syntax_kind: str, bnf_clause_id: str): + """ + extract BNF productions and notes from raw HTML dump of a KerML or SysML specification + + This method produces the following outputs: + - a plain text file containing a machine-readable version of each BNF grammar, + with extension .kebnf for a textual EBNF source and extension .kgbnf for a graphical EBNF source; + - an HTML file containing a human-readable version of each BNF grammar, in which all references to terms are hyperlinked to their declaration; + - a log file containing diagnostic information (DEBUG, INFO, WARNING, ERROR messages) about the processed grammars. + + This method uses heuristics to process the raw HTML input, which may contain format and content errors. + """ + self.input_dir = input_dir + self.output_dir = output_dir + self.input_path = os.path.join(self.input_dir, input_file) + + if syntax_kind == "textual-bnf": + self.syntax_kind = syntax_kind + self.bnf_path = input_file.replace("-spec.html", "-textual-bnf") + self.parser = Lark.open("kebnf_textual_grammar.lark", rel_to=__file__, parser="lalr") + elif syntax_kind == "graphical-bnf": + self.syntax_kind = syntax_kind + self.bnf_path = input_file.replace("-spec.html", "-graphical-bnf") + self.parser = Lark.open("kgbnf_graphical_grammar.lark", rel_to=__file__, parser="lalr") + elif syntax_kind == "kerml-library": + raise NotImplementedError + elif syntax_kind == "sysml-library": + raise NotImplementedError + else: + LOGGER.critical(f"Unsupported BNF mode: {syntax_kind}, terminating ...\n") + sys.exit(1) + + self.bnf_clause_id = bnf_clause_id + self.spec_title = "" + self.elements = [] + self.grammars.append(Grammar(self.bnf_path, set())) + self.reserved_keyword_set = set() + self.extracted_keyword_set = set() + self.reserved_symbol_set = set() + self.extracted_symbol_set = set() + self.partial_productions = dict() + self.image_map = dict() + self.unresolved_non_terminals_dict: dict[str, list[str]] = dict() + + LOGGER.info(20 * "=") + LOGGER.info(f"Extract BNF from {self.input_path} syntax-kind={syntax_kind} clause={self.bnf_clause_id} at {self.start_timestamp}") + LOGGER.info(20 * "=") + + self.elements.append(Info("", [], source=self.input_path.replace("\\", "/"), timestamp=self.start_timestamp)) + + # Regular expression patterns + KEYWORD_PATTERN = re.compile(r"('[a-z]{2,}')") + SYMBOL_PATTERN = re.compile(r"('[^A-Za-z\s]+')") + SEE_NOTE_PATTERN = re.compile(r"^[ \t]*[(]?[ \t]*See Note.*$", flags=re.IGNORECASE) + + if self.input_path == self.input_path_previous: + # Skip reparsing the HTML spec and reuse self.soup + pass + else: + with open(self.input_path, mode="r", encoding="utf-8") as html_spec: + self.soup = BeautifulSoup(html_spec, "html.parser") + + inside_bnf_clause = False + contains_note_reference = False + contains_notes_section = False + contains_pre_tag = False + count = 0 + clause_id = "" + clause_title = "" + + # Walk through all HTML elements (tags) and extract + # - clause headings + # - grammar productions and their notes from the given textual or graphical notation clause + for tag in self.soup.find_all(name=["h1", "pre", "p", "ol"], recursive=True): + assert isinstance(tag, Tag) + count += 1 + LOGGER.debug(f"Visit tag #{count} {tag.name}") + + if tag.name == "h1": + # Process clause heading + contains_note_reference = False + contains_notes_section = False + contains_pre_tag = False + # LOGGER.debug(f"tag{count}={tag}") + + class_attribute = tag.attrs.get("class") + if class_attribute and "view-title" in class_attribute: + # LOGGER.debug(f"view-title tag={tag}") + clause_id = tag.find("span", {"class": "ve-view-number"}).string + clause_id = clause_id.strip() if clause_id else "" + clause_title = tag.find("transclude-name").find("span").string + clause_title = clause_title.strip() if clause_title else "" + + if clause_id == self.bnf_clause_id: + inside_bnf_clause = True + elif inside_bnf_clause and not clause_id.startswith(self.bnf_clause_id): + inside_bnf_clause = False + + if inside_bnf_clause or clause_id == "": + if clause_id == "": + clause_string = clause_title + self.spec_title = clause_title + else: + clause_string = f"Clause {clause_id} {clause_title}" + + LOGGER.info(f"PROCESSING {clause_string}") + self.elements.append(Heading(clause_id, [clause_string])) + + # TODO: Properly check for
 elements in notes lists, i.e. contained in 
  • element + # elif tag.name == "pre" and inside_bnf_clause and tag.parent.name != "li": + elif tag.name == "pre" and inside_bnf_clause: + # Process a
     element that contains BNF grammar lines
    +                if tag.parent.name == "li":
    +                    LOGGER.warning(f"
     appearing inside 
  • element:\n{tag}") + + LOGGER.debug(f"tag#{count}:\n{tag}") + contains_pre_tag = True + + child_strings: list[str] = [] + for child in tag.children: + if isinstance(child, Tag) and child.name == "img": + # Simplify element by only retaining src attribute from which the query parameter (?token=...) is stripped + src_attr = child.attrs.get("src").split("?", 1)[0] + child_strings.append(f'') + elif child.string is not None: + child_strings.append(child.string) + else: + LOGGER.error(f"Unexpected child={child} in tag={tag}") + child_contents = "".join(child_strings) + + # Clean each line + child_contents = "\n".join([clean_line(x) for x in child_contents.split("\n")]) + + # Replace any two or more newlines with a single newline + # MULTIPLE_NL_PATTERN = re.compile(r"\n{2,}") + # child_contents = MULTIPLE_NL_PATTERN.sub(r"\n", child_contents) + + # Pre-process lexical clauses in KerML and SysML specifications + if "KerML" in self.spec_title and clause_title == "Reserved Words": + # Rewrite KerML "Reserved Words" production + self.reserved_keyword_set = set(child_contents.strip().split()) + keyword_block = self.wrap_sorted(self.reserved_keyword_set, sep="' | '") + child_contents = f"RESERVED_KEYWORD =\n{keyword_block}" + elif "KerML" in self.spec_title and clause_title == "Symbols": + # Rewrite KerML "Symbols" production + if "(" in child_contents: + # Block containing symbols + reserved_symbol_set = set(child_contents.strip().split()) + symbol_block = self.wrap_sorted(reserved_symbol_set, sep="' | '", reverse=True) + child_contents = f"RESERVED_SYMBOL = \n{symbol_block}" + else: + # Block containing special lexical terminals - rewrite separated by double newlines + if len(child_contents.split("\n\n")) <= 1: + child_contents = child_contents.replace("\n", "\n\n") + elif "SysML" in self.spec_title and clause_title == "Lexical Structure": + # Rewrite SysML clause with reserved keywords and special lexical terminals + if "=" in child_contents: + # Block containing special lexical terminals - separate productions with double newlines if needed + if len(child_contents.split("\n\n")) <= 1: + child_contents = child_contents.replace("\n", "\n\n") + else: + # Block containing reserved keywords + self.reserved_keyword_set = set(child_contents.strip().split()) + keyword_block = self.wrap_sorted(self.reserved_keyword_set, sep="' | '") + child_contents = f"RESERVED_KEYWORD = \n{keyword_block}" + + + # Replace double newline followed by "See Note" or similar with single newline and 4-space indent + MULTI_NL_SEE_NOTE_PATTERN = re.compile(r"[ \t\n]+(\(?)[ \t]*See Note", re.IGNORECASE) + child_contents = MULTI_NL_SEE_NOTE_PATTERN.sub(r"\n \1See Note", child_contents) + + # Replace one or more newline followed by element with single newline and 6-space indent + if self.syntax_kind == "graphical-bnf": + if child_contents.find("\n= 0: + LOGGER.error(f" element appears at start of line:\n{tag}") + MULTI_NL_WS_IMG_PATTERN = re.compile(r"[ \t\n]+ element at non-continuation line locations. + # A non-continuation line is a line that does not start with a space or tab. + # Use a negative lookahead assertion pattern (?!...) to not consume the matched whitespace. + NON_CONTINUATION_LINE_PATTERN = re.compile(r"\n+(?![ \t])") + candidate_productions = NON_CONTINUATION_LINE_PATTERN.split(child_contents) + # Strip possibly trailing whitespace from the last candidate production + candidate_productions[-1] = candidate_productions[-1].rstrip() + + for candidate_prod in candidate_productions: + if candidate_prod == "": + continue + + # Collect keywords and symbols + if clause_id.startswith(self.bnf_clause_id): + # Store keywords and symbols appearing in textual notation productions + matched_keywords = KEYWORD_PATTERN.findall(candidate_prod) + for matched_keyword in matched_keywords: + self.extracted_keyword_set.add(matched_keyword[1:-1]) + matched_symbols = SYMBOL_PATTERN.findall(candidate_prod) + for matched_symbol in matched_symbols: + self.extracted_symbol_set.add(matched_symbol[1:-1]) + + # Initialize count and index for productions with multiple terms + img_count = candidate_prod.count(", but should be

    element: {candidate_prod}") + current_note_ref = NoteRef(clause_id, lines=[line]) + self.elements.append(current_note_ref) + else: + if line.find("=|") >= 0: + # Process partial graphical BNF productions + is_partial = True + lhs, rhs = line.split("=|", 1) + production_name = lhs.strip() + abstract_type = "" + if not production_name in self.partial_productions: + self.partial_productions[production_name] = [] + for term in [x.strip() for x in rhs.split("|")]: + if term: + self.partial_productions[production_name].append(term) + else: + # Process other BNF productions + is_partial = False + lhs1 = line.split("=")[0].strip() + lhs2 = lhs1.split(":", 1) + production_name = lhs2[0].strip() + if len(lhs2) == 2: + abstract_type = lhs2[1].strip() + elif is_pascal_case(production_name): + abstract_type = production_name + else: + abstract_type = "" + if production_name in self.grammars[-1].production_names: + LOGGER.error(f"Non-unique production name: {production_name} in {self.grammars[-1].production_names}") + else: + self.grammars[-1].production_names.add(production_name) + + current_production = Production(clause_id, [line], production_name, abstract_type, is_partial) + self.elements.append(current_production) + + if line[0] in (" ", "\t"): + LOGGER.error(f"Production start line starts with a space or tab: {line}") + line = line.strip() + ONE_EQUALS_PATTERN = re.compile(r"( = | =$)") + if not ONE_EQUALS_PATTERN.search(line): + LOGGER.warning(f"Production start line does not contain exactly one '=': {line}") + elif current_note_ref: + current_note_ref.lines.append(line) + elif " element: tag={subtag}") + + elif tag.name == "p" and inside_bnf_clause and contains_pre_tag: + LOGGER.debug(f"note

    tag={tag}") + if tag.string == "Notes": + contains_notes_section = True + elif (tag.contents and tag.contents[0].name == "strong" + and tag.contents[0].string and tag.contents[0].string.strip() in ("Note.", "Note:")): + # Note in graphical BNF + text_content = clean_text_content(" ".join(tag.stripped_strings), True) + self.elements.append(NoteRef(clause_id, lines=[text_content])) + + + elif tag.name == "ol" and inside_bnf_clause and contains_pre_tag and tag.parent.name != "li": + LOGGER.debug(f"note

      tag={tag}") + list_item_count = 0 + note_list = NoteList(clause_id, [], []) + + # Update the contents of
        within the HTML tree + self.cleanup_note_html(tag) + + # Store cleaned version of HTML note list + note_list.html_snippet = remove_ws_surrounding_list_elements(normalize_whitespace(clean_text_content(str(tag)))) + self.elements.append(note_list) + + contains_note_reference = False + contains_notes_section = False + + # End main visit tag loop + + self.elements.append(Comment(clause_id="", lines=[line_comment("End of BNF")])) + + if self.syntax_kind == "textual-bnf": + self.report_checks() + + self.input_path_previous = self.input_path + + # End def extract_bnf() + + def parse_marked_up_bnf(self, input_dir: str, output_dir: str, input_file: str, syntax_kind: str, bnf_clause_id: str): + """ + process a (corrected) marked_up BNF grammar file, verify the grammar and generate plain text and hyperlinked HTML output + + This method produces the following outputs: + - a plain text file containing a machine-readable version of each BNF grammar, + with extension .kebnf for a textual EBNF source and extension .kgbnf for a graphical EBNF source; + - an HTML file containing a human-readable version of each BNF grammar, in which all references to terms are hyperlinked to their declaration; + - a log file containing diagnostic information (DEBUG, INFO, WARNING, ERROR messages) about the processed grammars. + """ + self.input_dir = input_dir + self.output_dir = output_dir + self.input_path = os.path.join(self.input_dir, input_file) + + if syntax_kind == "textual-bnf": + self.syntax_kind = syntax_kind + if input_file.endswith("-marked_up.kebnf"): + self.bnf_path = input_file.replace("-marked_up.kebnf", "") + self.parser = Lark.open("kebnf_textual_grammar.lark", rel_to=__file__, parser="lalr") + else: + LOGGER.critical(f"Unsupported input file for process_marked_up_bnf: filename must end with -marked-up.kebnf, terminating ...\n") + sys.exit(1) + elif syntax_kind == "graphical-bnf": + self.syntax_kind = syntax_kind + self.bnf_path = input_file.replace("-spec.html", "-graphical-bnf") + if input_file.endswith("-marked_up.kgbnf"): + self.bnf_path = input_file.replace("-marked_up.kgbnf", "") + self.parser = Lark.open("kgbnf_graphical_grammar.lark", rel_to=__file__, parser="lalr") + else: + LOGGER.critical(f"Unsupported input file for process_marked_up_bnf: filename must end with -marked-up.kgbnf, terminating ...\n") + sys.exit(1) + elif syntax_kind == "kerml-library": + raise NotImplementedError + elif syntax_kind == "sysml-library": + raise NotImplementedError + else: + LOGGER.critical(f"Unsupported BNF mode: {syntax_kind}, terminating ...\n") + sys.exit(1) + + self.bnf_clause_id = bnf_clause_id + self.spec_title = "" + self.elements = [] + self.grammars.append(Grammar(self.bnf_path, set())) + self.reserved_keyword_set = set() + self.extracted_keyword_set = set() + self.reserved_symbol_set = set() + self.extracted_symbol_set = set() + self.partial_productions = dict() + self.image_map = dict() + self.unresolved_non_terminals_dict: dict[str, list[str]] = dict() + + LOGGER.info(20 * "=") + LOGGER.info(f"Processing BNF from {self.input_path} syntax-kind={syntax_kind} clause={self.bnf_clause_id} at {self.start_timestamp}") + LOGGER.info(20 * "=") + + self.elements.append(Info("", [], source=self.input_path.replace("\\", "/"), timestamp=self.start_timestamp)) + + candidate_productions = [] + marked_up_file = open(self.input_path, mode="r", encoding="utf-8") + + for candidate_production in marked_up_file.read().split("\n\n"): + candidate_productions.append(candidate_production) + + inside_bnf_clause = False + contains_note_reference = False + contains_notes_section = False + contains_pre_tag = False + count = 0 + clause_id = "" + clause_title = "" + + + # Walk through all candidate productions (including comments) and build internal model + for candidate_production in candidate_productions: + is_partial = False + if candidate_production.startswith(LINE_COMMENT_MARKER): + # process comment + comment_clause_pattern = re.compile(r"^(// )(Clause|Part) ([0-9.]+) (.+)") + clause_match = comment_clause_pattern.match(candidate_production) + if clause_match: + if clause_match.group(2) == "Clause": + clause_id = clause_match.group(3) + else: + clause_id = "" + clause_title = clause_match.group(4) + LOGGER.info(f"Processing clause id={clause_id} title={clause_title}") + self.elements.append(Heading(clause_id=clause_id, lines=[candidate_production[3:]])) + elif candidate_production.startswith("// Notes:"): + html_snippet_lines = candidate_production.split("\n") + html_snippet_lines.pop(0) + html_snippet = "".join([x[3:] for x in html_snippet_lines]) + html_snippet = html_snippet.replace("\n", "") + self.elements.append(NoteList(clause_id=clause_id, lines=[], html_snippet=html_snippet)) + else: + self.elements.append(Comment(clause_id=clause_id, lines=candidate_production.split("\n"))) + else: + # This should be a proper BNF production - check with Lark parser + is_parse_successful = True + production_name = "" + abstract_syntax_type = "" + try: + parse_tree = self.parser.parse(candidate_production + "\n") + first_token = parse_tree.children[0].children[0] + if first_token.type in ("NONTERMINAL_NAME", "LEXICAL_NAME", "GRAPHICAL_NAME"): + production_name = first_token.value + for token in parse_tree.find_data("abstract_element"): + if token.children[0].type == "NONTERMINAL_NAME": + abstract_syntax_type = token.children[0].value + if abstract_syntax_type == "" and first_token.type == "NONTERMINAL_NAME": + abstract_syntax_type = production_name + + if self.syntax_kind == "graphical-bnf" and candidate_production.find("=|") >= 0: + is_partial = True + # LOGGER.info(f"PARTIAL PROD: {parse_tree.pretty(indent_str=' ')}") + if not production_name in self.partial_productions: + self.partial_productions[production_name] = [] + # partial_terms = [] + for count, token in enumerate(parse_tree.find_token("GRAPHICAL_NAME")): + if count > 0: + # partial_terms.append(token.value) + self.partial_productions[production_name].append(token.value) + # LOGGER.info(f"Partial terms: {', '.join(partial_terms)}") + + except UnexpectedInput as e: + is_parse_successful = False + LOGGER.error(f"Parse error in {self.input_path} {clause_id} in production:\n{candidate_production}\n{e}") + else: + LOGGER.debug(f"Parsed successfully {clause_id}:\n{candidate_production}\n{parse_tree.pretty()}") + + if not is_parse_successful and production_name == "": + # Recover production name in case parse fails + production_name = candidate_production.split(" ", 1)[0].strip() + + if production_name in self.grammars[-1].production_names and not is_partial: + LOGGER.error(f"Non-unique production name: {production_name} in {self.grammars[-1].production_names}") + else: + self.grammars[-1].production_names.add(production_name) + self.elements.append(Production(clause_id=clause_id, lines=candidate_production.split("\n"), name=production_name, abstract_syntax_type=abstract_syntax_type, is_partial=is_partial)) + + LOGGER.info(f"Completed parsing {self.input_path}") + + + def rewrite_img_element(self, current_production: Production, img_count: int, img_index: int, line: str) -> (str, int): + # Rewrite the element + # Set the src attribute to an .svg file with the same name as the production + # Add a width attribute to scale the image properly in HTML + img_postfix = "" + if img_count > 1: + img_index += 1 + img_postfix = f"-{img_index}" + svg_file_path = f"{IMAGES_DIR}/{current_production.name}{img_postfix}.svg" + # Check whether the target SVG file exists, if so compute and update its width scale + width_value: float = -1.0 + full_svg_file_path = os.path.join(self.output_dir, svg_file_path) + if os.path.exists(full_svg_file_path): + with open(full_svg_file_path, "r") as svg_file: + svg_soup = BeautifulSoup(svg_file, "lxml-xml") + LOGGER.debug(f"Read {svg_file_path} into soup") + svg_tag = svg_soup.find("svg:svg") + if svg_tag: + LOGGER.debug(f"SVG tag: {svg_tag}") + width_attr = svg_tag.attrs.get("width") + if width_attr: + width_value = float(width_attr) * SVG_SCALING_FACTOR + else: + self.missing_svgs.append(svg_file_path) + SRC_ATTRIBUTE_PATTERN = re.compile(r'src="([^"]+)"') + original_img_url = SRC_ATTRIBUTE_PATTERN.search(line).group(1) + self.image_map[original_img_url] = svg_file_path + updated_line = SRC_ATTRIBUTE_PATTERN.sub(f'src="{svg_file_path}"', line) + if width_value > -1.0: + updated_line = updated_line.replace("\">", f"\" width=\"{width_value}\">", 1) + LOGGER.debug(f"new IMG line={updated_line}") + return updated_line, img_index + + def cleanup_note_html(self, pe: PageElement) -> None: + """Recursively clean up the given HTML element tree""" + if isinstance(pe, Tag): + for child in pe.children: + # Recurse depth-first + self.cleanup_note_html(child) + if pe.name in ("ol", "ul", "li", "em", "strong", "code"): + # Do nothing + pass + elif pe.name == "mms-view-link": + # MMS VE cross-reference: remove any tags and extract cross-ref clause id only + xref_clause_id = "".join(pe.stripped_strings) + if xref_clause_id.startswith(self.bnf_clause_id): + # Subclause ref can be resolved within current BNF clause + new_tag = self.soup.new_tag("a") + new_tag["href"] = f"#c{xref_clause_id}" + new_tag.string = xref_clause_id + pe.replace_with(new_tag) + else: + new_string = self.soup.new_string(xref_clause_id) + pe.replace_with(new_string) + elif pe.name == "pre": + # Convert embedded pre to code + pe.name = "code" + else: + # Replace a tag with its contents + pe.unwrap() + + @staticmethod + def tokenize(line: str) -> list[Token]: + """ + Basic handwritten, relaxed, fault-tolerant KerML and SysML grammar tokenizer + + Tokenizes one line at a time. + """ + tokens: list[Token] = [] + state: Optional[TokenKind] = None + token_text: str = "" + pos: int = 0 + while pos < len(line): + ch = line[pos] + if state == TokenKind.IMAGE: + if ch == ">": + token_text += line[pos:pos + 1] + tokens.append(Token(TokenKind.IMAGE, token_text)) + token_text = "" + state = None + pos += 1 + else: + token_text += ch + elif line[pos:pos + 2] == "//": + if state is None: + tokens.append(Token(TokenKind.LINE_COMMENT, line[pos:])) + pos = len(line) - 1 + else: + token_text += line[pos:pos + 2] + pos = pos + 1 + elif line[pos:pos + 4] == " incomplete TERMINAL at position {pos} in line: {line}") + tokens.append(Token(TokenKind.WHITESPACE, ch)) + elif state == TokenKind.TERMINAL: + token_text += ch + else: + tokens.append(Token(TokenKind.INTERPUNCTION, ch)) + pos += 1 + + # Process final state + if state == TokenKind.NON_TERMINAL: + tokens.append(Token(TokenKind.NON_TERMINAL, token_text)) + elif state == TokenKind.TERMINAL: + tokens.append(Token(TokenKind.TERMINAL, token_text)) + LOGGER.warning(f"Tokenize: Missing single quote -> incomplete TERMINAL in line: {line}") + elif state == TokenKind.IMAGE: + tokens.append(Token(TokenKind.IMAGE, token_text)) + LOGGER.warning(f"Tokenize: Missing '/>' -> incomplete IMAGE element in line: {line}") + elif state is not None: + LOGGER.error(f"Tokenize: Expected final state None but got {state}") + + return tokens + + @staticmethod + def wrap_sorted(words: Iterable[str], sep: str = " ", reverse: bool = False, width: int = 120) -> str: + """ + Return a text block, of a given maximum character width, for words sorted in ascending (or descending for reverse==True) alphabetical order. + + If the separator string contains the pipe symbol (|) it will be moved consistently from line end to the first character on the next line. + """ + lead_char = "" + trail_char = "" + if len(sep) > 1: + if sep.endswith("'"): + lead_char = "'" + if sep.startswith("'"): + trail_char = "'" + sorted_words_string = f"{lead_char}{sep.join(sorted(words, reverse=reverse))}{trail_char}" + wrapped_block = "\n".join(wrap(sorted_words_string, width=width, initial_indent=" ", subsequent_indent=" ", break_on_hyphens=False)) + if "|" in sep: + # Move | at line ends to indented start of next line + wrapped_block = wrapped_block.replace(" |\n ", "\n | ") + return wrapped_block + + def report_checks(self) -> None: + """ + Perform and report (in the log) the following checks: + - Mismatches from the comparison of declared reserved keywords w.r.t. extracted keywords + - Mismatches from the comparison of extracted keywords w.r.t. declared reserved keywords + """ + LOGGER.info("===== Start of Textual Notation Grammar Checks") + + # Check declared and extracted keywords + extracted_keywords_block = self.wrap_sorted(self.extracted_keyword_set) + LOGGER.info(f"Keywords extracted from textual BNF grammar scan:\n{extracted_keywords_block}") + + reserved_set_diff_extracted = self.reserved_keyword_set - self.extracted_keyword_set + + extracted_set_diff_reserved = self.extracted_keyword_set - self.reserved_keyword_set + + LOGGER.info("Comparison of declared reserved keywords versus extracted keywords") + + log_level = logging.WARNING if len(reserved_set_diff_extracted) > 0 else logging.INFO + reserved_set_diff_block = self.wrap_sorted(reserved_set_diff_extracted) + LOGGER.log(log_level, f"Declared reserved keywords not in extracted keywords:\n{reserved_set_diff_block}") + + log_level = logging.WARNING if len(extracted_set_diff_reserved) > 0 else logging.INFO + extracted_set_diff_block = self.wrap_sorted(extracted_set_diff_reserved) + LOGGER.log(log_level, f"Extracted keywords not in declared reserved keywords:\n{extracted_set_diff_block}") + + LOGGER.info("===== End of Textual Notation Grammar Checks") + + if self.syntax_kind == "graphical-bnf": + LOGGER.info("===== Start of Graphical Notation Grammar Checks") + if self.missing_svgs: + missing_svgs_string = "\n".join(sorted(self.missing_svgs)) + LOGGER.warning(f"The following {len(self.missing_svgs)} SVG images are missing:\n{missing_svgs_string}") + + if self.image_map: + map_string = "\n".join([f"{k} {v}" for k, v in sorted(self.image_map.items())]) + LOGGER.info(f"Map from {len(self.image_map)} original to new SVG images:\n{map_string}") + + LOGGER.info("===== End of Graphical Notation Grammar Checks") + + def dump_bnf_grammar_elements(self): + """ + Dump all recognized BNF grammar elements into a json file. + """ + bnf_elements_json_path = os.path.join(self.output_dir, self.bnf_path + "-elements.json") + LOGGER.info(f"Dumping BNF grammar elements into {bnf_elements_json_path}") + with open(bnf_elements_json_path, mode="w", encoding="utf-8") as bnf_elements_json_file: + json.dump([x.get_as_dict() for x in self.elements], bnf_elements_json_file, default=lambda obj: asdict(obj), indent=2, sort_keys=True, ensure_ascii=False) + + + def export_marked_up_bnf(self): + """ + Export BNF grammar elements into a marked-up BNF text file + that is ready for manual corrections and re-processing + + Note: The difference with export_plain_bnf is that Notes blocks are emitted + with embedded HTML markup instead of plain text. + """ + bnf_extension = ".kebnf" if self.syntax_kind == "textual-bnf" else ".kgbnf" + marked_up_bnf_path = os.path.join(self.output_dir, self.bnf_path + "-marked_up" + bnf_extension) + LOGGER.info(f"Writing BNF grammar file {marked_up_bnf_path}") + with open(marked_up_bnf_path, mode="w", encoding="utf-8") as marked_up_bnf_file: + for elem in self.elements: + marked_up_bnf_file.write(elem.get_marked_up_txt()) + + def export_plain_bnf(self): + """ + Export BNF grammar elements into a plain BNF text file. + """ + bnf_extension = ".kebnf" if self.syntax_kind == "textual-bnf" else ".kgbnf" + plain_bnf_path = os.path.join(self.output_dir, self.bnf_path + bnf_extension) + LOGGER.info(f"Writing BNF grammar file {plain_bnf_path}") + with open(plain_bnf_path, mode="w", encoding="utf-8") as plain_bnf_file: + for elem in self.elements: + plain_bnf_file.write(elem.get_txt()) + + if self.partial_productions: + plain_bnf_file.write(f"\n{line_comment('Consolidated partial productions:')}\n") + for name, term_list in sorted(self.partial_productions.items()): + term_list_lines = f"{name} =\n{self.wrap_sorted(term_list, sep=' | ')}".split("\n") + plain_bnf_file.write(block_comment(term_list_lines, add_newline=True)) + + def export_html(self): + """ + Export BNF grammar elements into an HTML file. + """ + bnf_html_path = os.path.join(self.output_dir, self.bnf_path + ".html") + LOGGER.info(f"Writing BNF HTML file {bnf_html_path}") + with open(bnf_html_path, mode="w", encoding="utf-8") as bnf_html_file: + bnf_html_file.write(DATA.HTML_HEAD.format(doc_title=self.bnf_path)) + + for elem in self.elements: + bnf_html_file.write(elem.get_html()) + + if self.partial_productions: + bnf_html_file.write(f"

        {line_comment('Consolidated partial productions:')}

        ") + for name, term_list in sorted(self.partial_productions.items()): + html_term_list = [f'{term}' for term in sorted(term_list)] + term_list_lines = f'{name} =\n{self.wrap_sorted(html_term_list, sep=' | ', width=300)}'.replace("\n{block_comment(term_list_lines, add_newline=False)}\n
  • \n') + + bnf_html_file.write(DATA.HTML_TAIL) + + # Report unresolved non-terminals + if self.unresolved_non_terminals_dict: + LOGGER.warning(f"Grammar {self.bnf_path} contains {len(self.unresolved_non_terminals_dict)} unresolved non-terminal(s) ...") + for non_terminal in sorted(self.unresolved_non_terminals_dict.keys()): + lines_string = " " + "\n ".join(self.unresolved_non_terminals_dict[non_terminal]) + LOGGER.error(f"Cannot resolve {non_terminal} in\n{lines_string}") + + +class DATA: + """Collection of HTML5 data templates""" + HTML_HEAD = """\ + + + + +{doc_title} + + + +""" + HTML_TAIL = """\ + + +""" + + +def line_comment(text: str, add_newline: bool = True): + newline = "\n" if add_newline else "" + return f"{LINE_COMMENT_MARKER} {text}{newline}" + + +def block_comment(texts: list[str], add_newline: bool = True): + formatted_text = f'\n{LINE_COMMENT_MARKER} '.join(texts) + text = f"{LINE_COMMENT_MARKER} {formatted_text}\n" + if add_newline: + text += "\n" + return text + + +def report_non_ascii(text: str): + is_ascii = text is None or text.isascii() + if not is_ascii: + non_ascii_chars: set[str] = set() + for ch in text: + if not ch.isascii(): + non_ascii_chars.add(ch) + LOGGER.warning(f"Found non-ASCII characters: {sorted(non_ascii_chars)}") + + +def clean_text_content(text: Optional[str], correct_comma_dot: bool = False) -> str: + """Replace non-braking space and zero-width space with regular space and strip tail end""" + if text is None: + text = "" + text = text.replace(" ", " ").replace("​", " ") + if correct_comma_dot: + text = text.replace(" ,", ",") + text = text.replace(" .", ".") + # text = text.rstrip() + + # Replace leading space(s) followed by newline(s) with a single newline + LEADING_SPACES_NEWLINES_PATTERN = re.compile(r"^ +\n+") + text = LEADING_SPACES_NEWLINES_PATTERN.sub("\n", text) + + return text + + +def clean_line(line: str) -> str: + """Replace special whitespace with regular space and strip tail end""" + line = line.replace(" ", " ").replace("​", " ") + return line.rstrip() + + +def normalize_whitespace(text: str) -> str: + """Return string in which all sequences of 2 or more whitespace chars are replaced with a single space""" + multi_ws_pattern = re.compile(r"\s{2,}") + normalized_ws_text = multi_ws_pattern.sub(" ", text) + return normalized_ws_text + + +def remove_html_tags(text: str) -> str: + """Return string with HTML tags removed""" + tag_pattern = re.compile(r"<[^>]+>") + text_without_tags = tag_pattern.sub("", text) + return text_without_tags + + +def remove_ws_surrounding_list_elements(html_snippet: str) -> str: + """Return html string with all whitespace, including newlines, surrounding ol, ul and li elements removed""" + LOGGER.debug(f"original html_snippet=\n{html_snippet}") + list_start_pattern = re.compile(r"\s*(<(ol|ul|li)>)\s*") + list_end_pattern = re.compile(r"\s*()\s*") + html_snippet = list_start_pattern.sub(r"\1", html_snippet) + html_snippet = list_end_pattern.sub(r"\1", html_snippet) + LOGGER.debug(f"cleaned html_snippet=\n{html_snippet}") + return html_snippet + + +def is_pascal_case(text: str) -> bool: + pascal_pattern = re.compile(r"^[A-Z][a-z][A-Za-z]*$") + return len(text) > 1 and pascal_pattern.fullmatch(text) + + +def is_upper_snake_case(text: str) -> bool: + upper_snake_pattern = re.compile(r"^[A-Z][A-Z_]+$") + return len(text) > 1 and upper_snake_pattern.fullmatch(text) + + +def is_lower_kebab_case(text: str) -> bool: + lower_kebab_pattern = re.compile(r"^[a-z][a-z0-9-]+$") + return len(text) > 1 and lower_kebab_pattern.fullmatch(text) + + +def render_nested_lists(html_snippet: str, mode: RenderMode, apply_line_comment: bool) -> str: + """ + Return + + :param html_snippet: string in HTML format that contains nested ol and/or ul lists + :param mode: output render mode + :param apply_line_comment: whether to apply BNF line comment markers + :return: rendered HTML snippet + + The html_snippet must be pretreated with functions + - normalize_whitespace + - remove_ws_surrounding_list_elements + """ + indent = 2 * " " + bullet = chr(0x2022) + line_break_pattern = re.compile(r"<(br|br/|/ul|/ol)>\n*") + + level = 0 + first_char_after_list_end = False + stack: list[ListStackItem] = [] + buffer: list[str] = [] + pos: int = 0 + + while pos < len(html_snippet): + if html_snippet[pos:pos + 4] == "
      ": + level += 1 + if buffer and buffer[-1][-1] != "\n": + buffer.append("\n") + if level == 1: + stack.append(ListStackItem("ol", level, 0)) + if mode == RenderMode.HTML: + buffer.append("
        \n") + elif mode == RenderMode.TXT: + pass + else: + # Change level 2+ lists to ul, since it improves readability + stack.append(ListStackItem("ul", level, 0)) + if mode == RenderMode.HTML: + buffer.append("
          \n") + elif mode == RenderMode.TXT: + pass + pos += 4 + elif html_snippet[pos:pos + 5] == "
      ": + if mode == RenderMode.HTML: + buffer.append(f"\n") + elif mode == RenderMode.TXT: + pass + first_char_after_list_end = True + stack.pop() + level -= 1 + pos += 5 + elif html_snippet[pos:pos + 4] == "
        ": + level += 1 + stack.append(ListStackItem("ul", level, 0)) + if buffer and buffer[-1][-1] != "\n": + buffer.append("\n") + if mode == RenderMode.HTML: + buffer.append("
          \n") + elif mode == RenderMode.TXT: + pass + pos += 4 + elif html_snippet[pos:pos + 5] == "
        ": + if mode == RenderMode.HTML: + buffer.append(f"\n") + elif mode == RenderMode.TXT: + pass + first_char_after_list_end = True + stack.pop() + level -= 1 + pos += 5 + elif html_snippet[pos:pos + 4] == "
      • ": + comment_mark = f"{LINE_COMMENT_MARKER} " if apply_line_comment else "" + if stack[-1].kind == "ol": + stack[-1].item_count += 1 + if mode == RenderMode.HTML: + buffer.append(f"
      • {comment_mark}{stack[-1].item_count}. ") + elif mode == RenderMode.TXT: + buffer.append(f"{comment_mark}{stack[-1].level * indent}{stack[-1].item_count}. ") + elif stack[-1].kind == "ul": + if mode == RenderMode.HTML: + buffer.append(f"
      • {comment_mark}{bullet} ") + elif mode == RenderMode.TXT: + buffer.append(f"{comment_mark}{stack[-1].level * indent}{bullet} ") + pos += 4 + elif html_snippet[pos:pos + 5] == "
      • ": + if mode == RenderMode.HTML: + buffer.append("\n") + elif mode == RenderMode.TXT: + if buffer[-1][-1] != "\n": + buffer.append("\n") + pos += 5 + else: + if mode == RenderMode.HTML and apply_line_comment and line_break_pattern.match(buffer[-1]): + buffer.append(f"{LINE_COMMENT_MARKER} ") + elif mode == RenderMode.TXT and first_char_after_list_end and len(stack) > 0: + comment_mark = f"{LINE_COMMENT_MARKER} " if apply_line_comment else "" + buffer.append(f"{comment_mark}{stack[-1].level * indent}") + first_char_after_list_end = False + buffer.append(html_snippet[pos]) + pos += 1 + # end while loop + + if mode == RenderMode.TXT and buffer[-1] == "\n": + buffer.pop() + rendered_string = "".join(buffer) + return rendered_string + + +def main() -> None: + """ + Main CLI program entry point + """ + # Initialize logging + LOGGER.setLevel(logging.DEBUG) + formatter = logging.Formatter("%(levelname)-8s: %(message)s") + + console_handler = logging.StreamHandler() + console_handler.set_name("console") + console_handler.setLevel(logging.INFO) + console_handler.setFormatter(formatter) + LOGGER.addHandler(console_handler) + + log_file_name = "bnf_grammar_processor.log" + if os.path.exists(log_file_name): + # Create backup copy of the log-file to inspect differences between runs + shutil.copy2(log_file_name, log_file_name + ".backup") + + file_handler = logging.FileHandler(log_file_name, mode="w", encoding="utf-8") + file_handler.set_name("logfile") + file_handler.setLevel(logging.INFO) + file_handler.setFormatter(formatter) + LOGGER.addHandler(file_handler) + + # Initialize command line arguments parser + parser = argparse.ArgumentParser( + prog="bnf_grammar_processor", + formatter_class=argparse.RawDescriptionHelpFormatter, + allow_abbrev=False, + description="Extract or parse textual and/or graphical grammars from given KerML or SysML specifications and generate plain text and html BNF grammar files.", + epilog="""\ +The processor supports to two main capabilities: +1) Extract the KerML or SysML grammar(s) + from provided raw .html file(s) exported from KerML and SysML specifications in the View Editor tool, + and then validate the extracted grammars, report possible errors, and generate these outputs: + - .json dumps of the processed intermediate data model(s), + - .kebnf and/or .kgbnf plain text files, + - -marked_up.kebnf and/or -marked_up.kgbnf marked up text files, that can be used as a basis for corrected grammars, + - .html files with hyperlinked, human-readable versions of the grammars. +2) Validate corrected -marked_up.kebnf or -marked_up.kgbnf input files + and generate the same files as under 1), but now for the corrected grammars. + +Option 2) is selected when the input filename(s) end on '-marked_up.kebnf' or '-marked_up.kgbnf', otherwise option 1). +Both options will produce a log file named 'bnf_grammar_processor.log' in the working directory. +In SOURCE_DATA the input files should be given in reverse dependendy order, i.e., first KerML textual, then SysML textual, then SysML graphical notation. +Via diff'ing of the extracted and corrected .kebnf and/or .kgbnf files a list of corrections to be fed into the OMG issue trackers can be compiled. +""") + parser.add_argument("source_data", metavar="SOURCE_DATA", type=str, help="JSON file defining source data - see examples under the tests directory") + parser.add_argument("-i", "--input-dir", metavar="INPUT_DIR", type=str, nargs="?", default="sources", help="input directory path") + parser.add_argument("-o", "--output-dir", metavar="OUTPUT_DIR", type=str, nargs="?", default=".", help="output directory path") + + args = parser.parse_args() + LOGGER.debug(f"args={args}") + LOGGER.debug(f"bnf_grammar_processor started in {os.getcwd()}") + + input_dir = args.input_dir + output_dir = args.output_dir + + # Construct the GrammarProcessor and execute + grammar_processor = GrammarProcessor() + + source_json = os.path.join(args.input_dir, args.source_data) + with open(source_json, mode="r", encoding="utf-8") as source_json_file: + source_list = json.load(source_json_file) + + for source in source_list: + file_name = source["file"] + syntax_kind = source["syntax_kind"] + clause_id = source.get("clause_id") + + if syntax_kind in ("kerml-library", "sysml-library"): + LOGGER.warning(f"Processing syntax_kind={syntax_kind} for {file_name} clause={clause_id} is not yet implemented") + else: + if file_name.endswith("-marked_up.kebnf") or file_name.endswith("-marked_up.kgbnf"): + # Parse the given -marked_up grammar files + # and run the backend processors + grammar_processor.parse_marked_up_bnf(input_dir, output_dir, file_name, syntax_kind, clause_id) + grammar_processor.dump_bnf_grammar_elements() + grammar_processor.export_plain_bnf() + grammar_processor.export_html() + else: + # Extract the requested BNF grammars from each of the given input file / clause combinations + # and run the backend processors + grammar_processor.extract_bnf_from_spec(input_dir, output_dir, file_name, syntax_kind, clause_id) + grammar_processor.report_checks() + grammar_processor.dump_bnf_grammar_elements() + grammar_processor.export_marked_up_bnf() + grammar_processor.export_plain_bnf() + grammar_processor.export_html() + + +if __name__ == "__main__": + main() diff --git a/tool-support/bnf_grammar_tools/bnf_grammar/kebnf_textual_grammar.lark b/tool-support/bnf_grammar_tools/bnf_grammar/kebnf_textual_grammar.lark new file mode 100644 index 000000000..d0ac27b82 --- /dev/null +++ b/tool-support/bnf_grammar_tools/bnf_grammar/kebnf_textual_grammar.lark @@ -0,0 +1,84 @@ +// Lark grammar for KerML and SysML EBNF (textual notation) +// +// Copyright (c) 2025: DEKonsult +// +// Author: Hans Peter de Koning (DEKonsult) +// + +start: _rule+ + +_rule: lexical_rule _NON_CONTINUATION_LINE | nonterminal_rule _NON_CONTINUATION_LINE | line_comment + +lexical_rule: LEXICAL_NAME "=" alternation + +nonterminal_rule: NONTERMINAL_NAME ( ":" abstract_element )? "=" alternation + +line_comment: LINE_COMMENT _NL+ + +abstract_element: NONTERMINAL_NAME + +?alternation: sequence ( "|" sequence )* + +?sequence: expression+ + +?expression: atom repetition? + | "(" alternation ")" repetition? + | prop_assign + | prop_list_append + | boolean_prop_assign + | nonparsing_prop_assign + | nonparsing_prop_list_append + | nonparsing_empty_value + +?atom: name + | qualified_name + | terminal + +repetition: REPETITION_SYMBOL + +name: LEXICAL_NAME | NONTERMINAL_NAME + +qualified_name: QUALIFIED_NAME | "~" QUALIFIED_NAME + +terminal: TERMINAL + +prop_name: PROPERTY_NAME ( "." PROPERTY_NAME )* + +prop_assign: prop_name "=" prop_value +prop_list_append: prop_name "+=" prop_value +boolean_prop_assign: prop_name "?=" prop_value +nonparsing_prop_assign: "{" prop_name "=" nonparsing_prop_value "}" +nonparsing_prop_list_append: "{" prop_name "+=" nonparsing_prop_value "}" +nonparsing_empty_value: "{" "}" + +?prop_value: atom | BOOLEAN_VALUE | "(" atom ( "|" atom )+ ")" +?nonparsing_prop_value: terminal | prop_name | BOOLEAN_VALUE | THIS + +// TERMINAL is any string containing one or more printable ASCII characters, except single quote, between two single quotes. +// The ASCII character range is defined as regex [ -&(-~] i.e. union of space-to-ampersand and left-parenthesis-to-tilda. +// A single quote itself must be escaped with a backslash. +TERMINAL: "'" /(\\'|[ -&(-~])+/ "'" +// NONTERMINAL_NAME is a PascalCase identifier containing alphas +NONTERMINAL_NAME: /[A-Z]([a-z]+[A-Z]?)+/ +// LEXICAL_NAME is UPPER_SNAKE_CASE identifier containing alphas +LEXICAL_NAME: /[A-Z](_?[A-Z]+)+/ +QUALIFIED_NAME: "[QualifiedName]" +// PROPERTY_NAME is a camelCase identifier containing alphas +PROPERTY_NAME: /[a-z][A-Za-z]*/ +REPETITION_SYMBOL: "?" | "+" | "*" +BOOLEAN_VALUE: "false" | "true" +THIS: "this" + +_CR: "\r" +_LF: "\n" +_NL: _CR? _LF +WS_INLINE: " " | "\t" +LINE_COMMENT: "//" /[^\r\n]*/ + +// A _NON_CONTINUATION_LINE is a line that does not start with a space or tab +// Use negative lookahead assertion re pattern (?!...) to not consume the possible match +_NON_CONTINUATION_LINE: ( _NL /(?![ \t])/ )+ + +// Ignore inline whitespace (space and tab) as well as continuation lines where next line starts with leading whitespace +%ignore WS_INLINE +%ignore _NL WS_INLINE+ diff --git a/tool-support/bnf_grammar_tools/bnf_grammar/kgbnf_graphical_grammar.lark b/tool-support/bnf_grammar_tools/bnf_grammar/kgbnf_graphical_grammar.lark new file mode 100644 index 000000000..49d025dda --- /dev/null +++ b/tool-support/bnf_grammar_tools/bnf_grammar/kgbnf_graphical_grammar.lark @@ -0,0 +1,71 @@ +// Lark grammar for KerML and SysML GBNF (graphical notation) +// +// Copyright (c) 2025: DEKonsult +// +// Author: Hans Peter de Koning (DEKonsult) +// + +start: _rule+ + +_rule: lexical_rule _NON_CONTINUATION_LINE | nonterminal_rule _NON_CONTINUATION_LINE | line_comment + +lexical_rule: LEXICAL_NAME "=" alternation + +nonterminal_rule: GRAPHICAL_NAME ( "=" | "=|" ) alternation + +line_comment: LINE_COMMENT _NL+ + +?alternation: sequence ( "|" sequence )* + +?sequence: expression+ + +?expression: atom repetition? + | "(" alternation ")" repetition? + | nonparsing_empty_value + | image + +?atom: name + | qualified_name + | terminal + +repetition: REPETITION_SYMBOL + +name: LEXICAL_NAME | NONTERMINAL_NAME | GRAPHICAL_NAME + +qualified_name: QUALIFIED_NAME + +terminal: TERMINAL + +nonparsing_empty_value: "{" "}" + +image: IMAGE + +// TERMINAL is any string containing one or more printable ASCII characters or « » …, except single quote, between two single quotes. +// The ASCII character range is defined as regex [ -&(-~«»…] i.e. union of space-to-ampersand, left-parenthesis-to-tilda, left guillemet, right guillemet, ellipsis. +// A single quote itself must be escaped with a backslash. +TERMINAL: "'" /(\\'|[ -&(-~«»…])+/ "'" +// NONTERMINAL_NAME is a PascalCase identifier containing alphas +NONTERMINAL_NAME: /[A-Z]([a-z]+[A-Z]?)+/ +// GRAPHICAL_NAME is a dash-case identifier containing alphas - it may start with an ampersand +GRAPHICAL_NAME: /[a-z&](-?[a-z]+)+/ +// LEXICAL_NAME is UPPER_SNAKE_CASE identifier containing alphas +LEXICAL_NAME: /[A-Z](_?[A-Z]+)+/ +QUALIFIED_NAME: "[QualifiedName]" +REPETITION_SYMBOL: "?" | "+" | "*" +BOOLEAN_VALUE: "false" | "true" +THIS: "this" +IMAGE: /\/ + +_CR: "\r" +_LF: "\n" +_NL: _CR? _LF +WS_INLINE: " " | "\t" +LINE_COMMENT: "//" /[^\r\n]*/ + +// A _NON_CONTINUATION_LINE is a line that does not start with a space or tab +// Use negative lookahead assertion re pattern (?!...) to not consume the possible match +_NON_CONTINUATION_LINE: ( _NL /(?![ \t])/ )+ + +// Ignore inline whitespace (space and tab) as well as continuation lines where next line starts with leading whitespace +%ignore WS_INLINE +%ignore _NL WS_INLINE+ diff --git a/tool-support/bnf_grammar_tools/bnf_grammar_processor.log b/tool-support/bnf_grammar_tools/bnf_grammar_processor.log new file mode 100644 index 000000000..e69de29bb diff --git a/tool-support/bnf_grammar_tools/bnf_grammar_processor.log.backup b/tool-support/bnf_grammar_tools/bnf_grammar_processor.log.backup new file mode 100644 index 000000000..e69de29bb diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected-elements.json b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected-elements.json new file mode 100644 index 000000000..7f2b7bd77 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected-elements.json @@ -0,0 +1,4254 @@ +[ + { + "@type": "Info", + "clause_id": "", + "lines": [], + "source": "tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected-marked_up.kebnf", + "timestamp": "2025-12-04T19:29:18Z" + }, + { + "@type": "Comment", + "clause_id": "", + "lines": [ + "// Source document: tests\\KerML_and_SysML_spec_sources\\KerML-spec.html", + "// Generated by bnf_grammar_processor at: 2025-11-14T23:08:48Z" + ] + }, + { + "@type": "Comment", + "clause_id": "", + "lines": [ + "// Manual corrections by HP de Koning" + ] + }, + { + "@type": "Heading", + "clause_id": "", + "lines": [ + "Part 1 - Kernel Modeling Language (KerML)" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2", + "lines": [ + "Clause 8.2 Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.1", + "lines": [ + "Clause 8.2.1 Concrete Syntax Overview" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2", + "lines": [ + "Clause 8.2.2 Lexical Structure" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.1", + "lines": [ + "Clause 8.2.2.1 Line Terminators and White Space" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1", + "is_partial": false, + "lines": [ + "LINE_TERMINATOR =", + " '\\n' | '\\r' | '\\r\\n'", + "// implementation defined character sequence" + ], + "name": "LINE_TERMINATOR" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1", + "is_partial": false, + "lines": [ + "LINE_TEXT =", + " '[^\\r\\n]*'", + "// character sequence excluding LINE_TERMINATORs" + ], + "name": "LINE_TEXT" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1", + "is_partial": false, + "lines": [ + "WHITE_SPACE =", + " ' ' | '\\t' | '\\f' | LINE_TERMINATOR", + "// space | tab | form_feed | LINE_TERMINATOR" + ], + "name": "WHITE_SPACE" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.1", + "html_snippet": "
        1. Notation text is divided up into lines separated by line terminators. A line terminator may be a single character (such as a line feed) or a sequence of characters (such as a carriage return/line feed combination). This specification does not require any specific encoding for a line terminator, but any encoding used must be consistent throughout any specific input text.
        2. Any characters in text line that are not a part of the line terminator are referred to as line text.
        3. A white space character is a space, tab, form feed or line terminator. Any contiguous sequence of white space characters can be used to separate tokens that would otherwise be considered to be part of a single token. It is otherwise ignored, with the single exception that a line terminator is used to mark the end of a single-line note (see 8.2.2.2).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.2", + "lines": [ + "Clause 8.2.2.2 Notes and Comments" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "SINGLE_LINE_NOTE =", + " '//' LINE_TEXT" + ], + "name": "SINGLE_LINE_NOTE" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "MULTILINE_NOTE =", + " '//*' COMMENT_TEXT '*/'" + ], + "name": "MULTILINE_NOTE" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "REGULAR_COMMENT =", + " '/*' COMMENT_TEXT '*/'" + ], + "name": "REGULAR_COMMENT" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "COMMENT_TEXT =", + " ( COMMENT_LINE_TEXT | LINE_TERMINATOR )*" + ], + "name": "COMMENT_TEXT" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "COMMENT_LINE_TEXT =", + " '.*(?=(\\r|\\n|\\*/))'", + "// LINE_TEXT excluding the sequence '*/'" + ], + "name": "COMMENT_LINE_TEXT" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.3", + "lines": [ + "Clause 8.2.2.3 Names" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "NAME =", + " BASIC_NAME | UNRESTRICTED_NAME" + ], + "name": "NAME" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "BASIC_NAME =", + " BASIC_INITIAL_CHARACTER BASIC_NAME_CHARACTER*" + ], + "name": "BASIC_NAME" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "SINGLE_QUOTE =", + " '#x27'" + ], + "name": "SINGLE_QUOTE" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "UNRESTRICTED_NAME =", + " SINGLE_QUOTE ( NAME_CHARACTER | ESCAPE_SEQUENCE )* SINGLE_QUOTE" + ], + "name": "UNRESTRICTED_NAME" + }, + { + "@type": "Comment", + "clause_id": "8.2.2.3", + "lines": [ + "// (See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "BASIC_INITIAL_CHARACTER =", + " ALPHABETIC_CHARACTER | '_'" + ], + "name": "BASIC_INITIAL_CHARACTER" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "BASIC_NAME_CHARACTER =", + " BASIC_INITIAL_CHARACTER | DECIMAL_DIGIT" + ], + "name": "BASIC_NAME_CHARACTER" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "ALPHABETIC_CHARACTER =", + " 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' |", + " 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'", + "// any character 'a' through 'z' or 'A' through 'Z'" + ], + "name": "ALPHABETIC_CHARACTER" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "DECIMAL_DIGIT =", + " '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'" + ], + "name": "DECIMAL_DIGIT" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "NAME_CHARACTER =", + " 'any printable character other than backslash or single_quote'" + ], + "name": "NAME_CHARACTER" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "ESCAPE_SEQUENCE =", + " '\\f' | '\\n' | '\\t' | '\\r' | '\\v'", + "// (See Note 2)" + ], + "name": "ESCAPE_SEQUENCE" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.3", + "html_snippet": "
        1. The single_quote character is '. The name represented by an UNRESTRICTED_NAME shall consist of the characters within the single quotes, with escape characters resolved as described below. The surrounding single quote characters are not part of the represented name.
        2. An ESCAPE_SEQUENCE is a sequence of two text characters starting with a backslash that actually denotes only a single character, except for the newline escape sequence, which represents however many characters is necessary to represent an end of line in a specific implementation (see also 8.2.2.1). Table 4 shows the meaning of the allowed escape sequences. The ESCAPE_SEQUENCES in an UNRESTRICTED_NAME shall be replaced by the characters specified as their meanings in the actual represented name.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.4", + "lines": [ + "Clause 8.2.2.4 Numeric Values" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.4", + "is_partial": false, + "lines": [ + "DECIMAL_VALUE =", + " DECIMAL_DIGIT+" + ], + "name": "DECIMAL_VALUE" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.4", + "is_partial": false, + "lines": [ + "EXPONENTIAL_VALUE =", + " DECIMAL_VALUE ('e' | 'E') ('+' | '-')? DECIMAL_VALUE" + ], + "name": "EXPONENTIAL_VALUE" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.4", + "html_snippet": "
        1. A DECIMAL_VALUE may specify a natural literal, or it may be part of the specification of a real literal (see 8.2.5.8.4). Note that a DECIMAL_VALUE does not include a sign, because negating a literal is an operator in the KerML Expression syntax.
        2. An EXPONENTIAL_VALUE may be used in the specification of a real literal (see 8.2.5.8.4). Note that a decimal point and fractional part are not included in the lexical structure of an exponential value. They are handled as part of the syntax of real literals.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.5", + "lines": [ + "Clause 8.2.2.5 String Value" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.5", + "is_partial": false, + "lines": [ + "STRING_VALUE =", + " '\"' ( STRING_CHARACTER | ESCAPE_SEQUENCE )* '\"'" + ], + "name": "STRING_VALUE" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.5", + "is_partial": false, + "lines": [ + "STRING_CHARACTER =", + " 'any printable character other than backslash or \"'" + ], + "name": "STRING_CHARACTER" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.5", + "html_snippet": "
        1. ESCAPE_SEQUENCE is specified in 8.2.2.3.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6", + "lines": [ + "Clause 8.2.2.6 Reserved Words" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.6", + "is_partial": false, + "lines": [ + "RESERVED_KEYWORD =", + " 'about' | 'abstract' | 'alias' | 'all' | 'and' | 'as' | 'assoc' | 'behavior' | 'binding' | 'bool' | 'by' | 'chains'", + " | 'class' | 'classifier' | 'comment' | 'composite' | 'conjugate' | 'conjugates' | 'conjugation' | 'connector'", + " | 'const' | 'crosses' | 'datatype' | 'default' | 'dependency' | 'derived' | 'differences' | 'disjoining' | 'disjoint'", + " | 'doc' | 'else' | 'end' | 'expr' | 'false' | 'feature' | 'featured' | 'featuring' | 'filter' | 'first' | 'flow'", + " | 'for' | 'from' | 'function' | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'inout' | 'interaction'", + " | 'intersects' | 'inv' | 'inverse' | 'inverting' | 'istype' | 'language' | 'library' | 'locale' | 'member' | 'meta'", + " | 'metaclass' | 'metadata' | 'multiplicity' | 'namespace' | 'nonunique' | 'not' | 'null' | 'of' | 'or' | 'ordered'", + " | 'out' | 'package' | 'portion' | 'predicate' | 'private' | 'protected' | 'public' | 'redefines' | 'redefinition'", + " | 'references' | 'rep' | 'return' | 'specialization' | 'specializes' | 'standard' | 'step' | 'struct'", + " | 'subclassifier' | 'subset' | 'subsets' | 'subtype' | 'succession' | 'then' | 'to' | 'true' | 'type' | 'typed'", + " | 'typing' | 'unions' | 'var' | 'xor'" + ], + "name": "RESERVED_KEYWORD" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.7", + "lines": [ + "Clause 8.2.2.7 Symbols" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "RESERVED_SYMBOL =", + " '~' | '}' | '|' | '{' | '^' | ']' | '[' | '@' | '??' | '?' | '>=' | '>' | '=>' | '===' | '==' | '=' | '<=' | '<'", + " | ';' | ':>>' | ':>' | ':=' | '::>' | '::' | ':' | '/' | '.?' | '..' | '.' | '->' | '-' | ',' | '+' | '**' | '*' | ')'", + " | '(' | '&' | '%' | '$' | '#' | '!==' | '!='" + ], + "name": "RESERVED_SYMBOL" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "TYPED_BY = ':' | 'typed' 'by'" + ], + "name": "TYPED_BY" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "SPECIALIZES = ':>' | 'specializes'" + ], + "name": "SPECIALIZES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "SUBSETS = ':>' | 'subsets'" + ], + "name": "SUBSETS" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "REFERENCES = '::>' | 'references'" + ], + "name": "REFERENCES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "CROSSES = '=>' | 'crosses'" + ], + "name": "CROSSES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "REDEFINES = ':>>' | 'redefines'" + ], + "name": "REDEFINES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "CONJUGATES = '~' | 'conjugates'" + ], + "name": "CONJUGATES" + }, + { + "@type": "Heading", + "clause_id": "8.2.3", + "lines": [ + "Clause 8.2.3 Root Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.1", + "lines": [ + "Clause 8.2.3.1 Elements and Relationships Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.3.1", + "is_partial": false, + "lines": [ + "Identification : Element =", + " ( '<' declaredShortName = NAME '>' )?", + " ( declaredName = NAME )?" + ], + "name": "Identification" + }, + { + "@type": "Production", + "abstract_syntax_type": "Relationship", + "clause_id": "8.2.3.1", + "is_partial": false, + "lines": [ + "RelationshipBody : Relationship =", + " ';' | '{' RelationshipOwnedElement* '}'" + ], + "name": "RelationshipBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Relationship", + "clause_id": "8.2.3.1", + "is_partial": false, + "lines": [ + "RelationshipOwnedElement : Relationship =", + " ownedRelatedElement += OwnedRelatedElement", + " | ownedRelationship += OwnedAnnotation" + ], + "name": "RelationshipOwnedElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.3.1", + "is_partial": false, + "lines": [ + "OwnedRelatedElement : Element =", + " NonFeatureElement | FeatureElement" + ], + "name": "OwnedRelatedElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.2", + "lines": [ + "Clause 8.2.3.2 Dependencies Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Dependency", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "Dependency =", + " ( ownedRelationship += PrefixMetadataAnnotation )*", + " 'dependency' ( Identification? 'from' )?", + " client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to'", + " supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )*", + " RelationshipBody" + ], + "name": "Dependency" + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.2", + "html_snippet": "
        1. PrefixMetadataAnnotation is defined in the Kernel layer (see 8.2.5.12).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.3", + "lines": [ + "Clause 8.2.3.3 Annotations Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.3.1", + "lines": [ + "Clause 8.2.3.3.1 Annotations" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.3.3.1", + "is_partial": false, + "lines": [ + "Annotation =", + " annotatedElement = [QualifiedName]" + ], + "name": "Annotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.3.3.1", + "is_partial": false, + "lines": [ + "OwnedAnnotation : Annotation =", + " ownedRelatedElement += AnnotatingElement" + ], + "name": "OwnedAnnotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "AnnotatingElement", + "clause_id": "8.2.3.3.1", + "is_partial": false, + "lines": [ + "AnnotatingElement =", + " Comment", + " | Documentation", + " | TextualRepresentation", + " | MetadataFeature" + ], + "name": "AnnotatingElement" + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.3.1", + "html_snippet": "
        1. MetadataFeature is defined in the Kernel layer (see 8.2.5.12).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.3.2", + "lines": [ + "Clause 8.2.3.3.2 Comments and Documentation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Comment", + "clause_id": "8.2.3.3.2", + "is_partial": false, + "lines": [ + "Comment =", + " ( 'comment' Identification", + " ( 'about' ownedRelationship += Annotation", + " ( ',' ownedRelationship += Annotation )*", + " )?", + " )?", + " ( 'locale' locale = STRING_VALUE )?", + " body = REGULAR_COMMENT" + ], + "name": "Comment" + }, + { + "@type": "Production", + "abstract_syntax_type": "Documentation", + "clause_id": "8.2.3.3.2", + "is_partial": false, + "lines": [ + "Documentation =", + " 'doc' Identification", + " ( 'locale' locale = STRING_VALUE )?", + " body = REGULAR_COMMENT" + ], + "name": "Documentation" + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.3.2", + "html_snippet": "
        1. The text of a lexical REGULAR_COMMENT or PREFIX_COMMENT shall be processed as follows before it is included as the body of a Comment or Documentation:
          1. Remove the initial /* and final */ characters.
          2. Remove any white space immediately after the initial /*, up to and including the first line terminator (if any).
          3. On each subsequent line of the text:
            1. Strip initial white space other than line terminators.
            2. Then, if the first remaining character is \"*\", remove it.
            3. Then, if the first remaining character is now a space, remove it.
        2. The body text of a Comment can include markup information (such as HTML), and a conforming tool may display such text as rendered according to the markup. However, marked up \"rich text\" for a Comment written using the KerML textual concrete syntax shall be stored in the Comment body in plain text including all mark up text, with all line terminators and white space included as entered, other than what is removed according to the rules above.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.3.3", + "lines": [ + "Clause 8.2.3.3.3 Textual Representation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "TextualRepresentation", + "clause_id": "8.2.3.3.3", + "is_partial": false, + "lines": [ + "TextualRepresentation =", + " ( 'rep' Identification )?", + " 'language' language = STRING_VALUE", + " body = REGULAR_COMMENT" + ], + "name": "TextualRepresentation" + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.3.3", + "html_snippet": "
        1. The lexical text of a REGULAR_COMMENT shall be processed as specified in 8.2.3.3.2 for Comments before being included as the body of a TextualRepresentation.
        2. See also 8.3.2.3.6 on the standard language names recognized for a TextualRepresentation.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.4", + "lines": [ + "Clause 8.2.3.4 Namespaces Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.4.1", + "lines": [ + "Clause 8.2.3.4.1 Namespaces" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "RootNamespace : Namespace =", + " NamespaceBodyElement*" + ], + "name": "RootNamespace" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.4.1", + "lines": [ + "// (See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "Namespace =", + " ( ownedRelationship += PrefixMetadataMember )*", + " NamespaceDeclaration NamespaceBody" + ], + "name": "Namespace" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.4.1", + "lines": [ + "// (See Note 2)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NamespaceDeclaration : Namespace =", + " 'namespace' Identification" + ], + "name": "NamespaceDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NamespaceBody : Namespace =", + " ';' | '{' NamespaceBodyElement* '}'" + ], + "name": "NamespaceBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NamespaceBodyElement : Namespace =", + " ownedRelationship += NamespaceMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import" + ], + "name": "NamespaceBodyElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "MemberPrefix : Membership =", + " ( visibility = VisibilityIndicator )?" + ], + "name": "MemberPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "VisibilityKind", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "VisibilityIndicator : VisibilityKind =", + " 'public' | 'private' | 'protected'" + ], + "name": "VisibilityIndicator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NamespaceMember : OwningMembership =", + " NonFeatureMember", + " | NamespaceFeatureMember" + ], + "name": "NamespaceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NonFeatureMember : OwningMembership =", + " MemberPrefix", + " ownedRelatedElement += MemberElement" + ], + "name": "NonFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NamespaceFeatureMember : OwningMembership =", + " MemberPrefix", + " ownedRelatedElement += FeatureElement" + ], + "name": "NamespaceFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "AliasMember : Membership =", + " MemberPrefix", + " 'alias' ( '<' memberShortName = NAME '>' )?", + " ( memberName = NAME )?", + " 'for' memberElement = [QualifiedName]", + " RelationshipBody" + ], + "name": "AliasMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "QualifiedName", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "QualifiedName =", + " ( '$' '::' )? ( NAME '::' )* NAME" + ], + "name": "QualifiedName" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.4.1", + "lines": [ + "// (See Note 3)" + ] + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.4.1", + "html_snippet": "
        1. A root Namespace is a Namespace that has no owningNamespace (see 8.3.2.4). Every Element other than a root Namespace must be contained, directly or indirectly, within some root Namespace. Therefore, every valid KerML concrete syntax text can be parsed starting from the RootNamespace production.
        2. PrefixMetadataMember is defined in the Kernel layer (see 8.2.5.12).
        3. A qualified name is notated as a sequence of segment names separated by \"::\" punctuation, optionally with the global scope qualifier \"$\" as an initial segment. An unqualified name can be considered the degenerate case of a qualified name with a single segment name. A qualified name is used in the KerML textual concrete syntax to identify an Element that is being referred to in the representation of another Element. A qualified name used in this way does not appear in the corresponding abstract syntax—instead, the abstract syntax representation contains an actual reference to the identified Element. Name resolution is the process of determining the Element that is identified by a qualified name. The segment names of the qualified name other than the last identify a sequence of nested Namespaces that provide the context for resolving the final segment name (see 8.2.3.5). The notation [QualifiedName] is used in concrete syntax grammar productions to indicate the result of resolving text parsed as a QualifiedName (see also 8.2.1).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.4.2", + "lines": [ + "Clause 8.2.3.4.2 Imports" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Import", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "Import =", + " visibility = VisibilityIndicator", + " 'import' ( isImportAll ?= 'all' )?", + " ImportDeclaration RelationshipBody" + ], + "name": "Import" + }, + { + "@type": "Production", + "abstract_syntax_type": "Import", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "ImportDeclaration : Import =", + " MembershipImport | NamespaceImport" + ], + "name": "ImportDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "MembershipImport", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "MembershipImport =", + " importedMembership = [QualifiedName]", + " ( '::' isRecursive ?= '**' )?" + ], + "name": "MembershipImport" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.4.2", + "lines": [ + "// (See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "NamespaceImport", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "NamespaceImport =", + " importedNamespace = [QualifiedName] '::' '*'", + " ( '::' isRecursive ?= '**' )?", + " | importedNamespace = FilterPackage", + " { ownedRelatedElement += importedNamespace }" + ], + "name": "NamespaceImport" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "FilterPackage : Package =", + " ownedRelationship += ImportDeclaration", + " ( ownedRelationship += FilterPackageMember )+" + ], + "name": "FilterPackage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ElementFilterMembership", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "FilterPackageMember : ElementFilterMembership =", + " '[' ownedRelatedElement += OwnedExpression ']'" + ], + "name": "FilterPackageMember" + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.4.2", + "html_snippet": "
        1. The importedMembership of a MembershipImport is the single case in which the Element required from the resolution [QualifiedName] is the actual Membership identified by the QualifedName, not the memberElement of that Membership (see 8.2.3.5).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.4.3", + "lines": [ + "Clause 8.2.3.4.3 Namespace Elements" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.3.4.3", + "is_partial": false, + "lines": [ + "MemberElement : Element =", + " AnnotatingElement | NonFeatureElement" + ], + "name": "MemberElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.3.4.3", + "is_partial": false, + "lines": [ + "NonFeatureElement : Element =", + " Dependency", + " | Namespace", + " | Type", + " | Classifier", + " | DataType", + " | Class", + " | Structure", + " | Metaclass", + " | Association", + " | AssociationStructure", + " | Interaction", + " | Behavior", + " | Function", + " | Predicate", + " | Multiplicity", + " | Package", + " | LibraryPackage", + " | Specialization", + " | Conjugation", + " | Subclassification", + " | Disjoining", + " | FeatureInverting", + " | FeatureTyping", + " | Subsetting", + " | Redefinition", + " | TypeFeaturing" + ], + "name": "NonFeatureElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.3.4.3", + "is_partial": false, + "lines": [ + "FeatureElement : Feature =", + " Feature", + " | Step", + " | Expression", + " | BooleanExpression", + " | Invariant", + " | Connector", + " | BindingConnector", + " | Succession", + " | Flow", + " | SuccessionFlow" + ], + "name": "FeatureElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5", + "lines": [ + "Clause 8.2.3.5 Name Resolution" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5.1", + "lines": [ + "Clause 8.2.3.5.1 Name Resolution Overview" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5.2", + "lines": [ + "Clause 8.2.3.5.2 Local and Global Namespaces" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5.3", + "lines": [ + "Clause 8.2.3.5.3 Local and Visible Resolution" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5.4", + "lines": [ + "Clause 8.2.3.5.4 Full Resolution" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.4", + "lines": [ + "Clause 8.2.4 Core Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1", + "lines": [ + "Clause 8.2.4.1 Types Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.1", + "lines": [ + "Clause 8.2.4.1.1 Types" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "Type =", + " TypePrefix 'type'", + " TypeDeclaration TypeBody" + ], + "name": "Type" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "TypePrefix : Type =", + " ( isAbstract ?= 'abstract' )?", + " ( ownedRelationship += PrefixMetadataMember )*" + ], + "name": "TypePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "TypeDeclaration : Type =", + " ( isSufficient ?= 'all' )? Identification", + " ( ownedRelationship += OwnedMultiplicity )?", + " ( SpecializationPart | ConjugationPart )+", + " TypeRelationshipPart*" + ], + "name": "TypeDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "SpecializationPart : Type =", + " SPECIALIZES ownedRelationship += OwnedSpecialization", + " ( ',' ownedRelationship += OwnedSpecialization )*" + ], + "name": "SpecializationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "ConjugationPart : Type =", + " CONJUGATES ownedRelationship += OwnedConjugation" + ], + "name": "ConjugationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "TypeRelationshipPart : Type =", + " DisjoiningPart", + " | UnioningPart", + " | IntersectingPart", + " | DifferencingPart" + ], + "name": "TypeRelationshipPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "DisjoiningPart : Type =", + " 'disjoint' 'from' ownedRelationship += OwnedDisjoining", + " ( ',' ownedRelationship += OwnedDisjoining )*" + ], + "name": "DisjoiningPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "UnioningPart : Type =", + " 'unions' ownedRelationship += Unioning", + " ( ',' ownedRelationship += Unioning )*" + ], + "name": "UnioningPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "IntersectingPart : Type =", + " 'intersects' ownedRelationship += Intersecting", + " ( ',' ownedRelationship += Intersecting )*" + ], + "name": "IntersectingPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "DifferencingPart : Type =", + " 'differences' ownedRelationship += Differencing", + " ( ',' ownedRelationship += Differencing )*" + ], + "name": "DifferencingPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "TypeBody : Type =", + " ';' | '{' TypeBodyElement* '}'" + ], + "name": "TypeBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "TypeBodyElement : Type =", + " ownedRelationship += NonFeatureMember", + " | ownedRelationship += FeatureMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import" + ], + "name": "TypeBodyElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.2", + "lines": [ + "Clause 8.2.4.1.2 Specialization" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Specialization", + "clause_id": "8.2.4.1.2", + "is_partial": false, + "lines": [ + "Specialization =", + " ( 'specialization' Identification )?", + " 'subtype' SpecificType", + " SPECIALIZES GeneralType", + " RelationshipBody" + ], + "name": "Specialization" + }, + { + "@type": "Production", + "abstract_syntax_type": "Specialization", + "clause_id": "8.2.4.1.2", + "is_partial": false, + "lines": [ + "OwnedSpecialization : Specialization =", + " GeneralType" + ], + "name": "OwnedSpecialization" + }, + { + "@type": "Production", + "abstract_syntax_type": "Specialization", + "clause_id": "8.2.4.1.2", + "is_partial": false, + "lines": [ + "SpecificType : Specialization =", + " specific = [QualifiedName]", + " | specific += OwnedFeatureChain", + " { ownedRelatedElement += specific }" + ], + "name": "SpecificType" + }, + { + "@type": "Production", + "abstract_syntax_type": "Specialization", + "clause_id": "8.2.4.1.2", + "is_partial": false, + "lines": [ + "GeneralType : Specialization =", + " general = [QualifiedName]", + " | general += OwnedFeatureChain", + " { ownedRelatedElement += general }" + ], + "name": "GeneralType" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.3", + "lines": [ + "Clause 8.2.4.1.3 Conjugation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Conjugation", + "clause_id": "8.2.4.1.3", + "is_partial": false, + "lines": [ + "Conjugation =", + " ( 'conjugation' Identification )?", + " 'conjugate'", + " ( conjugatedType = [QualifiedName]", + " | conjugatedType = FeatureChain", + " { ownedRelatedElement += conjugatedType }", + " )", + " CONJUGATES", + " ( originalType = [QualifiedName]", + " | originalType = FeatureChain", + " { ownedRelatedElement += originalType }", + " )", + " RelationshipBody" + ], + "name": "Conjugation" + }, + { + "@type": "Production", + "abstract_syntax_type": "Conjugation", + "clause_id": "8.2.4.1.3", + "is_partial": false, + "lines": [ + "OwnedConjugation : Conjugation =", + " originalType = [QualifiedName]", + " | originalType = FeatureChain", + " { ownedRelatedElement += originalType }" + ], + "name": "OwnedConjugation" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.4", + "lines": [ + "Clause 8.2.4.1.4 Disjoining" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Disjoining", + "clause_id": "8.2.4.1.4", + "is_partial": false, + "lines": [ + "Disjoining =", + " ( 'disjoining' Identification )?", + " 'disjoint'", + " ( typeDisjoined = [QualifiedName]", + " | typeDisjoined = FeatureChain", + " { ownedRelatedElement += typeDisjoined }", + " )", + " 'from'", + " ( disjoiningType = [QualifiedName]", + " | disjoiningType = FeatureChain", + " { ownedRelatedElement += disjoiningType }", + " )", + " RelationshipBody" + ], + "name": "Disjoining" + }, + { + "@type": "Production", + "abstract_syntax_type": "Disjoining", + "clause_id": "8.2.4.1.4", + "is_partial": false, + "lines": [ + "OwnedDisjoining : Disjoining =", + " disjoiningType = [QualifiedName]", + " | disjoiningType = FeatureChain", + " { ownedRelatedElement += disjoiningType }" + ], + "name": "OwnedDisjoining" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.5", + "lines": [ + "Clause 8.2.4.1.5 Unioning, Intersecting and Differencing" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Unioning", + "clause_id": "8.2.4.1.5", + "is_partial": false, + "lines": [ + "Unioning =", + " unioningType = [QualifiedName]", + " | ownedRelatedElement += OwnedFeatureChain" + ], + "name": "Unioning" + }, + { + "@type": "Production", + "abstract_syntax_type": "Intersecting", + "clause_id": "8.2.4.1.5", + "is_partial": false, + "lines": [ + "Intersecting =", + " intersectingType = [QualifiedName]", + " | ownedRelatedElement += OwnedFeatureChain" + ], + "name": "Intersecting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Differencing", + "clause_id": "8.2.4.1.5", + "is_partial": false, + "lines": [ + "Differencing =", + " differencingType = [QualifiedName]", + " | ownedRelatedElement += OwnedFeatureChain" + ], + "name": "Differencing" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.6", + "lines": [ + "Clause 8.2.4.1.6 Feature Membership" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.4.1.6", + "is_partial": false, + "lines": [ + "FeatureMember : OwningMembership =", + " TypeFeatureMember", + " | OwnedFeatureMember" + ], + "name": "FeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.4.1.6", + "is_partial": false, + "lines": [ + "TypeFeatureMember : OwningMembership =", + " MemberPrefix 'member' ownedRelatedElement += FeatureElement" + ], + "name": "TypeFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.4.1.6", + "is_partial": false, + "lines": [ + "OwnedFeatureMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += FeatureElement" + ], + "name": "OwnedFeatureMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.2", + "lines": [ + "Clause 8.2.4.2 Classifiers Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.4.2.1", + "lines": [ + "Clause 8.2.4.2.1 Classifiers" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Classifier", + "clause_id": "8.2.4.2.1", + "is_partial": false, + "lines": [ + "Classifier =", + " TypePrefix 'classifier'", + " ClassifierDeclaration TypeBody" + ], + "name": "Classifier" + }, + { + "@type": "Production", + "abstract_syntax_type": "Classifier", + "clause_id": "8.2.4.2.1", + "is_partial": false, + "lines": [ + "ClassifierDeclaration : Classifier =", + " ( isSufficient ?= 'all' )? Identification", + " ( ownedRelationship += OwnedMultiplicity )?", + " ( SuperclassingPart | ConjugationPart )?", + " TypeRelationshipPart*" + ], + "name": "ClassifierDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Classifier", + "clause_id": "8.2.4.2.1", + "is_partial": false, + "lines": [ + "SuperclassingPart : Classifier =", + " SPECIALIZES ownedRelationship += OwnedSubclassification", + " ( ',' ownedRelationship += OwnedSubclassification )*" + ], + "name": "SuperclassingPart" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.2.2", + "lines": [ + "Clause 8.2.4.2.2 Subclassification" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Subclassification", + "clause_id": "8.2.4.2.2", + "is_partial": false, + "lines": [ + "Subclassification =", + " ( 'specialization' Identification )?", + " 'subclassifier' subclassifier = [QualifiedName]", + " SPECIALIZES superclassifier = [QualifiedName]", + " RelationshipBody" + ], + "name": "Subclassification" + }, + { + "@type": "Production", + "abstract_syntax_type": "Subclassification", + "clause_id": "8.2.4.2.2", + "is_partial": false, + "lines": [ + "OwnedSubclassification : Subclassification =", + " superclassifier = [QualifiedName]" + ], + "name": "OwnedSubclassification" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3", + "lines": [ + "Clause 8.2.4.3 Features Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.1", + "lines": [ + "Clause 8.2.4.3.1 Features" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Feature =", + " ( FeaturePrefix", + " ( 'feature' | ownedRelationship += PrefixMetadataMember )", + " FeatureDeclaration?", + " | ( EndFeaturePrefix | BasicFeaturePrefix )", + " FeatureDeclaration", + " )", + " ValuePart? TypeBody" + ], + "name": "Feature" + }, + { + "@type": "Comment", + "clause_id": "8.2.4.3.1", + "lines": [ + "// (See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "EndFeaturePrefix : Feature =", + " ( isConstant ?= 'const' { isVariable = true } )?", + " isEnd ?= 'end'" + ], + "name": "EndFeaturePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "BasicFeaturePrefix : Feature =", + " ( direction = FeatureDirection )?", + " ( isDerived ?= 'derived' )?", + " ( isAbstract ?= 'abstract' )?", + " ( isComposite ?= 'composite' | isPortion ?= 'portion' )?", + " ( isVariable ?= 'var' | isConstant ?= 'const' { isVariable = true } )?" + ], + "name": "BasicFeaturePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeaturePrefix", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeaturePrefix =", + " ( EndFeaturePrefix ( ownedRelationship += OwnedCrossFeatureMember )?", + " | BasicFeaturePrefix", + " )", + " ( ownedRelationship += PrefixMetadataMember )*" + ], + "name": "FeaturePrefix" + }, + { + "@type": "Comment", + "clause_id": "8.2.4.3.1", + "lines": [ + "// (See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "OwnedCrossFeatureMember : OwningMembership =", + " ownedRelatedElement += OwnedCrossFeature" + ], + "name": "OwnedCrossFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "OwnedCrossFeature : Feature =", + " BasicFeaturePrefix FeatureDeclaration" + ], + "name": "OwnedCrossFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureDirectionKind", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureDirection : FeatureDirectionKind =", + " 'in' | 'out' | 'inout'" + ], + "name": "FeatureDirection" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureDeclaration : Feature =", + " ( isSufficient ?= 'all' )?", + " ( FeatureIdentification", + " ( FeatureSpecializationPart | ConjugationPart )?", + " | FeatureSpecializationPart", + " | ConjugationPart", + " )", + " FeatureRelationshipPart*" + ], + "name": "FeatureDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureIdentification : Feature =", + " '<' declaredShortName = NAME '>' ( declaredName = NAME )?", + " | declaredName = NAME" + ], + "name": "FeatureIdentification" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureRelationshipPart : Feature =", + " TypeRelationshipPart", + " | ChainingPart", + " | InvertingPart", + " | TypeFeaturingPart" + ], + "name": "FeatureRelationshipPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "ChainingPart : Feature =", + " 'chains'", + " ( ownedRelationship += OwnedFeatureChaining", + " | FeatureChain )" + ], + "name": "ChainingPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "InvertingPart : Feature =", + " 'inverse' 'of' ownedRelationship += OwnedFeatureInverting" + ], + "name": "InvertingPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "TypeFeaturingPart : Feature =", + " 'featured' 'by' ownedRelationship += OwnedTypeFeaturing", + " ( ',' ownedTypeFeaturing += OwnedTypeFeaturing )*" + ], + "name": "TypeFeaturingPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureSpecializationPart : Feature =", + " FeatureSpecialization+ MultiplicityPart? FeatureSpecialization*", + " | MultiplicityPart FeatureSpecialization*" + ], + "name": "FeatureSpecializationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "MultiplicityPart : Feature =", + " ownedRelationship += OwnedMultiplicity", + " | ( ownedRelationship += OwnedMultiplicity )?", + " ( isOrdered ?= 'ordered' ( {isUnique = false} 'nonunique' )?", + " | {isUnique = false} 'nonunique' ( isOrdered ?= 'ordered' )? )" + ], + "name": "MultiplicityPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureSpecialization : Feature =", + " Typings | Subsettings | References | Crosses | Redefinitions" + ], + "name": "FeatureSpecialization" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Typings : Feature =", + " TypedBy ( ',' ownedRelationship += OwnedFeatureTyping )*" + ], + "name": "Typings" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "TypedBy : Feature =", + " TYPED_BY ownedRelationship += OwnedFeatureTyping" + ], + "name": "TypedBy" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Subsettings : Feature =", + " Subsets ( ',' ownedRelationship += OwnedSubsetting )*" + ], + "name": "Subsettings" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Subsets : Feature =", + " SUBSETS ownedRelationship += OwnedSubsetting" + ], + "name": "Subsets" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "References : Feature =", + " REFERENCES ownedRelationship += OwnedReferenceSubsetting" + ], + "name": "References" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Crosses : Feature =", + " CROSSES ownedRelationship += OwnedCrossSubsetting" + ], + "name": "Crosses" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Redefinitions : Feature =", + " Redefines ( ',' ownedRelationship += OwnedRedefinition )*" + ], + "name": "Redefinitions" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Redefines : Feature =", + " REDEFINES ownedRelationship += OwnedRedefinition" + ], + "name": "Redefines" + }, + { + "@type": "NoteList", + "clause_id": "8.2.4.3.1", + "html_snippet": "
        1. PrefixMetadataMember is defined in the Kernel layer (see 8.3.4.12).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.2", + "lines": [ + "Clause 8.2.4.3.2 Feature Typing" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureTyping", + "clause_id": "8.2.4.3.2", + "is_partial": false, + "lines": [ + "FeatureTyping =", + " ( 'specialization' Identification )?", + " 'typing' typedFeature = [QualifiedName]", + " TYPED_BY GeneralType", + " RelationshipBody" + ], + "name": "FeatureTyping" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureTyping", + "clause_id": "8.2.4.3.2", + "is_partial": false, + "lines": [ + "OwnedFeatureTyping : FeatureTyping =", + " GeneralType" + ], + "name": "OwnedFeatureTyping" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.3", + "lines": [ + "Clause 8.2.4.3.3 Subsetting" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Subsetting", + "clause_id": "8.2.4.3.3", + "is_partial": false, + "lines": [ + "Subsetting =", + " ( 'specialization' Identification )?", + " 'subset' SpecificType", + " SUBSETS GeneralType", + " RelationshipBody" + ], + "name": "Subsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Subsetting", + "clause_id": "8.2.4.3.3", + "is_partial": false, + "lines": [ + "OwnedSubsetting : Subsetting =", + " GeneralType" + ], + "name": "OwnedSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceSubsetting", + "clause_id": "8.2.4.3.3", + "is_partial": false, + "lines": [ + "OwnedReferenceSubsetting : ReferenceSubsetting =", + " GeneralType" + ], + "name": "OwnedReferenceSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "CrossSubsetting", + "clause_id": "8.2.4.3.3", + "is_partial": false, + "lines": [ + "OwnedCrossSubsetting : CrossSubsetting =", + " GeneralType" + ], + "name": "OwnedCrossSubsetting" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.4", + "lines": [ + "Clause 8.2.4.3.4 Redefinition" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.4.3.4", + "is_partial": false, + "lines": [ + "Redefinition =", + " ( 'specialization' Identification )?", + " 'redefinition' SpecificType", + " REDEFINES GeneralType", + " RelationshipBody" + ], + "name": "Redefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.4.3.4", + "is_partial": false, + "lines": [ + "OwnedRedefinition : Redefinition =", + " GeneralType" + ], + "name": "OwnedRedefinition" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.5", + "lines": [ + "Clause 8.2.4.3.5 Feature Chaining" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.5", + "is_partial": false, + "lines": [ + "OwnedFeatureChain : Feature =", + " FeatureChain" + ], + "name": "OwnedFeatureChain" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.5", + "is_partial": false, + "lines": [ + "FeatureChain : Feature =", + " ownedRelationship += OwnedFeatureChaining", + " ( '.' ownedRelationship += OwnedFeatureChaining )+" + ], + "name": "FeatureChain" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureChaining", + "clause_id": "8.2.4.3.5", + "is_partial": false, + "lines": [ + "OwnedFeatureChaining : FeatureChaining =", + " chainingFeature = [QualifiedName]" + ], + "name": "OwnedFeatureChaining" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.6", + "lines": [ + "Clause 8.2.4.3.6 Feature Inverting" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureInverting", + "clause_id": "8.2.4.3.6", + "is_partial": false, + "lines": [ + "FeatureInverting =", + " ( 'inverting' Identification? )?", + " 'inverse'", + " ( featureInverted = [QualifiedName]", + " | featureInverted = OwnedFeatureChain", + " { ownedRelatedElement += featureInverted }", + " )", + " 'of'", + " ( invertingFeature = [QualifiedName]", + " | ownedRelatedElement += OwnedFeatureChain", + " { ownedRelatedElement += invertingFeature }", + " )", + " RelationshipBody" + ], + "name": "FeatureInverting" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureInverting", + "clause_id": "8.2.4.3.6", + "is_partial": false, + "lines": [ + "OwnedFeatureInverting : FeatureInverting =", + " invertingFeature = [QualifiedName]", + " | invertingFeature = OwnedFeatureChain", + " { ownedRelatedElement += invertingFeature }" + ], + "name": "OwnedFeatureInverting" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.7", + "lines": [ + "Clause 8.2.4.3.7 Type Featuring" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "TypeFeaturing", + "clause_id": "8.2.4.3.7", + "is_partial": false, + "lines": [ + "TypeFeaturing =", + " 'featuring' ( Identification 'of' )?", + " featureOfType = [QualifiedName]", + " 'by' featuringType = [QualifiedName]", + " RelationshipBody" + ], + "name": "TypeFeaturing" + }, + { + "@type": "Production", + "abstract_syntax_type": "TypeFeaturing", + "clause_id": "8.2.4.3.7", + "is_partial": false, + "lines": [ + "OwnedTypeFeaturing : TypeFeaturing =", + " featuringType = [QualifiedName]" + ], + "name": "OwnedTypeFeaturing" + }, + { + "@type": "Heading", + "clause_id": "8.2.5", + "lines": [ + "Clause 8.2.5 Kernel Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.1", + "lines": [ + "Clause 8.2.5.1 Data Types Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "DataType", + "clause_id": "8.2.5.1", + "is_partial": false, + "lines": [ + "DataType =", + " TypePrefix 'datatype'", + " ClassifierDeclaration TypeBody" + ], + "name": "DataType" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.2", + "lines": [ + "Clause 8.2.5.2 Classes Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Class", + "clause_id": "8.2.5.2", + "is_partial": false, + "lines": [ + "Class =", + " TypePrefix 'class'", + " ClassifierDeclaration TypeBody" + ], + "name": "Class" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.3", + "lines": [ + "Clause 8.2.5.3 Structures Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Structure", + "clause_id": "8.2.5.3", + "is_partial": false, + "lines": [ + "Structure =", + " TypePrefix 'struct'", + " ClassifierDeclaration TypeBody" + ], + "name": "Structure" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.4", + "lines": [ + "Clause 8.2.5.4 Associations Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Association", + "clause_id": "8.2.5.4", + "is_partial": false, + "lines": [ + "Association =", + " TypePrefix 'assoc'", + " ClassifierDeclaration TypeBody" + ], + "name": "Association" + }, + { + "@type": "Production", + "abstract_syntax_type": "AssociationStructure", + "clause_id": "8.2.5.4", + "is_partial": false, + "lines": [ + "AssociationStructure =", + " TypePrefix 'assoc' 'struct'", + " ClassifierDeclaration TypeBody" + ], + "name": "AssociationStructure" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.5", + "lines": [ + "Clause 8.2.5.5 Connectors Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.5.1", + "lines": [ + "Clause 8.2.5.5.1 Connectors" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Connector", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "Connector =", + " FeaturePrefix 'connector'", + " ( FeatureDeclaration? ValuePart?", + " | ConnectorDeclaration", + " )", + " TypeBody" + ], + "name": "Connector" + }, + { + "@type": "Production", + "abstract_syntax_type": "Connector", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "ConnectorDeclaration : Connector =", + " BinaryConnectorDeclaration | NaryConnectorDeclaration" + ], + "name": "ConnectorDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Connector", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "BinaryConnectorDeclaration : Connector =", + " ( FeatureDeclaration? 'from' | isSufficient ?= 'all' 'from'? )?", + " ownedRelationship += ConnectorEndMember 'to'", + " ownedRelationship += ConnectorEndMember" + ], + "name": "BinaryConnectorDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Connector", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "NaryConnectorDeclaration : Connector =", + " FeatureDeclaration?", + " '(' ownedRelationship += ConnectorEndMember ','", + " ownedRelationship += ConnectorEndMember", + " ( ',' ownedRelationship += ConnectorEndMember )*", + " ')'" + ], + "name": "NaryConnectorDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "ConnectorEndMember : EndFeatureMembership =", + " ownedRelatedElement += ConnectorEnd" + ], + "name": "ConnectorEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "ConnectorEnd : Feature =", + "\t( ownedRelationship += OwnedCrossMultiplicityMember )?", + "\t( declaredName = NAME REFERENCES )?", + "\townedRelationship += OwnedReferenceSubsetting" + ], + "name": "ConnectorEnd" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "OwnedCrossMultiplicityMember : OwningMembership =", + "\townedRelatedElement += OwnedCrossMultiplicity" + ], + "name": "OwnedCrossMultiplicityMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "OwnedCrossMultiplicity : Feature =", + "\townedRelationship += OwnedMultiplicity" + ], + "name": "OwnedCrossMultiplicity" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.5.2", + "lines": [ + "Clause 8.2.5.5.2 Binding Connectors" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "BindingConnector", + "clause_id": "8.2.5.5.2", + "is_partial": false, + "lines": [ + "BindingConnector =", + " FeaturePrefix 'binding'", + " BindingConnectorDeclaration TypeBody" + ], + "name": "BindingConnector" + }, + { + "@type": "Production", + "abstract_syntax_type": "BindingConnector", + "clause_id": "8.2.5.5.2", + "is_partial": false, + "lines": [ + "BindingConnectorDeclaration : BindingConnector =", + " FeatureDeclaration", + " ( 'of' ownedRelationship += ConnectorEndMember", + " '=' ownedRelationship += ConnectorEndMember )?", + " | ( isSufficient ?= 'all' )?", + " ( 'of'? ownedRelationship += ConnectorEndMember", + " '=' ownedRelationship += ConnectorEndMember )?" + ], + "name": "BindingConnectorDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.5.3", + "lines": [ + "Clause 8.2.5.5.3 Successions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Succession", + "clause_id": "8.2.5.5.3", + "is_partial": false, + "lines": [ + "Succession =", + " FeaturePrefix 'succession'", + " SuccessionDeclaration TypeBody" + ], + "name": "Succession" + }, + { + "@type": "Production", + "abstract_syntax_type": "Succession", + "clause_id": "8.2.5.5.3", + "is_partial": false, + "lines": [ + "SuccessionDeclaration : Succession =", + " FeatureDeclaration", + " ( 'first' ownedRelationship += ConnectorEndMember", + " 'then' ownedRelationship += ConnectorEndMember )?", + " | ( s.isSufficient ?= 'all' )?", + " ( 'first'? ownedRelationship += ConnectorEndMember", + " 'then' ownedRelationship += ConnectorEndMember )?" + ], + "name": "SuccessionDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.6", + "lines": [ + "Clause 8.2.5.6 Behaviors Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.6.1", + "lines": [ + "Clause 8.2.5.6.1 Behaviors" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Behavior", + "clause_id": "8.2.5.6.1", + "is_partial": false, + "lines": [ + "Behavior =", + " TypePrefix 'behavior'", + " ClassifierDeclaration TypeBody" + ], + "name": "Behavior" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.6.2", + "lines": [ + "Clause 8.2.5.6.2 Steps" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Step", + "clause_id": "8.2.5.6.2", + "is_partial": false, + "lines": [ + "Step =", + " FeaturePrefix", + " 'step' FeatureDeclaration ValuePart?", + " TypeBody" + ], + "name": "Step" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.7", + "lines": [ + "Clause 8.2.5.7 Functions Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.7.1", + "lines": [ + "Clause 8.2.5.7.1 Functions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Function", + "clause_id": "8.2.5.7.1", + "is_partial": false, + "lines": [ + "Function =", + " TypePrefix 'function'", + " ClassifierDeclaration FunctionBody" + ], + "name": "Function" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.5.7.1", + "is_partial": false, + "lines": [ + "FunctionBody : Type =", + " ';' | '{' FunctionBodyPart '}'" + ], + "name": "FunctionBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.5.7.1", + "is_partial": false, + "lines": [ + "FunctionBodyPart : Type =", + " ( TypeBodyElement", + " | ownedRelationship += ReturnFeatureMember", + " )*", + " ( ownedRelationship += ResultExpressionMember )?" + ], + "name": "FunctionBodyPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReturnParameterMembership", + "clause_id": "8.2.5.7.1", + "is_partial": false, + "lines": [ + "ReturnFeatureMember : ReturnParameterMembership =", + " MemberPrefix 'return'", + " ownedRelatedElement += FeatureElement" + ], + "name": "ReturnFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ResultExpressionMembership", + "clause_id": "8.2.5.7.1", + "is_partial": false, + "lines": [ + "ResultExpressionMember : ResultExpressionMembership =", + " MemberPrefix", + " ownedRelatedElement += OwnedExpression" + ], + "name": "ResultExpressionMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.7.2", + "lines": [ + "Clause 8.2.5.7.2 Expressions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.7.2", + "is_partial": false, + "lines": [ + "Expression =", + " FeaturePrefix", + " 'expr' FeatureDeclaration ValuePart?", + " FunctionBody" + ], + "name": "Expression" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.7.3", + "lines": [ + "Clause 8.2.5.7.3 Predicates" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Predicate", + "clause_id": "8.2.5.7.3", + "is_partial": false, + "lines": [ + "Predicate =", + " TypePrefix 'predicate'", + " ClassifierDeclaration FunctionBody" + ], + "name": "Predicate" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.7.4", + "lines": [ + "Clause 8.2.5.7.4 Boolean Expressions and Invariants" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "BooleanExpression", + "clause_id": "8.2.5.7.4", + "is_partial": false, + "lines": [ + "BooleanExpression =", + " FeaturePrefix", + " 'bool' FeatureDeclaration ValuePart?", + " FunctionBody" + ], + "name": "BooleanExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "Invariant", + "clause_id": "8.2.5.7.4", + "is_partial": false, + "lines": [ + "Invariant =", + " FeaturePrefix", + " 'inv' ( 'true' | isNegated ?= 'false' )?", + " FeatureDeclaration ValuePart?", + " FunctionBody" + ], + "name": "Invariant" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.8", + "lines": [ + "Clause 8.2.5.8 Expressions Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.8.1", + "lines": [ + "Clause 8.2.5.8.1 Operator Expressions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "OwnedExpressionReferenceMember : FeatureMembership =", + " ownedRelationship += OwnedExpressionReference" + ], + "name": "OwnedExpressionReferenceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureReferenceExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "OwnedExpressionReference : FeatureReferenceExpression =", + " ownedRelationship += OwnedExpressionMember" + ], + "name": "OwnedExpressionReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "OwnedExpressionMember : FeatureMembership =", + " ownedFeatureMember = OwnedExpression" + ], + "name": "OwnedExpressionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "OwnedExpression : Expression =", + " ConditionalExpression", + " | ConditionalBinaryOperatorExpression", + " | BinaryOperatorExpression", + " | UnaryOperatorExpression", + " | ClassificationExpression", + " | MetaclassificationExpression", + " | ExtentExpression", + " | PrimaryExpression" + ], + "name": "OwnedExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ConditionalExpression : OperatorExpression =", + " operator = 'if'", + " ownedRelationship += ArgumentMember '?'", + " ownedRelationship += ArgumentExpressionMember 'else'", + " ownedRelationship += ArgumentExpressionMember", + " ownedRelationship += EmptyResultMember" + ], + "name": "ConditionalExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ConditionalBinaryOperatorExpression : OperatorExpression =", + " ownedRelationship += ArgumentMember", + " operator = ConditionalBinaryOperator", + " ownedRelationship += ArgumentExpressionMember", + " ownedRelationship += EmptyResultMember" + ], + "name": "ConditionalBinaryOperatorExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConditionalBinaryOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ConditionalBinaryOperator =", + " '??' | 'or' | 'and' | 'implies'" + ], + "name": "ConditionalBinaryOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "BinaryOperatorExpression : OperatorExpression =", + " ownedRelationship += ArgumentMember", + " operator = BinaryOperator", + " ownedRelationship += ArgumentMember", + " ownedRelationship += EmptyResultMember" + ], + "name": "BinaryOperatorExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "BinaryOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "BinaryOperator =", + " '|' | '&' | 'xor' | '..'", + " | '==' | '!=' | '===' | '!=='", + " | '<' | '>' | '<=' | '>='", + " | '+' | '-' | '*' | '/'", + " | '%' | '^' | '**'" + ], + "name": "BinaryOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "UnaryOperatorExpression : OperatorExpression =", + " operator = UnaryOperator", + " ownedRelationship += ArgumentMember", + " ownedRelationship += EmptyResultMember" + ], + "name": "UnaryOperatorExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "UnaryOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "UnaryOperator =", + " '+' | '-' | '~' | 'not'" + ], + "name": "UnaryOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ClassificationExpression : OperatorExpression =", + " ( ownedRelationship += ArgumentMember )?", + " ( operator = ClassificationTestOperator", + " ownedRelationship += TypeReferenceMember", + " | operator = CastOperator", + " ownedRelationship += TypeResultMember", + " )", + " ownedRelationship += EmptyResultMember" + ], + "name": "ClassificationExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ClassificationTestOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ClassificationTestOperator =", + " 'istype' | 'hastype' | '@'" + ], + "name": "ClassificationTestOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "CastOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "CastOperator =", + " 'as'" + ], + "name": "CastOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetaclassificationExpression : OperatorExpression =", + " ownedRelationship += MetadataArgumentMember", + " ( operator = ClassificationTestOperator", + " ownedRelationship += TypeReferenceMember", + " | operator = MetaCastOperator", + " ownedRelationship += TypeResultMember", + " )", + " ownedRelationship += EmptyResultMember" + ], + "name": "MetaclassificationExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ArgumentMember : ParameterMembership =", + " ownedMemberParameter = Argument" + ], + "name": "ArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "Argument : Feature =", + " ownedRelationship += ArgumentValue" + ], + "name": "Argument" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ArgumentValue : FeatureValue =", + " value = OwnedExpression" + ], + "name": "ArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ArgumentExpressionMember : FeatureMembership =", + " ownedRelatedElement += ArgumentExpression" + ], + "name": "ArgumentExpressionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ArgumentExpression : Feature =", + " ownedRelationship += ArgumentExpressionValue" + ], + "name": "ArgumentExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ArgumentExpressionValue : FeatureValue =", + " value = OwnedExpressionReference" + ], + "name": "ArgumentExpressionValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetadataArgumentMember : ParameterMembership =", + " ownedRelatedElement += MetadataArgument" + ], + "name": "MetadataArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetadataArgument : Feature =", + " ownedRelationship += MetadataValue" + ], + "name": "MetadataArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetadataValue : FeatureValue =", + " value = MetadataReference" + ], + "name": "MetadataValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataAccessExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetadataReference : MetadataAccessExpression =", + " ownedRelationship += ElementReferenceMember" + ], + "name": "MetadataReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetaclassificationTestOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetaclassificationTestOperator =", + " '@@'" + ], + "name": "MetaclassificationTestOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetaCastOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetaCastOperator =", + " 'meta'" + ], + "name": "MetaCastOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ExtentExpression : OperatorExpression =", + " operator = 'all'", + " ownedRelationship += TypeReferenceMember" + ], + "name": "ExtentExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "TypeReferenceMember : ParameterMembership =", + " ownedMemberFeature = TypeReference" + ], + "name": "TypeReferenceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ResultParameterMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "TypeResultMember : ResultParameterMembership =", + " ownedMemberFeature = TypeReference" + ], + "name": "TypeResultMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "TypeReference : Feature =", + " ownedRelationship += ReferenceTyping" + ], + "name": "TypeReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureTyping", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ReferenceTyping : FeatureTyping =", + " type = [QualifiedName]" + ], + "name": "ReferenceTyping" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReturnParameterMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "EmptyResultMember : ReturnParameterMembership =", + " ownedRelatedElement += EmptyFeature" + ], + "name": "EmptyResultMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "EmptyFeature : Feature =", + " { }" + ], + "name": "EmptyFeature" + }, + { + "@type": "NoteList", + "clause_id": "8.2.5.8.1", + "html_snippet": "
        1. OperatorExpressions provide a shorthand notation for InvocationExpressions that invoke a library Function represented as an operator symbol. Table 5 shows the mapping from operator symbols to the Functions they represent from the Kernel Model Library (see Clause 9). An OperatorExpression contains subexpressions called its operands that generally correspond to the argument Expressions of the OperatorExpression, except in the case of operators representing control Functions, in which case the evaluation of certain operands is as determined by the Function (see 8.4.4.9 for details).
        2. Though not directly expressed in the syntactic productions given above, in any OperatorExpression containing nested OperatorExpressions, the nested OperatorExpressions shall be implicitly grouped according to the precedence of the operators involved, as given in Table 6. OperatorExpressions with higher precedence operators shall be grouped more tightly than those with lower precedence operators. Further, all BinaryOperators other than exponentiation are left-associative (i.e, they group to the left), while the exponentiation operators (^ and **) are right-associative (i.e., they group to the right).
        3. The unary operator symbol ~ maps to the library Function DataFunctions::'~', as shown in Table 5. This abstract Function may be given a concrete definition in a domain-specific Function library, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.8.2", + "lines": [ + "Clause 8.2.5.8.2 Primary Expressions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "PrimaryExpression : Expression =", + " FeatureChainExpression", + " | NonFeatureChainPrimaryExpression" + ], + "name": "PrimaryExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "PrimaryArgumentValue : FeatureValue =", + " value = PrimaryExpression" + ], + "name": "PrimaryArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "PrimaryArgument : Feature =", + " ownedRelationship += PrimaryArgumentValue" + ], + "name": "PrimaryArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "PrimaryArgumentMember : ParameterMembership =", + " ownedMemberParameter = PrimaryArgument" + ], + "name": "PrimaryArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "NonFeatureChainPrimaryExpression : Expression =", + " BracketExpression", + " | IndexExpression", + " | SequenceExpression", + " | SelectExpression", + " | CollectExpression", + " | FunctionOperationExpression", + " | BaseExpression" + ], + "name": "NonFeatureChainPrimaryExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "NonFeatureChainPrimaryArgumentValue : FeatureValue =", + " value = NonFeatureChainPrimaryExpression" + ], + "name": "NonFeatureChainPrimaryArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "NonFeatureChainPrimaryArgument : Feature =", + " ownedRelationship += NonFeatureChainPrimaryArgumentValue" + ], + "name": "NonFeatureChainPrimaryArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "NonFeatureChainPrimaryArgumentMember : ParameterMembership =", + " ownedMemberParameter = PrimaryArgument" + ], + "name": "NonFeatureChainPrimaryArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "BracketExpression : OperatorExpression =", + " ownedRelationship += PrimaryArgumentMember", + " operator = '['", + " ownedRelationship += SequenceExpressionListMember ']'" + ], + "name": "BracketExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "IndexExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "IndexExpression =", + " ownedRelationship += PrimaryArgumentMember '#'", + " '(' ownedRelationship += SequenceExpressionListMember ')'" + ], + "name": "IndexExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "SequenceExpression : Expression =", + " '(' SequenceExpressionList ')'" + ], + "name": "SequenceExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "SequenceExpressionList : Expression =", + " OwnedExpression ','? | SequenceOperatorExpression" + ], + "name": "SequenceExpressionList" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "SequenceOperatorExpression : OperatorExpression =", + " ownedRelationship += OwnedExpressionMember", + " operator = ','", + " ownedRelationship += SequenceExpressionListMember" + ], + "name": "SequenceOperatorExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "SequenceExpressionListMember : FeatureMembership =", + " ownedMemberFeature = SequenceExpressionList" + ], + "name": "SequenceExpressionListMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureChainExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FeatureChainExpression =", + " ownedRelationship += NonFeatureChainPrimaryArgumentMember '.'", + " ownedRelationship += FeatureChainMember" + ], + "name": "FeatureChainExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "CollectExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "CollectExpression =", + " ownedRelationship += PrimaryArgumentMember '.'", + " ownedRelationship += BodyArgumentMember" + ], + "name": "CollectExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "SelectExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "SelectExpression =", + " ownedRelationship += PrimaryArgumentMember '.?'", + " ownedRelationship += BodyArgumentMember" + ], + "name": "SelectExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "InvocationExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionOperationExpression : InvocationExpression =", + " ownedRelationship += PrimaryArgumentMember '->'", + " ownedRelationship += InvocationTypeMember", + " ( ownedRelationship += BodyArgumentMember", + " | ownedRelationship += FunctionReferenceArgumentMember", + " | ArgumentList )", + " ownedRelationship += EmptyResultMember" + ], + "name": "FunctionOperationExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "BodyArgumentMember : ParameterMembership =", + " ownedMemberParameter = BodyArgument" + ], + "name": "BodyArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "BodyArgument : Feature =", + " ownedRelationship += BodyArgumentValue" + ], + "name": "BodyArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "BodyArgumentValue : FeatureValue =", + " value = BodyExpression" + ], + "name": "BodyArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReferenceArgumentMember : ParameterMembership =", + " ownedMemberParameter = FunctionReferenceArgument" + ], + "name": "FunctionReferenceArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReferenceArgument : Feature =", + " ownedRelationship += FunctionReferenceArgumentValue" + ], + "name": "FunctionReferenceArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReferenceArgumentValue : FeatureValue =", + " value = FunctionReferenceExpression" + ], + "name": "FunctionReferenceArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureReferenceExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReferenceExpression : FeatureReferenceExpression =", + " ownedRelationship += FunctionReferenceMember" + ], + "name": "FunctionReferenceExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReferenceMember : FeatureMembership =", + " ownedMemberFeature = FunctionReference" + ], + "name": "FunctionReferenceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReference : Expression =", + " ownedRelationship += ReferenceTyping" + ], + "name": "FunctionReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FeatureChainMember : Membership =", + " FeatureReferenceMember", + " | OwnedFeatureChainMember" + ], + "name": "FeatureChainMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "OwnedFeatureChainMember : OwningMembership =", + " ownedMemberElement = FeatureChain" + ], + "name": "OwnedFeatureChainMember" + }, + { + "@type": "NoteList", + "clause_id": "8.2.5.8.2", + "html_snippet": "
        1. Primary expressions provide additional shorthand notations for certain kinds of InvocationExpressions. For those cases in which the InvocationExpression is an OperatorExpression, its operator shall be resolved to the appropriate library function as given in Table 7. Note also that, for a CollectionExpression or SelectExpression, the abstract syntax constrains the operator to be collect and select, respectively, separately from the . and .? symbols used in their concrete syntax notation (see 8.3.4.8.2 and 8.3.4.8.18).
        2. The grammar allows a bracket syntax [...]that parses to an invocation of the library Function BaseFunctions::'[', as shown in Table 7. This notation is available for use with domain-specific library models that given a concrete definition to the abstract base '[' Function, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.8.3", + "lines": [ + "Clause 8.2.5.8.3 Base Expressions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "BaseExpression : Expression =", + " NullExpression", + " | LiteralExpression", + " | FeatureReferenceExpression", + " | MetadataAccessExpression", + " | InvocationExpression", + " | ConstructorExpression", + " | BodyExpression" + ], + "name": "BaseExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "NullExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "NullExpression : NullExpression =", + " 'null' | '(' ')'" + ], + "name": "NullExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureReferenceExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "FeatureReferenceExpression : FeatureReferenceExpression =", + " ownedRelationship += FeatureReferenceMember", + " ownedRelationship += EmptyResultMember" + ], + "name": "FeatureReferenceExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "FeatureReferenceMember : Membership =", + " memberElement = FeatureReference" + ], + "name": "FeatureReferenceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "FeatureReference : Feature =", + " [QualifiedName]" + ], + "name": "FeatureReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataAccessExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "MetadataAccessExpression =", + " ownedRelationship += ElementReferenceMember '.' 'metadata'" + ], + "name": "MetadataAccessExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ElementReferenceMember : Membership =", + " memberElement = [QualifiedName]" + ], + "name": "ElementReferenceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "InvocationExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "InvocationExpression : InvocationExpression =", + " ownedRelationship += InstantiatedTypeMember", + " ArgumentList", + " ownedRelationship += EmptyResultMember" + ], + "name": "InvocationExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConstructorExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ConstructorExpression =", + " 'new' ownedRelationship += InstantiatedTypeMember", + " ownedRelationship += ConstructorResultMember" + ], + "name": "ConstructorExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReturnParameterMembership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ConstructorResultMember : ReturnParameterMembership =", + " ownedRelatedElement += ConstructorResult" + ], + "name": "ConstructorResultMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ConstructorResult : Feature =", + " ArgumentList" + ], + "name": "ConstructorResult" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "InstantiatedTypeMember : Membership =", + " memberElement = InstantiatedTypeReference", + " | OwnedFeatureChainMember" + ], + "name": "InstantiatedTypeMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "InstantiatedTypeReference : Type =", + " [QualifiedName]" + ], + "name": "InstantiatedTypeReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ArgumentList : Feature =", + " '(' ( PositionalArgumentList | NamedArgumentList )? ')'" + ], + "name": "ArgumentList" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "PositionalArgumentList : Feature =", + " e.ownedRelationship += ArgumentMember", + " ( ',' e.ownedRelationship += ArgumentMember )*" + ], + "name": "PositionalArgumentList" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "NamedArgumentList : Feature =", + " ownedRelationship += NamedArgumentMember", + " ( ',' ownedRelationship += NamedArgumentMember )*" + ], + "name": "NamedArgumentList" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "NamedArgumentMember : FeatureMembership =", + " ownedMemberFeature = NamedArgument" + ], + "name": "NamedArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "NamedArgument : Feature =", + " ownedRelationship += ParameterRedefinition '='", + " ownedRelationship += ArgumentValue" + ], + "name": "NamedArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ParameterRedefinition : Redefinition =", + " redefinedFeature = [QualifiedName]" + ], + "name": "ParameterRedefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureReferenceExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "BodyExpression : FeatureReferenceExpression =", + " ownedRelationship += ExpressionBodyMember" + ], + "name": "BodyExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ExpressionBodyMember : FeatureMembership =", + " ownedMemberFeature = ExpressionBody" + ], + "name": "ExpressionBodyMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ExpressionBody : Expression =", + " '{' FunctionBodyPart '}'" + ], + "name": "ExpressionBody" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.8.4", + "lines": [ + "Clause 8.2.5.8.4 Literal Expressions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralExpression", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralExpression =", + " LiteralBoolean", + " | LiteralString", + " | LiteralInteger", + " | LiteralReal", + " | LiteralInfinity" + ], + "name": "LiteralExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralBoolean", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralBoolean =", + " value = BooleanValue" + ], + "name": "LiteralBoolean" + }, + { + "@type": "Production", + "abstract_syntax_type": "Boolean", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "BooleanValue : Boolean =", + " 'true' | 'false'" + ], + "name": "BooleanValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralString", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralString =", + " value = STRING_VALUE" + ], + "name": "LiteralString" + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralInteger", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralInteger =", + " value = DECIMAL_VALUE" + ], + "name": "LiteralInteger" + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralReal", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralReal =", + " value = RealValue" + ], + "name": "LiteralReal" + }, + { + "@type": "Production", + "abstract_syntax_type": "Real", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "RealValue : Real =", + " DECIMAL_VALUE? '.' ( DECIMAL_VALUE | EXPONENTIAL_VALUE )", + " | EXPONENTIAL_VALUE" + ], + "name": "RealValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralInfinity", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralInfinity =", + " '*'" + ], + "name": "LiteralInfinity" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.9", + "lines": [ + "Clause 8.2.5.9 Interactions Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.9.1", + "lines": [ + "Clause 8.2.5.9.1 Interactions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Interaction", + "clause_id": "8.2.5.9.1", + "is_partial": false, + "lines": [ + "Interaction =", + " TypePrefix 'interaction'", + " ClassifierDeclaration TypeBody" + ], + "name": "Interaction" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.9.2", + "lines": [ + "Clause 8.2.5.9.2 Flows" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Flow", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "Flow =", + " FeaturePrefix 'flow'", + " FlowDeclaration TypeBody" + ], + "name": "Flow" + }, + { + "@type": "Production", + "abstract_syntax_type": "SuccessionFlow", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "SuccessionFlow =", + " FeaturePrefix 'succession' 'flow'", + " FlowDeclaration TypeBody" + ], + "name": "SuccessionFlow" + }, + { + "@type": "Production", + "abstract_syntax_type": "Flow", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowDeclaration : Flow =", + " FeatureDeclaration ValuePart?", + " ( 'of' ownedRelationship += PayloadFeatureMember )?", + " ( 'from' ownedRelationship += FlowEndMember", + " 'to' ownedRelationship += FlowEndMember )?", + " | ( isSufficient ?= 'all' )?", + " ownedRelationship += FlowEndMember 'to'", + " ownedRelationship += FlowEndMember" + ], + "name": "FlowDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "PayloadFeatureMember : FeatureMembership =", + " ownedRelatedElement = PayloadFeature" + ], + "name": "PayloadFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "PayloadFeature", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "PayloadFeature =", + " Identification PayloadFeatureSpecializationPart ValuePart?", + " | Identification ValuePart", + " | ownedRelationship += OwnedFeatureTyping", + " ( ownedRelationship += OwnedMultiplicity )?", + " | ownedRelationship += OwnedMultiplicity", + " ( ownedRelationship += OwnedFeatureTyping )?" + ], + "name": "PayloadFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "PayloadFeatureSpecializationPart : Feature =", + " FeatureSpecialization+ MultiplicityPart?", + " FeatureSpecialization*", + " | MultiplicityPart FeatureSpecialization+" + ], + "name": "PayloadFeatureSpecializationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowEndMember : EndFeatureMembership =", + " ownedRelatedElement += FlowEnd" + ], + "name": "FlowEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowEnd", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowEnd =", + " ( ownedRelationship += OwnedReferenceSubsetting '.' )?", + " ownedRelationship += FlowFeatureMember" + ], + "name": "FlowEnd" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowFeatureMember : FeatureMembership =", + " ownedRelatedElement += FlowFeature" + ], + "name": "FlowFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowFeature : Feature =", + " ownedRelationship += FlowFeatureRedefinition" + ], + "name": "FlowFeature" + }, + { + "@type": "Comment", + "clause_id": "8.2.5.9.2", + "lines": [ + "// (See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowFeatureRedefinition : Redefinition =", + " redefinedFeature = [QualifiedName]" + ], + "name": "FlowFeatureRedefinition" + }, + { + "@type": "NoteList", + "clause_id": "8.2.5.9.2", + "html_snippet": "
        1. To ensure that an FlowFeature passes the validateRedefinitionDirectionConformance constraint (see 8.3.3.3.8), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature)
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.10", + "lines": [ + "Clause 8.2.5.10 Feature Values Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.10", + "is_partial": false, + "lines": [ + "ValuePart : Feature =", + " ownedRelationship += FeatureValue" + ], + "name": "ValuePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.10", + "is_partial": false, + "lines": [ + "FeatureValue =", + " ( '='", + " | isInitial ?= ':='", + " | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )?", + " )", + " ownedRelatedElement += OwnedExpression" + ], + "name": "FeatureValue" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.11", + "lines": [ + "Clause 8.2.5.11 Multiplicities Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Multiplicity", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "Multiplicity =", + " MultiplicitySubset | MultiplicityRange" + ], + "name": "Multiplicity" + }, + { + "@type": "Production", + "abstract_syntax_type": "Multiplicity", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "MultiplicitySubset : Multiplicity =", + " 'multiplicity' Identification Subsets", + " TypeBody" + ], + "name": "MultiplicitySubset" + }, + { + "@type": "Production", + "abstract_syntax_type": "MultiplicityRange", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "MultiplicityRange =", + " 'multiplicity' Identification MultiplicityBounds", + " TypeBody" + ], + "name": "MultiplicityRange" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "OwnedMultiplicity : OwningMembership =", + " ownedRelatedElement += OwnedMultiplicityRange" + ], + "name": "OwnedMultiplicity" + }, + { + "@type": "Production", + "abstract_syntax_type": "MultiplicityRange", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "OwnedMultiplicityRange : MultiplicityRange =", + " MultiplicityBounds" + ], + "name": "OwnedMultiplicityRange" + }, + { + "@type": "Production", + "abstract_syntax_type": "MultiplicityRange", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "MultiplicityBounds : MultiplicityRange =", + " '[' ( ownedRelationship += MultiplicityExpressionMember '..' )?", + " ownedRelationship += MultiplicityExpressionMember ']'" + ], + "name": "MultiplicityBounds" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "MultiplicityExpressionMember : OwningMembership =", + " ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression )" + ], + "name": "MultiplicityExpressionMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.12", + "lines": [ + "Clause 8.2.5.12 Metadata Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Metaclass", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "Metaclass =", + " TypePrefix 'metaclass'", + " ClassifierDeclaration TypeBody" + ], + "name": "Metaclass" + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "PrefixMetadataAnnotation : Annotation =", + " '#' ownedRelatedElement += PrefixMetadataFeature" + ], + "name": "PrefixMetadataAnnotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "PrefixMetadataMember : OwningMembership =", + " '#' ownedRelatedElement += PrefixMetadataFeature" + ], + "name": "PrefixMetadataMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataFeature", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "PrefixMetadataFeature : MetadataFeature =", + " ownedRelationship += OwnedFeatureTyping" + ], + "name": "PrefixMetadataFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataFeature", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataFeature =", + " ( ownedRelationship += PrefixMetadataMember )*", + " ( '@' | 'metadata' )", + " MetadataFeatureDeclaration", + " ( 'about' ownedRelationship += Annotation", + " ( ',' ownedRelationship += Annotation )*", + " )?", + " MetadataBody" + ], + "name": "MetadataFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataFeature", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataFeatureDeclaration : MetadataFeature =", + " ( Identification ( ':' | 'typed' 'by' ) )?", + " ownedRelationship += OwnedFeatureTyping" + ], + "name": "MetadataFeatureDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataBody : Feature =", + " ';' | '{' ( ownedRelationship += MetadataBodyElement )* '}'" + ], + "name": "MetadataBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataBodyElement : Membership =", + " NonFeatureMember", + " | MetadataBodyFeatureMember", + " | AliasMember", + " | Import" + ], + "name": "MetadataBodyElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataBodyFeatureMember : FeatureMembership =", + " ownedMemberFeature = MetadataBodyFeature" + ], + "name": "MetadataBodyFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataBodyFeature : Feature =", + " 'feature'? ( ':>>' | 'redefines')? ownedRelationship += OwnedRedefinition", + " FeatureSpecializationPart? ValuePart?", + " MetadataBody" + ], + "name": "MetadataBodyFeature" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.13", + "lines": [ + "Clause 8.2.5.13 Packages Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.5.13", + "is_partial": false, + "lines": [ + "Package =", + " ( ownedRelationship += PrefixMetadataMember )*", + " PackageDeclaration PackageBody" + ], + "name": "Package" + }, + { + "@type": "Production", + "abstract_syntax_type": "LibraryPackage", + "clause_id": "8.2.5.13", + "is_partial": false, + "lines": [ + "LibraryPackage =", + " ( isStandard ?= 'standard' ) 'library'", + " ( ownedRelationship += PrefixMetadataMember )*", + " PackageDeclaration PackageBody" + ], + "name": "LibraryPackage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.5.13", + "is_partial": false, + "lines": [ + "PackageDeclaration : Package =", + " 'package' Identification" + ], + "name": "PackageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.5.13", + "is_partial": false, + "lines": [ + "PackageBody : Package =", + " ';'", + " | '{' ( NamespaceBodyElement", + " | ownedRelationship += ElementFilterMember", + " )*", + " '}'" + ], + "name": "PackageBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "ElementFilterMembership", + "clause_id": "8.2.5.13", + "is_partial": false, + "lines": [ + "ElementFilterMember : ElementFilterMembership =", + " MemberPrefix", + " 'filter' condition = OwnedExpression ';'" + ], + "name": "ElementFilterMember" + }, + { + "@type": "Comment", + "clause_id": "8.2.5.13", + "lines": [ + "// End of BNF", + "" + ] + } +] \ No newline at end of file diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected-marked_up.kebnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected-marked_up.kebnf new file mode 100644 index 000000000..67eef8d96 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected-marked_up.kebnf @@ -0,0 +1,1484 @@ +// Source document: tests\KerML_and_SysML_spec_sources\KerML-spec.html +// Generated by bnf_grammar_processor at: 2025-11-14T23:08:48Z + +// Manual corrections by HP de Koning + +// Part 1 - Kernel Modeling Language (KerML) + +// Clause 8.2 Concrete Syntax + +// Clause 8.2.1 Concrete Syntax Overview + +// Clause 8.2.2 Lexical Structure + +// Clause 8.2.2.1 Line Terminators and White Space + +LINE_TERMINATOR = + '\n' | '\r' | '\r\n' +// implementation defined character sequence + +LINE_TEXT = + '[^\r\n]*' +// character sequence excluding LINE_TERMINATORs + +WHITE_SPACE = + ' ' | '\t' | '\f' | LINE_TERMINATOR +// space | tab | form_feed | LINE_TERMINATOR + +// Notes: +//
          +//
        1. Notation text is divided up into lines separated by line terminators. A line terminator may be a single character (such as a line feed) or a sequence of characters (such as a carriage return/line feed combination). This specification does not require any specific encoding for a line terminator, but any encoding used must be consistent throughout any specific input text.
        2. +//
        3. Any characters in text line that are not a part of the line terminator are referred to as line text.
        4. +//
        5. A white space character is a space, tab, form feed or line terminator. Any contiguous sequence of white space characters can be used to separate tokens that would otherwise be considered to be part of a single token. It is otherwise ignored, with the single exception that a line terminator is used to mark the end of a single-line note (see 8.2.2.2).
        + +// Clause 8.2.2.2 Notes and Comments + +SINGLE_LINE_NOTE = + '//' LINE_TEXT + +MULTILINE_NOTE = + '//*' COMMENT_TEXT '*/' + +REGULAR_COMMENT = + '/*' COMMENT_TEXT '*/' + +COMMENT_TEXT = + ( COMMENT_LINE_TEXT | LINE_TERMINATOR )* + +COMMENT_LINE_TEXT = + '.*(?=(\r|\n|\*/))' +// LINE_TEXT excluding the sequence '*/' + +// Clause 8.2.2.3 Names + +NAME = + BASIC_NAME | UNRESTRICTED_NAME + +BASIC_NAME = + BASIC_INITIAL_CHARACTER BASIC_NAME_CHARACTER* + +SINGLE_QUOTE = + '#x27' + +UNRESTRICTED_NAME = + SINGLE_QUOTE ( NAME_CHARACTER | ESCAPE_SEQUENCE )* SINGLE_QUOTE + +// (See Note 1) + +BASIC_INITIAL_CHARACTER = + ALPHABETIC_CHARACTER | '_' + +BASIC_NAME_CHARACTER = + BASIC_INITIAL_CHARACTER | DECIMAL_DIGIT + +ALPHABETIC_CHARACTER = + 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' | + 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' +// any character 'a' through 'z' or 'A' through 'Z' + +DECIMAL_DIGIT = + '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' + +NAME_CHARACTER = + 'any printable character other than backslash or single_quote' + +ESCAPE_SEQUENCE = + '\f' | '\n' | '\t' | '\r' | '\v' +// (See Note 2) + +// Notes: +//
          +//
        1. The single_quote character is '. The name represented by an UNRESTRICTED_NAME shall consist of the characters within the single quotes, with escape characters resolved as described below. The surrounding single quote characters are not part of the represented name.
        2. +//
        3. An ESCAPE_SEQUENCE is a sequence of two text characters starting with a backslash that actually denotes only a single character, except for the newline escape sequence, which represents however many characters is necessary to represent an end of line in a specific implementation (see also 8.2.2.1). Table 4 shows the meaning of the allowed escape sequences. The ESCAPE_SEQUENCES in an UNRESTRICTED_NAME shall be replaced by the characters specified as their meanings in the actual represented name.
        + +// Clause 8.2.2.4 Numeric Values + +DECIMAL_VALUE = + DECIMAL_DIGIT+ + +EXPONENTIAL_VALUE = + DECIMAL_VALUE ('e' | 'E') ('+' | '-')? DECIMAL_VALUE + +// Notes: +//
          +//
        1. A DECIMAL_VALUE may specify a natural literal, or it may be part of the specification of a real literal (see 8.2.5.8.4). Note that a DECIMAL_VALUE does not include a sign, because negating a literal is an operator in the KerML Expression syntax.
        2. +//
        3. An EXPONENTIAL_VALUE may be used in the specification of a real literal (see 8.2.5.8.4). Note that a decimal point and fractional part are not included in the lexical structure of an exponential value. They are handled as part of the syntax of real literals.
        + +// Clause 8.2.2.5 String Value + +STRING_VALUE = + '"' ( STRING_CHARACTER | ESCAPE_SEQUENCE )* '"' + +STRING_CHARACTER = + 'any printable character other than backslash or "' + +// Notes: +//
          +//
        1. ESCAPE_SEQUENCE is specified in 8.2.2.3.
        + +// Clause 8.2.2.6 Reserved Words + +RESERVED_KEYWORD = + 'about' | 'abstract' | 'alias' | 'all' | 'and' | 'as' | 'assoc' | 'behavior' | 'binding' | 'bool' | 'by' | 'chains' + | 'class' | 'classifier' | 'comment' | 'composite' | 'conjugate' | 'conjugates' | 'conjugation' | 'connector' + | 'const' | 'crosses' | 'datatype' | 'default' | 'dependency' | 'derived' | 'differences' | 'disjoining' | 'disjoint' + | 'doc' | 'else' | 'end' | 'expr' | 'false' | 'feature' | 'featured' | 'featuring' | 'filter' | 'first' | 'flow' + | 'for' | 'from' | 'function' | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'inout' | 'interaction' + | 'intersects' | 'inv' | 'inverse' | 'inverting' | 'istype' | 'language' | 'library' | 'locale' | 'member' | 'meta' + | 'metaclass' | 'metadata' | 'multiplicity' | 'namespace' | 'nonunique' | 'not' | 'null' | 'of' | 'or' | 'ordered' + | 'out' | 'package' | 'portion' | 'predicate' | 'private' | 'protected' | 'public' | 'redefines' | 'redefinition' + | 'references' | 'rep' | 'return' | 'specialization' | 'specializes' | 'standard' | 'step' | 'struct' + | 'subclassifier' | 'subset' | 'subsets' | 'subtype' | 'succession' | 'then' | 'to' | 'true' | 'type' | 'typed' + | 'typing' | 'unions' | 'var' | 'xor' + +// Clause 8.2.2.7 Symbols + +RESERVED_SYMBOL = + '~' | '}' | '|' | '{' | '^' | ']' | '[' | '@' | '??' | '?' | '>=' | '>' | '=>' | '===' | '==' | '=' | '<=' | '<' + | ';' | ':>>' | ':>' | ':=' | '::>' | '::' | ':' | '/' | '.?' | '..' | '.' | '->' | '-' | ',' | '+' | '**' | '*' | ')' + | '(' | '&' | '%' | '$' | '#' | '!==' | '!=' + +TYPED_BY = ':' | 'typed' 'by' + +SPECIALIZES = ':>' | 'specializes' + +SUBSETS = ':>' | 'subsets' + +REFERENCES = '::>' | 'references' + +CROSSES = '=>' | 'crosses' + +REDEFINES = ':>>' | 'redefines' + +CONJUGATES = '~' | 'conjugates' + +// Clause 8.2.3 Root Concrete Syntax + +// Clause 8.2.3.1 Elements and Relationships Concrete Syntax + +Identification : Element = + ( '<' declaredShortName = NAME '>' )? + ( declaredName = NAME )? + +RelationshipBody : Relationship = + ';' | '{' RelationshipOwnedElement* '}' + +RelationshipOwnedElement : Relationship = + ownedRelatedElement += OwnedRelatedElement + | ownedRelationship += OwnedAnnotation + +OwnedRelatedElement : Element = + NonFeatureElement | FeatureElement + +// Clause 8.2.3.2 Dependencies Concrete Syntax + +Dependency = + ( ownedRelationship += PrefixMetadataAnnotation )* + 'dependency' ( Identification? 'from' )? + client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to' + supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )* + RelationshipBody + +// Notes: +//
          +//
        1. PrefixMetadataAnnotation is defined in the Kernel layer (see 8.2.5.12).
        + +// Clause 8.2.3.3 Annotations Concrete Syntax + +// Clause 8.2.3.3.1 Annotations + +Annotation = + annotatedElement = [QualifiedName] + +OwnedAnnotation : Annotation = + ownedRelatedElement += AnnotatingElement + +AnnotatingElement = + Comment + | Documentation + | TextualRepresentation + | MetadataFeature + +// Notes: +//
          +//
        1. MetadataFeature is defined in the Kernel layer (see 8.2.5.12).
        + +// Clause 8.2.3.3.2 Comments and Documentation + +Comment = + ( 'comment' Identification + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + )? + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +Documentation = + 'doc' Identification + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +// Notes: +//
          +//
        1. The text of a lexical REGULAR_COMMENT or PREFIX_COMMENT shall be processed as follows before it is included as the body of a Comment or Documentation: +//
            +//
          1. Remove the initial /* and final */ characters.
          2. +//
          3. Remove any white space immediately after the initial /*, up to and including the first line terminator (if any).
          4. +//
          5. On each subsequent line of the text: +//
              +//
            1. Strip initial white space other than line terminators.
            2. +//
            3. Then, if the first remaining character is "*", remove it.
            4. +//
            5. Then, if the first remaining character is now a space, remove it.
        2. +//
        3. The body text of a Comment can include markup information (such as HTML), and a conforming tool may display such text as rendered according to the markup. However, marked up "rich text" for a Comment written using the KerML textual concrete syntax shall be stored in the Comment body in plain text including all mark up text, with all line terminators and white space included as entered, other than what is removed according to the rules above.
        + +// Clause 8.2.3.3.3 Textual Representation + +TextualRepresentation = + ( 'rep' Identification )? + 'language' language = STRING_VALUE + body = REGULAR_COMMENT + +// Notes: +//
          +//
        1. The lexical text of a REGULAR_COMMENT shall be processed as specified in 8.2.3.3.2 for Comments before being included as the body of a TextualRepresentation.
        2. +//
        3. See also 8.3.2.3.6 on the standard language names recognized for a TextualRepresentation.
        + +// Clause 8.2.3.4 Namespaces Concrete Syntax + +// Clause 8.2.3.4.1 Namespaces + +RootNamespace : Namespace = + NamespaceBodyElement* + +// (See Note 1) + +Namespace = + ( ownedRelationship += PrefixMetadataMember )* + NamespaceDeclaration NamespaceBody + +// (See Note 2) + +NamespaceDeclaration : Namespace = + 'namespace' Identification + +NamespaceBody : Namespace = + ';' | '{' NamespaceBodyElement* '}' + +NamespaceBodyElement : Namespace = + ownedRelationship += NamespaceMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +MemberPrefix : Membership = + ( visibility = VisibilityIndicator )? + +VisibilityIndicator : VisibilityKind = + 'public' | 'private' | 'protected' + +NamespaceMember : OwningMembership = + NonFeatureMember + | NamespaceFeatureMember + +NonFeatureMember : OwningMembership = + MemberPrefix + ownedRelatedElement += MemberElement + +NamespaceFeatureMember : OwningMembership = + MemberPrefix + ownedRelatedElement += FeatureElement + +AliasMember : Membership = + MemberPrefix + 'alias' ( '<' memberShortName = NAME '>' )? + ( memberName = NAME )? + 'for' memberElement = [QualifiedName] + RelationshipBody + +QualifiedName = + ( '$' '::' )? ( NAME '::' )* NAME + +// (See Note 3) + +// Notes: +//
          +//
        1. A root Namespace is a Namespace that has no owningNamespace (see 8.3.2.4). Every Element other than a root Namespace must be contained, directly or indirectly, within some root Namespace. Therefore, every valid KerML concrete syntax text can be parsed starting from the RootNamespace production.
        2. +//
        3. PrefixMetadataMember is defined in the Kernel layer (see 8.2.5.12).
        4. +//
        5. A qualified name is notated as a sequence of segment names separated by "::" punctuation, optionally with the global scope qualifier "$" as an initial segment. An unqualified name can be considered the degenerate case of a qualified name with a single segment name. A qualified name is used in the KerML textual concrete syntax to identify an Element that is being referred to in the representation of another Element. A qualified name used in this way does not appear in the corresponding abstract syntax—instead, the abstract syntax representation contains an actual reference to the identified Element. Name resolution is the process of determining the Element that is identified by a qualified name. The segment names of the qualified name other than the last identify a sequence of nested Namespaces that provide the context for resolving the final segment name (see 8.2.3.5). The notation [QualifiedName] is used in concrete syntax grammar productions to indicate the result of resolving text parsed as a QualifiedName (see also 8.2.1).
        + +// Clause 8.2.3.4.2 Imports + +Import = + visibility = VisibilityIndicator + 'import' ( isImportAll ?= 'all' )? + ImportDeclaration RelationshipBody + +ImportDeclaration : Import = + MembershipImport | NamespaceImport + +MembershipImport = + importedMembership = [QualifiedName] + ( '::' isRecursive ?= '**' )? + +// (See Note 1) + +NamespaceImport = + importedNamespace = [QualifiedName] '::' '*' + ( '::' isRecursive ?= '**' )? + | importedNamespace = FilterPackage + { ownedRelatedElement += importedNamespace } + +FilterPackage : Package = + ownedRelationship += ImportDeclaration + ( ownedRelationship += FilterPackageMember )+ + +FilterPackageMember : ElementFilterMembership = + '[' ownedRelatedElement += OwnedExpression ']' + +// Notes: +//
          +//
        1. The importedMembership of a MembershipImport is the single case in which the Element required from the resolution [QualifiedName] is the actual Membership identified by the QualifedName, not the memberElement of that Membership (see 8.2.3.5).
        + +// Clause 8.2.3.4.3 Namespace Elements + +MemberElement : Element = + AnnotatingElement | NonFeatureElement + +NonFeatureElement : Element = + Dependency + | Namespace + | Type + | Classifier + | DataType + | Class + | Structure + | Metaclass + | Association + | AssociationStructure + | Interaction + | Behavior + | Function + | Predicate + | Multiplicity + | Package + | LibraryPackage + | Specialization + | Conjugation + | Subclassification + | Disjoining + | FeatureInverting + | FeatureTyping + | Subsetting + | Redefinition + | TypeFeaturing + +FeatureElement : Feature = + Feature + | Step + | Expression + | BooleanExpression + | Invariant + | Connector + | BindingConnector + | Succession + | Flow + | SuccessionFlow + +// Clause 8.2.3.5 Name Resolution + +// Clause 8.2.3.5.1 Name Resolution Overview + +// Clause 8.2.3.5.2 Local and Global Namespaces + +// Clause 8.2.3.5.3 Local and Visible Resolution + +// Clause 8.2.3.5.4 Full Resolution + +// Clause 8.2.4 Core Concrete Syntax + +// Clause 8.2.4.1 Types Concrete Syntax + +// Clause 8.2.4.1.1 Types + +Type = + TypePrefix 'type' + TypeDeclaration TypeBody + +TypePrefix : Type = + ( isAbstract ?= 'abstract' )? + ( ownedRelationship += PrefixMetadataMember )* + +TypeDeclaration : Type = + ( isSufficient ?= 'all' )? Identification + ( ownedRelationship += OwnedMultiplicity )? + ( SpecializationPart | ConjugationPart )+ + TypeRelationshipPart* + +SpecializationPart : Type = + SPECIALIZES ownedRelationship += OwnedSpecialization + ( ',' ownedRelationship += OwnedSpecialization )* + +ConjugationPart : Type = + CONJUGATES ownedRelationship += OwnedConjugation + +TypeRelationshipPart : Type = + DisjoiningPart + | UnioningPart + | IntersectingPart + | DifferencingPart + +DisjoiningPart : Type = + 'disjoint' 'from' ownedRelationship += OwnedDisjoining + ( ',' ownedRelationship += OwnedDisjoining )* + +UnioningPart : Type = + 'unions' ownedRelationship += Unioning + ( ',' ownedRelationship += Unioning )* + +IntersectingPart : Type = + 'intersects' ownedRelationship += Intersecting + ( ',' ownedRelationship += Intersecting )* + +DifferencingPart : Type = + 'differences' ownedRelationship += Differencing + ( ',' ownedRelationship += Differencing )* + +TypeBody : Type = + ';' | '{' TypeBodyElement* '}' + +TypeBodyElement : Type = + ownedRelationship += NonFeatureMember + | ownedRelationship += FeatureMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +// Clause 8.2.4.1.2 Specialization + +Specialization = + ( 'specialization' Identification )? + 'subtype' SpecificType + SPECIALIZES GeneralType + RelationshipBody + +OwnedSpecialization : Specialization = + GeneralType + +SpecificType : Specialization = + specific = [QualifiedName] + | specific += OwnedFeatureChain + { ownedRelatedElement += specific } + +GeneralType : Specialization = + general = [QualifiedName] + | general += OwnedFeatureChain + { ownedRelatedElement += general } + +// Clause 8.2.4.1.3 Conjugation + +Conjugation = + ( 'conjugation' Identification )? + 'conjugate' + ( conjugatedType = [QualifiedName] + | conjugatedType = FeatureChain + { ownedRelatedElement += conjugatedType } + ) + CONJUGATES + ( originalType = [QualifiedName] + | originalType = FeatureChain + { ownedRelatedElement += originalType } + ) + RelationshipBody + +OwnedConjugation : Conjugation = + originalType = [QualifiedName] + | originalType = FeatureChain + { ownedRelatedElement += originalType } + +// Clause 8.2.4.1.4 Disjoining + +Disjoining = + ( 'disjoining' Identification )? + 'disjoint' + ( typeDisjoined = [QualifiedName] + | typeDisjoined = FeatureChain + { ownedRelatedElement += typeDisjoined } + ) + 'from' + ( disjoiningType = [QualifiedName] + | disjoiningType = FeatureChain + { ownedRelatedElement += disjoiningType } + ) + RelationshipBody + +OwnedDisjoining : Disjoining = + disjoiningType = [QualifiedName] + | disjoiningType = FeatureChain + { ownedRelatedElement += disjoiningType } + +// Clause 8.2.4.1.5 Unioning, Intersecting and Differencing + +Unioning = + unioningType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +Intersecting = + intersectingType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +Differencing = + differencingType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +// Clause 8.2.4.1.6 Feature Membership + +FeatureMember : OwningMembership = + TypeFeatureMember + | OwnedFeatureMember + +TypeFeatureMember : OwningMembership = + MemberPrefix 'member' ownedRelatedElement += FeatureElement + +OwnedFeatureMember : FeatureMembership = + MemberPrefix ownedRelatedElement += FeatureElement + +// Clause 8.2.4.2 Classifiers Concrete Syntax + +// Clause 8.2.4.2.1 Classifiers + +Classifier = + TypePrefix 'classifier' + ClassifierDeclaration TypeBody + +ClassifierDeclaration : Classifier = + ( isSufficient ?= 'all' )? Identification + ( ownedRelationship += OwnedMultiplicity )? + ( SuperclassingPart | ConjugationPart )? + TypeRelationshipPart* + +SuperclassingPart : Classifier = + SPECIALIZES ownedRelationship += OwnedSubclassification + ( ',' ownedRelationship += OwnedSubclassification )* + +// Clause 8.2.4.2.2 Subclassification + +Subclassification = + ( 'specialization' Identification )? + 'subclassifier' subclassifier = [QualifiedName] + SPECIALIZES superclassifier = [QualifiedName] + RelationshipBody + +OwnedSubclassification : Subclassification = + superclassifier = [QualifiedName] + +// Clause 8.2.4.3 Features Concrete Syntax + +// Clause 8.2.4.3.1 Features + +Feature = + ( FeaturePrefix + ( 'feature' | ownedRelationship += PrefixMetadataMember ) + FeatureDeclaration? + | ( EndFeaturePrefix | BasicFeaturePrefix ) + FeatureDeclaration + ) + ValuePart? TypeBody + +// (See Note 1) + +EndFeaturePrefix : Feature = + ( isConstant ?= 'const' { isVariable = true } )? + isEnd ?= 'end' + +BasicFeaturePrefix : Feature = + ( direction = FeatureDirection )? + ( isDerived ?= 'derived' )? + ( isAbstract ?= 'abstract' )? + ( isComposite ?= 'composite' | isPortion ?= 'portion' )? + ( isVariable ?= 'var' | isConstant ?= 'const' { isVariable = true } )? + +FeaturePrefix = + ( EndFeaturePrefix ( ownedRelationship += OwnedCrossFeatureMember )? + | BasicFeaturePrefix + ) + ( ownedRelationship += PrefixMetadataMember )* + +// (See Note 1) + +OwnedCrossFeatureMember : OwningMembership = + ownedRelatedElement += OwnedCrossFeature + +OwnedCrossFeature : Feature = + BasicFeaturePrefix FeatureDeclaration + +FeatureDirection : FeatureDirectionKind = + 'in' | 'out' | 'inout' + +FeatureDeclaration : Feature = + ( isSufficient ?= 'all' )? + ( FeatureIdentification + ( FeatureSpecializationPart | ConjugationPart )? + | FeatureSpecializationPart + | ConjugationPart + ) + FeatureRelationshipPart* + +FeatureIdentification : Feature = + '<' declaredShortName = NAME '>' ( declaredName = NAME )? + | declaredName = NAME + +FeatureRelationshipPart : Feature = + TypeRelationshipPart + | ChainingPart + | InvertingPart + | TypeFeaturingPart + +ChainingPart : Feature = + 'chains' + ( ownedRelationship += OwnedFeatureChaining + | FeatureChain ) + +InvertingPart : Feature = + 'inverse' 'of' ownedRelationship += OwnedFeatureInverting + +TypeFeaturingPart : Feature = + 'featured' 'by' ownedRelationship += OwnedTypeFeaturing + ( ',' ownedTypeFeaturing += OwnedTypeFeaturing )* + +FeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? FeatureSpecialization* + | MultiplicityPart FeatureSpecialization* + +MultiplicityPart : Feature = + ownedRelationship += OwnedMultiplicity + | ( ownedRelationship += OwnedMultiplicity )? + ( isOrdered ?= 'ordered' ( {isUnique = false} 'nonunique' )? + | {isUnique = false} 'nonunique' ( isOrdered ?= 'ordered' )? ) + +FeatureSpecialization : Feature = + Typings | Subsettings | References | Crosses | Redefinitions + +Typings : Feature = + TypedBy ( ',' ownedRelationship += OwnedFeatureTyping )* + +TypedBy : Feature = + TYPED_BY ownedRelationship += OwnedFeatureTyping + +Subsettings : Feature = + Subsets ( ',' ownedRelationship += OwnedSubsetting )* + +Subsets : Feature = + SUBSETS ownedRelationship += OwnedSubsetting + +References : Feature = + REFERENCES ownedRelationship += OwnedReferenceSubsetting + +Crosses : Feature = + CROSSES ownedRelationship += OwnedCrossSubsetting + +Redefinitions : Feature = + Redefines ( ',' ownedRelationship += OwnedRedefinition )* + +Redefines : Feature = + REDEFINES ownedRelationship += OwnedRedefinition + +// Notes: +//
          +//
        1. PrefixMetadataMember is defined in the Kernel layer (see 8.3.4.12).
        + +// Clause 8.2.4.3.2 Feature Typing + +FeatureTyping = + ( 'specialization' Identification )? + 'typing' typedFeature = [QualifiedName] + TYPED_BY GeneralType + RelationshipBody + +OwnedFeatureTyping : FeatureTyping = + GeneralType + +// Clause 8.2.4.3.3 Subsetting + +Subsetting = + ( 'specialization' Identification )? + 'subset' SpecificType + SUBSETS GeneralType + RelationshipBody + +OwnedSubsetting : Subsetting = + GeneralType + +OwnedReferenceSubsetting : ReferenceSubsetting = + GeneralType + +OwnedCrossSubsetting : CrossSubsetting = + GeneralType + +// Clause 8.2.4.3.4 Redefinition + +Redefinition = + ( 'specialization' Identification )? + 'redefinition' SpecificType + REDEFINES GeneralType + RelationshipBody + +OwnedRedefinition : Redefinition = + GeneralType + +// Clause 8.2.4.3.5 Feature Chaining + +OwnedFeatureChain : Feature = + FeatureChain + +FeatureChain : Feature = + ownedRelationship += OwnedFeatureChaining + ( '.' ownedRelationship += OwnedFeatureChaining )+ + +OwnedFeatureChaining : FeatureChaining = + chainingFeature = [QualifiedName] + +// Clause 8.2.4.3.6 Feature Inverting + +FeatureInverting = + ( 'inverting' Identification? )? + 'inverse' + ( featureInverted = [QualifiedName] + | featureInverted = OwnedFeatureChain + { ownedRelatedElement += featureInverted } + ) + 'of' + ( invertingFeature = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + { ownedRelatedElement += invertingFeature } + ) + RelationshipBody + +OwnedFeatureInverting : FeatureInverting = + invertingFeature = [QualifiedName] + | invertingFeature = OwnedFeatureChain + { ownedRelatedElement += invertingFeature } + +// Clause 8.2.4.3.7 Type Featuring + +TypeFeaturing = + 'featuring' ( Identification 'of' )? + featureOfType = [QualifiedName] + 'by' featuringType = [QualifiedName] + RelationshipBody + +OwnedTypeFeaturing : TypeFeaturing = + featuringType = [QualifiedName] + +// Clause 8.2.5 Kernel Concrete Syntax + +// Clause 8.2.5.1 Data Types Concrete Syntax + +DataType = + TypePrefix 'datatype' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.2 Classes Concrete Syntax + +Class = + TypePrefix 'class' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.3 Structures Concrete Syntax + +Structure = + TypePrefix 'struct' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.4 Associations Concrete Syntax + +Association = + TypePrefix 'assoc' + ClassifierDeclaration TypeBody + +AssociationStructure = + TypePrefix 'assoc' 'struct' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.5 Connectors Concrete Syntax + +// Clause 8.2.5.5.1 Connectors + +Connector = + FeaturePrefix 'connector' + ( FeatureDeclaration? ValuePart? + | ConnectorDeclaration + ) + TypeBody + +ConnectorDeclaration : Connector = + BinaryConnectorDeclaration | NaryConnectorDeclaration + +BinaryConnectorDeclaration : Connector = + ( FeatureDeclaration? 'from' | isSufficient ?= 'all' 'from'? )? + ownedRelationship += ConnectorEndMember 'to' + ownedRelationship += ConnectorEndMember + +NaryConnectorDeclaration : Connector = + FeatureDeclaration? + '(' ownedRelationship += ConnectorEndMember ',' + ownedRelationship += ConnectorEndMember + ( ',' ownedRelationship += ConnectorEndMember )* + ')' + +ConnectorEndMember : EndFeatureMembership = + ownedRelatedElement += ConnectorEnd + +ConnectorEnd : Feature = + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +OwnedCrossMultiplicityMember : OwningMembership = + ownedRelatedElement += OwnedCrossMultiplicity + +OwnedCrossMultiplicity : Feature = + ownedRelationship += OwnedMultiplicity + +// Clause 8.2.5.5.2 Binding Connectors + +BindingConnector = + FeaturePrefix 'binding' + BindingConnectorDeclaration TypeBody + +BindingConnectorDeclaration : BindingConnector = + FeatureDeclaration + ( 'of' ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember )? + | ( isSufficient ?= 'all' )? + ( 'of'? ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember )? + +// Clause 8.2.5.5.3 Successions + +Succession = + FeaturePrefix 'succession' + SuccessionDeclaration TypeBody + +SuccessionDeclaration : Succession = + FeatureDeclaration + ( 'first' ownedRelationship += ConnectorEndMember + 'then' ownedRelationship += ConnectorEndMember )? + | ( s.isSufficient ?= 'all' )? + ( 'first'? ownedRelationship += ConnectorEndMember + 'then' ownedRelationship += ConnectorEndMember )? + +// Clause 8.2.5.6 Behaviors Concrete Syntax + +// Clause 8.2.5.6.1 Behaviors + +Behavior = + TypePrefix 'behavior' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.6.2 Steps + +Step = + FeaturePrefix + 'step' FeatureDeclaration ValuePart? + TypeBody + +// Clause 8.2.5.7 Functions Concrete Syntax + +// Clause 8.2.5.7.1 Functions + +Function = + TypePrefix 'function' + ClassifierDeclaration FunctionBody + +FunctionBody : Type = + ';' | '{' FunctionBodyPart '}' + +FunctionBodyPart : Type = + ( TypeBodyElement + | ownedRelationship += ReturnFeatureMember + )* + ( ownedRelationship += ResultExpressionMember )? + +ReturnFeatureMember : ReturnParameterMembership = + MemberPrefix 'return' + ownedRelatedElement += FeatureElement + +ResultExpressionMember : ResultExpressionMembership = + MemberPrefix + ownedRelatedElement += OwnedExpression + +// Clause 8.2.5.7.2 Expressions + +Expression = + FeaturePrefix + 'expr' FeatureDeclaration ValuePart? + FunctionBody + +// Clause 8.2.5.7.3 Predicates + +Predicate = + TypePrefix 'predicate' + ClassifierDeclaration FunctionBody + +// Clause 8.2.5.7.4 Boolean Expressions and Invariants + +BooleanExpression = + FeaturePrefix + 'bool' FeatureDeclaration ValuePart? + FunctionBody + +Invariant = + FeaturePrefix + 'inv' ( 'true' | isNegated ?= 'false' )? + FeatureDeclaration ValuePart? + FunctionBody + +// Clause 8.2.5.8 Expressions Concrete Syntax + +// Clause 8.2.5.8.1 Operator Expressions + +OwnedExpressionReferenceMember : FeatureMembership = + ownedRelationship += OwnedExpressionReference + +OwnedExpressionReference : FeatureReferenceExpression = + ownedRelationship += OwnedExpressionMember + +OwnedExpressionMember : FeatureMembership = + ownedFeatureMember = OwnedExpression + +OwnedExpression : Expression = + ConditionalExpression + | ConditionalBinaryOperatorExpression + | BinaryOperatorExpression + | UnaryOperatorExpression + | ClassificationExpression + | MetaclassificationExpression + | ExtentExpression + | PrimaryExpression + +ConditionalExpression : OperatorExpression = + operator = 'if' + ownedRelationship += ArgumentMember '?' + ownedRelationship += ArgumentExpressionMember 'else' + ownedRelationship += ArgumentExpressionMember + ownedRelationship += EmptyResultMember + +ConditionalBinaryOperatorExpression : OperatorExpression = + ownedRelationship += ArgumentMember + operator = ConditionalBinaryOperator + ownedRelationship += ArgumentExpressionMember + ownedRelationship += EmptyResultMember + +ConditionalBinaryOperator = + '??' | 'or' | 'and' | 'implies' + +BinaryOperatorExpression : OperatorExpression = + ownedRelationship += ArgumentMember + operator = BinaryOperator + ownedRelationship += ArgumentMember + ownedRelationship += EmptyResultMember + +BinaryOperator = + '|' | '&' | 'xor' | '..' + | '==' | '!=' | '===' | '!==' + | '<' | '>' | '<=' | '>=' + | '+' | '-' | '*' | '/' + | '%' | '^' | '**' + +UnaryOperatorExpression : OperatorExpression = + operator = UnaryOperator + ownedRelationship += ArgumentMember + ownedRelationship += EmptyResultMember + +UnaryOperator = + '+' | '-' | '~' | 'not' + +ClassificationExpression : OperatorExpression = + ( ownedRelationship += ArgumentMember )? + ( operator = ClassificationTestOperator + ownedRelationship += TypeReferenceMember + | operator = CastOperator + ownedRelationship += TypeResultMember + ) + ownedRelationship += EmptyResultMember + +ClassificationTestOperator = + 'istype' | 'hastype' | '@' + +CastOperator = + 'as' + +MetaclassificationExpression : OperatorExpression = + ownedRelationship += MetadataArgumentMember + ( operator = ClassificationTestOperator + ownedRelationship += TypeReferenceMember + | operator = MetaCastOperator + ownedRelationship += TypeResultMember + ) + ownedRelationship += EmptyResultMember + +ArgumentMember : ParameterMembership = + ownedMemberParameter = Argument + +Argument : Feature = + ownedRelationship += ArgumentValue + +ArgumentValue : FeatureValue = + value = OwnedExpression + +ArgumentExpressionMember : FeatureMembership = + ownedRelatedElement += ArgumentExpression + +ArgumentExpression : Feature = + ownedRelationship += ArgumentExpressionValue + +ArgumentExpressionValue : FeatureValue = + value = OwnedExpressionReference + +MetadataArgumentMember : ParameterMembership = + ownedRelatedElement += MetadataArgument + +MetadataArgument : Feature = + ownedRelationship += MetadataValue + +MetadataValue : FeatureValue = + value = MetadataReference + +MetadataReference : MetadataAccessExpression = + ownedRelationship += ElementReferenceMember + +MetaclassificationTestOperator = + '@@' + +MetaCastOperator = + 'meta' + +ExtentExpression : OperatorExpression = + operator = 'all' + ownedRelationship += TypeReferenceMember + +TypeReferenceMember : ParameterMembership = + ownedMemberFeature = TypeReference + +TypeResultMember : ResultParameterMembership = + ownedMemberFeature = TypeReference + +TypeReference : Feature = + ownedRelationship += ReferenceTyping + +ReferenceTyping : FeatureTyping = + type = [QualifiedName] + +EmptyResultMember : ReturnParameterMembership = + ownedRelatedElement += EmptyFeature + +EmptyFeature : Feature = + { } + +// Notes: +//
          +//
        1. OperatorExpressions provide a shorthand notation for InvocationExpressions that invoke a library Function represented as an operator symbol. Table 5 shows the mapping from operator symbols to the Functions they represent from the Kernel Model Library (see Clause 9). An OperatorExpression contains subexpressions called its operands that generally correspond to the argument Expressions of the OperatorExpression, except in the case of operators representing control Functions, in which case the evaluation of certain operands is as determined by the Function (see 8.4.4.9 for details).
        2. +//
        3. Though not directly expressed in the syntactic productions given above, in any OperatorExpression containing nested OperatorExpressions, the nested OperatorExpressions shall be implicitly grouped according to the precedence of the operators involved, as given in Table 6. OperatorExpressions with higher precedence operators shall be grouped more tightly than those with lower precedence operators. Further, all BinaryOperators other than exponentiation are left-associative (i.e, they group to the left), while the exponentiation operators (^ and **) are right-associative (i.e., they group to the right).
        4. +//
        5. The unary operator symbol ~ maps to the library Function DataFunctions::'~', as shown in Table 5. This abstract Function may be given a concrete definition in a domain-specific Function library, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        + +// Clause 8.2.5.8.2 Primary Expressions + +PrimaryExpression : Expression = + FeatureChainExpression + | NonFeatureChainPrimaryExpression + +PrimaryArgumentValue : FeatureValue = + value = PrimaryExpression + +PrimaryArgument : Feature = + ownedRelationship += PrimaryArgumentValue + +PrimaryArgumentMember : ParameterMembership = + ownedMemberParameter = PrimaryArgument + +NonFeatureChainPrimaryExpression : Expression = + BracketExpression + | IndexExpression + | SequenceExpression + | SelectExpression + | CollectExpression + | FunctionOperationExpression + | BaseExpression + +NonFeatureChainPrimaryArgumentValue : FeatureValue = + value = NonFeatureChainPrimaryExpression + +NonFeatureChainPrimaryArgument : Feature = + ownedRelationship += NonFeatureChainPrimaryArgumentValue + +NonFeatureChainPrimaryArgumentMember : ParameterMembership = + ownedMemberParameter = PrimaryArgument + +BracketExpression : OperatorExpression = + ownedRelationship += PrimaryArgumentMember + operator = '[' + ownedRelationship += SequenceExpressionListMember ']' + +IndexExpression = + ownedRelationship += PrimaryArgumentMember '#' + '(' ownedRelationship += SequenceExpressionListMember ')' + +SequenceExpression : Expression = + '(' SequenceExpressionList ')' + +SequenceExpressionList : Expression = + OwnedExpression ','? | SequenceOperatorExpression + +SequenceOperatorExpression : OperatorExpression = + ownedRelationship += OwnedExpressionMember + operator = ',' + ownedRelationship += SequenceExpressionListMember + +SequenceExpressionListMember : FeatureMembership = + ownedMemberFeature = SequenceExpressionList + +FeatureChainExpression = + ownedRelationship += NonFeatureChainPrimaryArgumentMember '.' + ownedRelationship += FeatureChainMember + +CollectExpression = + ownedRelationship += PrimaryArgumentMember '.' + ownedRelationship += BodyArgumentMember + +SelectExpression = + ownedRelationship += PrimaryArgumentMember '.?' + ownedRelationship += BodyArgumentMember + +FunctionOperationExpression : InvocationExpression = + ownedRelationship += PrimaryArgumentMember '->' + ownedRelationship += InvocationTypeMember + ( ownedRelationship += BodyArgumentMember + | ownedRelationship += FunctionReferenceArgumentMember + | ArgumentList ) + ownedRelationship += EmptyResultMember + +BodyArgumentMember : ParameterMembership = + ownedMemberParameter = BodyArgument + +BodyArgument : Feature = + ownedRelationship += BodyArgumentValue + +BodyArgumentValue : FeatureValue = + value = BodyExpression + +FunctionReferenceArgumentMember : ParameterMembership = + ownedMemberParameter = FunctionReferenceArgument + +FunctionReferenceArgument : Feature = + ownedRelationship += FunctionReferenceArgumentValue + +FunctionReferenceArgumentValue : FeatureValue = + value = FunctionReferenceExpression + +FunctionReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FunctionReferenceMember + +FunctionReferenceMember : FeatureMembership = + ownedMemberFeature = FunctionReference + +FunctionReference : Expression = + ownedRelationship += ReferenceTyping + +FeatureChainMember : Membership = + FeatureReferenceMember + | OwnedFeatureChainMember + +OwnedFeatureChainMember : OwningMembership = + ownedMemberElement = FeatureChain + +// Notes: +//
          +//
        1. Primary expressions provide additional shorthand notations for certain kinds of InvocationExpressions. For those cases in which the InvocationExpression is an OperatorExpression, its operator shall be resolved to the appropriate library function as given in Table 7. Note also that, for a CollectionExpression or SelectExpression, the abstract syntax constrains the operator to be collect and select, respectively, separately from the . and .? symbols used in their concrete syntax notation (see 8.3.4.8.2 and 8.3.4.8.18).
        2. +//
        3. The grammar allows a bracket syntax [...]that parses to an invocation of the library Function BaseFunctions::'[', as shown in Table 7. This notation is available for use with domain-specific library models that given a concrete definition to the abstract base '[' Function, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        + +// Clause 8.2.5.8.3 Base Expressions + +BaseExpression : Expression = + NullExpression + | LiteralExpression + | FeatureReferenceExpression + | MetadataAccessExpression + | InvocationExpression + | ConstructorExpression + | BodyExpression + +NullExpression : NullExpression = + 'null' | '(' ')' + +FeatureReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FeatureReferenceMember + ownedRelationship += EmptyResultMember + +FeatureReferenceMember : Membership = + memberElement = FeatureReference + +FeatureReference : Feature = + [QualifiedName] + +MetadataAccessExpression = + ownedRelationship += ElementReferenceMember '.' 'metadata' + +ElementReferenceMember : Membership = + memberElement = [QualifiedName] + +InvocationExpression : InvocationExpression = + ownedRelationship += InstantiatedTypeMember + ArgumentList + ownedRelationship += EmptyResultMember + +ConstructorExpression = + 'new' ownedRelationship += InstantiatedTypeMember + ownedRelationship += ConstructorResultMember + +ConstructorResultMember : ReturnParameterMembership = + ownedRelatedElement += ConstructorResult + +ConstructorResult : Feature = + ArgumentList + +InstantiatedTypeMember : Membership = + memberElement = InstantiatedTypeReference + | OwnedFeatureChainMember + +InstantiatedTypeReference : Type = + [QualifiedName] + +ArgumentList : Feature = + '(' ( PositionalArgumentList | NamedArgumentList )? ')' + +PositionalArgumentList : Feature = + e.ownedRelationship += ArgumentMember + ( ',' e.ownedRelationship += ArgumentMember )* + +NamedArgumentList : Feature = + ownedRelationship += NamedArgumentMember + ( ',' ownedRelationship += NamedArgumentMember )* + +NamedArgumentMember : FeatureMembership = + ownedMemberFeature = NamedArgument + +NamedArgument : Feature = + ownedRelationship += ParameterRedefinition '=' + ownedRelationship += ArgumentValue + +ParameterRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + +BodyExpression : FeatureReferenceExpression = + ownedRelationship += ExpressionBodyMember + +ExpressionBodyMember : FeatureMembership = + ownedMemberFeature = ExpressionBody + +ExpressionBody : Expression = + '{' FunctionBodyPart '}' + +// Clause 8.2.5.8.4 Literal Expressions + +LiteralExpression = + LiteralBoolean + | LiteralString + | LiteralInteger + | LiteralReal + | LiteralInfinity + +LiteralBoolean = + value = BooleanValue + +BooleanValue : Boolean = + 'true' | 'false' + +LiteralString = + value = STRING_VALUE + +LiteralInteger = + value = DECIMAL_VALUE + +LiteralReal = + value = RealValue + +RealValue : Real = + DECIMAL_VALUE? '.' ( DECIMAL_VALUE | EXPONENTIAL_VALUE ) + | EXPONENTIAL_VALUE + +LiteralInfinity = + '*' + +// Clause 8.2.5.9 Interactions Concrete Syntax + +// Clause 8.2.5.9.1 Interactions + +Interaction = + TypePrefix 'interaction' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.9.2 Flows + +Flow = + FeaturePrefix 'flow' + FlowDeclaration TypeBody + +SuccessionFlow = + FeaturePrefix 'succession' 'flow' + FlowDeclaration TypeBody + +FlowDeclaration : Flow = + FeatureDeclaration ValuePart? + ( 'of' ownedRelationship += PayloadFeatureMember )? + ( 'from' ownedRelationship += FlowEndMember + 'to' ownedRelationship += FlowEndMember )? + | ( isSufficient ?= 'all' )? + ownedRelationship += FlowEndMember 'to' + ownedRelationship += FlowEndMember + +PayloadFeatureMember : FeatureMembership = + ownedRelatedElement = PayloadFeature + +PayloadFeature = + Identification PayloadFeatureSpecializationPart ValuePart? + | Identification ValuePart + | ownedRelationship += OwnedFeatureTyping + ( ownedRelationship += OwnedMultiplicity )? + | ownedRelationship += OwnedMultiplicity + ( ownedRelationship += OwnedFeatureTyping )? + +PayloadFeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? + FeatureSpecialization* + | MultiplicityPart FeatureSpecialization+ + +FlowEndMember : EndFeatureMembership = + ownedRelatedElement += FlowEnd + +FlowEnd = + ( ownedRelationship += OwnedReferenceSubsetting '.' )? + ownedRelationship += FlowFeatureMember + +FlowFeatureMember : FeatureMembership = + ownedRelatedElement += FlowFeature + +FlowFeature : Feature = + ownedRelationship += FlowFeatureRedefinition + +// (See Note 1) + +FlowFeatureRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + +// Notes: +//
          +//
        1. To ensure that an FlowFeature passes the validateRedefinitionDirectionConformance constraint (see 8.3.3.3.8), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature)
        + +// Clause 8.2.5.10 Feature Values Concrete Syntax + +ValuePart : Feature = + ownedRelationship += FeatureValue + +FeatureValue = + ( '=' + | isInitial ?= ':=' + | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )? + ) + ownedRelatedElement += OwnedExpression + +// Clause 8.2.5.11 Multiplicities Concrete Syntax + +Multiplicity = + MultiplicitySubset | MultiplicityRange + +MultiplicitySubset : Multiplicity = + 'multiplicity' Identification Subsets + TypeBody + +MultiplicityRange = + 'multiplicity' Identification MultiplicityBounds + TypeBody + +OwnedMultiplicity : OwningMembership = + ownedRelatedElement += OwnedMultiplicityRange + +OwnedMultiplicityRange : MultiplicityRange = + MultiplicityBounds + +MultiplicityBounds : MultiplicityRange = + '[' ( ownedRelationship += MultiplicityExpressionMember '..' )? + ownedRelationship += MultiplicityExpressionMember ']' + +MultiplicityExpressionMember : OwningMembership = + ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression ) + +// Clause 8.2.5.12 Metadata Concrete Syntax + +Metaclass = + TypePrefix 'metaclass' + ClassifierDeclaration TypeBody + +PrefixMetadataAnnotation : Annotation = + '#' ownedRelatedElement += PrefixMetadataFeature + +PrefixMetadataMember : OwningMembership = + '#' ownedRelatedElement += PrefixMetadataFeature + +PrefixMetadataFeature : MetadataFeature = + ownedRelationship += OwnedFeatureTyping + +MetadataFeature = + ( ownedRelationship += PrefixMetadataMember )* + ( '@' | 'metadata' ) + MetadataFeatureDeclaration + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + MetadataBody + +MetadataFeatureDeclaration : MetadataFeature = + ( Identification ( ':' | 'typed' 'by' ) )? + ownedRelationship += OwnedFeatureTyping + +MetadataBody : Feature = + ';' | '{' ( ownedRelationship += MetadataBodyElement )* '}' + +MetadataBodyElement : Membership = + NonFeatureMember + | MetadataBodyFeatureMember + | AliasMember + | Import + +MetadataBodyFeatureMember : FeatureMembership = + ownedMemberFeature = MetadataBodyFeature + +MetadataBodyFeature : Feature = + 'feature'? ( ':>>' | 'redefines')? ownedRelationship += OwnedRedefinition + FeatureSpecializationPart? ValuePart? + MetadataBody + +// Clause 8.2.5.13 Packages Concrete Syntax + +Package = + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +LibraryPackage = + ( isStandard ?= 'standard' ) 'library' + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +PackageDeclaration : Package = + 'package' Identification + +PackageBody : Package = + ';' + | '{' ( NamespaceBodyElement + | ownedRelationship += ElementFilterMember + )* + '}' + +ElementFilterMember : ElementFilterMembership = + MemberPrefix + 'filter' condition = OwnedExpression ';' + +// End of BNF diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected.html b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected.html new file mode 100644 index 000000000..a90400c04 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected.html @@ -0,0 +1,1718 @@ + + + + +KerML-textual-bnf-corrected + + + +

        // Source document: tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected-marked_up.kebnf
        +// Generated by bnf_grammar_processor at: 2025-12-04T19:29:18Z +

        +

        // Source document: tests\KerML_and_SysML_spec_sources\KerML-spec.html
        +// Generated by bnf_grammar_processor at: 2025-11-14T23:08:48Z +

        +

        // Manual corrections by HP de Koning +

        +

        // Part 1 - Kernel Modeling Language (KerML)

        +

        // Clause 8.2 Concrete Syntax

        +

        // Clause 8.2.1 Concrete Syntax Overview

        +

        // Clause 8.2.2 Lexical Structure

        +

        // Clause 8.2.2.1 Line Terminators and White Space

        + +
        LINE_TERMINATOR =
        +    '\n' | '\r' | '\r\n'
        +// implementation defined character sequence
        +
        + +
        LINE_TEXT =
        +    '[^\r\n]*'
        +// character sequence excluding LINE_TERMINATORs
        +
        + +
        WHITE_SPACE =
        +     ' ' | '\t' | '\f' | LINE_TERMINATOR
        +// space | tab | form_feed | LINE_TERMINATOR
        +
        +

        // Notes:

        +
          +
        1. // 1. Notation text is divided up into lines separated by line terminators. A line terminator may be a single character (such as a line feed) or a sequence of characters (such as a carriage return/line feed combination). This specification does not require any specific encoding for a line terminator, but any encoding used must be consistent throughout any specific input text.
        2. +
        3. // 2. Any characters in text line that are not a part of the line terminator are referred to as line text.
        4. +
        5. // 3. A white space character is a space, tab, form feed or line terminator. Any contiguous sequence of white space characters can be used to separate tokens that would otherwise be considered to be part of a single token. It is otherwise ignored, with the single exception that a line terminator is used to mark the end of a single-line note (see 8.2.2.2).
        6. +
        +

        // Clause 8.2.2.2 Notes and Comments

        + +
        SINGLE_LINE_NOTE =
        +    '//' LINE_TEXT
        +
        + +
        MULTILINE_NOTE =
        +    '//*' COMMENT_TEXT '*/'
        +
        + +
        REGULAR_COMMENT =
        +    '/*' COMMENT_TEXT '*/'
        +
        + +
        COMMENT_TEXT =
        +    ( COMMENT_LINE_TEXT | LINE_TERMINATOR )*
        +
        + +
        COMMENT_LINE_TEXT =
        +    '.*(?=(\r|\n|\*/))'
        +// LINE_TEXT excluding the sequence '*/'
        +
        +

        // Clause 8.2.2.3 Names

        + +
        NAME =
        +    BASIC_NAME | UNRESTRICTED_NAME
        +
        + +
        BASIC_NAME =
        +    BASIC_INITIAL_CHARACTER BASIC_NAME_CHARACTER*
        +
        + +
        SINGLE_QUOTE =
        +    '#x27'
        +
        + +
        UNRESTRICTED_NAME =
        +    SINGLE_QUOTE ( NAME_CHARACTER | ESCAPE_SEQUENCE )* SINGLE_QUOTE
        +
        +

        // (See Note 1) +

        + +
        BASIC_INITIAL_CHARACTER =
        +    ALPHABETIC_CHARACTER | '_'
        +
        + +
        BASIC_NAME_CHARACTER =
        +    BASIC_INITIAL_CHARACTER | DECIMAL_DIGIT
        +
        + +
        ALPHABETIC_CHARACTER =
        +    'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' |
        +    'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'
        +// any character 'a' through 'z' or 'A' through 'Z'
        +
        + +
        DECIMAL_DIGIT =
        +    '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
        +
        + +
        NAME_CHARACTER =
        +           'any printable character other than backslash or single_quote'
        +
        + +
        ESCAPE_SEQUENCE =
        +    '\f' | '\n' | '\t' | '\r' | '\v'
        +// (See Note 2)
        +
        +

        // Notes:

        +
          +
        1. // 1. The single_quote character is '. The name represented by an UNRESTRICTED_NAME shall consist of the characters within the single quotes, with escape characters resolved as described below. The surrounding single quote characters are not part of the represented name.
        2. +
        3. // 2. An ESCAPE_SEQUENCE is a sequence of two text characters starting with a backslash that actually denotes only a single character, except for the newline escape sequence, which represents however many characters is necessary to represent an end of line in a specific implementation (see also 8.2.2.1). Table 4 shows the meaning of the allowed escape sequences. The ESCAPE_SEQUENCES in an UNRESTRICTED_NAME shall be replaced by the characters specified as their meanings in the actual represented name.
        4. +
        +

        // Clause 8.2.2.4 Numeric Values

        + +
        DECIMAL_VALUE =
        +    DECIMAL_DIGIT+
        +
        + +
        EXPONENTIAL_VALUE =
        +    DECIMAL_VALUE ('e' | 'E') ('+' | '-')? DECIMAL_VALUE
        +
        +

        // Notes:

        +
          +
        1. // 1. A DECIMAL_VALUE may specify a natural literal, or it may be part of the specification of a real literal (see 8.2.5.8.4). Note that a DECIMAL_VALUE does not include a sign, because negating a literal is an operator in the KerML Expression syntax.
        2. +
        3. // 2. An EXPONENTIAL_VALUE may be used in the specification of a real literal (see 8.2.5.8.4). Note that a decimal point and fractional part are not included in the lexical structure of an exponential value. They are handled as part of the syntax of real literals.
        4. +
        +

        // Clause 8.2.2.5 String Value

        + +
        STRING_VALUE =
        +    '"' ( STRING_CHARACTER | ESCAPE_SEQUENCE )* '"'
        +
        + +
        STRING_CHARACTER =
        +           'any printable character other than backslash or "'
        +
        +

        // Notes:

        +
          +
        1. // 1. ESCAPE_SEQUENCE is specified in 8.2.2.3.
        2. +
        +

        // Clause 8.2.2.6 Reserved Words

        + +
        RESERVED_KEYWORD =
        +    'about' | 'abstract' | 'alias' | 'all' | 'and' | 'as' | 'assoc' | 'behavior' | 'binding' | 'bool' | 'by' | 'chains'
        +    | 'class' | 'classifier' | 'comment' | 'composite' | 'conjugate' | 'conjugates' | 'conjugation' | 'connector'
        +    | 'const' | 'crosses' | 'datatype' | 'default' | 'dependency' | 'derived' | 'differences' | 'disjoining' | 'disjoint'
        +    | 'doc' | 'else' | 'end' | 'expr' | 'false' | 'feature' | 'featured' | 'featuring' | 'filter' | 'first' | 'flow'
        +    | 'for' | 'from' | 'function' | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'inout' | 'interaction'
        +    | 'intersects' | 'inv' | 'inverse' | 'inverting' | 'istype' | 'language' | 'library' | 'locale' | 'member' | 'meta'
        +    | 'metaclass' | 'metadata' | 'multiplicity' | 'namespace' | 'nonunique' | 'not' | 'null' | 'of' | 'or' | 'ordered'
        +    | 'out' | 'package' | 'portion' | 'predicate' | 'private' | 'protected' | 'public' | 'redefines' | 'redefinition'
        +    | 'references' | 'rep' | 'return' | 'specialization' | 'specializes' | 'standard' | 'step' | 'struct'
        +    | 'subclassifier' | 'subset' | 'subsets' | 'subtype' | 'succession' | 'then' | 'to' | 'true' | 'type' | 'typed'
        +    | 'typing' | 'unions' | 'var' | 'xor'
        +
        +

        // Clause 8.2.2.7 Symbols

        + +
        RESERVED_SYMBOL =
        +    '~' | '}' | '|' | '{' | '^' | ']' | '[' | '@' | '??' | '?' | '>=' | '>' | '=>' | '===' | '==' | '=' | '<=' | '<'
        +    | ';' | ':>>' | ':>' | ':=' | '::>' | '::' | ':' | '/' | '.?' | '..' | '.' | '->' | '-' | ',' | '+' | '**' | '*' | ')'
        +    | '(' | '&' | '%' | '$' | '#' | '!==' | '!='
        +
        + +
        TYPED_BY    = ':'   | 'typed' 'by'
        +
        + +
        SPECIALIZES = ':>'  | 'specializes'
        +
        + +
        SUBSETS     = ':>'  | 'subsets'
        +
        + +
        REFERENCES  = '::>' | 'references'
        +
        + +
        CROSSES     = '=>'  | 'crosses'
        +
        + +
        REDEFINES   = ':>>' | 'redefines'
        +
        + +
        CONJUGATES  = '~'   | 'conjugates'
        +
        +

        // Clause 8.2.3 Root Concrete Syntax

        +

        // Clause 8.2.3.1 Elements and Relationships Concrete Syntax

        + +
        Identification : Element =
        +    ( '<' declaredShortName = NAME '>' )?
        +    ( declaredName = NAME )?
        +
        + +
        RelationshipBody : Relationship =
        +    ';' | '{' RelationshipOwnedElement* '}'
        +
        + +
        RelationshipOwnedElement : Relationship =
        +      ownedRelatedElement += OwnedRelatedElement
        +    | ownedRelationship += OwnedAnnotation
        +
        + +
        OwnedRelatedElement : Element =
        +    NonFeatureElement | FeatureElement
        +
        +

        // Clause 8.2.3.2 Dependencies Concrete Syntax

        + +
        Dependency =
        +    ( ownedRelationship += PrefixMetadataAnnotation )*
        +    'dependency' ( Identification? 'from' )?
        +    client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to'
        +    supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )*
        +    RelationshipBody
        +
        +

        // Notes:

        +
          +
        1. // 1. PrefixMetadataAnnotation is defined in the Kernel layer (see 8.2.5.12).
        2. +
        +

        // Clause 8.2.3.3 Annotations Concrete Syntax

        +
        // Clause 8.2.3.3.1 Annotations
        + +
        Annotation =
        +    annotatedElement = [QualifiedName]
        +
        + +
        OwnedAnnotation : Annotation =
        +    ownedRelatedElement += AnnotatingElement
        +
        + +
        AnnotatingElement =
        +      Comment
        +    | Documentation
        +    | TextualRepresentation
        +    | MetadataFeature
        +
        +

        // Notes:

        +
          +
        1. // 1. MetadataFeature is defined in the Kernel layer (see 8.2.5.12).
        2. +
        +
        // Clause 8.2.3.3.2 Comments and Documentation
        + +
        Comment =
        +    ( 'comment' Identification
        +      ( 'about' ownedRelationship += Annotation
        +        ( ',' ownedRelationship += Annotation )*
        +      )?
        +    )?
        +    ( 'locale' locale = STRING_VALUE )?
        +    body = REGULAR_COMMENT
        +
        + +
        Documentation =
        +    'doc' Identification
        +    ( 'locale' locale = STRING_VALUE )?
        +    body = REGULAR_COMMENT
        +
        +

        // Notes:

        +
          +
        1. // 1. The text of a lexical REGULAR_COMMENT or PREFIX_COMMENT shall be processed as follows before it is included as the body of a Comment or Documentation: +
            +
          • // • Remove the initial /* and final */ characters.
          • +
          • // • Remove any white space immediately after the initial /*, up to and including the first line terminator (if any).
          • +
          • // • On each subsequent line of the text: +
              +
            • // • Strip initial white space other than line terminators.
            • +
            • // • Then, if the first remaining character is "*", remove it.
            • +
            • // • Then, if the first remaining character is now a space, remove it.
            • +
            +
          • +
          +
        2. +
        3. // 2. The body text of a Comment can include markup information (such as HTML), and a conforming tool may display such text as rendered according to the markup. However, marked up "rich text" for a Comment written using the KerML textual concrete syntax shall be stored in the Comment body in plain text including all mark up text, with all line terminators and white space included as entered, other than what is removed according to the rules above.
        4. +
        +
        // Clause 8.2.3.3.3 Textual Representation
        + +
        TextualRepresentation =
        +    ( 'rep' Identification )?
        +    'language' language = STRING_VALUE
        +    body = REGULAR_COMMENT
        +
        +

        // Notes:

        +
          +
        1. // 1. The lexical text of a REGULAR_COMMENT shall be processed as specified in 8.2.3.3.2 for Comments before being included as the body of a TextualRepresentation.
        2. +
        3. // 2. See also 8.3.2.3.6 on the standard language names recognized for a TextualRepresentation.
        4. +
        +

        // Clause 8.2.3.4 Namespaces Concrete Syntax

        +
        // Clause 8.2.3.4.1 Namespaces
        + +
        RootNamespace : Namespace =
        +    NamespaceBodyElement*
        +
        +

        // (See Note 1) +

        + +
        Namespace =
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    NamespaceDeclaration NamespaceBody
        +
        +

        // (See Note 2) +

        + +
        NamespaceDeclaration : Namespace =
        +    'namespace' Identification
        +
        + +
        NamespaceBody : Namespace =
        +    ';' | '{' NamespaceBodyElement* '}'
        +
        + +
        NamespaceBodyElement : Namespace =
        +      ownedRelationship += NamespaceMember
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += Import
        +
        + +
        MemberPrefix : Membership =
        +    ( visibility = VisibilityIndicator )?
        +
        + +
        VisibilityIndicator : VisibilityKind =
        +    'public' | 'private' | 'protected'
        +
        + +
        NamespaceMember : OwningMembership =
        +      NonFeatureMember
        +    | NamespaceFeatureMember
        +
        + +
        NonFeatureMember : OwningMembership =
        +    MemberPrefix
        +    ownedRelatedElement += MemberElement
        +
        + +
        NamespaceFeatureMember : OwningMembership =
        +    MemberPrefix
        +    ownedRelatedElement += FeatureElement
        +
        + +
        AliasMember : Membership =
        +    MemberPrefix
        +    'alias' ( '<' memberShortName = NAME '>' )?
        +    ( memberName = NAME )?
        +    'for' memberElement = [QualifiedName]
        +    RelationshipBody
        +
        + +
        QualifiedName =
        +   ( '$' '::' )? ( NAME '::' )* NAME
        +
        +

        // (See Note 3) +

        +

        // Notes:

        +
          +
        1. // 1. A root Namespace is a Namespace that has no owningNamespace (see 8.3.2.4). Every Element other than a root Namespace must be contained, directly or indirectly, within some root Namespace. Therefore, every valid KerML concrete syntax text can be parsed starting from the RootNamespace production.
        2. +
        3. // 2. PrefixMetadataMember is defined in the Kernel layer (see 8.2.5.12).
        4. +
        5. // 3. A qualified name is notated as a sequence of segment names separated by "::" punctuation, optionally with the global scope qualifier "$" as an initial segment. An unqualified name can be considered the degenerate case of a qualified name with a single segment name. A qualified name is used in the KerML textual concrete syntax to identify an Element that is being referred to in the representation of another Element. A qualified name used in this way does not appear in the corresponding abstract syntax—instead, the abstract syntax representation contains an actual reference to the identified Element. Name resolution is the process of determining the Element that is identified by a qualified name. The segment names of the qualified name other than the last identify a sequence of nested Namespaces that provide the context for resolving the final segment name (see 8.2.3.5). The notation [QualifiedName] is used in concrete syntax grammar productions to indicate the result of resolving text parsed as a QualifiedName (see also 8.2.1).
        6. +
        +
        // Clause 8.2.3.4.2 Imports
        + +
        Import =
        +    visibility = VisibilityIndicator
        +    'import' ( isImportAll ?= 'all' )?
        +    ImportDeclaration RelationshipBody
        +
        + +
        ImportDeclaration : Import =
        +    MembershipImport | NamespaceImport
        +
        + +
        MembershipImport =
        +    importedMembership = [QualifiedName]
        +    ( '::' isRecursive ?= '**' )?
        +
        +

        // (See Note 1) +

        + +
        NamespaceImport =
        +      importedNamespace = [QualifiedName] '::' '*'
        +      ( '::' isRecursive ?= '**' )?
        +    | importedNamespace = FilterPackage
        +      { ownedRelatedElement += importedNamespace }
        +
        + +
        FilterPackage : Package =
        +    ownedRelationship += ImportDeclaration
        +    ( ownedRelationship += FilterPackageMember )+
        +
        + +
        FilterPackageMember : ElementFilterMembership =
        +    '[' ownedRelatedElement += OwnedExpression ']'
        +
        +

        // Notes:

        +
          +
        1. // 1. The importedMembership of a MembershipImport is the single case in which the Element required from the resolution [QualifiedName] is the actual Membership identified by the QualifedName, not the memberElement of that Membership (see 8.2.3.5).
        2. +
        +
        // Clause 8.2.3.4.3 Namespace Elements
        + +
        MemberElement : Element =
        +    AnnotatingElement | NonFeatureElement
        +
        + +
        NonFeatureElement : Element =
        +      Dependency
        +    | Namespace
        +    | Type
        +    | Classifier
        +    | DataType
        +    | Class
        +    | Structure
        +    | Metaclass
        +    | Association
        +    | AssociationStructure
        +    | Interaction
        +    | Behavior
        +    | Function
        +    | Predicate
        +    | Multiplicity
        +    | Package
        +    | LibraryPackage
        +    | Specialization
        +    | Conjugation
        +    | Subclassification
        +    | Disjoining
        +    | FeatureInverting
        +    | FeatureTyping
        +    | Subsetting
        +    | Redefinition
        +    | TypeFeaturing
        +
        + +
        FeatureElement : Feature =
        +      Feature
        +    | Step
        +    | Expression
        +    | BooleanExpression
        +    | Invariant
        +    | Connector
        +    | BindingConnector
        +    | Succession
        +    | Flow
        +    | SuccessionFlow
        +
        +

        // Clause 8.2.3.5 Name Resolution

        +
        // Clause 8.2.3.5.1 Name Resolution Overview
        +
        // Clause 8.2.3.5.2 Local and Global Namespaces
        +
        // Clause 8.2.3.5.3 Local and Visible Resolution
        +
        // Clause 8.2.3.5.4 Full Resolution
        +

        // Clause 8.2.4 Core Concrete Syntax

        +

        // Clause 8.2.4.1 Types Concrete Syntax

        +
        // Clause 8.2.4.1.1 Types
        + +
        Type =
        +    TypePrefix 'type'
        +    TypeDeclaration TypeBody
        +
        + +
        TypePrefix : Type =
        +    ( isAbstract ?= 'abstract' )?
        +    ( ownedRelationship += PrefixMetadataMember )*
        +
        + +
        TypeDeclaration : Type =
        +    ( isSufficient ?= 'all' )? Identification
        +    ( ownedRelationship += OwnedMultiplicity )?
        +    ( SpecializationPart | ConjugationPart )+
        +    TypeRelationshipPart*
        +
        + +
        SpecializationPart : Type =
        +    SPECIALIZES ownedRelationship += OwnedSpecialization
        +    ( ',' ownedRelationship += OwnedSpecialization )*
        +
        + +
        ConjugationPart : Type =
        +    CONJUGATES ownedRelationship += OwnedConjugation
        +
        + +
        TypeRelationshipPart : Type =
        +      DisjoiningPart
        +    | UnioningPart
        +    | IntersectingPart
        +    | DifferencingPart
        +
        + +
        DisjoiningPart : Type =
        +    'disjoint' 'from' ownedRelationship += OwnedDisjoining
        +    ( ',' ownedRelationship += OwnedDisjoining )*
        +
        + +
        UnioningPart : Type =
        +    'unions' ownedRelationship += Unioning
        +    ( ',' ownedRelationship += Unioning )*
        +
        + +
        IntersectingPart : Type =
        +    'intersects' ownedRelationship += Intersecting
        +    ( ',' ownedRelationship += Intersecting )*
        +
        + +
        DifferencingPart : Type =
        +    'differences' ownedRelationship += Differencing
        +    ( ',' ownedRelationship += Differencing )*
        +
        + +
        TypeBody : Type =
        +    ';' | '{' TypeBodyElement* '}'
        +
        + +
        TypeBodyElement : Type =
        +      ownedRelationship += NonFeatureMember
        +    | ownedRelationship += FeatureMember
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += Import
        +
        +
        // Clause 8.2.4.1.2 Specialization
        + +
        Specialization =
        +    ( 'specialization' Identification )?
        +    'subtype' SpecificType
        +    SPECIALIZES GeneralType
        +    RelationshipBody
        +
        + +
        OwnedSpecialization : Specialization =
        +    GeneralType
        +
        + +
        SpecificType : Specialization =
        +      specific = [QualifiedName]
        +    | specific += OwnedFeatureChain
        +      { ownedRelatedElement += specific }
        +
        + +
        GeneralType : Specialization =
        +      general = [QualifiedName]
        +    | general += OwnedFeatureChain
        +      { ownedRelatedElement += general }
        +
        +
        // Clause 8.2.4.1.3 Conjugation
        + +
        Conjugation =
        +    ( 'conjugation' Identification )?
        +    'conjugate'
        +    ( conjugatedType = [QualifiedName]
        +    | conjugatedType = FeatureChain
        +      { ownedRelatedElement += conjugatedType }
        +    )
        +    CONJUGATES
        +    ( originalType = [QualifiedName]
        +    | originalType = FeatureChain
        +      { ownedRelatedElement += originalType }
        +    )
        +    RelationshipBody
        +
        + +
        OwnedConjugation : Conjugation =
        +      originalType = [QualifiedName]
        +    | originalType = FeatureChain
        +      { ownedRelatedElement += originalType }
        +
        +
        // Clause 8.2.4.1.4 Disjoining
        + +
        Disjoining =
        +    ( 'disjoining' Identification )?
        +    'disjoint'
        +    ( typeDisjoined = [QualifiedName]
        +    | typeDisjoined = FeatureChain
        +      { ownedRelatedElement += typeDisjoined }
        +    )
        +    'from'
        +    ( disjoiningType = [QualifiedName]
        +    | disjoiningType = FeatureChain
        +      { ownedRelatedElement += disjoiningType }
        +    )
        +    RelationshipBody
        +
        + +
        OwnedDisjoining : Disjoining =
        +      disjoiningType = [QualifiedName]
        +    | disjoiningType = FeatureChain
        +      { ownedRelatedElement += disjoiningType }
        +
        +
        // Clause 8.2.4.1.5 Unioning, Intersecting and Differencing
        + +
        Unioning =
        +      unioningType = [QualifiedName]
        +    | ownedRelatedElement += OwnedFeatureChain
        +
        + +
        Intersecting =
        +      intersectingType = [QualifiedName]
        +    | ownedRelatedElement += OwnedFeatureChain
        +
        + +
        Differencing =
        +      differencingType = [QualifiedName]
        +    | ownedRelatedElement += OwnedFeatureChain
        +
        +
        // Clause 8.2.4.1.6 Feature Membership
        + +
        FeatureMember : OwningMembership =
        +      TypeFeatureMember
        +    | OwnedFeatureMember
        +
        + +
        TypeFeatureMember : OwningMembership =
        +    MemberPrefix 'member' ownedRelatedElement += FeatureElement
        +
        + +
        OwnedFeatureMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += FeatureElement
        +
        +

        // Clause 8.2.4.2 Classifiers Concrete Syntax

        +
        // Clause 8.2.4.2.1 Classifiers
        + +
        Classifier =
        +    TypePrefix 'classifier'
        +    ClassifierDeclaration TypeBody
        +
        + +
        ClassifierDeclaration : Classifier =
        +    ( isSufficient ?= 'all' )? Identification
        +    ( ownedRelationship += OwnedMultiplicity )?
        +    ( SuperclassingPart | ConjugationPart )?
        +    TypeRelationshipPart*
        +
        + +
        SuperclassingPart : Classifier =
        +      SPECIALIZES ownedRelationship += OwnedSubclassification
        +      ( ',' ownedRelationship += OwnedSubclassification )*
        +
        +
        // Clause 8.2.4.2.2 Subclassification
        + +
        Subclassification =
        +    ( 'specialization' Identification )?
        +    'subclassifier' subclassifier = [QualifiedName]
        +    SPECIALIZES superclassifier = [QualifiedName]
        +    RelationshipBody
        +
        + +
        OwnedSubclassification : Subclassification =
        +    superclassifier = [QualifiedName]
        +
        +

        // Clause 8.2.4.3 Features Concrete Syntax

        +
        // Clause 8.2.4.3.1 Features
        + +
        Feature =
        +    ( FeaturePrefix
        +      ( 'feature' | ownedRelationship += PrefixMetadataMember )
        +      FeatureDeclaration?
        +    | ( EndFeaturePrefix | BasicFeaturePrefix )
        +      FeatureDeclaration
        +    )
        +    ValuePart? TypeBody
        +
        +

        // (See Note 1) +

        + +
        EndFeaturePrefix : Feature =
        +    ( isConstant ?= 'const' { isVariable = true } )?
        +    isEnd ?= 'end'
        +
        + +
        BasicFeaturePrefix : Feature =
        +    ( direction = FeatureDirection )?
        +    ( isDerived ?= 'derived' )?
        +    ( isAbstract ?= 'abstract' )?
        +    ( isComposite ?= 'composite' | isPortion ?= 'portion' )?
        +    ( isVariable ?= 'var' | isConstant ?= 'const' { isVariable = true } )?
        +
        + +
        FeaturePrefix =
        +    ( EndFeaturePrefix ( ownedRelationship += OwnedCrossFeatureMember )?
        +    | BasicFeaturePrefix
        +    )
        +    ( ownedRelationship += PrefixMetadataMember )*
        +
        +

        // (See Note 1) +

        + +
        OwnedCrossFeatureMember : OwningMembership =
        +    ownedRelatedElement += OwnedCrossFeature
        +
        + +
        OwnedCrossFeature : Feature =
        +    BasicFeaturePrefix FeatureDeclaration
        +
        + +
        FeatureDirection : FeatureDirectionKind =
        +    'in' | 'out' | 'inout'
        +
        + +
        FeatureDeclaration : Feature =
        +    ( isSufficient ?= 'all' )?
        +    ( FeatureIdentification
        +      ( FeatureSpecializationPart | ConjugationPart )?
        +    | FeatureSpecializationPart
        +    | ConjugationPart
        +    )
        +    FeatureRelationshipPart*
        +
        + +
        FeatureIdentification : Feature =
        +      '<' declaredShortName = NAME '>' ( declaredName = NAME )?
        +    | declaredName = NAME
        +
        + +
        FeatureRelationshipPart : Feature =
        +      TypeRelationshipPart
        +    | ChainingPart
        +    | InvertingPart
        +    | TypeFeaturingPart
        +
        + +
        ChainingPart : Feature =
        +    'chains'
        +    ( ownedRelationship += OwnedFeatureChaining
        +    | FeatureChain )
        +
        + +
        InvertingPart : Feature =
        +    'inverse' 'of' ownedRelationship += OwnedFeatureInverting
        +
        + +
        TypeFeaturingPart : Feature =
        +    'featured' 'by' ownedRelationship += OwnedTypeFeaturing
        +    ( ',' ownedTypeFeaturing += OwnedTypeFeaturing )*
        +
        + +
        FeatureSpecializationPart : Feature =
        +      FeatureSpecialization+ MultiplicityPart? FeatureSpecialization*
        +    | MultiplicityPart FeatureSpecialization*
        +
        + +
        MultiplicityPart : Feature =
        +      ownedRelationship += OwnedMultiplicity
        +    | ( ownedRelationship += OwnedMultiplicity )?
        +      ( isOrdered ?= 'ordered' ( {isUnique = false} 'nonunique' )?
        +      | {isUnique = false} 'nonunique' ( isOrdered ?= 'ordered' )? )
        +
        + +
        FeatureSpecialization : Feature =
        +    Typings | Subsettings | References | Crosses | Redefinitions
        +
        + +
        Typings : Feature =
        +      TypedBy ( ',' ownedRelationship += OwnedFeatureTyping )*
        +
        + +
        TypedBy : Feature =
        +    TYPED_BY ownedRelationship += OwnedFeatureTyping
        +
        + +
        Subsettings : Feature =
        +    Subsets ( ',' ownedRelationship += OwnedSubsetting )*
        +
        + +
        Subsets : Feature =
        +    SUBSETS ownedRelationship += OwnedSubsetting
        +
        + +
        References : Feature =
        +    REFERENCES ownedRelationship += OwnedReferenceSubsetting
        +
        + +
        Crosses : Feature =
        +    CROSSES ownedRelationship += OwnedCrossSubsetting
        +
        + +
        Redefinitions : Feature =
        +    Redefines ( ',' ownedRelationship += OwnedRedefinition )*
        +
        + +
        Redefines : Feature =
        +    REDEFINES ownedRelationship += OwnedRedefinition
        +
        +

        // Notes:

        +
          +
        1. // 1. PrefixMetadataMember is defined in the Kernel layer (see 8.3.4.12).
        2. +
        +
        // Clause 8.2.4.3.2 Feature Typing
        + +
        FeatureTyping =
        +    ( 'specialization' Identification )?
        +    'typing' typedFeature = [QualifiedName]
        +    TYPED_BY GeneralType
        +    RelationshipBody
        +
        + +
        OwnedFeatureTyping : FeatureTyping =
        +    GeneralType
        +
        +
        // Clause 8.2.4.3.3 Subsetting
        + +
        Subsetting =
        +    ( 'specialization' Identification )?
        +    'subset' SpecificType
        +    SUBSETS GeneralType
        +    RelationshipBody
        +
        + +
        OwnedSubsetting : Subsetting =
        +    GeneralType
        +
        + +
        OwnedReferenceSubsetting : ReferenceSubsetting =
        +    GeneralType
        +
        + +
        OwnedCrossSubsetting : CrossSubsetting =
        +    GeneralType
        +
        +
        // Clause 8.2.4.3.4 Redefinition
        + +
        Redefinition =
        +    ( 'specialization' Identification )?
        +    'redefinition' SpecificType
        +    REDEFINES GeneralType
        +    RelationshipBody
        +
        + +
        OwnedRedefinition : Redefinition =
        +    GeneralType
        +
        +
        // Clause 8.2.4.3.5 Feature Chaining
        + +
        OwnedFeatureChain : Feature =
        +    FeatureChain
        +
        + +
        FeatureChain : Feature =
        +    ownedRelationship += OwnedFeatureChaining
        +    ( '.' ownedRelationship += OwnedFeatureChaining )+
        +
        + +
        OwnedFeatureChaining : FeatureChaining =
        +    chainingFeature = [QualifiedName]
        +
        +
        // Clause 8.2.4.3.6 Feature Inverting
        + +
        FeatureInverting =
        +    ( 'inverting' Identification? )?
        +    'inverse'
        +    ( featureInverted = [QualifiedName]
        +    | featureInverted = OwnedFeatureChain
        +      { ownedRelatedElement += featureInverted }
        +    )
        +    'of'
        +    ( invertingFeature = [QualifiedName]
        +    | ownedRelatedElement += OwnedFeatureChain
        +      { ownedRelatedElement += invertingFeature }
        +    )
        +    RelationshipBody
        +
        + +
        OwnedFeatureInverting : FeatureInverting =
        +      invertingFeature = [QualifiedName]
        +    | invertingFeature = OwnedFeatureChain
        +      { ownedRelatedElement += invertingFeature }
        +
        +
        // Clause 8.2.4.3.7 Type Featuring
        + +
        TypeFeaturing =
        +    'featuring' ( Identification 'of' )?
        +    featureOfType = [QualifiedName]
        +    'by' featuringType = [QualifiedName]
        +    RelationshipBody
        +
        + +
        OwnedTypeFeaturing : TypeFeaturing =
        +    featuringType = [QualifiedName]
        +
        +

        // Clause 8.2.5 Kernel Concrete Syntax

        +

        // Clause 8.2.5.1 Data Types Concrete Syntax

        + +
        DataType =
        +    TypePrefix 'datatype'
        +    ClassifierDeclaration TypeBody
        +
        +

        // Clause 8.2.5.2 Classes Concrete Syntax

        + +
        Class =
        +    TypePrefix 'class'
        +    ClassifierDeclaration TypeBody
        +
        +

        // Clause 8.2.5.3 Structures Concrete Syntax

        + +
        Structure =
        +    TypePrefix 'struct'
        +    ClassifierDeclaration TypeBody
        +
        +

        // Clause 8.2.5.4 Associations Concrete Syntax

        + +
        Association =
        +    TypePrefix 'assoc'
        +    ClassifierDeclaration TypeBody
        +
        + +
        AssociationStructure =
        +    TypePrefix 'assoc' 'struct'
        +    ClassifierDeclaration TypeBody
        +
        +

        // Clause 8.2.5.5 Connectors Concrete Syntax

        +
        // Clause 8.2.5.5.1 Connectors
        + +
        Connector =
        +    FeaturePrefix 'connector'
        +    ( FeatureDeclaration? ValuePart?
        +    | ConnectorDeclaration
        +    )
        +    TypeBody
        +
        + +
        ConnectorDeclaration : Connector =
        +    BinaryConnectorDeclaration | NaryConnectorDeclaration
        +
        + +
        BinaryConnectorDeclaration : Connector =
        +    ( FeatureDeclaration? 'from' | isSufficient ?= 'all' 'from'? )?
        +    ownedRelationship += ConnectorEndMember 'to'
        +    ownedRelationship += ConnectorEndMember
        +
        + +
        NaryConnectorDeclaration : Connector =
        +    FeatureDeclaration?
        +    '(' ownedRelationship += ConnectorEndMember ','
        +        ownedRelationship += ConnectorEndMember
        +        ( ',' ownedRelationship += ConnectorEndMember )*
        +    ')'
        +
        + +
        ConnectorEndMember : EndFeatureMembership =
        +    ownedRelatedElement += ConnectorEnd
        +
        + +
        ConnectorEnd : Feature =
        +	( ownedRelationship += OwnedCrossMultiplicityMember )?
        +	( declaredName = NAME REFERENCES )?
        +	ownedRelationship += OwnedReferenceSubsetting
        +
        + +
        OwnedCrossMultiplicityMember : OwningMembership =
        +	ownedRelatedElement += OwnedCrossMultiplicity
        +
        + +
        OwnedCrossMultiplicity : Feature =
        +	ownedRelationship += OwnedMultiplicity
        +
        +
        // Clause 8.2.5.5.2 Binding Connectors
        + +
        BindingConnector =
        +    FeaturePrefix 'binding'
        +    BindingConnectorDeclaration TypeBody
        +
        + +
        BindingConnectorDeclaration : BindingConnector =
        +      FeatureDeclaration
        +      ( 'of' ownedRelationship += ConnectorEndMember
        +        '='  ownedRelationship += ConnectorEndMember )?
        +    | ( isSufficient ?= 'all' )?
        +      ( 'of'? ownedRelationship += ConnectorEndMember
        +        '='   ownedRelationship += ConnectorEndMember )?
        +
        +
        // Clause 8.2.5.5.3 Successions
        + +
        Succession =
        +    FeaturePrefix 'succession'
        +    SuccessionDeclaration TypeBody
        +
        + +
        SuccessionDeclaration : Succession =
        +      FeatureDeclaration
        +      ( 'first' ownedRelationship += ConnectorEndMember
        +        'then'  ownedRelationship += ConnectorEndMember )?
        +    | ( s.isSufficient ?= 'all' )?
        +      ( 'first'? ownedRelationship += ConnectorEndMember
        +        'then'   ownedRelationship += ConnectorEndMember )?
        +
        +

        // Clause 8.2.5.6 Behaviors Concrete Syntax

        +
        // Clause 8.2.5.6.1 Behaviors
        + +
        Behavior =
        +    TypePrefix 'behavior'
        +    ClassifierDeclaration TypeBody
        +
        +
        // Clause 8.2.5.6.2 Steps
        + +
        Step =
        +    FeaturePrefix
        +    'step' FeatureDeclaration ValuePart?
        +    TypeBody
        +
        +

        // Clause 8.2.5.7 Functions Concrete Syntax

        +
        // Clause 8.2.5.7.1 Functions
        + +
        Function =
        +    TypePrefix 'function'
        +    ClassifierDeclaration FunctionBody
        +
        + +
        FunctionBody : Type =
        +    ';' | '{' FunctionBodyPart '}'
        +
        + +
        FunctionBodyPart : Type =
        +    ( TypeBodyElement
        +    | ownedRelationship += ReturnFeatureMember
        +    )*
        +   ( ownedRelationship += ResultExpressionMember )?
        +
        + +
        ReturnFeatureMember : ReturnParameterMembership =
        +    MemberPrefix 'return'
        +    ownedRelatedElement += FeatureElement
        +
        + +
        ResultExpressionMember : ResultExpressionMembership =
        +    MemberPrefix
        +    ownedRelatedElement += OwnedExpression
        +
        +
        // Clause 8.2.5.7.2 Expressions
        + +
        Expression =
        +    FeaturePrefix
        +    'expr' FeatureDeclaration ValuePart?
        +    FunctionBody
        +
        +
        // Clause 8.2.5.7.3 Predicates
        + +
        Predicate =
        +    TypePrefix 'predicate'
        +    ClassifierDeclaration FunctionBody
        +
        +
        // Clause 8.2.5.7.4 Boolean Expressions and Invariants
        + +
        BooleanExpression =
        +    FeaturePrefix
        +    'bool' FeatureDeclaration ValuePart?
        +    FunctionBody
        +
        + +
        Invariant =
        +    FeaturePrefix
        +    'inv' ( 'true' | isNegated ?= 'false' )?
        +    FeatureDeclaration ValuePart?
        +    FunctionBody
        +
        +

        // Clause 8.2.5.8 Expressions Concrete Syntax

        +
        // Clause 8.2.5.8.1 Operator Expressions
        + +
        OwnedExpressionReferenceMember : FeatureMembership =
        +    ownedRelationship += OwnedExpressionReference
        +
        + +
        OwnedExpressionReference : FeatureReferenceExpression =
        +    ownedRelationship += OwnedExpressionMember
        +
        + +
        OwnedExpressionMember : FeatureMembership =
        +    ownedFeatureMember = OwnedExpression
        +
        + +
        OwnedExpression : Expression =
        +      ConditionalExpression
        +    | ConditionalBinaryOperatorExpression
        +    | BinaryOperatorExpression
        +    | UnaryOperatorExpression
        +    | ClassificationExpression
        +    | MetaclassificationExpression
        +    | ExtentExpression
        +    | PrimaryExpression
        +
        + +
        ConditionalExpression : OperatorExpression =
        +    operator = 'if'
        +    ownedRelationship += ArgumentMember '?'
        +    ownedRelationship += ArgumentExpressionMember 'else'
        +    ownedRelationship += ArgumentExpressionMember
        +    ownedRelationship += EmptyResultMember
        +
        + +
        ConditionalBinaryOperatorExpression : OperatorExpression =
        +    ownedRelationship += ArgumentMember
        +    operator = ConditionalBinaryOperator
        +    ownedRelationship += ArgumentExpressionMember
        +    ownedRelationship += EmptyResultMember
        +
        + +
        ConditionalBinaryOperator =
        +    '??' | 'or' | 'and' | 'implies'
        +
        + +
        BinaryOperatorExpression : OperatorExpression =
        +    ownedRelationship += ArgumentMember
        +    operator = BinaryOperator
        +    ownedRelationship += ArgumentMember
        +    ownedRelationship += EmptyResultMember
        +
        + +
        BinaryOperator =
        +      '|'  | '&'  | 'xor' | '..'
        +    | '==' | '!=' | '===' | '!=='
        +    | '<'  | '>'  | '<='  | '>='
        +    | '+'  | '-'  | '*'   | '/'
        +    | '%'  | '^'  | '**'
        +
        + +
        UnaryOperatorExpression : OperatorExpression =
        +    operator = UnaryOperator
        +    ownedRelationship += ArgumentMember
        +    ownedRelationship += EmptyResultMember
        +
        + +
        UnaryOperator =
        +    '+' | '-' | '~' | 'not'
        +
        + +
        ClassificationExpression : OperatorExpression =
        +    ( ownedRelationship += ArgumentMember )?
        +    ( operator = ClassificationTestOperator
        +      ownedRelationship += TypeReferenceMember
        +    | operator = CastOperator
        +      ownedRelationship += TypeResultMember
        +    )
        +    ownedRelationship += EmptyResultMember
        +
        + +
        ClassificationTestOperator =
        +    'istype' | 'hastype' | '@'
        +
        + +
        CastOperator =
        +    'as'
        +
        + +
        MetaclassificationExpression : OperatorExpression =
        +    ownedRelationship += MetadataArgumentMember
        +    ( operator = ClassificationTestOperator
        +      ownedRelationship += TypeReferenceMember
        +    | operator = MetaCastOperator
        +      ownedRelationship += TypeResultMember
        +    )
        +    ownedRelationship += EmptyResultMember
        +
        + +
        ArgumentMember : ParameterMembership =
        +    ownedMemberParameter = Argument
        +
        + +
        Argument : Feature =
        +    ownedRelationship += ArgumentValue
        +
        + +
        ArgumentValue : FeatureValue =
        +    value = OwnedExpression
        +
        + +
        ArgumentExpressionMember : FeatureMembership =
        +    ownedRelatedElement += ArgumentExpression
        +
        + +
        ArgumentExpression : Feature =
        +    ownedRelationship += ArgumentExpressionValue
        +
        + +
        ArgumentExpressionValue : FeatureValue =
        +    value = OwnedExpressionReference
        +
        + +
        MetadataArgumentMember : ParameterMembership =
        +    ownedRelatedElement += MetadataArgument
        +
        + +
        MetadataArgument : Feature =
        +    ownedRelationship += MetadataValue
        +
        + +
        MetadataValue : FeatureValue =
        +    value = MetadataReference
        +
        + +
        MetadataReference : MetadataAccessExpression =
        +    ownedRelationship += ElementReferenceMember
        +
        + +
        MetaclassificationTestOperator =
        +    '@@'
        +
        + +
        MetaCastOperator =
        +    'meta'
        +
        + +
        ExtentExpression : OperatorExpression =
        +    operator = 'all'
        +    ownedRelationship += TypeReferenceMember
        +
        + +
        TypeReferenceMember : ParameterMembership =
        +    ownedMemberFeature = TypeReference
        +
        + +
        TypeResultMember : ResultParameterMembership =
        +    ownedMemberFeature = TypeReference
        +
        + +
        TypeReference : Feature =
        +    ownedRelationship += ReferenceTyping
        +
        + +
        ReferenceTyping : FeatureTyping =
        +    type = [QualifiedName]
        +
        + +
        EmptyResultMember : ReturnParameterMembership =
        +    ownedRelatedElement += EmptyFeature
        +
        + +
        EmptyFeature : Feature =
        +    { }
        +
        +

        // Notes:

        +
          +
        1. // 1. OperatorExpressions provide a shorthand notation for InvocationExpressions that invoke a library Function represented as an operator symbol. Table 5 shows the mapping from operator symbols to the Functions they represent from the Kernel Model Library (see Clause 9). An OperatorExpression contains subexpressions called its operands that generally correspond to the argument Expressions of the OperatorExpression, except in the case of operators representing control Functions, in which case the evaluation of certain operands is as determined by the Function (see 8.4.4.9 for details).
        2. +
        3. // 2. Though not directly expressed in the syntactic productions given above, in any OperatorExpression containing nested OperatorExpressions, the nested OperatorExpressions shall be implicitly grouped according to the precedence of the operators involved, as given in Table 6. OperatorExpressions with higher precedence operators shall be grouped more tightly than those with lower precedence operators. Further, all BinaryOperators other than exponentiation are left-associative (i.e, they group to the left), while the exponentiation operators (^ and **) are right-associative (i.e., they group to the right).
        4. +
        5. // 3. The unary operator symbol ~ maps to the library Function DataFunctions::'~', as shown in Table 5. This abstract Function may be given a concrete definition in a domain-specific Function library, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        6. +
        +
        // Clause 8.2.5.8.2 Primary Expressions
        + +
        PrimaryExpression : Expression =
        +      FeatureChainExpression
        +    | NonFeatureChainPrimaryExpression
        +
        + +
        PrimaryArgumentValue : FeatureValue =
        +    value = PrimaryExpression
        +
        + +
        PrimaryArgument : Feature =
        +    ownedRelationship += PrimaryArgumentValue
        +
        + +
        PrimaryArgumentMember : ParameterMembership =
        +    ownedMemberParameter = PrimaryArgument
        +
        + +
        NonFeatureChainPrimaryExpression : Expression =
        +      BracketExpression
        +    | IndexExpression
        +    | SequenceExpression
        +    | SelectExpression
        +    | CollectExpression
        +    | FunctionOperationExpression
        +    | BaseExpression
        +
        + +
        NonFeatureChainPrimaryArgumentValue : FeatureValue =
        +    value = NonFeatureChainPrimaryExpression
        +
        + +
        NonFeatureChainPrimaryArgument : Feature =
        +    ownedRelationship += NonFeatureChainPrimaryArgumentValue
        +
        + +
        NonFeatureChainPrimaryArgumentMember : ParameterMembership =
        +    ownedMemberParameter = PrimaryArgument
        +
        + +
        BracketExpression : OperatorExpression =
        +    ownedRelationship += PrimaryArgumentMember
        +    operator = '['
        +    ownedRelationship += SequenceExpressionListMember ']'
        +
        + +
        IndexExpression =
        +    ownedRelationship += PrimaryArgumentMember '#'
        +    '(' ownedRelationship += SequenceExpressionListMember ')'
        +
        + +
        SequenceExpression : Expression =
        +    '(' SequenceExpressionList ')'
        +
        + +
        SequenceExpressionList : Expression =
        +    OwnedExpression ','? | SequenceOperatorExpression
        +
        + +
        SequenceOperatorExpression : OperatorExpression =
        +    ownedRelationship += OwnedExpressionMember
        +    operator = ','
        +    ownedRelationship += SequenceExpressionListMember
        +
        + +
        SequenceExpressionListMember : FeatureMembership =
        +    ownedMemberFeature = SequenceExpressionList
        +
        + +
        FeatureChainExpression =
        +    ownedRelationship += NonFeatureChainPrimaryArgumentMember '.'
        +    ownedRelationship += FeatureChainMember
        +
        + +
        CollectExpression =
        +    ownedRelationship += PrimaryArgumentMember '.'
        +    ownedRelationship += BodyArgumentMember
        +
        + +
        SelectExpression =
        +    ownedRelationship += PrimaryArgumentMember '.?'
        +    ownedRelationship += BodyArgumentMember
        +
        + +
        FunctionOperationExpression : InvocationExpression =
        +    ownedRelationship += PrimaryArgumentMember '->'
        +    ownedRelationship += InvocationTypeMember
        +    ( ownedRelationship += BodyArgumentMember
        +    | ownedRelationship += FunctionReferenceArgumentMember
        +    | ArgumentList )
        +    ownedRelationship += EmptyResultMember
        +
        + +
        BodyArgumentMember : ParameterMembership =
        +    ownedMemberParameter = BodyArgument
        +
        + +
        BodyArgument : Feature =
        +    ownedRelationship += BodyArgumentValue
        +
        + +
        BodyArgumentValue : FeatureValue =
        +    value = BodyExpression
        +
        + +
        FunctionReferenceArgumentMember : ParameterMembership =
        +    ownedMemberParameter = FunctionReferenceArgument
        +
        + +
        FunctionReferenceArgument : Feature =
        +    ownedRelationship += FunctionReferenceArgumentValue
        +
        + +
        FunctionReferenceArgumentValue : FeatureValue =
        +    value = FunctionReferenceExpression
        +
        + +
        FunctionReferenceExpression : FeatureReferenceExpression =
        +    ownedRelationship += FunctionReferenceMember
        +
        + +
        FunctionReferenceMember : FeatureMembership =
        +    ownedMemberFeature = FunctionReference
        +
        + +
        FunctionReference : Expression =
        +    ownedRelationship += ReferenceTyping
        +
        + +
        FeatureChainMember : Membership =
        +      FeatureReferenceMember
        +    | OwnedFeatureChainMember
        +
        + +
        OwnedFeatureChainMember : OwningMembership =
        +    ownedMemberElement = FeatureChain
        +
        +

        // Notes:

        +
          +
        1. // 1. Primary expressions provide additional shorthand notations for certain kinds of InvocationExpressions. For those cases in which the InvocationExpression is an OperatorExpression, its operator shall be resolved to the appropriate library function as given in Table 7. Note also that, for a CollectionExpression or SelectExpression, the abstract syntax constrains the operator to be collect and select, respectively, separately from the . and .? symbols used in their concrete syntax notation (see 8.3.4.8.2 and 8.3.4.8.18).
        2. +
        3. // 2. The grammar allows a bracket syntax [...]that parses to an invocation of the library Function BaseFunctions::'[', as shown in Table 7. This notation is available for use with domain-specific library models that given a concrete definition to the abstract base '[' Function, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        4. +
        +
        // Clause 8.2.5.8.3 Base Expressions
        + +
        BaseExpression : Expression =
        +      NullExpression
        +    | LiteralExpression
        +    | FeatureReferenceExpression
        +    | MetadataAccessExpression
        +    | InvocationExpression
        +    | ConstructorExpression
        +    | BodyExpression
        +
        + +
        NullExpression : NullExpression =
        +    'null' | '(' ')'
        +
        + +
        FeatureReferenceExpression : FeatureReferenceExpression =
        +    ownedRelationship += FeatureReferenceMember
        +    ownedRelationship += EmptyResultMember
        +
        + +
        FeatureReferenceMember : Membership =
        +    memberElement = FeatureReference
        +
        + +
        FeatureReference : Feature =
        +    [QualifiedName]
        +
        + +
        MetadataAccessExpression =
        +    ownedRelationship += ElementReferenceMember '.' 'metadata'
        +
        + +
        ElementReferenceMember : Membership =
        +    memberElement = [QualifiedName]
        +
        + +
        InvocationExpression : InvocationExpression =
        +    ownedRelationship += InstantiatedTypeMember
        +    ArgumentList
        +    ownedRelationship += EmptyResultMember
        +
        + +
        ConstructorExpression =
        +    'new' ownedRelationship += InstantiatedTypeMember
        +    ownedRelationship += ConstructorResultMember
        +
        + +
        ConstructorResultMember : ReturnParameterMembership =
        +    ownedRelatedElement += ConstructorResult
        +
        + +
        ConstructorResult : Feature =
        +    ArgumentList
        +
        + +
        InstantiatedTypeMember : Membership =
        +      memberElement = InstantiatedTypeReference
        +    | OwnedFeatureChainMember
        +
        + +
        InstantiatedTypeReference : Type =
        +    [QualifiedName]
        +
        + +
        ArgumentList : Feature =
        +    '(' ( PositionalArgumentList | NamedArgumentList )? ')'
        +
        + +
        PositionalArgumentList : Feature =
        +    e.ownedRelationship += ArgumentMember
        +    ( ',' e.ownedRelationship += ArgumentMember )*
        +
        + +
        NamedArgumentList : Feature =
        +    ownedRelationship += NamedArgumentMember
        +    ( ',' ownedRelationship += NamedArgumentMember )*
        +
        + +
        NamedArgumentMember : FeatureMembership =
        +    ownedMemberFeature = NamedArgument
        +
        + +
        NamedArgument : Feature =
        +    ownedRelationship += ParameterRedefinition '='
        +    ownedRelationship += ArgumentValue
        +
        + +
        ParameterRedefinition : Redefinition =
        +    redefinedFeature = [QualifiedName]
        +
        + +
        BodyExpression : FeatureReferenceExpression =
        +    ownedRelationship += ExpressionBodyMember
        +
        + +
        ExpressionBodyMember : FeatureMembership =
        +    ownedMemberFeature = ExpressionBody
        +
        + +
        ExpressionBody : Expression =
        +    '{' FunctionBodyPart '}'
        +
        +
        // Clause 8.2.5.8.4 Literal Expressions
        + +
        LiteralExpression =
        +      LiteralBoolean
        +    | LiteralString
        +    | LiteralInteger
        +    | LiteralReal
        +    | LiteralInfinity
        +
        + +
        LiteralBoolean =
        +    value = BooleanValue
        +
        + +
        BooleanValue : Boolean =
        +    'true' | 'false'
        +
        + +
        LiteralString =
        +    value = STRING_VALUE
        +
        + +
        LiteralInteger =
        +    value = DECIMAL_VALUE
        +
        + +
        LiteralReal =
        +    value = RealValue
        +
        + +
        RealValue : Real =
        +      DECIMAL_VALUE? '.' ( DECIMAL_VALUE | EXPONENTIAL_VALUE )
        +    | EXPONENTIAL_VALUE
        +
        + +
        LiteralInfinity =
        +    '*'
        +
        +

        // Clause 8.2.5.9 Interactions Concrete Syntax

        +
        // Clause 8.2.5.9.1 Interactions
        + +
        Interaction =
        +    TypePrefix 'interaction'
        +    ClassifierDeclaration TypeBody
        +
        +
        // Clause 8.2.5.9.2 Flows
        + +
        Flow =
        +    FeaturePrefix 'flow'
        +    FlowDeclaration TypeBody
        +
        + +
        SuccessionFlow =
        +    FeaturePrefix 'succession' 'flow'
        +    FlowDeclaration TypeBody
        +
        + +
        FlowDeclaration : Flow =
        +      FeatureDeclaration ValuePart?
        +      ( 'of' ownedRelationship += PayloadFeatureMember )?
        +      ( 'from' ownedRelationship += FlowEndMember
        +        'to' ownedRelationship += FlowEndMember )?
        +    | ( isSufficient ?= 'all' )?
        +      ownedRelationship += FlowEndMember 'to'
        +      ownedRelationship += FlowEndMember
        +
        + +
        PayloadFeatureMember : FeatureMembership =
        +    ownedRelatedElement = PayloadFeature
        +
        + +
        PayloadFeature =
        +      Identification PayloadFeatureSpecializationPart ValuePart?
        +    | Identification ValuePart
        +    | ownedRelationship += OwnedFeatureTyping
        +      ( ownedRelationship += OwnedMultiplicity )?
        +    | ownedRelationship += OwnedMultiplicity
        +      ( ownedRelationship += OwnedFeatureTyping )?
        +
        + +
        PayloadFeatureSpecializationPart : Feature =
        +      FeatureSpecialization+ MultiplicityPart?
        +      FeatureSpecialization*
        +    | MultiplicityPart FeatureSpecialization+
        +
        + +
        FlowEndMember : EndFeatureMembership =
        +    ownedRelatedElement += FlowEnd
        +
        + +
        FlowEnd =
        +    ( ownedRelationship += OwnedReferenceSubsetting '.' )?
        +    ownedRelationship += FlowFeatureMember
        +
        + +
        FlowFeatureMember : FeatureMembership =
        +    ownedRelatedElement += FlowFeature
        +
        + +
        FlowFeature : Feature =
        +    ownedRelationship += FlowFeatureRedefinition
        +
        +

        // (See Note 1) +

        + +
        FlowFeatureRedefinition : Redefinition =
        +    redefinedFeature = [QualifiedName]
        +
        +

        // Notes:

        +
          +
        1. // 1. To ensure that an FlowFeature passes the validateRedefinitionDirectionConformance constraint (see 8.3.3.3.8), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature)
        2. +
        +

        // Clause 8.2.5.10 Feature Values Concrete Syntax

        + +
        ValuePart : Feature =
        +    ownedRelationship += FeatureValue
        +
        + +
        FeatureValue =
        +    ( '='
        +    | isInitial ?= ':='
        +    | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )?
        +    )
        +    ownedRelatedElement += OwnedExpression
        +
        +

        // Clause 8.2.5.11 Multiplicities Concrete Syntax

        + +
        Multiplicity =
        +    MultiplicitySubset | MultiplicityRange
        +
        + +
        MultiplicitySubset : Multiplicity =
        +    'multiplicity' Identification Subsets
        +    TypeBody
        +
        + +
        MultiplicityRange =
        +    'multiplicity' Identification MultiplicityBounds
        +    TypeBody
        +
        + +
        OwnedMultiplicity : OwningMembership =
        +    ownedRelatedElement += OwnedMultiplicityRange
        +
        + +
        OwnedMultiplicityRange : MultiplicityRange =
        +    MultiplicityBounds
        +
        + +
        MultiplicityBounds : MultiplicityRange =
        +    '[' ( ownedRelationship += MultiplicityExpressionMember '..' )?
        +          ownedRelationship += MultiplicityExpressionMember ']'
        +
        + +
        MultiplicityExpressionMember : OwningMembership =
        +    ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression )
        +
        +

        // Clause 8.2.5.12 Metadata Concrete Syntax

        + +
        Metaclass =
        +    TypePrefix 'metaclass'
        +    ClassifierDeclaration TypeBody
        +
        + +
        PrefixMetadataAnnotation : Annotation =
        +    '#' ownedRelatedElement += PrefixMetadataFeature
        +
        + +
        PrefixMetadataMember : OwningMembership =
        +    '#' ownedRelatedElement += PrefixMetadataFeature
        +
        + +
        PrefixMetadataFeature : MetadataFeature =
        +    ownedRelationship += OwnedFeatureTyping
        +
        + +
        MetadataFeature =
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    ( '@' | 'metadata' )
        +    MetadataFeatureDeclaration
        +    ( 'about' ownedRelationship += Annotation
        +      ( ',' ownedRelationship += Annotation )*
        +    )?
        +    MetadataBody
        +
        + +
        MetadataFeatureDeclaration : MetadataFeature =
        +    ( Identification ( ':' | 'typed' 'by' ) )?
        +    ownedRelationship += OwnedFeatureTyping
        +
        + +
        MetadataBody : Feature =
        +    ';' | '{' ( ownedRelationship += MetadataBodyElement )* '}'
        +
        + +
        MetadataBodyElement : Membership =
        +      NonFeatureMember
        +    | MetadataBodyFeatureMember
        +    | AliasMember
        +    | Import
        +
        + +
        MetadataBodyFeatureMember : FeatureMembership =
        +    ownedMemberFeature = MetadataBodyFeature
        +
        + +
        MetadataBodyFeature : Feature =
        +    'feature'? ( ':>>' | 'redefines')? ownedRelationship += OwnedRedefinition
        +    FeatureSpecializationPart? ValuePart?
        +    MetadataBody
        +
        +

        // Clause 8.2.5.13 Packages Concrete Syntax

        + +
        Package =
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    PackageDeclaration PackageBody
        +
        + +
        LibraryPackage =
        +    ( isStandard ?= 'standard' ) 'library'
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    PackageDeclaration PackageBody
        +
        + +
        PackageDeclaration : Package =
        +    'package' Identification
        +
        + +
        PackageBody : Package =
        +      ';'
        +    | '{' ( NamespaceBodyElement
        +          | ownedRelationship += ElementFilterMember
        +          )*
        +      '}'
        +
        + +
        ElementFilterMember : ElementFilterMembership =
        +    MemberPrefix
        +    'filter' condition = OwnedExpression ';'
        +
        +

        // End of BNF
        + +

        + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected.kebnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected.kebnf new file mode 100644 index 000000000..b5bc1d32b --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected.kebnf @@ -0,0 +1,1474 @@ +// Source document: tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected-marked_up.kebnf +// Generated by bnf_grammar_processor at: 2025-12-04T19:29:18Z + + +// Source document: tests\KerML_and_SysML_spec_sources\KerML-spec.html +// Generated by bnf_grammar_processor at: 2025-11-14T23:08:48Z + +// Manual corrections by HP de Koning + +// Part 1 - Kernel Modeling Language (KerML) + +// Clause 8.2 Concrete Syntax + +// Clause 8.2.1 Concrete Syntax Overview + +// Clause 8.2.2 Lexical Structure + +// Clause 8.2.2.1 Line Terminators and White Space + +LINE_TERMINATOR = + '\n' | '\r' | '\r\n' +// implementation defined character sequence + +LINE_TEXT = + '[^\r\n]*' +// character sequence excluding LINE_TERMINATORs + +WHITE_SPACE = + ' ' | '\t' | '\f' | LINE_TERMINATOR +// space | tab | form_feed | LINE_TERMINATOR + +// Notes: +// 1. Notation text is divided up into lines separated by line terminators. A line terminator may be a single character (such as a line feed) or a sequence of characters (such as a carriage return/line feed combination). This specification does not require any specific encoding for a line terminator, but any encoding used must be consistent throughout any specific input text. +// 2. Any characters in text line that are not a part of the line terminator are referred to as line text. +// 3. A white space character is a space, tab, form feed or line terminator. Any contiguous sequence of white space characters can be used to separate tokens that would otherwise be considered to be part of a single token. It is otherwise ignored, with the single exception that a line terminator is used to mark the end of a single-line note (see 8.2.2.2). + +// Clause 8.2.2.2 Notes and Comments + +SINGLE_LINE_NOTE = + '//' LINE_TEXT + +MULTILINE_NOTE = + '//*' COMMENT_TEXT '*/' + +REGULAR_COMMENT = + '/*' COMMENT_TEXT '*/' + +COMMENT_TEXT = + ( COMMENT_LINE_TEXT | LINE_TERMINATOR )* + +COMMENT_LINE_TEXT = + '.*(?=(\r|\n|\*/))' +// LINE_TEXT excluding the sequence '*/' + +// Clause 8.2.2.3 Names + +NAME = + BASIC_NAME | UNRESTRICTED_NAME + +BASIC_NAME = + BASIC_INITIAL_CHARACTER BASIC_NAME_CHARACTER* + +SINGLE_QUOTE = + '#x27' + +UNRESTRICTED_NAME = + SINGLE_QUOTE ( NAME_CHARACTER | ESCAPE_SEQUENCE )* SINGLE_QUOTE + +// (See Note 1) + +BASIC_INITIAL_CHARACTER = + ALPHABETIC_CHARACTER | '_' + +BASIC_NAME_CHARACTER = + BASIC_INITIAL_CHARACTER | DECIMAL_DIGIT + +ALPHABETIC_CHARACTER = + 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' | + 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' +// any character 'a' through 'z' or 'A' through 'Z' + +DECIMAL_DIGIT = + '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' + +NAME_CHARACTER = + 'any printable character other than backslash or single_quote' + +ESCAPE_SEQUENCE = + '\f' | '\n' | '\t' | '\r' | '\v' +// (See Note 2) + +// Notes: +// 1. The single_quote character is '. The name represented by an UNRESTRICTED_NAME shall consist of the characters within the single quotes, with escape characters resolved as described below. The surrounding single quote characters are not part of the represented name. +// 2. An ESCAPE_SEQUENCE is a sequence of two text characters starting with a backslash that actually denotes only a single character, except for the newline escape sequence, which represents however many characters is necessary to represent an end of line in a specific implementation (see also 8.2.2.1). Table 4 shows the meaning of the allowed escape sequences. The ESCAPE_SEQUENCES in an UNRESTRICTED_NAME shall be replaced by the characters specified as their meanings in the actual represented name. + +// Clause 8.2.2.4 Numeric Values + +DECIMAL_VALUE = + DECIMAL_DIGIT+ + +EXPONENTIAL_VALUE = + DECIMAL_VALUE ('e' | 'E') ('+' | '-')? DECIMAL_VALUE + +// Notes: +// 1. A DECIMAL_VALUE may specify a natural literal, or it may be part of the specification of a real literal (see 8.2.5.8.4). Note that a DECIMAL_VALUE does not include a sign, because negating a literal is an operator in the KerML Expression syntax. +// 2. An EXPONENTIAL_VALUE may be used in the specification of a real literal (see 8.2.5.8.4). Note that a decimal point and fractional part are not included in the lexical structure of an exponential value. They are handled as part of the syntax of real literals. + +// Clause 8.2.2.5 String Value + +STRING_VALUE = + '"' ( STRING_CHARACTER | ESCAPE_SEQUENCE )* '"' + +STRING_CHARACTER = + 'any printable character other than backslash or "' + +// Notes: +// 1. ESCAPE_SEQUENCE is specified in 8.2.2.3. + +// Clause 8.2.2.6 Reserved Words + +RESERVED_KEYWORD = + 'about' | 'abstract' | 'alias' | 'all' | 'and' | 'as' | 'assoc' | 'behavior' | 'binding' | 'bool' | 'by' | 'chains' + | 'class' | 'classifier' | 'comment' | 'composite' | 'conjugate' | 'conjugates' | 'conjugation' | 'connector' + | 'const' | 'crosses' | 'datatype' | 'default' | 'dependency' | 'derived' | 'differences' | 'disjoining' | 'disjoint' + | 'doc' | 'else' | 'end' | 'expr' | 'false' | 'feature' | 'featured' | 'featuring' | 'filter' | 'first' | 'flow' + | 'for' | 'from' | 'function' | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'inout' | 'interaction' + | 'intersects' | 'inv' | 'inverse' | 'inverting' | 'istype' | 'language' | 'library' | 'locale' | 'member' | 'meta' + | 'metaclass' | 'metadata' | 'multiplicity' | 'namespace' | 'nonunique' | 'not' | 'null' | 'of' | 'or' | 'ordered' + | 'out' | 'package' | 'portion' | 'predicate' | 'private' | 'protected' | 'public' | 'redefines' | 'redefinition' + | 'references' | 'rep' | 'return' | 'specialization' | 'specializes' | 'standard' | 'step' | 'struct' + | 'subclassifier' | 'subset' | 'subsets' | 'subtype' | 'succession' | 'then' | 'to' | 'true' | 'type' | 'typed' + | 'typing' | 'unions' | 'var' | 'xor' + +// Clause 8.2.2.7 Symbols + +RESERVED_SYMBOL = + '~' | '}' | '|' | '{' | '^' | ']' | '[' | '@' | '??' | '?' | '>=' | '>' | '=>' | '===' | '==' | '=' | '<=' | '<' + | ';' | ':>>' | ':>' | ':=' | '::>' | '::' | ':' | '/' | '.?' | '..' | '.' | '->' | '-' | ',' | '+' | '**' | '*' | ')' + | '(' | '&' | '%' | '$' | '#' | '!==' | '!=' + +TYPED_BY = ':' | 'typed' 'by' + +SPECIALIZES = ':>' | 'specializes' + +SUBSETS = ':>' | 'subsets' + +REFERENCES = '::>' | 'references' + +CROSSES = '=>' | 'crosses' + +REDEFINES = ':>>' | 'redefines' + +CONJUGATES = '~' | 'conjugates' + +// Clause 8.2.3 Root Concrete Syntax + +// Clause 8.2.3.1 Elements and Relationships Concrete Syntax + +Identification : Element = + ( '<' declaredShortName = NAME '>' )? + ( declaredName = NAME )? + +RelationshipBody : Relationship = + ';' | '{' RelationshipOwnedElement* '}' + +RelationshipOwnedElement : Relationship = + ownedRelatedElement += OwnedRelatedElement + | ownedRelationship += OwnedAnnotation + +OwnedRelatedElement : Element = + NonFeatureElement | FeatureElement + +// Clause 8.2.3.2 Dependencies Concrete Syntax + +Dependency = + ( ownedRelationship += PrefixMetadataAnnotation )* + 'dependency' ( Identification? 'from' )? + client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to' + supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )* + RelationshipBody + +// Notes: +// 1. PrefixMetadataAnnotation is defined in the Kernel layer (see 8.2.5.12). + +// Clause 8.2.3.3 Annotations Concrete Syntax + +// Clause 8.2.3.3.1 Annotations + +Annotation = + annotatedElement = [QualifiedName] + +OwnedAnnotation : Annotation = + ownedRelatedElement += AnnotatingElement + +AnnotatingElement = + Comment + | Documentation + | TextualRepresentation + | MetadataFeature + +// Notes: +// 1. MetadataFeature is defined in the Kernel layer (see 8.2.5.12). + +// Clause 8.2.3.3.2 Comments and Documentation + +Comment = + ( 'comment' Identification + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + )? + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +Documentation = + 'doc' Identification + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +// Notes: +// 1. The text of a lexical REGULAR_COMMENT or PREFIX_COMMENT shall be processed as follows before it is included as the body of a Comment or Documentation: +// • Remove the initial /* and final */ characters. +// • Remove any white space immediately after the initial /*, up to and including the first line terminator (if any). +// • On each subsequent line of the text: +// • Strip initial white space other than line terminators. +// • Then, if the first remaining character is "*", remove it. +// • Then, if the first remaining character is now a space, remove it. +// 2. The body text of a Comment can include markup information (such as HTML), and a conforming tool may display such text as rendered according to the markup. However, marked up "rich text" for a Comment written using the KerML textual concrete syntax shall be stored in the Comment body in plain text including all mark up text, with all line terminators and white space included as entered, other than what is removed according to the rules above. + +// Clause 8.2.3.3.3 Textual Representation + +TextualRepresentation = + ( 'rep' Identification )? + 'language' language = STRING_VALUE + body = REGULAR_COMMENT + +// Notes: +// 1. The lexical text of a REGULAR_COMMENT shall be processed as specified in 8.2.3.3.2 for Comments before being included as the body of a TextualRepresentation. +// 2. See also 8.3.2.3.6 on the standard language names recognized for a TextualRepresentation. + +// Clause 8.2.3.4 Namespaces Concrete Syntax + +// Clause 8.2.3.4.1 Namespaces + +RootNamespace : Namespace = + NamespaceBodyElement* + +// (See Note 1) + +Namespace = + ( ownedRelationship += PrefixMetadataMember )* + NamespaceDeclaration NamespaceBody + +// (See Note 2) + +NamespaceDeclaration : Namespace = + 'namespace' Identification + +NamespaceBody : Namespace = + ';' | '{' NamespaceBodyElement* '}' + +NamespaceBodyElement : Namespace = + ownedRelationship += NamespaceMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +MemberPrefix : Membership = + ( visibility = VisibilityIndicator )? + +VisibilityIndicator : VisibilityKind = + 'public' | 'private' | 'protected' + +NamespaceMember : OwningMembership = + NonFeatureMember + | NamespaceFeatureMember + +NonFeatureMember : OwningMembership = + MemberPrefix + ownedRelatedElement += MemberElement + +NamespaceFeatureMember : OwningMembership = + MemberPrefix + ownedRelatedElement += FeatureElement + +AliasMember : Membership = + MemberPrefix + 'alias' ( '<' memberShortName = NAME '>' )? + ( memberName = NAME )? + 'for' memberElement = [QualifiedName] + RelationshipBody + +QualifiedName = + ( '$' '::' )? ( NAME '::' )* NAME + +// (See Note 3) + +// Notes: +// 1. A root Namespace is a Namespace that has no owningNamespace (see 8.3.2.4). Every Element other than a root Namespace must be contained, directly or indirectly, within some root Namespace. Therefore, every valid KerML concrete syntax text can be parsed starting from the RootNamespace production. +// 2. PrefixMetadataMember is defined in the Kernel layer (see 8.2.5.12). +// 3. A qualified name is notated as a sequence of segment names separated by "::" punctuation, optionally with the global scope qualifier "$" as an initial segment. An unqualified name can be considered the degenerate case of a qualified name with a single segment name. A qualified name is used in the KerML textual concrete syntax to identify an Element that is being referred to in the representation of another Element. A qualified name used in this way does not appear in the corresponding abstract syntax—instead, the abstract syntax representation contains an actual reference to the identified Element. Name resolution is the process of determining the Element that is identified by a qualified name. The segment names of the qualified name other than the last identify a sequence of nested Namespaces that provide the context for resolving the final segment name (see 8.2.3.5). The notation [QualifiedName] is used in concrete syntax grammar productions to indicate the result of resolving text parsed as a QualifiedName (see also 8.2.1). + +// Clause 8.2.3.4.2 Imports + +Import = + visibility = VisibilityIndicator + 'import' ( isImportAll ?= 'all' )? + ImportDeclaration RelationshipBody + +ImportDeclaration : Import = + MembershipImport | NamespaceImport + +MembershipImport = + importedMembership = [QualifiedName] + ( '::' isRecursive ?= '**' )? + +// (See Note 1) + +NamespaceImport = + importedNamespace = [QualifiedName] '::' '*' + ( '::' isRecursive ?= '**' )? + | importedNamespace = FilterPackage + { ownedRelatedElement += importedNamespace } + +FilterPackage : Package = + ownedRelationship += ImportDeclaration + ( ownedRelationship += FilterPackageMember )+ + +FilterPackageMember : ElementFilterMembership = + '[' ownedRelatedElement += OwnedExpression ']' + +// Notes: +// 1. The importedMembership of a MembershipImport is the single case in which the Element required from the resolution [QualifiedName] is the actual Membership identified by the QualifedName, not the memberElement of that Membership (see 8.2.3.5). + +// Clause 8.2.3.4.3 Namespace Elements + +MemberElement : Element = + AnnotatingElement | NonFeatureElement + +NonFeatureElement : Element = + Dependency + | Namespace + | Type + | Classifier + | DataType + | Class + | Structure + | Metaclass + | Association + | AssociationStructure + | Interaction + | Behavior + | Function + | Predicate + | Multiplicity + | Package + | LibraryPackage + | Specialization + | Conjugation + | Subclassification + | Disjoining + | FeatureInverting + | FeatureTyping + | Subsetting + | Redefinition + | TypeFeaturing + +FeatureElement : Feature = + Feature + | Step + | Expression + | BooleanExpression + | Invariant + | Connector + | BindingConnector + | Succession + | Flow + | SuccessionFlow + +// Clause 8.2.3.5 Name Resolution + +// Clause 8.2.3.5.1 Name Resolution Overview + +// Clause 8.2.3.5.2 Local and Global Namespaces + +// Clause 8.2.3.5.3 Local and Visible Resolution + +// Clause 8.2.3.5.4 Full Resolution + +// Clause 8.2.4 Core Concrete Syntax + +// Clause 8.2.4.1 Types Concrete Syntax + +// Clause 8.2.4.1.1 Types + +Type = + TypePrefix 'type' + TypeDeclaration TypeBody + +TypePrefix : Type = + ( isAbstract ?= 'abstract' )? + ( ownedRelationship += PrefixMetadataMember )* + +TypeDeclaration : Type = + ( isSufficient ?= 'all' )? Identification + ( ownedRelationship += OwnedMultiplicity )? + ( SpecializationPart | ConjugationPart )+ + TypeRelationshipPart* + +SpecializationPart : Type = + SPECIALIZES ownedRelationship += OwnedSpecialization + ( ',' ownedRelationship += OwnedSpecialization )* + +ConjugationPart : Type = + CONJUGATES ownedRelationship += OwnedConjugation + +TypeRelationshipPart : Type = + DisjoiningPart + | UnioningPart + | IntersectingPart + | DifferencingPart + +DisjoiningPart : Type = + 'disjoint' 'from' ownedRelationship += OwnedDisjoining + ( ',' ownedRelationship += OwnedDisjoining )* + +UnioningPart : Type = + 'unions' ownedRelationship += Unioning + ( ',' ownedRelationship += Unioning )* + +IntersectingPart : Type = + 'intersects' ownedRelationship += Intersecting + ( ',' ownedRelationship += Intersecting )* + +DifferencingPart : Type = + 'differences' ownedRelationship += Differencing + ( ',' ownedRelationship += Differencing )* + +TypeBody : Type = + ';' | '{' TypeBodyElement* '}' + +TypeBodyElement : Type = + ownedRelationship += NonFeatureMember + | ownedRelationship += FeatureMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +// Clause 8.2.4.1.2 Specialization + +Specialization = + ( 'specialization' Identification )? + 'subtype' SpecificType + SPECIALIZES GeneralType + RelationshipBody + +OwnedSpecialization : Specialization = + GeneralType + +SpecificType : Specialization = + specific = [QualifiedName] + | specific += OwnedFeatureChain + { ownedRelatedElement += specific } + +GeneralType : Specialization = + general = [QualifiedName] + | general += OwnedFeatureChain + { ownedRelatedElement += general } + +// Clause 8.2.4.1.3 Conjugation + +Conjugation = + ( 'conjugation' Identification )? + 'conjugate' + ( conjugatedType = [QualifiedName] + | conjugatedType = FeatureChain + { ownedRelatedElement += conjugatedType } + ) + CONJUGATES + ( originalType = [QualifiedName] + | originalType = FeatureChain + { ownedRelatedElement += originalType } + ) + RelationshipBody + +OwnedConjugation : Conjugation = + originalType = [QualifiedName] + | originalType = FeatureChain + { ownedRelatedElement += originalType } + +// Clause 8.2.4.1.4 Disjoining + +Disjoining = + ( 'disjoining' Identification )? + 'disjoint' + ( typeDisjoined = [QualifiedName] + | typeDisjoined = FeatureChain + { ownedRelatedElement += typeDisjoined } + ) + 'from' + ( disjoiningType = [QualifiedName] + | disjoiningType = FeatureChain + { ownedRelatedElement += disjoiningType } + ) + RelationshipBody + +OwnedDisjoining : Disjoining = + disjoiningType = [QualifiedName] + | disjoiningType = FeatureChain + { ownedRelatedElement += disjoiningType } + +// Clause 8.2.4.1.5 Unioning, Intersecting and Differencing + +Unioning = + unioningType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +Intersecting = + intersectingType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +Differencing = + differencingType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +// Clause 8.2.4.1.6 Feature Membership + +FeatureMember : OwningMembership = + TypeFeatureMember + | OwnedFeatureMember + +TypeFeatureMember : OwningMembership = + MemberPrefix 'member' ownedRelatedElement += FeatureElement + +OwnedFeatureMember : FeatureMembership = + MemberPrefix ownedRelatedElement += FeatureElement + +// Clause 8.2.4.2 Classifiers Concrete Syntax + +// Clause 8.2.4.2.1 Classifiers + +Classifier = + TypePrefix 'classifier' + ClassifierDeclaration TypeBody + +ClassifierDeclaration : Classifier = + ( isSufficient ?= 'all' )? Identification + ( ownedRelationship += OwnedMultiplicity )? + ( SuperclassingPart | ConjugationPart )? + TypeRelationshipPart* + +SuperclassingPart : Classifier = + SPECIALIZES ownedRelationship += OwnedSubclassification + ( ',' ownedRelationship += OwnedSubclassification )* + +// Clause 8.2.4.2.2 Subclassification + +Subclassification = + ( 'specialization' Identification )? + 'subclassifier' subclassifier = [QualifiedName] + SPECIALIZES superclassifier = [QualifiedName] + RelationshipBody + +OwnedSubclassification : Subclassification = + superclassifier = [QualifiedName] + +// Clause 8.2.4.3 Features Concrete Syntax + +// Clause 8.2.4.3.1 Features + +Feature = + ( FeaturePrefix + ( 'feature' | ownedRelationship += PrefixMetadataMember ) + FeatureDeclaration? + | ( EndFeaturePrefix | BasicFeaturePrefix ) + FeatureDeclaration + ) + ValuePart? TypeBody + +// (See Note 1) + +EndFeaturePrefix : Feature = + ( isConstant ?= 'const' { isVariable = true } )? + isEnd ?= 'end' + +BasicFeaturePrefix : Feature = + ( direction = FeatureDirection )? + ( isDerived ?= 'derived' )? + ( isAbstract ?= 'abstract' )? + ( isComposite ?= 'composite' | isPortion ?= 'portion' )? + ( isVariable ?= 'var' | isConstant ?= 'const' { isVariable = true } )? + +FeaturePrefix = + ( EndFeaturePrefix ( ownedRelationship += OwnedCrossFeatureMember )? + | BasicFeaturePrefix + ) + ( ownedRelationship += PrefixMetadataMember )* + +// (See Note 1) + +OwnedCrossFeatureMember : OwningMembership = + ownedRelatedElement += OwnedCrossFeature + +OwnedCrossFeature : Feature = + BasicFeaturePrefix FeatureDeclaration + +FeatureDirection : FeatureDirectionKind = + 'in' | 'out' | 'inout' + +FeatureDeclaration : Feature = + ( isSufficient ?= 'all' )? + ( FeatureIdentification + ( FeatureSpecializationPart | ConjugationPart )? + | FeatureSpecializationPart + | ConjugationPart + ) + FeatureRelationshipPart* + +FeatureIdentification : Feature = + '<' declaredShortName = NAME '>' ( declaredName = NAME )? + | declaredName = NAME + +FeatureRelationshipPart : Feature = + TypeRelationshipPart + | ChainingPart + | InvertingPart + | TypeFeaturingPart + +ChainingPart : Feature = + 'chains' + ( ownedRelationship += OwnedFeatureChaining + | FeatureChain ) + +InvertingPart : Feature = + 'inverse' 'of' ownedRelationship += OwnedFeatureInverting + +TypeFeaturingPart : Feature = + 'featured' 'by' ownedRelationship += OwnedTypeFeaturing + ( ',' ownedTypeFeaturing += OwnedTypeFeaturing )* + +FeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? FeatureSpecialization* + | MultiplicityPart FeatureSpecialization* + +MultiplicityPart : Feature = + ownedRelationship += OwnedMultiplicity + | ( ownedRelationship += OwnedMultiplicity )? + ( isOrdered ?= 'ordered' ( {isUnique = false} 'nonunique' )? + | {isUnique = false} 'nonunique' ( isOrdered ?= 'ordered' )? ) + +FeatureSpecialization : Feature = + Typings | Subsettings | References | Crosses | Redefinitions + +Typings : Feature = + TypedBy ( ',' ownedRelationship += OwnedFeatureTyping )* + +TypedBy : Feature = + TYPED_BY ownedRelationship += OwnedFeatureTyping + +Subsettings : Feature = + Subsets ( ',' ownedRelationship += OwnedSubsetting )* + +Subsets : Feature = + SUBSETS ownedRelationship += OwnedSubsetting + +References : Feature = + REFERENCES ownedRelationship += OwnedReferenceSubsetting + +Crosses : Feature = + CROSSES ownedRelationship += OwnedCrossSubsetting + +Redefinitions : Feature = + Redefines ( ',' ownedRelationship += OwnedRedefinition )* + +Redefines : Feature = + REDEFINES ownedRelationship += OwnedRedefinition + +// Notes: +// 1. PrefixMetadataMember is defined in the Kernel layer (see 8.3.4.12). + +// Clause 8.2.4.3.2 Feature Typing + +FeatureTyping = + ( 'specialization' Identification )? + 'typing' typedFeature = [QualifiedName] + TYPED_BY GeneralType + RelationshipBody + +OwnedFeatureTyping : FeatureTyping = + GeneralType + +// Clause 8.2.4.3.3 Subsetting + +Subsetting = + ( 'specialization' Identification )? + 'subset' SpecificType + SUBSETS GeneralType + RelationshipBody + +OwnedSubsetting : Subsetting = + GeneralType + +OwnedReferenceSubsetting : ReferenceSubsetting = + GeneralType + +OwnedCrossSubsetting : CrossSubsetting = + GeneralType + +// Clause 8.2.4.3.4 Redefinition + +Redefinition = + ( 'specialization' Identification )? + 'redefinition' SpecificType + REDEFINES GeneralType + RelationshipBody + +OwnedRedefinition : Redefinition = + GeneralType + +// Clause 8.2.4.3.5 Feature Chaining + +OwnedFeatureChain : Feature = + FeatureChain + +FeatureChain : Feature = + ownedRelationship += OwnedFeatureChaining + ( '.' ownedRelationship += OwnedFeatureChaining )+ + +OwnedFeatureChaining : FeatureChaining = + chainingFeature = [QualifiedName] + +// Clause 8.2.4.3.6 Feature Inverting + +FeatureInverting = + ( 'inverting' Identification? )? + 'inverse' + ( featureInverted = [QualifiedName] + | featureInverted = OwnedFeatureChain + { ownedRelatedElement += featureInverted } + ) + 'of' + ( invertingFeature = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + { ownedRelatedElement += invertingFeature } + ) + RelationshipBody + +OwnedFeatureInverting : FeatureInverting = + invertingFeature = [QualifiedName] + | invertingFeature = OwnedFeatureChain + { ownedRelatedElement += invertingFeature } + +// Clause 8.2.4.3.7 Type Featuring + +TypeFeaturing = + 'featuring' ( Identification 'of' )? + featureOfType = [QualifiedName] + 'by' featuringType = [QualifiedName] + RelationshipBody + +OwnedTypeFeaturing : TypeFeaturing = + featuringType = [QualifiedName] + +// Clause 8.2.5 Kernel Concrete Syntax + +// Clause 8.2.5.1 Data Types Concrete Syntax + +DataType = + TypePrefix 'datatype' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.2 Classes Concrete Syntax + +Class = + TypePrefix 'class' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.3 Structures Concrete Syntax + +Structure = + TypePrefix 'struct' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.4 Associations Concrete Syntax + +Association = + TypePrefix 'assoc' + ClassifierDeclaration TypeBody + +AssociationStructure = + TypePrefix 'assoc' 'struct' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.5 Connectors Concrete Syntax + +// Clause 8.2.5.5.1 Connectors + +Connector = + FeaturePrefix 'connector' + ( FeatureDeclaration? ValuePart? + | ConnectorDeclaration + ) + TypeBody + +ConnectorDeclaration : Connector = + BinaryConnectorDeclaration | NaryConnectorDeclaration + +BinaryConnectorDeclaration : Connector = + ( FeatureDeclaration? 'from' | isSufficient ?= 'all' 'from'? )? + ownedRelationship += ConnectorEndMember 'to' + ownedRelationship += ConnectorEndMember + +NaryConnectorDeclaration : Connector = + FeatureDeclaration? + '(' ownedRelationship += ConnectorEndMember ',' + ownedRelationship += ConnectorEndMember + ( ',' ownedRelationship += ConnectorEndMember )* + ')' + +ConnectorEndMember : EndFeatureMembership = + ownedRelatedElement += ConnectorEnd + +ConnectorEnd : Feature = + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +OwnedCrossMultiplicityMember : OwningMembership = + ownedRelatedElement += OwnedCrossMultiplicity + +OwnedCrossMultiplicity : Feature = + ownedRelationship += OwnedMultiplicity + +// Clause 8.2.5.5.2 Binding Connectors + +BindingConnector = + FeaturePrefix 'binding' + BindingConnectorDeclaration TypeBody + +BindingConnectorDeclaration : BindingConnector = + FeatureDeclaration + ( 'of' ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember )? + | ( isSufficient ?= 'all' )? + ( 'of'? ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember )? + +// Clause 8.2.5.5.3 Successions + +Succession = + FeaturePrefix 'succession' + SuccessionDeclaration TypeBody + +SuccessionDeclaration : Succession = + FeatureDeclaration + ( 'first' ownedRelationship += ConnectorEndMember + 'then' ownedRelationship += ConnectorEndMember )? + | ( s.isSufficient ?= 'all' )? + ( 'first'? ownedRelationship += ConnectorEndMember + 'then' ownedRelationship += ConnectorEndMember )? + +// Clause 8.2.5.6 Behaviors Concrete Syntax + +// Clause 8.2.5.6.1 Behaviors + +Behavior = + TypePrefix 'behavior' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.6.2 Steps + +Step = + FeaturePrefix + 'step' FeatureDeclaration ValuePart? + TypeBody + +// Clause 8.2.5.7 Functions Concrete Syntax + +// Clause 8.2.5.7.1 Functions + +Function = + TypePrefix 'function' + ClassifierDeclaration FunctionBody + +FunctionBody : Type = + ';' | '{' FunctionBodyPart '}' + +FunctionBodyPart : Type = + ( TypeBodyElement + | ownedRelationship += ReturnFeatureMember + )* + ( ownedRelationship += ResultExpressionMember )? + +ReturnFeatureMember : ReturnParameterMembership = + MemberPrefix 'return' + ownedRelatedElement += FeatureElement + +ResultExpressionMember : ResultExpressionMembership = + MemberPrefix + ownedRelatedElement += OwnedExpression + +// Clause 8.2.5.7.2 Expressions + +Expression = + FeaturePrefix + 'expr' FeatureDeclaration ValuePart? + FunctionBody + +// Clause 8.2.5.7.3 Predicates + +Predicate = + TypePrefix 'predicate' + ClassifierDeclaration FunctionBody + +// Clause 8.2.5.7.4 Boolean Expressions and Invariants + +BooleanExpression = + FeaturePrefix + 'bool' FeatureDeclaration ValuePart? + FunctionBody + +Invariant = + FeaturePrefix + 'inv' ( 'true' | isNegated ?= 'false' )? + FeatureDeclaration ValuePart? + FunctionBody + +// Clause 8.2.5.8 Expressions Concrete Syntax + +// Clause 8.2.5.8.1 Operator Expressions + +OwnedExpressionReferenceMember : FeatureMembership = + ownedRelationship += OwnedExpressionReference + +OwnedExpressionReference : FeatureReferenceExpression = + ownedRelationship += OwnedExpressionMember + +OwnedExpressionMember : FeatureMembership = + ownedFeatureMember = OwnedExpression + +OwnedExpression : Expression = + ConditionalExpression + | ConditionalBinaryOperatorExpression + | BinaryOperatorExpression + | UnaryOperatorExpression + | ClassificationExpression + | MetaclassificationExpression + | ExtentExpression + | PrimaryExpression + +ConditionalExpression : OperatorExpression = + operator = 'if' + ownedRelationship += ArgumentMember '?' + ownedRelationship += ArgumentExpressionMember 'else' + ownedRelationship += ArgumentExpressionMember + ownedRelationship += EmptyResultMember + +ConditionalBinaryOperatorExpression : OperatorExpression = + ownedRelationship += ArgumentMember + operator = ConditionalBinaryOperator + ownedRelationship += ArgumentExpressionMember + ownedRelationship += EmptyResultMember + +ConditionalBinaryOperator = + '??' | 'or' | 'and' | 'implies' + +BinaryOperatorExpression : OperatorExpression = + ownedRelationship += ArgumentMember + operator = BinaryOperator + ownedRelationship += ArgumentMember + ownedRelationship += EmptyResultMember + +BinaryOperator = + '|' | '&' | 'xor' | '..' + | '==' | '!=' | '===' | '!==' + | '<' | '>' | '<=' | '>=' + | '+' | '-' | '*' | '/' + | '%' | '^' | '**' + +UnaryOperatorExpression : OperatorExpression = + operator = UnaryOperator + ownedRelationship += ArgumentMember + ownedRelationship += EmptyResultMember + +UnaryOperator = + '+' | '-' | '~' | 'not' + +ClassificationExpression : OperatorExpression = + ( ownedRelationship += ArgumentMember )? + ( operator = ClassificationTestOperator + ownedRelationship += TypeReferenceMember + | operator = CastOperator + ownedRelationship += TypeResultMember + ) + ownedRelationship += EmptyResultMember + +ClassificationTestOperator = + 'istype' | 'hastype' | '@' + +CastOperator = + 'as' + +MetaclassificationExpression : OperatorExpression = + ownedRelationship += MetadataArgumentMember + ( operator = ClassificationTestOperator + ownedRelationship += TypeReferenceMember + | operator = MetaCastOperator + ownedRelationship += TypeResultMember + ) + ownedRelationship += EmptyResultMember + +ArgumentMember : ParameterMembership = + ownedMemberParameter = Argument + +Argument : Feature = + ownedRelationship += ArgumentValue + +ArgumentValue : FeatureValue = + value = OwnedExpression + +ArgumentExpressionMember : FeatureMembership = + ownedRelatedElement += ArgumentExpression + +ArgumentExpression : Feature = + ownedRelationship += ArgumentExpressionValue + +ArgumentExpressionValue : FeatureValue = + value = OwnedExpressionReference + +MetadataArgumentMember : ParameterMembership = + ownedRelatedElement += MetadataArgument + +MetadataArgument : Feature = + ownedRelationship += MetadataValue + +MetadataValue : FeatureValue = + value = MetadataReference + +MetadataReference : MetadataAccessExpression = + ownedRelationship += ElementReferenceMember + +MetaclassificationTestOperator = + '@@' + +MetaCastOperator = + 'meta' + +ExtentExpression : OperatorExpression = + operator = 'all' + ownedRelationship += TypeReferenceMember + +TypeReferenceMember : ParameterMembership = + ownedMemberFeature = TypeReference + +TypeResultMember : ResultParameterMembership = + ownedMemberFeature = TypeReference + +TypeReference : Feature = + ownedRelationship += ReferenceTyping + +ReferenceTyping : FeatureTyping = + type = [QualifiedName] + +EmptyResultMember : ReturnParameterMembership = + ownedRelatedElement += EmptyFeature + +EmptyFeature : Feature = + { } + +// Notes: +// 1. OperatorExpressions provide a shorthand notation for InvocationExpressions that invoke a library Function represented as an operator symbol. Table 5 shows the mapping from operator symbols to the Functions they represent from the Kernel Model Library (see Clause 9). An OperatorExpression contains subexpressions called its operands that generally correspond to the argument Expressions of the OperatorExpression, except in the case of operators representing control Functions, in which case the evaluation of certain operands is as determined by the Function (see 8.4.4.9 for details). +// 2. Though not directly expressed in the syntactic productions given above, in any OperatorExpression containing nested OperatorExpressions, the nested OperatorExpressions shall be implicitly grouped according to the precedence of the operators involved, as given in Table 6. OperatorExpressions with higher precedence operators shall be grouped more tightly than those with lower precedence operators. Further, all BinaryOperators other than exponentiation are left-associative (i.e, they group to the left), while the exponentiation operators (^ and **) are right-associative (i.e., they group to the right). +// 3. The unary operator symbol ~ maps to the library Function DataFunctions::'~', as shown in Table 5. This abstract Function may be given a concrete definition in a domain-specific Function library, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used. + +// Clause 8.2.5.8.2 Primary Expressions + +PrimaryExpression : Expression = + FeatureChainExpression + | NonFeatureChainPrimaryExpression + +PrimaryArgumentValue : FeatureValue = + value = PrimaryExpression + +PrimaryArgument : Feature = + ownedRelationship += PrimaryArgumentValue + +PrimaryArgumentMember : ParameterMembership = + ownedMemberParameter = PrimaryArgument + +NonFeatureChainPrimaryExpression : Expression = + BracketExpression + | IndexExpression + | SequenceExpression + | SelectExpression + | CollectExpression + | FunctionOperationExpression + | BaseExpression + +NonFeatureChainPrimaryArgumentValue : FeatureValue = + value = NonFeatureChainPrimaryExpression + +NonFeatureChainPrimaryArgument : Feature = + ownedRelationship += NonFeatureChainPrimaryArgumentValue + +NonFeatureChainPrimaryArgumentMember : ParameterMembership = + ownedMemberParameter = PrimaryArgument + +BracketExpression : OperatorExpression = + ownedRelationship += PrimaryArgumentMember + operator = '[' + ownedRelationship += SequenceExpressionListMember ']' + +IndexExpression = + ownedRelationship += PrimaryArgumentMember '#' + '(' ownedRelationship += SequenceExpressionListMember ')' + +SequenceExpression : Expression = + '(' SequenceExpressionList ')' + +SequenceExpressionList : Expression = + OwnedExpression ','? | SequenceOperatorExpression + +SequenceOperatorExpression : OperatorExpression = + ownedRelationship += OwnedExpressionMember + operator = ',' + ownedRelationship += SequenceExpressionListMember + +SequenceExpressionListMember : FeatureMembership = + ownedMemberFeature = SequenceExpressionList + +FeatureChainExpression = + ownedRelationship += NonFeatureChainPrimaryArgumentMember '.' + ownedRelationship += FeatureChainMember + +CollectExpression = + ownedRelationship += PrimaryArgumentMember '.' + ownedRelationship += BodyArgumentMember + +SelectExpression = + ownedRelationship += PrimaryArgumentMember '.?' + ownedRelationship += BodyArgumentMember + +FunctionOperationExpression : InvocationExpression = + ownedRelationship += PrimaryArgumentMember '->' + ownedRelationship += InvocationTypeMember + ( ownedRelationship += BodyArgumentMember + | ownedRelationship += FunctionReferenceArgumentMember + | ArgumentList ) + ownedRelationship += EmptyResultMember + +BodyArgumentMember : ParameterMembership = + ownedMemberParameter = BodyArgument + +BodyArgument : Feature = + ownedRelationship += BodyArgumentValue + +BodyArgumentValue : FeatureValue = + value = BodyExpression + +FunctionReferenceArgumentMember : ParameterMembership = + ownedMemberParameter = FunctionReferenceArgument + +FunctionReferenceArgument : Feature = + ownedRelationship += FunctionReferenceArgumentValue + +FunctionReferenceArgumentValue : FeatureValue = + value = FunctionReferenceExpression + +FunctionReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FunctionReferenceMember + +FunctionReferenceMember : FeatureMembership = + ownedMemberFeature = FunctionReference + +FunctionReference : Expression = + ownedRelationship += ReferenceTyping + +FeatureChainMember : Membership = + FeatureReferenceMember + | OwnedFeatureChainMember + +OwnedFeatureChainMember : OwningMembership = + ownedMemberElement = FeatureChain + +// Notes: +// 1. Primary expressions provide additional shorthand notations for certain kinds of InvocationExpressions. For those cases in which the InvocationExpression is an OperatorExpression, its operator shall be resolved to the appropriate library function as given in Table 7. Note also that, for a CollectionExpression or SelectExpression, the abstract syntax constrains the operator to be collect and select, respectively, separately from the . and .? symbols used in their concrete syntax notation (see 8.3.4.8.2 and 8.3.4.8.18). +// 2. The grammar allows a bracket syntax [...]that parses to an invocation of the library Function BaseFunctions::'[', as shown in Table 7. This notation is available for use with domain-specific library models that given a concrete definition to the abstract base '[' Function, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used. + +// Clause 8.2.5.8.3 Base Expressions + +BaseExpression : Expression = + NullExpression + | LiteralExpression + | FeatureReferenceExpression + | MetadataAccessExpression + | InvocationExpression + | ConstructorExpression + | BodyExpression + +NullExpression : NullExpression = + 'null' | '(' ')' + +FeatureReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FeatureReferenceMember + ownedRelationship += EmptyResultMember + +FeatureReferenceMember : Membership = + memberElement = FeatureReference + +FeatureReference : Feature = + [QualifiedName] + +MetadataAccessExpression = + ownedRelationship += ElementReferenceMember '.' 'metadata' + +ElementReferenceMember : Membership = + memberElement = [QualifiedName] + +InvocationExpression : InvocationExpression = + ownedRelationship += InstantiatedTypeMember + ArgumentList + ownedRelationship += EmptyResultMember + +ConstructorExpression = + 'new' ownedRelationship += InstantiatedTypeMember + ownedRelationship += ConstructorResultMember + +ConstructorResultMember : ReturnParameterMembership = + ownedRelatedElement += ConstructorResult + +ConstructorResult : Feature = + ArgumentList + +InstantiatedTypeMember : Membership = + memberElement = InstantiatedTypeReference + | OwnedFeatureChainMember + +InstantiatedTypeReference : Type = + [QualifiedName] + +ArgumentList : Feature = + '(' ( PositionalArgumentList | NamedArgumentList )? ')' + +PositionalArgumentList : Feature = + e.ownedRelationship += ArgumentMember + ( ',' e.ownedRelationship += ArgumentMember )* + +NamedArgumentList : Feature = + ownedRelationship += NamedArgumentMember + ( ',' ownedRelationship += NamedArgumentMember )* + +NamedArgumentMember : FeatureMembership = + ownedMemberFeature = NamedArgument + +NamedArgument : Feature = + ownedRelationship += ParameterRedefinition '=' + ownedRelationship += ArgumentValue + +ParameterRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + +BodyExpression : FeatureReferenceExpression = + ownedRelationship += ExpressionBodyMember + +ExpressionBodyMember : FeatureMembership = + ownedMemberFeature = ExpressionBody + +ExpressionBody : Expression = + '{' FunctionBodyPart '}' + +// Clause 8.2.5.8.4 Literal Expressions + +LiteralExpression = + LiteralBoolean + | LiteralString + | LiteralInteger + | LiteralReal + | LiteralInfinity + +LiteralBoolean = + value = BooleanValue + +BooleanValue : Boolean = + 'true' | 'false' + +LiteralString = + value = STRING_VALUE + +LiteralInteger = + value = DECIMAL_VALUE + +LiteralReal = + value = RealValue + +RealValue : Real = + DECIMAL_VALUE? '.' ( DECIMAL_VALUE | EXPONENTIAL_VALUE ) + | EXPONENTIAL_VALUE + +LiteralInfinity = + '*' + +// Clause 8.2.5.9 Interactions Concrete Syntax + +// Clause 8.2.5.9.1 Interactions + +Interaction = + TypePrefix 'interaction' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.9.2 Flows + +Flow = + FeaturePrefix 'flow' + FlowDeclaration TypeBody + +SuccessionFlow = + FeaturePrefix 'succession' 'flow' + FlowDeclaration TypeBody + +FlowDeclaration : Flow = + FeatureDeclaration ValuePart? + ( 'of' ownedRelationship += PayloadFeatureMember )? + ( 'from' ownedRelationship += FlowEndMember + 'to' ownedRelationship += FlowEndMember )? + | ( isSufficient ?= 'all' )? + ownedRelationship += FlowEndMember 'to' + ownedRelationship += FlowEndMember + +PayloadFeatureMember : FeatureMembership = + ownedRelatedElement = PayloadFeature + +PayloadFeature = + Identification PayloadFeatureSpecializationPart ValuePart? + | Identification ValuePart + | ownedRelationship += OwnedFeatureTyping + ( ownedRelationship += OwnedMultiplicity )? + | ownedRelationship += OwnedMultiplicity + ( ownedRelationship += OwnedFeatureTyping )? + +PayloadFeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? + FeatureSpecialization* + | MultiplicityPart FeatureSpecialization+ + +FlowEndMember : EndFeatureMembership = + ownedRelatedElement += FlowEnd + +FlowEnd = + ( ownedRelationship += OwnedReferenceSubsetting '.' )? + ownedRelationship += FlowFeatureMember + +FlowFeatureMember : FeatureMembership = + ownedRelatedElement += FlowFeature + +FlowFeature : Feature = + ownedRelationship += FlowFeatureRedefinition + +// (See Note 1) + +FlowFeatureRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + +// Notes: +// 1. To ensure that an FlowFeature passes the validateRedefinitionDirectionConformance constraint (see 8.3.3.3.8), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature) + +// Clause 8.2.5.10 Feature Values Concrete Syntax + +ValuePart : Feature = + ownedRelationship += FeatureValue + +FeatureValue = + ( '=' + | isInitial ?= ':=' + | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )? + ) + ownedRelatedElement += OwnedExpression + +// Clause 8.2.5.11 Multiplicities Concrete Syntax + +Multiplicity = + MultiplicitySubset | MultiplicityRange + +MultiplicitySubset : Multiplicity = + 'multiplicity' Identification Subsets + TypeBody + +MultiplicityRange = + 'multiplicity' Identification MultiplicityBounds + TypeBody + +OwnedMultiplicity : OwningMembership = + ownedRelatedElement += OwnedMultiplicityRange + +OwnedMultiplicityRange : MultiplicityRange = + MultiplicityBounds + +MultiplicityBounds : MultiplicityRange = + '[' ( ownedRelationship += MultiplicityExpressionMember '..' )? + ownedRelationship += MultiplicityExpressionMember ']' + +MultiplicityExpressionMember : OwningMembership = + ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression ) + +// Clause 8.2.5.12 Metadata Concrete Syntax + +Metaclass = + TypePrefix 'metaclass' + ClassifierDeclaration TypeBody + +PrefixMetadataAnnotation : Annotation = + '#' ownedRelatedElement += PrefixMetadataFeature + +PrefixMetadataMember : OwningMembership = + '#' ownedRelatedElement += PrefixMetadataFeature + +PrefixMetadataFeature : MetadataFeature = + ownedRelationship += OwnedFeatureTyping + +MetadataFeature = + ( ownedRelationship += PrefixMetadataMember )* + ( '@' | 'metadata' ) + MetadataFeatureDeclaration + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + MetadataBody + +MetadataFeatureDeclaration : MetadataFeature = + ( Identification ( ':' | 'typed' 'by' ) )? + ownedRelationship += OwnedFeatureTyping + +MetadataBody : Feature = + ';' | '{' ( ownedRelationship += MetadataBodyElement )* '}' + +MetadataBodyElement : Membership = + NonFeatureMember + | MetadataBodyFeatureMember + | AliasMember + | Import + +MetadataBodyFeatureMember : FeatureMembership = + ownedMemberFeature = MetadataBodyFeature + +MetadataBodyFeature : Feature = + 'feature'? ( ':>>' | 'redefines')? ownedRelationship += OwnedRedefinition + FeatureSpecializationPart? ValuePart? + MetadataBody + +// Clause 8.2.5.13 Packages Concrete Syntax + +Package = + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +LibraryPackage = + ( isStandard ?= 'standard' ) 'library' + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +PackageDeclaration : Package = + 'package' Identification + +PackageBody : Package = + ';' + | '{' ( NamespaceBodyElement + | ownedRelationship += ElementFilterMember + )* + '}' + +ElementFilterMember : ElementFilterMembership = + MemberPrefix + 'filter' condition = OwnedExpression ';' + +// End of BNF + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-elements.json b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-elements.json new file mode 100644 index 000000000..81e3d3bec --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-elements.json @@ -0,0 +1,4227 @@ +[ + { + "@type": "Info", + "clause_id": "", + "lines": [], + "source": "tests/KerML_and_SysML_spec_sources/KerML-spec.html", + "timestamp": "2025-12-04T19:31:35Z" + }, + { + "@type": "Heading", + "clause_id": "", + "lines": [ + "Part 1 - Kernel Modeling Language (KerML)" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2", + "lines": [ + "Clause 8.2 Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.1", + "lines": [ + "Clause 8.2.1 Concrete Syntax Overview" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2", + "lines": [ + "Clause 8.2.2 Lexical Structure" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.1", + "lines": [ + "Clause 8.2.2.1 Line Terminators and White Space" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1", + "is_partial": false, + "lines": [ + "LINE_TERMINATOR =", + " implementation defined character sequence" + ], + "name": "LINE_TERMINATOR" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1", + "is_partial": false, + "lines": [ + "LINE_TEXT =", + " character sequence excluding LINE_TERMINATORs" + ], + "name": "LINE_TEXT" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1", + "is_partial": false, + "lines": [ + "WHITE_SPACE =", + " space | tab | form_feed | LINE_TERMINATOR" + ], + "name": "WHITE_SPACE" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.1", + "html_snippet": "
        1. Notation text is divided up into lines separated by line terminators. A line terminator may be a single character (such as a line feed) or a sequence of characters (such as a carriage return/line feed combination). This specification does not require any specific encoding for a line terminator, but any encoding used must be consistent throughout any specific input text.
        2. Any characters in text line that are not a part of the line terminator are referred to as line text.
        3. A white space character is a space, tab, form feed or line terminator. Any contiguous sequence of white space characters can be used to separate tokens that would otherwise be considered to be part of a single token. It is otherwise ignored, with the single exception that a line terminator is used to mark the end of a single-line note (see 8.2.2.2).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.2", + "lines": [ + "Clause 8.2.2.2 Notes and Comments" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "SINGLE_LINE_NOTE =", + " '//' LINE_TEXT" + ], + "name": "SINGLE_LINE_NOTE" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "MULTILINE_NOTE =", + " '//*' COMMENT_TEXT '*/'" + ], + "name": "MULTILINE_NOTE" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "REGULAR_COMMENT =", + " '/*' COMMENT_TEXT '*/'" + ], + "name": "REGULAR_COMMENT" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "COMMENT_TEXT =", + " ( COMMENT_LINE_TEXT | LINE_TERMINATOR )*" + ], + "name": "COMMENT_TEXT" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "COMMENT_LINE_TEXT =", + " LINE_TEXT excluding the sequence '*/'" + ], + "name": "COMMENT_LINE_TEXT" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.3", + "lines": [ + "Clause 8.2.2.3 Names" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "NAME =", + " BASIC_NAME | UNRESTRICTED_NAME" + ], + "name": "NAME" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "BASIC_NAME =", + " BASIC_INITIAL_CHARACTER BASIC_NAME_CHARACTER*" + ], + "name": "BASIC_NAME" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "UNRESTRICTED_NAME =", + " single_quote ( NAME_CHARACTER | ESCAPE_SEQUENCE )* single_quote" + ], + "name": "UNRESTRICTED_NAME" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.2.3", + "lines": [ + "(See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "BASIC_INITIAL_CHARACTER =", + " ALPHABETIC_CHARACTER | '_'" + ], + "name": "BASIC_INITIAL_CHARACTER" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "BASIC_NAME_CHARACTER =", + " BASIC_INITIAL_CHARACTER | DECIMAL_DIGIT" + ], + "name": "BASIC_NAME_CHARACTER" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "ALPHABETIC_CHARACTER =", + " any character 'a' through 'z' or 'A' through 'Z'" + ], + "name": "ALPHABETIC_CHARACTER" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "DECIMAL_DIGIT =", + " any character '0' through '9'" + ], + "name": "DECIMAL_DIGIT" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "NAME_CHARACTER =", + " any printable character other than backslash or single_quote" + ], + "name": "NAME_CHARACTER" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "ESCAPE_SEQUENCE =" + ], + "name": "ESCAPE_SEQUENCE" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.2.3", + "lines": [ + "(See Note 2)" + ] + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.3", + "html_snippet": "
        1. The single_quote character is '. The name represented by an UNRESTRICTED_NAME shall consist of the characters within the single quotes, with escape characters resolved as described below. The surrounding single quote characters are not part of the represented name.
        2. An ESCAPE_SEQUENCE is a sequence of two text characters starting with a backslash that actually denotes only a single character, except for the newline escape sequence, which represents however many characters is necessary to represent an end of line in a specific implementation (see also 8.2.2.1). Table 4 shows the meaning of the allowed escape sequences. The ESCAPE_SEQUENCES in an UNRESTRICTED_NAME shall be replaced by the characters specified as their meanings in the actual represented name.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.4", + "lines": [ + "Clause 8.2.2.4 Numeric Values" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.4", + "is_partial": false, + "lines": [ + "DECIMAL_VALUE =", + " DECIMAL_DIGIT+" + ], + "name": "DECIMAL_VALUE" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.4", + "is_partial": false, + "lines": [ + "EXPONENTIAL_VALUE =", + " DECIMAL_VALUE ('e' | 'E') ('+' | '-')? DECIMAL_VALUE" + ], + "name": "EXPONENTIAL_VALUE" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.4", + "html_snippet": "
        1. A DECIMAL_VALUE may specify a natural literal, or it may be part of the specification of a real literal (see 8.2.5.8.4). Note that a DECIMAL_VALUE does not include a sign, because negating a literal is an operator in the KerML Expression syntax.
        2. An EXPONENTIAL_VALUE may be used in the specification of a real literal (see 8.2.5.8.4). Note that a decimal point and fractional part are not included in the lexical structure of an exponential value. They are handled as part of the syntax of real literals.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.5", + "lines": [ + "Clause 8.2.2.5 String Value" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.5", + "is_partial": false, + "lines": [ + "STRING_VALUE =", + " '\"' ( STRING_CHARACTER | ESCAPE_SEQUENCE )* '\"'" + ], + "name": "STRING_VALUE" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.5", + "is_partial": false, + "lines": [ + "STRING_CHARACTER =", + " any printable character other than backslash or '\"'" + ], + "name": "STRING_CHARACTER" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.5", + "html_snippet": "
        1. ESCAPE_SEQUENCE is specified in 8.2.2.3.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6", + "lines": [ + "Clause 8.2.2.6 Reserved Words" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.6", + "is_partial": false, + "lines": [ + "RESERVED_KEYWORD =", + " 'about' | 'abstract' | 'alias' | 'all' | 'and' | 'as' | 'assoc' | 'behavior' | 'binding' | 'bool' | 'by' | 'chains'", + " | 'class' | 'classifier' | 'comment' | 'composite' | 'conjugate' | 'conjugates' | 'conjugation' | 'connector'", + " | 'const' | 'crosses' | 'datatype' | 'default' | 'dependency' | 'derived' | 'differences' | 'disjoining' | 'disjoint'", + " | 'doc' | 'else' | 'end' | 'expr' | 'false' | 'feature' | 'featured' | 'featuring' | 'filter' | 'first' | 'flow'", + " | 'for' | 'from' | 'function' | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'inout' | 'interaction'", + " | 'intersects' | 'inv' | 'inverse' | 'inverting' | 'istype' | 'language' | 'library' | 'locale' | 'member' | 'meta'", + " | 'metaclass' | 'metadata' | 'multiplicity' | 'namespace' | 'nonunique' | 'not' | 'null' | 'of' | 'or' | 'ordered'", + " | 'out' | 'package' | 'portion' | 'predicate' | 'private' | 'protected' | 'public' | 'redefines' | 'redefinition'", + " | 'references' | 'rep' | 'return' | 'specialization' | 'specializes' | 'standard' | 'step' | 'struct'", + " | 'subclassifier' | 'subset' | 'subsets' | 'subtype' | 'succession' | 'then' | 'to' | 'true' | 'type' | 'typed'", + " | 'typing' | 'unions' | 'var' | 'xor'" + ], + "name": "RESERVED_KEYWORD" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.7", + "lines": [ + "Clause 8.2.2.7 Symbols" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "RESERVED_SYMBOL = ", + " '~' | '}' | '|' | '{' | '^' | ']' | '[' | '@' | '??' | '?' | '>=' | '>' | '=>' | '===' | '==' | '=' | '<=' | '<'", + " | ';' | ':>>' | ':>' | ':=' | '::>' | '::' | ':' | '/' | '.?' | '..' | '.' | '->' | '-' | ',' | '+' | '**' | '*' | ')'", + " | '(' | '&' | '%' | '$' | '#' | '!==' | '!='" + ], + "name": "RESERVED_SYMBOL" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "TYPED_BY = ':' | 'typed' 'by'" + ], + "name": "TYPED_BY" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "SPECIALIZES = ':>' | 'specializes'" + ], + "name": "SPECIALIZES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "SUBSETS = ':>' | 'subsets'" + ], + "name": "SUBSETS" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "REFERENCES = '::>' | 'references'" + ], + "name": "REFERENCES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "CROSSES = '=>' | 'crosses'" + ], + "name": "CROSSES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "REDEFINES = ':>>' | 'redefines'" + ], + "name": "REDEFINES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "CONJUGATES = '~' | 'conjugates'" + ], + "name": "CONJUGATES" + }, + { + "@type": "Heading", + "clause_id": "8.2.3", + "lines": [ + "Clause 8.2.3 Root Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.1", + "lines": [ + "Clause 8.2.3.1 Elements and Relationships Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.3.1", + "is_partial": false, + "lines": [ + "Identification : Element =", + " ( '<' declaredShortName = NAME '>' )?", + " ( declaredName = NAME )?" + ], + "name": "Identification" + }, + { + "@type": "Production", + "abstract_syntax_type": "Relationship", + "clause_id": "8.2.3.1", + "is_partial": false, + "lines": [ + "RelationshipBody : Relationship =", + " ';' | '{' RelationshipOwnedElement* '}'" + ], + "name": "RelationshipBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Relationship", + "clause_id": "8.2.3.1", + "is_partial": false, + "lines": [ + "RelationshipOwnedElement : Relationship =", + " ownedRelatedElement += OwnedRelatedElement", + " | ownedRelationship += OwnedAnnotation" + ], + "name": "RelationshipOwnedElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.3.1", + "is_partial": false, + "lines": [ + "OwnedRelatedElement : Element =", + " NonFeatureElement | FeatureElement" + ], + "name": "OwnedRelatedElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.2", + "lines": [ + "Clause 8.2.3.2 Dependencies Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Dependency", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "Dependency =", + " ( ownedRelationship += PrefixMetadataAnnotation )*", + " 'dependency' ( Identification? 'from' )?", + " client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to'", + " supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )*", + " RelationshipBody" + ], + "name": "Dependency" + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.2", + "html_snippet": "
        1. PrefixMetadataAnnotation is defined in the Kernel layer (see 8.2.5.12).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.3", + "lines": [ + "Clause 8.2.3.3 Annotations Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.3.1", + "lines": [ + "Clause 8.2.3.3.1 Annotations" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.3.3.1", + "is_partial": false, + "lines": [ + "Annotation =", + " annotatedElement = [QualifiedName]" + ], + "name": "Annotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.3.3.1", + "is_partial": false, + "lines": [ + "OwnedAnnotation : Annotation =", + " ownedRelatedElement += AnnotatingElement" + ], + "name": "OwnedAnnotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "AnnotatingElement", + "clause_id": "8.2.3.3.1", + "is_partial": false, + "lines": [ + "AnnotatingElement =", + " Comment", + " | Documentation", + " | TextualRepresentation", + " | MetadataFeature" + ], + "name": "AnnotatingElement" + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.3.1", + "html_snippet": "
        1. MetadataFeature is defined in the Kernel layer (see 8.2.5.12).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.3.2", + "lines": [ + "Clause 8.2.3.3.2 Comments and Documentation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Comment", + "clause_id": "8.2.3.3.2", + "is_partial": false, + "lines": [ + "Comment =", + " ( 'comment' Identification", + " ( 'about' ownedRelationsip += Annotation", + " ( ',' ownedRelationship += Annotation )*", + " )?", + " )?", + " ( 'locale' locale = STRING_VALUE )?", + " body = REGULAR_COMMENT" + ], + "name": "Comment" + }, + { + "@type": "Production", + "abstract_syntax_type": "Documentation", + "clause_id": "8.2.3.3.2", + "is_partial": false, + "lines": [ + "Documentation =", + " 'doc' Identification", + " ( 'locale' locale = STRING_VALUE )?", + " body = REGULAR_COMMENT" + ], + "name": "Documentation" + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.3.2", + "html_snippet": "
        1. The text of a lexical REGULAR_COMMENT or PREFIX_COMMENT shall be processed as follows before it is included as the body of a Comment or Documentation:
          1. Remove the initial /* and final */ characters.
          2. Remove any white space immediately after the initial /*, up to and including the first line terminator (if any).
          3. On each subsequent line of the text:
            1. Strip initial white space other than line terminators.
            2. Then, if the first remaining character is \"*\", remove it.
            3. Then, if the first remaining character is now a space, remove it.
        2. The body text of a Comment can include markup information (such as HTML), and a conforming tool may display such text as rendered according to the markup. However, marked up \"rich text\" for a Comment written using the KerML textual concrete syntax shall be stored in the Comment body in plain text including all mark up text, with all line terminators and white space included as entered, other than what is removed according to the rules above.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.3.3", + "lines": [ + "Clause 8.2.3.3.3 Textual Representation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "TextualRepresentation", + "clause_id": "8.2.3.3.3", + "is_partial": false, + "lines": [ + "TextualRepresentation =", + " ( 'rep' Identification )?", + " 'language' language = STRING_VALUE", + " body = REGULAR_COMMENT" + ], + "name": "TextualRepresentation" + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.3.3", + "html_snippet": "
        1. The lexical text of a REGULAR_COMMENT shall be processed as specified in 8.2.3.3.2 for Comments before being included as the body of a TextualRepresentation.
        2. See also 8.3.2.3.6 on the standard language names recognized for a TextualRepresentation.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.4", + "lines": [ + "Clause 8.2.3.4 Namespaces Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.4.1", + "lines": [ + "Clause 8.2.3.4.1 Namespaces" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "RootNamespace : Namespace =", + " NamespaceBodyElement*" + ], + "name": "RootNamespace" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.4.1", + "lines": [ + "(See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "Namespace =", + " ( ownedRelationship += PrefixMetadataMember )*", + " NamespaceDeclaration NamespaceBody" + ], + "name": "Namespace" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.4.1", + "lines": [ + "(See Note 2)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NamespaceDeclaration : Namespace =", + " 'namespace' Identification" + ], + "name": "NamespaceDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NamespaceBody : Namespace =", + " ';' | '{' NamespaceBodyElement* '}'" + ], + "name": "NamespaceBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NamespaceBodyElement : Namespace =", + " ownedRelationship += NamespaceMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import" + ], + "name": "NamespaceBodyElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "MemberPrefix : Membership =", + " ( visibility = VisibilityIndicator )?" + ], + "name": "MemberPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "VisibilityKind", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "VisibilityIndicator : VisibilityKind =", + " 'public' | 'private' | 'protected'" + ], + "name": "VisibilityIndicator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NamespaceMember : OwningMembership =", + " NonFeatureMember", + " | NamespaceFeatureMember" + ], + "name": "NamespaceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NonFeatureMember : OwningMembership =", + " MemberPrefix", + " ownedRelatedElement += MemberElement" + ], + "name": "NonFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "NamespaceFeatureMember : OwningMembership =", + " MemberPrefix", + " ownedRelatedElement += FeatureElement" + ], + "name": "NamespaceFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "AliasMember : Membership =", + " MemberPrefix", + " 'alias' ( '<' memberShortName = NAME '>' )?", + " ( memberName = NAME )?", + " 'for' memberElement = [QualifiedName]", + " RelationshipBody" + ], + "name": "AliasMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "QualifiedName", + "clause_id": "8.2.3.4.1", + "is_partial": false, + "lines": [ + "QualifiedName =", + " ( '$' '::' )? ( NAME '::' )* NAME" + ], + "name": "QualifiedName" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.4.1", + "lines": [ + "(See Note 3)" + ] + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.4.1", + "html_snippet": "
        1. A root Namespace is a Namespace that has no owningNamespace (see 8.3.2.4). Every Element other than a root Namespace must be contained, directly or indirectly, within some root Namespace. Therefore, every valid KerML concrete syntax text can be parsed starting from the RootNamespace production.
        2. PrefixMetadataMember is defined in the Kernel layer (see 8.2.5.12).
        3. A qualified name is notated as a sequence of segment names separated by \"::\" punctuation, optionally with the global scope qualifier \"$\" as an initial segment. An unqualified name can be considered the degenerate case of a qualified name with a single segment name. A qualified name is used in the KerML textual concrete syntax to identify an Element that is being referred to in the representation of another Element. A qualified name used in this way does not appear in the corresponding abstract syntax—instead, the abstract syntax representation contains an actual reference to the identified Element. Name resolution is the process of determining the Element that is identified by a qualified name. The segment names of the qualified name other than the last identify a sequence of nested Namespaces that provide the context for resolving the final segment name (see 8.2.3.5). The notation [QualifiedName] is used in concrete syntax grammar productions to indicate the result of resolving text parsed as a QualifiedName (see also 8.2.1).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.4.2", + "lines": [ + "Clause 8.2.3.4.2 Imports" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Import", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "Import =", + " visibility = VisibilityIndicator", + " 'import' ( isImportAll ?= 'all' )?", + " ImportDeclaration RelationshipBody" + ], + "name": "Import" + }, + { + "@type": "Production", + "abstract_syntax_type": "Import", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "ImportDeclaration : Import", + " MembershipImport | NamespaceImport" + ], + "name": "ImportDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "MembershipImport", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "MembershipImport =", + " importedMembership = [QualifiedName]", + " ( '::' isRecursive ?= '**' )?" + ], + "name": "MembershipImport" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.4.2", + "lines": [ + "(See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "NamespaceImport", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "NamespaceImport =", + " importedNamespace = [QualifiedName] '::' '*'", + " ( '::' isRecursive ?= '**' )?", + " | importedNamespace = FilterPackage", + " { ownedRelatedElement += importedNamespace }" + ], + "name": "NamespaceImport" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "FilterPackage : Package =", + " ownedRelationship += ImportDeclaration", + " ( ownedRelationship += FilterPackageMember )+" + ], + "name": "FilterPackage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ElementFilterMembership", + "clause_id": "8.2.3.4.2", + "is_partial": false, + "lines": [ + "FilterPackageMember : ElementFilterMembership =", + " '[' ownedRelatedElement += OwnedExpression ']'" + ], + "name": "FilterPackageMember" + }, + { + "@type": "NoteList", + "clause_id": "8.2.3.4.2", + "html_snippet": "
        1. The importedMembership of a MembershipImport is the single case in which the Element required from the resolution [QualifiedName] is the actual Membership identified by the QualifedName, not the memberElement of that Membership (see 8.2.3.5).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.4.3", + "lines": [ + "Clause 8.2.3.4.3 Namespace Elements" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.3.4.3", + "is_partial": false, + "lines": [ + "MemberElement : Element =", + " AnnotatingElement | NonFeatureElement" + ], + "name": "MemberElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.3.4.3", + "is_partial": false, + "lines": [ + "NonFeatureElement : Element =", + " Dependency", + " | Namespace", + " | Type", + " | Classifier", + " | DataType", + " | Class", + " | Structure", + " | Metaclass", + " | Association", + " | AssociationStructure", + " | Interaction", + " | Behavior", + " | Function", + " | Predicate", + " | Multiplicity", + " | Package", + " | LibraryPackage", + " | Specialization", + " | Conjugation", + " | Subclassification", + " | Disjoining", + " | FeatureInverting", + " | FeatureTyping", + " | Subsetting", + " | Redefinition", + " | TypeFeaturing" + ], + "name": "NonFeatureElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.3.4.3", + "is_partial": false, + "lines": [ + "FeatureElement : Feature =", + " Feature", + " | Step", + " | Expression", + " | BooleanExpression", + " | Invariant", + " | Connector", + " | BindingConnector", + " | Succession", + " | Flow", + " | SuccessionFlow" + ], + "name": "FeatureElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5", + "lines": [ + "Clause 8.2.3.5 Name Resolution" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5.1", + "lines": [ + "Clause 8.2.3.5.1 Name Resolution Overview" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5.2", + "lines": [ + "Clause 8.2.3.5.2 Local and Global Namespaces" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5.3", + "lines": [ + "Clause 8.2.3.5.3 Local and Visible Resolution" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5.4", + "lines": [ + "Clause 8.2.3.5.4 Full Resolution" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.4", + "lines": [ + "Clause 8.2.4 Core Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1", + "lines": [ + "Clause 8.2.4.1 Types Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.1", + "lines": [ + "Clause 8.2.4.1.1 Types" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "Type =", + " TypePrefix 'type'", + " TypeDeclaration TypeBody" + ], + "name": "Type" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "TypePrefix : Type =", + " ( isAbstract ?= 'abstract' )?", + " ( ownedRelationship += PrefixMetadataMember )*" + ], + "name": "TypePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "TypeDeclaration : Type =", + " ( isSufficient ?= 'all' )? Identification", + " ( ownedRelationship += OwnedMultiplicity )?", + " ( SpecializationPart | ConjugationPart )+", + " TypeRelationshipPart*" + ], + "name": "TypeDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "SpecializationPart : Type =", + " SPECIALIZES ownedRelationship += OwnedSpecialization", + " ( ',' ownedRelationship += OwnedSpecialization )*" + ], + "name": "SpecializationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "ConjugationPart : Type =", + " CONJUGATES ownedRelationship += OwnedConjugation" + ], + "name": "ConjugationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "TypeRelationshipPart : Type =", + " DisjoiningPart", + " | UnioningPart", + " | IntersectingPart", + " | DifferencingPart" + ], + "name": "TypeRelationshipPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "DisjoiningPart : Type =", + " 'disjoint' 'from' ownedRelationship += OwnedDisjoining", + " ( ',' ownedRelationship += OwnedDisjoining )*" + ], + "name": "DisjoiningPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "UnioningPart : Type =", + " 'unions' ownedRelationship += Unioning", + " ( ',' ownedRelationship += Unioning )*" + ], + "name": "UnioningPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "IntersectingPart : Type =", + " 'intersects' ownedRelationship += Intersecting", + " ( ',' ownedRelationship += Intersecting )*" + ], + "name": "IntersectingPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "DifferencingPart : Type =", + " 'differences' ownedRelationship += Differencing", + " ( ',' ownedRelationship += Differencing )*" + ], + "name": "DifferencingPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "TypeBody : Type =", + " ';' | '{' TypeBodyElement* '}'" + ], + "name": "TypeBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.4.1.1", + "is_partial": false, + "lines": [ + "TypeBodyElement : Type =", + " ownedRelationship += NonFeatureMember", + " | ownedRelationship += FeatureMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import" + ], + "name": "TypeBodyElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.2", + "lines": [ + "Clause 8.2.4.1.2 Specialization" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Specialization", + "clause_id": "8.2.4.1.2", + "is_partial": false, + "lines": [ + "Specialization =", + " ( 'specialization' Identification )?", + " 'subtype' SpecificType", + " SPECIALIZES GeneralType", + " RelationshipBody" + ], + "name": "Specialization" + }, + { + "@type": "Production", + "abstract_syntax_type": "Specialization", + "clause_id": "8.2.4.1.2", + "is_partial": false, + "lines": [ + "OwnedSpecialization : Specialization =", + " GeneralType" + ], + "name": "OwnedSpecialization" + }, + { + "@type": "Production", + "abstract_syntax_type": "Specialization :", + "clause_id": "8.2.4.1.2", + "is_partial": false, + "lines": [ + "SpecificType : Specialization :", + " specific = [QualifiedName]", + " | specific += OwnedFeatureChain", + " { ownedRelatedElement += specific }" + ], + "name": "SpecificType" + }, + { + "@type": "Production", + "abstract_syntax_type": "Specialization", + "clause_id": "8.2.4.1.2", + "is_partial": false, + "lines": [ + "GeneralType : Specialization =", + " general = [QualifiedName]", + " | general += OwnedFeatureChain", + " { ownedRelatedElement += general }" + ], + "name": "GeneralType" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.3", + "lines": [ + "Clause 8.2.4.1.3 Conjugation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Conjugation", + "clause_id": "8.2.4.1.3", + "is_partial": false, + "lines": [ + "Conjugation =", + " ( 'conjugation' Identification )?", + " 'conjugate'", + " ( conjugatedType = [QualifiedName]", + " | conjugatedType = FeatureChain", + " { ownedRelatedElement += conjugatedType }", + " )", + " CONJUGATES", + " ( originalType = [QualifiedName]", + " | originalType = FeatureChain", + " { ownedRelatedElement += originalType }", + " )", + " RelationshipBody" + ], + "name": "Conjugation" + }, + { + "@type": "Production", + "abstract_syntax_type": "Conjugation", + "clause_id": "8.2.4.1.3", + "is_partial": false, + "lines": [ + "OwnedConjugation : Conjugation =", + " originalType = [QualifiedName]", + " | originalType = FeatureChain", + " { ownedRelatedElement += originalType }" + ], + "name": "OwnedConjugation" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.4", + "lines": [ + "Clause 8.2.4.1.4 Disjoining" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Disjoining", + "clause_id": "8.2.4.1.4", + "is_partial": false, + "lines": [ + "Disjoining =", + " ( 'disjoining' Identification )?", + " 'disjoint'", + " ( typeDisjoined = [QualifiedName]", + " | typeDisjoined = FeatureChain", + " { ownedRelatedElement += typeDisjoined }", + " )", + " 'from'", + " ( disjoiningType = [QualifiedName]", + " | disjoiningType = FeatureChain", + " { ownedRelatedElement += disjoiningType }", + " )", + " RelationshipBody" + ], + "name": "Disjoining" + }, + { + "@type": "Production", + "abstract_syntax_type": "Disjoining", + "clause_id": "8.2.4.1.4", + "is_partial": false, + "lines": [ + "OwnedDisjoining : Disjoining =", + " disjoiningType = [QualifiedName]", + " | disjoiningType = FeatureChain", + " { ownedRelatedElement += disjoiningType }" + ], + "name": "OwnedDisjoining" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.5", + "lines": [ + "Clause 8.2.4.1.5 Unioning, Intersecting and Differencing" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Unioning", + "clause_id": "8.2.4.1.5", + "is_partial": false, + "lines": [ + "Unioning =", + " unioningType = [QualifiedName]", + " | ownedRelatedElement += OwnedFeatureChain" + ], + "name": "Unioning" + }, + { + "@type": "Production", + "abstract_syntax_type": "Intersecting", + "clause_id": "8.2.4.1.5", + "is_partial": false, + "lines": [ + "Intersecting =", + " intersectingType = [QualifiedName]", + " | ownedRelatedElement += OwnedFeatureChain" + ], + "name": "Intersecting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Differencing", + "clause_id": "8.2.4.1.5", + "is_partial": false, + "lines": [ + "Differencing =", + " differencingType = [QualifiedName]", + " | ownedRelatedElement += OwnedFeatureChain" + ], + "name": "Differencing" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.1.6", + "lines": [ + "Clause 8.2.4.1.6 Feature Membership" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.4.1.6", + "is_partial": false, + "lines": [ + "FeatureMember : OwningMembership =", + " TypeFeatureMember", + " | OwnedFeatureMember" + ], + "name": "FeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.4.1.6", + "is_partial": false, + "lines": [ + "TypeFeatureMember : OwningMembership =", + " MemberPrefix 'member' ownedRelatedElement += FeatureElement" + ], + "name": "TypeFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.4.1.6", + "is_partial": false, + "lines": [ + "OwnedFeatureMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += FeatureElement" + ], + "name": "OwnedFeatureMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.2", + "lines": [ + "Clause 8.2.4.2 Classifiers Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.4.2.1", + "lines": [ + "Clause 8.2.4.2.1 Classifiers" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Classifier", + "clause_id": "8.2.4.2.1", + "is_partial": false, + "lines": [ + "Classifier =", + " TypePrefix 'classifier'", + " ClassifierDeclaration TypeBody" + ], + "name": "Classifier" + }, + { + "@type": "Production", + "abstract_syntax_type": "Classifier", + "clause_id": "8.2.4.2.1", + "is_partial": false, + "lines": [ + "ClassifierDeclaration : Classifier =", + " ( isSufficient ?= 'all' )? Identification", + " ( ownedRelationship += OwnedMultiplicity )?", + " ( SuperclassingPart | ConjugationPart )?", + " TypeRelationshipPart*" + ], + "name": "ClassifierDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Classifier", + "clause_id": "8.2.4.2.1", + "is_partial": false, + "lines": [ + "SuperclassingPart : Classifier =", + " SPECIALIZES ownedRelationship += OwnedSubclassification", + " ( ',' ownedRelationship += OwnedSubclassification )*" + ], + "name": "SuperclassingPart" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.2.2", + "lines": [ + "Clause 8.2.4.2.2 Subclassification" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Subclassification", + "clause_id": "8.2.4.2.2", + "is_partial": false, + "lines": [ + "Subclassification =", + " ( 'specialization' Identification )?", + " 'subclassifier' subclassifier = [QualifiedName]", + " SPECIALIZES superclassifier = [QualifiedName]", + " RelationshipBody" + ], + "name": "Subclassification" + }, + { + "@type": "Production", + "abstract_syntax_type": "Subclassification", + "clause_id": "8.2.4.2.2", + "is_partial": false, + "lines": [ + "OwnedSubclassification : Subclassification =", + " superclassifier = [QualifiedName]" + ], + "name": "OwnedSubclassification" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3", + "lines": [ + "Clause 8.2.4.3 Features Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.1", + "lines": [ + "Clause 8.2.4.3.1 Features" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Feature =", + " ( FeaturePrefix", + " ( 'feature' | ownedRelationship += PrefixMetadataMember )", + " FeatureDeclaration?", + " )", + " | ( EndFeaturePrefix | BasicFeaturePrefix )", + " FeatureDeclaration", + " )", + " ValuePart? TypeBody" + ], + "name": "Feature" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.4.3.1", + "lines": [ + "(See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "EndFeaturePrefix : Feature =", + " ( isConstant ?= 'const' { isVariable = true } )?", + " isEnd ?= 'end'" + ], + "name": "EndFeaturePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature :", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "BasicFeaturePrefix : Feature :", + " ( direction = FeatureDirection )?", + " ( isDerived ?= 'derived' )?", + " ( isAbstract ?= 'abstract' )?", + " ( isComposite ?= 'composite' | isPortion ?= 'portion' )?", + " ( isVariable ?= 'var' | isConstant ?= 'const' { isVariable = true } )?" + ], + "name": "BasicFeaturePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeaturePrefix :", + " ( EndFeaturePrefix ( ownedRelationship += OwnedCrossFeatureMember )?", + " | BasicFeaturePrefix", + " )", + " ( ownedRelationship += PrefixMetadataMember )*" + ], + "name": "FeaturePrefix" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.4.3.1", + "lines": [ + "(See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "OwnedCrossFeatureMember : OwningMembership =", + " ownedRelatedElement += OwnedCrossFeature" + ], + "name": "OwnedCrossFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "OwnedCrossFeature : Feature =", + " BasicFeaturePrefix FeatureDeclaration" + ], + "name": "OwnedCrossFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureDirectionKind", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureDirection : FeatureDirectionKind =", + " 'in' | 'out' | 'inout'" + ], + "name": "FeatureDirection" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureDeclaration : Feature =", + " ( isSufficient ?= 'all' )?", + " ( FeatureIdentification", + " ( FeatureSpecializationPart | ConjugationPart )?", + " | FeatureSpecializationPart", + " | ConjugationPart", + " )", + " FeatureRelationshipPart*" + ], + "name": "FeatureDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureIdentification : Feature =", + " '<' declaredShortName = NAME '>' ( declaredName = NAME )?", + " | declaredName = NAME" + ], + "name": "FeatureIdentification" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureRelationshipPart : Feature =", + " TypeRelationshipPart", + " | ChainingPart", + " | InvertingPart", + " | TypeFeaturingPart" + ], + "name": "FeatureRelationshipPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "ChainingPart : Feature =", + " 'chains'", + " ( ownedRelationship += OwnedFeatureChaining", + " | FeatureChain )" + ], + "name": "ChainingPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "InvertingPart : Feature =", + " 'inverse' 'of' ownedRelationship += OwnedFeatureInverting" + ], + "name": "InvertingPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "TypeFeaturingPart : Feature =", + " 'featured' 'by' ownedRelatioship += OwnedTypeFeaturing", + " ( ',' ownedTypeFeaturing += OwnedTypeFeaturing )*" + ], + "name": "TypeFeaturingPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureSpecializationPart : Feature =", + " FeatureSpecialization+ MultiplicityPart? FeatureSpecialization*", + " | MultiplicityPart FeatureSpecialization*" + ], + "name": "FeatureSpecializationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "MultiplicityPart : Feature =", + " ownedRelationship += OwnedMultiplicity", + " | ( ownedRelationship += OwnedMultiplicity )?", + " ( isOrdered ?= 'ordered' ( {isUnique = false} 'nonunique' )?", + " | {isUnique = false} 'nonunique' ( isOrdered ?= 'ordered' )? )" + ], + "name": "MultiplicityPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "FeatureSpecialization : Feature =", + " Typings | Subsettings | References | Crosses | Redefinitions" + ], + "name": "FeatureSpecialization" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Typings : Feature =", + " TypedBy ( ',' ownedRelationship += OwnedFeatureTyping )*" + ], + "name": "Typings" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "TypedBy : Feature =", + " TYPED_BY ownedRelationship += OwnedFeatureTyping" + ], + "name": "TypedBy" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Subsettings : Feature =", + " Subsets ( ',' ownedRelationship += OwnedSubsetting )*" + ], + "name": "Subsettings" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Subsets : Feature =", + " SUBSETS ownedRelationship += OwnedSubsetting" + ], + "name": "Subsets" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "References : Feature =", + " REFERENCES ownedRelationship += OwnedReferenceSubsetting" + ], + "name": "References" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Crosses : Feature =", + " CROSSES ownedRelationship += OwnedCrossSubsetting" + ], + "name": "Crosses" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Redefinitions : Feature =", + " Redefines ( ',' ownedRelationship += OwnedRedefinition )*" + ], + "name": "Redefinitions" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.1", + "is_partial": false, + "lines": [ + "Redefines : Feature =", + " REDEFINES ownedRelationship += OwnedRedefinition" + ], + "name": "Redefines" + }, + { + "@type": "NoteList", + "clause_id": "8.2.4.3.1", + "html_snippet": "
        1. PrefixMetadataMember is defined in the Kernel layer (see 8.3.4.12).
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.2", + "lines": [ + "Clause 8.2.4.3.2 Feature Typing" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureTyping", + "clause_id": "8.2.4.3.2", + "is_partial": false, + "lines": [ + "FeatureTyping =", + " ( 'specialization' Identification )?", + " 'typing' typedFeature = [QualifiedName]", + " TYPED_BY GeneralType", + " RelationshipBody" + ], + "name": "FeatureTyping" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureTyping", + "clause_id": "8.2.4.3.2", + "is_partial": false, + "lines": [ + "OwnedFeatureTyping : FeatureTyping =", + " GeneralType" + ], + "name": "OwnedFeatureTyping" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.3", + "lines": [ + "Clause 8.2.4.3.3 Subsetting" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Subsetting", + "clause_id": "8.2.4.3.3", + "is_partial": false, + "lines": [ + "Subsetting =", + " ( 'specialization' Identification )?", + " 'subset' SpecificType", + " SUBSETS GeneralType", + " RelationshipBody" + ], + "name": "Subsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Subsetting", + "clause_id": "8.2.4.3.3", + "is_partial": false, + "lines": [ + "OwnedSubsetting : Subsetting =", + " GeneralType" + ], + "name": "OwnedSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceSubsetting", + "clause_id": "8.2.4.3.3", + "is_partial": false, + "lines": [ + "OwnedReferenceSubsetting : ReferenceSubsetting =", + " GeneralType" + ], + "name": "OwnedReferenceSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "CrossSubsetting", + "clause_id": "8.2.4.3.3", + "is_partial": false, + "lines": [ + "OwnedCrossSubsetting : CrossSubsetting =", + " GeneralType" + ], + "name": "OwnedCrossSubsetting" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.4", + "lines": [ + "Clause 8.2.4.3.4 Redefinition" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.4.3.4", + "is_partial": false, + "lines": [ + "Redefinition =", + " ( 'specialization' Identification )?", + " 'redefinition' SpecificType", + " REDEFINES GeneralType", + " RelationshipBody" + ], + "name": "Redefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.4.3.4", + "is_partial": false, + "lines": [ + "OwnedRedefinition : Redefinition =", + " GeneralType" + ], + "name": "OwnedRedefinition" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.5", + "lines": [ + "Clause 8.2.4.3.5 Feature Chaining" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.5", + "is_partial": false, + "lines": [ + "OwnedFeatureChain : Feature =", + " FeatureChain" + ], + "name": "OwnedFeatureChain" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.4.3.5", + "is_partial": false, + "lines": [ + "FeatureChain : Feature =", + " ownedRelationship += OwnedFeatureChaining", + " ( '.' ownedRelationship += OwnedFeatureChaining )+" + ], + "name": "FeatureChain" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureChaining", + "clause_id": "8.2.4.3.5", + "is_partial": false, + "lines": [ + "OwnedFeatureChaining : FeatureChaining =", + " chainingFeature = [QualifiedName]" + ], + "name": "OwnedFeatureChaining" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.6", + "lines": [ + "Clause 8.2.4.3.6 Feature Inverting" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureInverting", + "clause_id": "8.2.4.3.6", + "is_partial": false, + "lines": [ + "FeatureInverting =", + " ( 'inverting' Identification? )?", + " 'inverse'", + " ( featureInverted = [QualifiedName]", + " | featureInverted = OwnedFeatureChain", + " { ownedRelatedElement += featureInverted }", + " )", + " 'of'", + " ( invertingFeature = [QualifiedName]", + " | ownedRelatedElement += OwnedFeatureChain", + " { ownedRelatedElement += invertingFeature }", + " )", + " RelationshipBody" + ], + "name": "FeatureInverting" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureInverting", + "clause_id": "8.2.4.3.6", + "is_partial": false, + "lines": [ + "OwnedFeatureInverting : FeatureInverting =", + " invertingFeature = [QualifiedName]", + " | invertingFeature = OwnedFeatureChain", + " { ownedRelatedElement += invertingFeature }" + ], + "name": "OwnedFeatureInverting" + }, + { + "@type": "Heading", + "clause_id": "8.2.4.3.7", + "lines": [ + "Clause 8.2.4.3.7 Type Featuring" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "TypeFeaturing", + "clause_id": "8.2.4.3.7", + "is_partial": false, + "lines": [ + "TypeFeaturing =", + " 'featuring' ( Identification 'of' )?", + " featureOfType = [QualifiedName]", + " 'by' featuringType = [QualifiedName]", + " RelationshipBody" + ], + "name": "TypeFeaturing" + }, + { + "@type": "Production", + "abstract_syntax_type": "TypeFeaturing", + "clause_id": "8.2.4.3.7", + "is_partial": false, + "lines": [ + "OwnedTypeFeaturing : TypeFeaturing =", + " featuringType = [QualifiedName]" + ], + "name": "OwnedTypeFeaturing" + }, + { + "@type": "Heading", + "clause_id": "8.2.5", + "lines": [ + "Clause 8.2.5 Kernel Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.1", + "lines": [ + "Clause 8.2.5.1 Data Types Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "DataType", + "clause_id": "8.2.5.1", + "is_partial": false, + "lines": [ + "DataType =", + " TypePrefix 'datatype'", + " ClassifierDeclaration TypeBody" + ], + "name": "DataType" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.2", + "lines": [ + "Clause 8.2.5.2 Classes Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Class", + "clause_id": "8.2.5.2", + "is_partial": false, + "lines": [ + "Class =", + " TypePrefix 'class'", + " ClassifierDeclaration TypeBody" + ], + "name": "Class" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.3", + "lines": [ + "Clause 8.2.5.3 Structures Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Structure", + "clause_id": "8.2.5.3", + "is_partial": false, + "lines": [ + "Structure =", + " TypePrefix 'struct'", + " ClassifierDeclaration TypeBody" + ], + "name": "Structure" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.4", + "lines": [ + "Clause 8.2.5.4 Associations Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Association", + "clause_id": "8.2.5.4", + "is_partial": false, + "lines": [ + "Association =", + " TypePrefix 'assoc'", + " ClassifierDeclaration TypeBody" + ], + "name": "Association" + }, + { + "@type": "Production", + "abstract_syntax_type": "AssociationStructure", + "clause_id": "8.2.5.4", + "is_partial": false, + "lines": [ + "AssociationStructure =", + " TypePrefix 'assoc' 'struct'", + " ClassifierDeclaration TypeBody" + ], + "name": "AssociationStructure" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.5", + "lines": [ + "Clause 8.2.5.5 Connectors Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.5.1", + "lines": [ + "Clause 8.2.5.5.1 Connectors" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Connector", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "Connector =", + " FeaturePrefix 'connector'", + " ( FeatureDeclaration? ValuePart?", + " | ConnectorDeclaration", + " )", + " TypeBody" + ], + "name": "Connector" + }, + { + "@type": "Production", + "abstract_syntax_type": "Connector", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "ConnectorDeclaration : Connector =", + " BinaryConnectorDeclaration | NaryConnectorDeclaration" + ], + "name": "ConnectorDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Connector", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "BinaryConnectorDeclaration : Connector =", + " ( FeatureDeclaration? 'from' | isSufficient ?= 'all' 'from'? )?", + " ownedRelationship += ConnectorEndMember 'to'", + " ownedRelationship += ConnectorEndMember" + ], + "name": "BinaryConnectorDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Connector", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "NaryConnectorDeclaration : Connector =", + " FeatureDeclaration?", + " '(' ownedRelationship += ConnectorEndMember ','", + " ownedRelationship += ConnectorEndMember", + " ( ',' ownedRelationship += ConnectorEndMember )*", + " ')'" + ], + "name": "NaryConnectorDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "ConnectorEndMember : EndFeatureMembership =", + " ownedRelatedElement += ConnectorEnd" + ], + "name": "ConnectorEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "ConnectorEnd : Feature =", + "\t( ownedRelationship += OwnedCrossMultiplicityMember )?", + "\t( declaredName = NAME REFERENCES )?", + "\townedRelationship += OwnedReferenceSubsetting" + ], + "name": "ConnectorEnd" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "OwnedCrossMultiplicityMember : OwningMembership =", + "\townedRelatedElement += OwnedCrossMultiplicity" + ], + "name": "OwnedCrossMultiplicityMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.5.1", + "is_partial": false, + "lines": [ + "OwnedCrossMultiplicity : Feature =", + "\townedRelationship += OwnedMultiplicity" + ], + "name": "OwnedCrossMultiplicity" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.5.2", + "lines": [ + "Clause 8.2.5.5.2 Binding Connectors" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "BindingConnector", + "clause_id": "8.2.5.5.2", + "is_partial": false, + "lines": [ + "BindingConnector =", + " FeaturePrefix 'binding'", + " BindingConnectorDeclaration TypeBody" + ], + "name": "BindingConnector" + }, + { + "@type": "Production", + "abstract_syntax_type": "BindingConnector", + "clause_id": "8.2.5.5.2", + "is_partial": false, + "lines": [ + "BindingConnectorDeclaration : BindingConnector =", + " FeatureDeclaration", + " ( 'of' ownedRelationship += ConnectorEndMember", + " '=' ownedRelationship += ConnectorEndMember )?", + " | ( isSufficient ?= 'all' )?", + " ( 'of'? ownedRelationship += ConnectorEndMember", + " '=' ownedRelationship += ConnectorEndMember )?" + ], + "name": "BindingConnectorDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.5.3", + "lines": [ + "Clause 8.2.5.5.3 Successions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Succession", + "clause_id": "8.2.5.5.3", + "is_partial": false, + "lines": [ + "Succession =", + " FeaturePrefix 'succession'", + " SuccessionDeclaration TypeBody" + ], + "name": "Succession" + }, + { + "@type": "Production", + "abstract_syntax_type": "Succession", + "clause_id": "8.2.5.5.3", + "is_partial": false, + "lines": [ + "SuccessionDeclaration : Succession =", + " FeatureDeclaration", + " ( 'first' ownedRelationship += ConnectorEndMember", + " 'then' ownedRelationship += ConnectorEndMember )?", + " | ( s.isSufficient ?= 'all' )?", + " ( 'first'? ownedRelationship += ConnectorEndMember", + " 'then' ownedRelationship += ConnectorEndMember )?" + ], + "name": "SuccessionDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.6", + "lines": [ + "Clause 8.2.5.6 Behaviors Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.6.1", + "lines": [ + "Clause 8.2.5.6.1 Behaviors" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Behavior", + "clause_id": "8.2.5.6.1", + "is_partial": false, + "lines": [ + "Behavior =", + " TypePrefix 'behavior'", + " ClassifierDeclaration TypeBody" + ], + "name": "Behavior" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.6.2", + "lines": [ + "Clause 8.2.5.6.2 Steps" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Step", + "clause_id": "8.2.5.6.2", + "is_partial": false, + "lines": [ + "Step =", + " FeaturePrefix", + " 'step' FeatureDeclaration ValuePart?", + " TypeBody" + ], + "name": "Step" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.7", + "lines": [ + "Clause 8.2.5.7 Functions Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.7.1", + "lines": [ + "Clause 8.2.5.7.1 Functions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Function", + "clause_id": "8.2.5.7.1", + "is_partial": false, + "lines": [ + "Function =", + " TypePrefix 'function'", + " ClassifierDeclaration FunctionBody" + ], + "name": "Function" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.5.7.1", + "is_partial": false, + "lines": [ + "FunctionBody : Type =", + " ';' | '{' FunctionBodyPart '}'" + ], + "name": "FunctionBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.5.7.1", + "is_partial": false, + "lines": [ + "FunctionBodyPart : Type =", + " ( TypeBodyElement", + " | ownedRelationship += ReturnFeatureMember", + " )*", + " ( ownedRelationship += ResultExpressionMember )?" + ], + "name": "FunctionBodyPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReturnParameterMembership", + "clause_id": "8.2.5.7.1", + "is_partial": false, + "lines": [ + "ReturnFeatureMember : ReturnParameterMembership =", + " MemberPrefix 'return'", + " ownedRelatedElement += FeatureElement" + ], + "name": "ReturnFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ResultExpressionMembership", + "clause_id": "8.2.5.7.1", + "is_partial": false, + "lines": [ + "ResultExpressionMember : ResultExpressionMembership =", + " MemberPrefix", + " ownedRelatedElement += OwnedExpression" + ], + "name": "ResultExpressionMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.7.2", + "lines": [ + "Clause 8.2.5.7.2 Expressions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.7.2", + "is_partial": false, + "lines": [ + "Expression =", + " FeaturePrefix", + " 'expr' FeatureDeclaration ValuePart?", + " FunctionBody" + ], + "name": "Expression" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.7.3", + "lines": [ + "Clause 8.2.5.7.3 Predicates" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Predicate", + "clause_id": "8.2.5.7.3", + "is_partial": false, + "lines": [ + "Predicate =", + " TypePrefix 'predicate'", + " ClassifierDeclaration FunctionBody" + ], + "name": "Predicate" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.7.4", + "lines": [ + "Clause 8.2.5.7.4 Boolean Expressions and Invariants" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "BooleanExpression", + "clause_id": "8.2.5.7.4", + "is_partial": false, + "lines": [ + "BooleanExpression =", + " FeaturePrefix", + " 'bool' FeatureDeclaration ValuePart?", + " FunctionBody" + ], + "name": "BooleanExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "Invariant", + "clause_id": "8.2.5.7.4", + "is_partial": false, + "lines": [ + "Invariant =", + " FeaturePrefix", + " 'inv' ( 'true' | isNegated ?= 'false' )?", + " FeatureDeclaration ValuePart?", + " FunctionBody" + ], + "name": "Invariant" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.8", + "lines": [ + "Clause 8.2.5.8 Expressions Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.8.1", + "lines": [ + "Clause 8.2.5.8.1 Operator Expressions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "OwnedExpressionReferenceMember : FeatureMembership =", + " ownedRelationship += OwnedExpressionReference" + ], + "name": "OwnedExpressionReferenceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureReferenceExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "OwnedExpressionReference : FeatureReferenceExpression =", + " ownedRelationship += OwnedExpressionMember" + ], + "name": "OwnedExpressionReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "OwnedExpressionMember : FeatureMembership =", + " ownedFeatureMember = OwnedExpression" + ], + "name": "OwnedExpressionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "OwnedExpression : Expression =", + " ConditionalExpression", + " | ConditionalBinaryOperatorExpression", + " | BinaryOperatorExpression", + " | UnaryOperatorExpression", + " | ClassificationExpression", + " | MetaclassificationExpression", + " | ExtentExpression", + " | PrimaryExpression" + ], + "name": "OwnedExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ConditionalExpression : OperatorExpression =", + " operator = 'if'", + " ownedRelationship += ArgumentMember '?'", + " ownedRelationship += ArgumentExpressionMember 'else'", + " ownedRelationship += ArgumentExpressionMember", + " ownedRelationship += EmptyResultMember" + ], + "name": "ConditionalExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ConditionalBinaryOperatorExpression : OperatorExpression =", + " ownedRelationship += ArgumentMember", + " operator = ConditionalBinaryOperator", + " ownedRelationship += ArgumentExpressionMember", + " ownedRelationship += EmptyResultMember" + ], + "name": "ConditionalBinaryOperatorExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConditionalBinaryOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ConditionalBinaryOperator =", + " '??' | 'or' | 'and' | 'implies'" + ], + "name": "ConditionalBinaryOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "BinaryOperatorExpression : OperatorExpression =", + " ownedRelationship += ArgumentMember", + " operator = BinaryOperator", + " ownedRelationship += ArgumentMember", + " ownedRelationship += EmptyResultMember" + ], + "name": "BinaryOperatorExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "BinaryOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "BinaryOperator =", + " '|' | '&' | 'xor' | '..'", + " | '==' | '!=' | '===' | '!=='", + " | '<' | '>' | '<=' | '>='", + " | '+' | '-' | '*' | '/'", + " | '%' | '^' | '**'" + ], + "name": "BinaryOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "UnaryOperatorExpression : OperatorExpression =", + " operator = UnaryOperator", + " ownedRelationship += ArgumentMember", + " ownedRelationship += EmptyResultMember" + ], + "name": "UnaryOperatorExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "UnaryOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "UnaryOperator =", + " '+' | '-' | '~' | 'not'" + ], + "name": "UnaryOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ClassificationExpression : OperatorExpression =", + " ( ownedRelationship += ArgumentMember )?", + " ( operator = ClassificationTestOperator", + " ownedRelationship += TypeReferenceMember", + " | operator = CastOperator", + " ownedRelationship += TypeResultMember", + " )", + " ownedRelationship += EmptyResultMember" + ], + "name": "ClassificationExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ClassificationTestOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ClassificationTestOperator =", + " 'istype' | 'hastype' | '@'" + ], + "name": "ClassificationTestOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "CastOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "CastOperator =", + " 'as'" + ], + "name": "CastOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetaclassificationExpression : OperatorExpression =", + " ownedRelationship += MetadataArgumentMember", + " ( operator = MetaClassificationTestOperator", + " ownedRelationship += TypeReferenceMember", + " | operator = MetaCastOperator", + " ownedRelationship += TypeResultMember", + " )", + " ownedRelationship += EmptyResultMember" + ], + "name": "MetaclassificationExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ArgumentMember : ParameterMembership =", + " ownedMemberParameter = Argument" + ], + "name": "ArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "Argument : Feature =", + " ownedRelationship += ArgumentValue" + ], + "name": "Argument" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ArgumentValue : FeatureValue =", + " value = OwnedExpression" + ], + "name": "ArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ArgumentExpressionMember : FeatureMembership =", + " ownedRelatedElement += ArgumentExpression" + ], + "name": "ArgumentExpressionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ArgumentExpression : Feature =", + " ownedRelationship += ArgumentExpressionValue" + ], + "name": "ArgumentExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ArgumentExpressionValue : FeatureValue =", + " value = OwnedExpressionReference" + ], + "name": "ArgumentExpressionValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetadataArgumentMember : ParameterMembership =", + " ownedRelatedElement += MetadataArgument" + ], + "name": "MetadataArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetadataArgument : Feature =", + " ownedRelationship += MetadataValue" + ], + "name": "MetadataArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetadataValue : FeatureValue =", + " value = MetadataReference" + ], + "name": "MetadataValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataAccessExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetadataReference : MetadataAccessExpression =", + " ownedRelationship += ElementReferenceMember" + ], + "name": "MetadataReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetaclassificationTestOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetaclassificationTestOperator =", + " '@@'" + ], + "name": "MetaclassificationTestOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetaCastOperator", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "MetaCastOperator =", + " 'meta'" + ], + "name": "MetaCastOperator" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ExtentExpression : OperatorExpression =", + " operator = 'all'", + " ownedRelationship += TypeReferenceMember" + ], + "name": "ExtentExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "TypeReferenceMember : ParameterMembership =", + " ownedMemberFeature = TypeReference" + ], + "name": "TypeReferenceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ResultParameterMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "TypeResultMember : ResultParameterMembership =", + " ownedMemberFeature = TypeReference" + ], + "name": "TypeResultMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "TypeReference : Feature =", + " ownedRelationship += ReferenceTyping" + ], + "name": "TypeReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureTyping", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "ReferenceTyping : FeatureTyping =", + " type = [QualifiedName]" + ], + "name": "ReferenceTyping" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReturnParameterMembership", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "EmptyResultMember : ReturnParameterMembership =", + " ownedRelatedElement += EmptyFeature" + ], + "name": "EmptyResultMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.1", + "is_partial": false, + "lines": [ + "EmptyFeature : Feature =", + " { }" + ], + "name": "EmptyFeature" + }, + { + "@type": "NoteList", + "clause_id": "8.2.5.8.1", + "html_snippet": "
        1. OperatorExpressions provide a shorthand notation for InvocationExpressions that invoke a library Function represented as an operator symbol. Table 5 shows the mapping from operator symbols to the Functions they represent from the Kernel Model Library (see Clause 9). An OperatorExpression contains subexpressions called its operands that generally correspond to the argument Expressions of the OperatorExpression, except in the case of operators representing control Functions, in which case the evaluation of certain operands is as determined by the Function (see 8.4.4.9 for details).
        2. Though not directly expressed in the syntactic productions given above, in any OperatorExpression containing nested OperatorExpressions, the nested OperatorExpressions shall be implicitly grouped according to the precedence of the operators involved, as given in Table 6. OperatorExpressions with higher precedence operators shall be grouped more tightly than those with lower precedence operators. Further, all BinaryOperators other than exponentiation are left-associative (i.e, they group to the left), while the exponentiation operators (^ and **) are right-associative (i.e., they group to the right).
        3. The unary operator symbol ~ maps to the library Function DataFunctions::'~', as shown in Table 5. This abstract Function may be given a concrete definition in a domain-specific Function library, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.8.2", + "lines": [ + "Clause 8.2.5.8.2 Primary Expressions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "PrimaryExpression : Expression =", + " FeatureChainExpression", + " | NonFeatureChainPrimaryExpression" + ], + "name": "PrimaryExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "PrimaryArgumentValue : FeatureValue =", + " value = PrimaryExpression" + ], + "name": "PrimaryArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "PrimaryArgument : Feature =", + " ownedRelationship += PrimaryArgumentValue" + ], + "name": "PrimaryArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "PrimaryArgumentMember : ParameterMembership =", + " ownedMemberParameter = PrimaryArgument" + ], + "name": "PrimaryArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "NonFeatureChainPrimaryExpression : Expression =", + " BracketExpression", + " | IndexExpression", + " | SequenceExpression", + " | SelectExpression", + " | CollectExpression", + " | FunctionOperationExpression", + " | BaseExpression" + ], + "name": "NonFeatureChainPrimaryExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "NonFeatureChainPrimaryArgumentValue : FeatureValue =", + " value = NonFeatureChainPrimaryExpression" + ], + "name": "NonFeatureChainPrimaryArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "NonFeatureChainPrimaryArgument : Feature =", + " ownedRelationship += NonFeatureChainPrimaryArgumentValue" + ], + "name": "NonFeatureChainPrimaryArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "NonFeatureChainPrimaryArgumentMember : ParameterMembership =", + " ownedMemberParameter = PrimaryArgument" + ], + "name": "NonFeatureChainPrimaryArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "BracketExpression : OperatorExpression =", + " ownedRelationship += PrimaryArgumentMember", + " operator = '['", + " ownedRelationship += SequenceExpressionListMember ']'" + ], + "name": "BracketExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "IndexExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "IndexExpression =", + " ownedRelationship += PrimaryArgumentMember '#'", + " '(' ownedRelationship += SequenceExpressionListMember ')'" + ], + "name": "IndexExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "SequenceExpression : Expression =", + " '(' SequenceExpressionList ')'" + ], + "name": "SequenceExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "SequenceExpressionList : Expression =", + " OwnedExpression ','? | SequenceOperatorExpression" + ], + "name": "SequenceExpressionList" + }, + { + "@type": "Production", + "abstract_syntax_type": "OperatorExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "SequenceOperatorExpression : OperatorExpression =", + " ownedRelationship += OwnedExpressionMember", + " operator = ','", + " ownedRelationship += SequenceExpressionListMember" + ], + "name": "SequenceOperatorExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "SequenceExpressionListMember : FeatureMembership =", + " ownedMemberFeature = SequenceExpressionList" + ], + "name": "SequenceExpressionListMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureChainExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FeatureChainExpression =", + " ownedRelationship += NonFeatureChainPrimaryArgumentMember '.'", + " ownedRelationship += FeatureChainMember" + ], + "name": "FeatureChainExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "CollectExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "CollectExpression =", + " ownedRelationship += PrimaryArgumentMember '.'", + " ownedRelationship += BodyArgumentMember" + ], + "name": "CollectExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "SelectExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "SelectExpression =", + " ownedRelationship += PrimaryArgumentMember '.?'", + " ownedRelationship += BodyArgumentMember" + ], + "name": "SelectExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "InvocationExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionOperationExpression : InvocationExpression =", + " ownedRelationship += PrimaryArgumentMember '->'", + " ownedRelationship += InvocationTypeMember", + " ( ownedRelationship += BodyArgumentMember", + " | ownedRelationship += FunctionReferenceArgumentMember", + " | ArgumentList )", + " ownedRelationship += EmptyResultMember" + ], + "name": "FunctionOperationExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "BodyArgumentMember : ParameterMembership =", + " ownedMemberParameter = BodyArgument" + ], + "name": "BodyArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "BodyArgument : Feature =", + " ownedRelationship += BodyArgumentValue" + ], + "name": "BodyArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "BodyArgumentValue : FeatureValue =", + " value = BodyExpression" + ], + "name": "BodyArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReferenceArgumentMember : ParameterMembership =", + " ownedMemberParameter = FunctionReferenceArgument" + ], + "name": "FunctionReferenceArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReferenceArgument : Feature =", + " ownedRelationship += FunctionReferenceArgumentValue" + ], + "name": "FunctionReferenceArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReferenceArgumentValue : FeatureValue =", + " value = FunctionReferenceExpression" + ], + "name": "FunctionReferenceArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureReferenceExpression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReferenceExpression : FeatureReferenceExpression =", + " ownedRelationship += FunctionReferenceMember" + ], + "name": "FunctionReferenceExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReferenceMember : FeatureMembership =", + " ownedMemberFeature = FunctionReference" + ], + "name": "FunctionReferenceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FunctionReference : Expression =", + " ownedRelationship += ReferenceTyping" + ], + "name": "FunctionReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "FeatureChainMember : Membership =", + " FeatureReferenceMember", + " | OwnedFeatureChainMember" + ], + "name": "FeatureChainMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.5.8.2", + "is_partial": false, + "lines": [ + "OwnedFeatureChainMember : OwningMembership =", + " ownedMemberElement = FeatureChain" + ], + "name": "OwnedFeatureChainMember" + }, + { + "@type": "NoteList", + "clause_id": "8.2.5.8.2", + "html_snippet": "
        1. Primary expressions provide additional shorthand notations for certain kinds of InvocationExpressions. For those cases in which the InvocationExpression is an OperatorExpression, its operator shall be resolved to the appropriate library function as given in Table 7. Note also that, for a CollectionExpression or SelectExpression, the abstract syntax constrains the operator to be collect and select, respectively, separately from the . and .? symbols used in their concrete syntax notation (see 8.3.4.8.2 and 8.3.4.8.18).
        2. The grammar allows a bracket syntax [...]that parses to an invocation of the library Function BaseFunctions::'[', as shown in Table 7. This notation is available for use with domain-specific library models that given a concrete definition to the abstract base '[' Function, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.8.3", + "lines": [ + "Clause 8.2.5.8.3 Base Expressions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "BaseExpression : Expression =", + " NullExpression", + " | LiteralExpression", + " | FeatureReferenceExpression", + " | MetadataAccessExpression", + " | InvocationExpression", + " | ConstructorExpression", + " | BodyExpression" + ], + "name": "BaseExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "NullExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "NullExpression : NullExpression =", + " 'null' | '(' ')'" + ], + "name": "NullExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureReferenceExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "FeatureReferenceExpression : FeatureReferenceExpression =", + " ownedRelationship += FeatureReferenceMember", + " ownedRelationship += EmptyResultMember" + ], + "name": "FeatureReferenceExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "FeatureReferenceMember : Membership =", + " memberElement = FeatureReference" + ], + "name": "FeatureReferenceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "FeatureReference : Feature =", + " [QualifiedName]" + ], + "name": "FeatureReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataAccessExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "MetadataAccessExpression =", + " ownedRelationship += ElementReferenceMember '.' 'metadata'" + ], + "name": "MetadataAccessExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ElementReferenceMember : Membership =", + " memberElement = [QualifiedName]" + ], + "name": "ElementReferenceMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "InvocationExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "InvocationExpression : InvocationExpression =", + " ownedRelationship += InstatiatedTypeMember", + " ArgumentList", + " ownedRelationship += EmptyResultMember" + ], + "name": "InvocationExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConstructorExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ConstructorExpression =", + " 'new' ownedRelationship += InstantiatedTypeMember", + " ownedRelationship += ConstructorResultMember" + ], + "name": "ConstructorExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReturnParameterMembership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ConstructorResultMember : ReturnParameterMembership =", + " ownedRelatedElement += ConstructorResult" + ], + "name": "ConstructorResultMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ConstructorResult : Feature =", + " ArgumentList" + ], + "name": "ConstructorResult" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "InstantiatedTypeMember : Membership =", + " memberElement = InstantiatedTypeReference", + " | OwnedFeatureChainMember" + ], + "name": "InstantiatedTypeMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "InstantiatedTypeReference : Type =", + " [QualifiedName]" + ], + "name": "InstantiatedTypeReference" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ArgumentList : Feature =", + " '(' ( PositionalArgumentList | NamedArgumentList )? ')'" + ], + "name": "ArgumentList" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "PositionalArgumentList : Feature =", + " e.ownedRelationship += ArgumentMember", + " ( ',' e.ownedRelationship += ArgumentMember )*" + ], + "name": "PositionalArgumentList" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "NamedArgumentList : Feature =", + " ownedRelationship += NamedArgumentMember", + " ( ',' ownedRelationship += NamedArgumentMember )*" + ], + "name": "NamedArgumentList" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "NamedArgumentMember : FeatureMembership =", + " ownedMemberFeature = NamedArgument" + ], + "name": "NamedArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "NamedArgument : Feature =", + " ownedRelationship += ParameterRedefinition '='", + " ownedRelationship += ArgumentValue" + ], + "name": "NamedArgument" + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ParameterRedefinition : Redefinition =", + " redefinedFeature = [QualifiedName]" + ], + "name": "ParameterRedefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureReferenceExpression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "BodyExpression : FeatureReferenceExpression =", + " ownedRelationship += ExpressionBodyMember" + ], + "name": "BodyExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ExpressionBodyMember : FeatureMembership =", + " ownedMemberFeature = ExpressionBody" + ], + "name": "ExpressionBodyMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expression", + "clause_id": "8.2.5.8.3", + "is_partial": false, + "lines": [ + "ExpressionBody : Expression =", + " '{' FunctionBodyPart '}'" + ], + "name": "ExpressionBody" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.8.4", + "lines": [ + "Clause 8.2.5.8.4 Literal Expressions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralExpression", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralExpression =", + " LiteralBoolean", + " | LiteralString", + " | LiteralInteger", + " | LiteralReal", + " | LiteralInfinity" + ], + "name": "LiteralExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralBoolean", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralBoolean =", + " value = BooleanValue" + ], + "name": "LiteralBoolean" + }, + { + "@type": "Production", + "abstract_syntax_type": "Boolean", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "BooleanValue : Boolean =", + " 'true' | 'false'" + ], + "name": "BooleanValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralString", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralString =", + " value = STRING_VALUE" + ], + "name": "LiteralString" + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralInteger", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralInteger =", + " value = DECIMAL_VALUE" + ], + "name": "LiteralInteger" + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralReal", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralReal =", + " value = RealValue" + ], + "name": "LiteralReal" + }, + { + "@type": "Production", + "abstract_syntax_type": "Real", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "RealValue : Real =", + " DECIMAL_VALUE? '.' ( DECIMAL_VALUE | EXPONENTIAL_VALUE )", + " | EXPONENTIAL_VALUE" + ], + "name": "RealValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "LiteralInfinity", + "clause_id": "8.2.5.8.4", + "is_partial": false, + "lines": [ + "LiteralInfinity =", + " '*'" + ], + "name": "LiteralInfinity" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.9", + "lines": [ + "Clause 8.2.5.9 Interactions Concrete Syntax" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.9.1", + "lines": [ + "Clause 8.2.5.9.1 Interactions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Interaction", + "clause_id": "8.2.5.9.1", + "is_partial": false, + "lines": [ + "Interaction =", + " TypePrefix 'interaction'", + " ClassifierDeclaration TypeBody" + ], + "name": "Interaction" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.9.2", + "lines": [ + "Clause 8.2.5.9.2 Flows" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Flow", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "Flow =", + " FeaturePrefix 'flow'", + " ItemFlowDeclaration TypeBody" + ], + "name": "Flow" + }, + { + "@type": "Production", + "abstract_syntax_type": "SuccessionFlow", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "SuccessionFlow =", + " FeaturePrefix 'succession' 'flow'", + " ItemFlowDeclaration TypeBody" + ], + "name": "SuccessionFlow" + }, + { + "@type": "Production", + "abstract_syntax_type": "Flow", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowDeclaration : Flow =", + " FeatureDeclaration ValuePart?", + " ( 'of' ownedRelationship += PayloadFeatureMember )?", + " ( 'from' ownedRelationship += FlowEndMember", + " 'to' ownedRelationship += FlowEndMember )?", + " | ( isSufficient ?= 'all' )?", + " ownedRelationship += FlowEndMember 'to'", + " ownedRelationship += FlowEndMember" + ], + "name": "FlowDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "PayloadFeatureMember : FeatureMembership =", + " ownedRelatedElement = PayloadFeature" + ], + "name": "PayloadFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "PayloadFeature", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "PayloadFeature =", + " Identification PayloadFeatureSpecializationPart ValuePart?", + " | Identification ValuePart", + " | ( ownedRelationship += OwnedFeatureTyping", + " ( ownedRelationship += OwnedMultiplicity )?", + " | ownedRelationship += OwnedMultiplicity", + " ( ownedRelationship += OwnedFeatureTyping )?" + ], + "name": "PayloadFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "PayloadFeatureSpecializationPart : Feature =", + " FeatureSpecialization+ MultiplicityPart?", + " FeatureSpecialization*", + " | MultiplicityPart FeatureSpecialization+" + ], + "name": "PayloadFeatureSpecializationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowEndMember : EndFeatureMembership =", + " ownedRelatedElement += FlowEnd" + ], + "name": "FlowEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowEnd", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowEnd =", + " ( ownedRelationship += OwnedReferenceSubsetting '.' )?", + " ownedRelationship += FlowFeatureMember" + ], + "name": "FlowEnd" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowFeatureMember : FeatureMembership =", + " ownedRelatedElement += FlowFeature" + ], + "name": "FlowFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowFeature : Feature =", + " ownedRelationship += FlowFeatureRedefinition" + ], + "name": "FlowFeature" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.5.9.2", + "lines": [ + "(See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.5.9.2", + "is_partial": false, + "lines": [ + "FlowFeatureRedefinition : Redefinition =", + " redefinedFeature = [QualifiedName]" + ], + "name": "FlowFeatureRedefinition" + }, + { + "@type": "NoteList", + "clause_id": "8.2.5.9.2", + "html_snippet": "
        1. To ensure that an FlowFeature passes the validateRedefinitionDirectionConformance constraint (see 8.3.3.3.8), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature)
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.5.10", + "lines": [ + "Clause 8.2.5.10 Feature Values Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.10", + "is_partial": false, + "lines": [ + "ValuePart : Feature =", + " ownedRelationship += FeatureValue" + ], + "name": "ValuePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.5.10", + "is_partial": false, + "lines": [ + "FeatureValue =", + " ( '='", + " | isInitial ?= ':='", + " | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )?", + " )", + " ownedRelatedElement += OwnedExpression" + ], + "name": "FeatureValue" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.11", + "lines": [ + "Clause 8.2.5.11 Multiplicities Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Multiplicity", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "Multiplicity =", + " MultiplicitySubset | MultiplicityRange" + ], + "name": "Multiplicity" + }, + { + "@type": "Production", + "abstract_syntax_type": "Multiplicity", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "MultiplicitySubset : Multiplicity =", + " 'multiplicity' Identification Subsets", + " TypeBody" + ], + "name": "MultiplicitySubset" + }, + { + "@type": "Production", + "abstract_syntax_type": "MultiplicityRange", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "MultiplicityRange =", + " 'multiplicity' Identification MultiplicityBounds", + " TypeBody" + ], + "name": "MultiplicityRange" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "OwnedMultiplicity : OwningMembership =", + " ownedRelatedElement += OwnedMultiplicityRange" + ], + "name": "OwnedMultiplicity" + }, + { + "@type": "Production", + "abstract_syntax_type": "MultiplicityRange", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "OwnedMultiplicityRange : MultiplicityRange =", + " MultiplicityBounds" + ], + "name": "OwnedMultiplicityRange" + }, + { + "@type": "Production", + "abstract_syntax_type": "MultiplicityRange", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "MultiplicityBounds : MultiplicityRange =", + " '[' ( ownedRelationship += MultiplicityExpressionMember '..' )?", + " ownedRelationship += MultiplicityExpressionMember ']'" + ], + "name": "MultiplicityBounds" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.5.11", + "is_partial": false, + "lines": [ + "MultiplicityExpressionMember : OwningMembership =", + " ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression )" + ], + "name": "MultiplicityExpressionMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.12", + "lines": [ + "Clause 8.2.5.12 Metadata Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Metaclass", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "Metaclass =", + " TypePrefix 'metaclass'", + " ClassifierDeclaration TypeBody" + ], + "name": "Metaclass" + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "PrefixMetadataAnnotation : Annotation =", + " '#' ownedRelatedElement += PrefixMetadataFeature" + ], + "name": "PrefixMetadataAnnotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "PrefixMetadataMember : OwningMembership =", + " '#' ownedRelatedElement += PrefixMetadataFeature" + ], + "name": "PrefixMetadataMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataFeature :", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "PrefixMetadataFeature : MetadataFeature :", + " ownedRelationship += OwnedFeatureTyping" + ], + "name": "PrefixMetadataFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataFeature", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataFeature =", + " ( ownedRelationship += PrefixMetadataMember )*", + " ( '@' | 'metadata' )", + " MetadataFeatureDeclaration", + " ( 'about' ownedRelationship += Annotation", + " ( ',' ownedRelationship += Annotation )*", + " )?", + " MetadataBody" + ], + "name": "MetadataFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataFeature", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataFeatureDeclaration : MetadataFeature =", + " ( Identification ( ':' | 'typed' 'by' ) )?", + " ownedRelationship += OwnedFeatureTyping" + ], + "name": "MetadataFeatureDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataBody : Feature =", + " ';' | '{' ( ownedRelationship += MetadataBodyElement )* '}'" + ], + "name": "MetadataBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataBodyElement : Membership =", + " NonFeatureMember", + " | MetadataBodyFeatureMember", + " | AliasMember", + " | Import" + ], + "name": "MetadataBodyElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataBodyFeatureMember : FeatureMembership =", + " ownedMemberFeature = MetadataBodyFeature" + ], + "name": "MetadataBodyFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.5.12", + "is_partial": false, + "lines": [ + "MetadataBodyFeature : Feature =", + " 'feature'? ( ':>>' | 'redefines')? ownedRelationship += OwnedRedefinition", + " FeatureSpecializationPart? ValuePart?", + " MetadataBody" + ], + "name": "MetadataBodyFeature" + }, + { + "@type": "Heading", + "clause_id": "8.2.5.13", + "lines": [ + "Clause 8.2.5.13 Packages Concrete Syntax" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.5.13", + "is_partial": false, + "lines": [ + "Package =", + " ( ownedRelationship += PrefixMetadataMember )*", + " PackageDeclaration PackageBody" + ], + "name": "Package" + }, + { + "@type": "Production", + "abstract_syntax_type": "LibraryPackage", + "clause_id": "8.2.5.13", + "is_partial": false, + "lines": [ + "LibraryPackage =", + " ( isStandard ?= 'standard' ) 'library'", + " ( ownedRelationship += PrefixMetadataMember )*", + " PackageDeclaration PackageBody" + ], + "name": "LibraryPackage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.5.13", + "is_partial": false, + "lines": [ + "PackageDeclaration : Package =", + " 'package' Identification" + ], + "name": "PackageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.5.13", + "is_partial": false, + "lines": [ + "PackageBody : Package =", + " ';'", + " | '{' ( NamespaceBodyElement", + " | ownedRelationship += ElementFilterMember", + " )*", + " '}'" + ], + "name": "PackageBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "ElementFilterMembership", + "clause_id": "8.2.5.13", + "is_partial": false, + "lines": [ + "ElementFilterMember : ElementFilterMembership =", + " MemberPrefix", + " 'filter' condition = OwnedExpression ';'" + ], + "name": "ElementFilterMember" + }, + { + "@type": "Comment", + "clause_id": "", + "lines": [ + "// End of BNF\n" + ] + } +] \ No newline at end of file diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-marked_up.kebnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-marked_up.kebnf new file mode 100644 index 000000000..bc5ef2efd --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf-marked_up.kebnf @@ -0,0 +1,1477 @@ +// Source document: tests/KerML_and_SysML_spec_sources/KerML-spec.html +// Generated by bnf_grammar_processor at: 2025-12-04T19:31:35Z + + +// Part 1 - Kernel Modeling Language (KerML) + +// Clause 8.2 Concrete Syntax + +// Clause 8.2.1 Concrete Syntax Overview + +// Clause 8.2.2 Lexical Structure + +// Clause 8.2.2.1 Line Terminators and White Space + +LINE_TERMINATOR = + implementation defined character sequence + +LINE_TEXT = + character sequence excluding LINE_TERMINATORs + +WHITE_SPACE = + space | tab | form_feed | LINE_TERMINATOR + +// Notes: +//
          +//
        1. Notation text is divided up into lines separated by line terminators. A line terminator may be a single character (such as a line feed) or a sequence of characters (such as a carriage return/line feed combination). This specification does not require any specific encoding for a line terminator, but any encoding used must be consistent throughout any specific input text.
        2. +//
        3. Any characters in text line that are not a part of the line terminator are referred to as line text.
        4. +//
        5. A white space character is a space, tab, form feed or line terminator. Any contiguous sequence of white space characters can be used to separate tokens that would otherwise be considered to be part of a single token. It is otherwise ignored, with the single exception that a line terminator is used to mark the end of a single-line note (see 8.2.2.2).
        + +// Clause 8.2.2.2 Notes and Comments + +SINGLE_LINE_NOTE = + '//' LINE_TEXT + +MULTILINE_NOTE = + '//*' COMMENT_TEXT '*/' + +REGULAR_COMMENT = + '/*' COMMENT_TEXT '*/' + +COMMENT_TEXT = + ( COMMENT_LINE_TEXT | LINE_TERMINATOR )* + +COMMENT_LINE_TEXT = + LINE_TEXT excluding the sequence '*/' + +// Clause 8.2.2.3 Names + +NAME = + BASIC_NAME | UNRESTRICTED_NAME + +BASIC_NAME = + BASIC_INITIAL_CHARACTER BASIC_NAME_CHARACTER* + +UNRESTRICTED_NAME = + single_quote ( NAME_CHARACTER | ESCAPE_SEQUENCE )* single_quote + +// (See Note 1) + +BASIC_INITIAL_CHARACTER = + ALPHABETIC_CHARACTER | '_' + +BASIC_NAME_CHARACTER = + BASIC_INITIAL_CHARACTER | DECIMAL_DIGIT + +ALPHABETIC_CHARACTER = + any character 'a' through 'z' or 'A' through 'Z' + +DECIMAL_DIGIT = + any character '0' through '9' + +NAME_CHARACTER = + any printable character other than backslash or single_quote + +ESCAPE_SEQUENCE = + +// (See Note 2) + +// Notes: +//
          +//
        1. The single_quote character is '. The name represented by an UNRESTRICTED_NAME shall consist of the characters within the single quotes, with escape characters resolved as described below. The surrounding single quote characters are not part of the represented name.
        2. +//
        3. An ESCAPE_SEQUENCE is a sequence of two text characters starting with a backslash that actually denotes only a single character, except for the newline escape sequence, which represents however many characters is necessary to represent an end of line in a specific implementation (see also 8.2.2.1). Table 4 shows the meaning of the allowed escape sequences. The ESCAPE_SEQUENCES in an UNRESTRICTED_NAME shall be replaced by the characters specified as their meanings in the actual represented name.
        + +// Clause 8.2.2.4 Numeric Values + +DECIMAL_VALUE = + DECIMAL_DIGIT+ + +EXPONENTIAL_VALUE = + DECIMAL_VALUE ('e' | 'E') ('+' | '-')? DECIMAL_VALUE + +// Notes: +//
          +//
        1. A DECIMAL_VALUE may specify a natural literal, or it may be part of the specification of a real literal (see 8.2.5.8.4). Note that a DECIMAL_VALUE does not include a sign, because negating a literal is an operator in the KerML Expression syntax.
        2. +//
        3. An EXPONENTIAL_VALUE may be used in the specification of a real literal (see 8.2.5.8.4). Note that a decimal point and fractional part are not included in the lexical structure of an exponential value. They are handled as part of the syntax of real literals.
        + +// Clause 8.2.2.5 String Value + +STRING_VALUE = + '"' ( STRING_CHARACTER | ESCAPE_SEQUENCE )* '"' + +STRING_CHARACTER = + any printable character other than backslash or '"' + +// Notes: +//
          +//
        1. ESCAPE_SEQUENCE is specified in 8.2.2.3.
        + +// Clause 8.2.2.6 Reserved Words + +RESERVED_KEYWORD = + 'about' | 'abstract' | 'alias' | 'all' | 'and' | 'as' | 'assoc' | 'behavior' | 'binding' | 'bool' | 'by' | 'chains' + | 'class' | 'classifier' | 'comment' | 'composite' | 'conjugate' | 'conjugates' | 'conjugation' | 'connector' + | 'const' | 'crosses' | 'datatype' | 'default' | 'dependency' | 'derived' | 'differences' | 'disjoining' | 'disjoint' + | 'doc' | 'else' | 'end' | 'expr' | 'false' | 'feature' | 'featured' | 'featuring' | 'filter' | 'first' | 'flow' + | 'for' | 'from' | 'function' | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'inout' | 'interaction' + | 'intersects' | 'inv' | 'inverse' | 'inverting' | 'istype' | 'language' | 'library' | 'locale' | 'member' | 'meta' + | 'metaclass' | 'metadata' | 'multiplicity' | 'namespace' | 'nonunique' | 'not' | 'null' | 'of' | 'or' | 'ordered' + | 'out' | 'package' | 'portion' | 'predicate' | 'private' | 'protected' | 'public' | 'redefines' | 'redefinition' + | 'references' | 'rep' | 'return' | 'specialization' | 'specializes' | 'standard' | 'step' | 'struct' + | 'subclassifier' | 'subset' | 'subsets' | 'subtype' | 'succession' | 'then' | 'to' | 'true' | 'type' | 'typed' + | 'typing' | 'unions' | 'var' | 'xor' + +// Clause 8.2.2.7 Symbols + +RESERVED_SYMBOL = + '~' | '}' | '|' | '{' | '^' | ']' | '[' | '@' | '??' | '?' | '>=' | '>' | '=>' | '===' | '==' | '=' | '<=' | '<' + | ';' | ':>>' | ':>' | ':=' | '::>' | '::' | ':' | '/' | '.?' | '..' | '.' | '->' | '-' | ',' | '+' | '**' | '*' | ')' + | '(' | '&' | '%' | '$' | '#' | '!==' | '!=' + +TYPED_BY = ':' | 'typed' 'by' + +SPECIALIZES = ':>' | 'specializes' + +SUBSETS = ':>' | 'subsets' + +REFERENCES = '::>' | 'references' + +CROSSES = '=>' | 'crosses' + +REDEFINES = ':>>' | 'redefines' + +CONJUGATES = '~' | 'conjugates' + +// Clause 8.2.3 Root Concrete Syntax + +// Clause 8.2.3.1 Elements and Relationships Concrete Syntax + +Identification : Element = + ( '<' declaredShortName = NAME '>' )? + ( declaredName = NAME )? + +RelationshipBody : Relationship = + ';' | '{' RelationshipOwnedElement* '}' + +RelationshipOwnedElement : Relationship = + ownedRelatedElement += OwnedRelatedElement + | ownedRelationship += OwnedAnnotation + +OwnedRelatedElement : Element = + NonFeatureElement | FeatureElement + +// Clause 8.2.3.2 Dependencies Concrete Syntax + +Dependency = + ( ownedRelationship += PrefixMetadataAnnotation )* + 'dependency' ( Identification? 'from' )? + client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to' + supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )* + RelationshipBody + +// Notes: +//
          +//
        1. PrefixMetadataAnnotation is defined in the Kernel layer (see 8.2.5.12).
        + +// Clause 8.2.3.3 Annotations Concrete Syntax + +// Clause 8.2.3.3.1 Annotations + +Annotation = + annotatedElement = [QualifiedName] + +OwnedAnnotation : Annotation = + ownedRelatedElement += AnnotatingElement + +AnnotatingElement = + Comment + | Documentation + | TextualRepresentation + | MetadataFeature + +// Notes: +//
          +//
        1. MetadataFeature is defined in the Kernel layer (see 8.2.5.12).
        + +// Clause 8.2.3.3.2 Comments and Documentation + +Comment = + ( 'comment' Identification + ( 'about' ownedRelationsip += Annotation + ( ',' ownedRelationship += Annotation )* + )? + )? + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +Documentation = + 'doc' Identification + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +// Notes: +//
          +//
        1. The text of a lexical REGULAR_COMMENT or PREFIX_COMMENT shall be processed as follows before it is included as the body of a Comment or Documentation: +//
            +//
          1. Remove the initial /* and final */ characters.
          2. +//
          3. Remove any white space immediately after the initial /*, up to and including the first line terminator (if any).
          4. +//
          5. On each subsequent line of the text: +//
              +//
            1. Strip initial white space other than line terminators.
            2. +//
            3. Then, if the first remaining character is "*", remove it.
            4. +//
            5. Then, if the first remaining character is now a space, remove it.
        2. +//
        3. The body text of a Comment can include markup information (such as HTML), and a conforming tool may display such text as rendered according to the markup. However, marked up "rich text" for a Comment written using the KerML textual concrete syntax shall be stored in the Comment body in plain text including all mark up text, with all line terminators and white space included as entered, other than what is removed according to the rules above.
        + +// Clause 8.2.3.3.3 Textual Representation + +TextualRepresentation = + ( 'rep' Identification )? + 'language' language = STRING_VALUE + body = REGULAR_COMMENT + +// Notes: +//
          +//
        1. The lexical text of a REGULAR_COMMENT shall be processed as specified in 8.2.3.3.2 for Comments before being included as the body of a TextualRepresentation.
        2. +//
        3. See also 8.3.2.3.6 on the standard language names recognized for a TextualRepresentation.
        + +// Clause 8.2.3.4 Namespaces Concrete Syntax + +// Clause 8.2.3.4.1 Namespaces + +RootNamespace : Namespace = + NamespaceBodyElement* + +// (See Note 1) + +Namespace = + ( ownedRelationship += PrefixMetadataMember )* + NamespaceDeclaration NamespaceBody + +// (See Note 2) + +NamespaceDeclaration : Namespace = + 'namespace' Identification + +NamespaceBody : Namespace = + ';' | '{' NamespaceBodyElement* '}' + +NamespaceBodyElement : Namespace = + ownedRelationship += NamespaceMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +MemberPrefix : Membership = + ( visibility = VisibilityIndicator )? + +VisibilityIndicator : VisibilityKind = + 'public' | 'private' | 'protected' + +NamespaceMember : OwningMembership = + NonFeatureMember + | NamespaceFeatureMember + +NonFeatureMember : OwningMembership = + MemberPrefix + ownedRelatedElement += MemberElement + +NamespaceFeatureMember : OwningMembership = + MemberPrefix + ownedRelatedElement += FeatureElement + +AliasMember : Membership = + MemberPrefix + 'alias' ( '<' memberShortName = NAME '>' )? + ( memberName = NAME )? + 'for' memberElement = [QualifiedName] + RelationshipBody + +QualifiedName = + ( '$' '::' )? ( NAME '::' )* NAME + +// (See Note 3) + +// Notes: +//
          +//
        1. A root Namespace is a Namespace that has no owningNamespace (see 8.3.2.4). Every Element other than a root Namespace must be contained, directly or indirectly, within some root Namespace. Therefore, every valid KerML concrete syntax text can be parsed starting from the RootNamespace production.
        2. +//
        3. PrefixMetadataMember is defined in the Kernel layer (see 8.2.5.12).
        4. +//
        5. A qualified name is notated as a sequence of segment names separated by "::" punctuation, optionally with the global scope qualifier "$" as an initial segment. An unqualified name can be considered the degenerate case of a qualified name with a single segment name. A qualified name is used in the KerML textual concrete syntax to identify an Element that is being referred to in the representation of another Element. A qualified name used in this way does not appear in the corresponding abstract syntax—instead, the abstract syntax representation contains an actual reference to the identified Element. Name resolution is the process of determining the Element that is identified by a qualified name. The segment names of the qualified name other than the last identify a sequence of nested Namespaces that provide the context for resolving the final segment name (see 8.2.3.5). The notation [QualifiedName] is used in concrete syntax grammar productions to indicate the result of resolving text parsed as a QualifiedName (see also 8.2.1).
        + +// Clause 8.2.3.4.2 Imports + +Import = + visibility = VisibilityIndicator + 'import' ( isImportAll ?= 'all' )? + ImportDeclaration RelationshipBody + +ImportDeclaration : Import + MembershipImport | NamespaceImport + +MembershipImport = + importedMembership = [QualifiedName] + ( '::' isRecursive ?= '**' )? + +// (See Note 1) + +NamespaceImport = + importedNamespace = [QualifiedName] '::' '*' + ( '::' isRecursive ?= '**' )? + | importedNamespace = FilterPackage + { ownedRelatedElement += importedNamespace } + +FilterPackage : Package = + ownedRelationship += ImportDeclaration + ( ownedRelationship += FilterPackageMember )+ + +FilterPackageMember : ElementFilterMembership = + '[' ownedRelatedElement += OwnedExpression ']' + +// Notes: +//
          +//
        1. The importedMembership of a MembershipImport is the single case in which the Element required from the resolution [QualifiedName] is the actual Membership identified by the QualifedName, not the memberElement of that Membership (see 8.2.3.5).
        + +// Clause 8.2.3.4.3 Namespace Elements + +MemberElement : Element = + AnnotatingElement | NonFeatureElement + +NonFeatureElement : Element = + Dependency + | Namespace + | Type + | Classifier + | DataType + | Class + | Structure + | Metaclass + | Association + | AssociationStructure + | Interaction + | Behavior + | Function + | Predicate + | Multiplicity + | Package + | LibraryPackage + | Specialization + | Conjugation + | Subclassification + | Disjoining + | FeatureInverting + | FeatureTyping + | Subsetting + | Redefinition + | TypeFeaturing + +FeatureElement : Feature = + Feature + | Step + | Expression + | BooleanExpression + | Invariant + | Connector + | BindingConnector + | Succession + | Flow + | SuccessionFlow + +// Clause 8.2.3.5 Name Resolution + +// Clause 8.2.3.5.1 Name Resolution Overview + +// Clause 8.2.3.5.2 Local and Global Namespaces + +// Clause 8.2.3.5.3 Local and Visible Resolution + +// Clause 8.2.3.5.4 Full Resolution + +// Clause 8.2.4 Core Concrete Syntax + +// Clause 8.2.4.1 Types Concrete Syntax + +// Clause 8.2.4.1.1 Types + +Type = + TypePrefix 'type' + TypeDeclaration TypeBody + +TypePrefix : Type = + ( isAbstract ?= 'abstract' )? + ( ownedRelationship += PrefixMetadataMember )* + +TypeDeclaration : Type = + ( isSufficient ?= 'all' )? Identification + ( ownedRelationship += OwnedMultiplicity )? + ( SpecializationPart | ConjugationPart )+ + TypeRelationshipPart* + +SpecializationPart : Type = + SPECIALIZES ownedRelationship += OwnedSpecialization + ( ',' ownedRelationship += OwnedSpecialization )* + +ConjugationPart : Type = + CONJUGATES ownedRelationship += OwnedConjugation + +TypeRelationshipPart : Type = + DisjoiningPart + | UnioningPart + | IntersectingPart + | DifferencingPart + +DisjoiningPart : Type = + 'disjoint' 'from' ownedRelationship += OwnedDisjoining + ( ',' ownedRelationship += OwnedDisjoining )* + +UnioningPart : Type = + 'unions' ownedRelationship += Unioning + ( ',' ownedRelationship += Unioning )* + +IntersectingPart : Type = + 'intersects' ownedRelationship += Intersecting + ( ',' ownedRelationship += Intersecting )* + +DifferencingPart : Type = + 'differences' ownedRelationship += Differencing + ( ',' ownedRelationship += Differencing )* + +TypeBody : Type = + ';' | '{' TypeBodyElement* '}' + +TypeBodyElement : Type = + ownedRelationship += NonFeatureMember + | ownedRelationship += FeatureMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +// Clause 8.2.4.1.2 Specialization + +Specialization = + ( 'specialization' Identification )? + 'subtype' SpecificType + SPECIALIZES GeneralType + RelationshipBody + +OwnedSpecialization : Specialization = + GeneralType + +SpecificType : Specialization : + specific = [QualifiedName] + | specific += OwnedFeatureChain + { ownedRelatedElement += specific } + +GeneralType : Specialization = + general = [QualifiedName] + | general += OwnedFeatureChain + { ownedRelatedElement += general } + +// Clause 8.2.4.1.3 Conjugation + +Conjugation = + ( 'conjugation' Identification )? + 'conjugate' + ( conjugatedType = [QualifiedName] + | conjugatedType = FeatureChain + { ownedRelatedElement += conjugatedType } + ) + CONJUGATES + ( originalType = [QualifiedName] + | originalType = FeatureChain + { ownedRelatedElement += originalType } + ) + RelationshipBody + +OwnedConjugation : Conjugation = + originalType = [QualifiedName] + | originalType = FeatureChain + { ownedRelatedElement += originalType } + +// Clause 8.2.4.1.4 Disjoining + +Disjoining = + ( 'disjoining' Identification )? + 'disjoint' + ( typeDisjoined = [QualifiedName] + | typeDisjoined = FeatureChain + { ownedRelatedElement += typeDisjoined } + ) + 'from' + ( disjoiningType = [QualifiedName] + | disjoiningType = FeatureChain + { ownedRelatedElement += disjoiningType } + ) + RelationshipBody + +OwnedDisjoining : Disjoining = + disjoiningType = [QualifiedName] + | disjoiningType = FeatureChain + { ownedRelatedElement += disjoiningType } + +// Clause 8.2.4.1.5 Unioning, Intersecting and Differencing + +Unioning = + unioningType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +Intersecting = + intersectingType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +Differencing = + differencingType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +// Clause 8.2.4.1.6 Feature Membership + +FeatureMember : OwningMembership = + TypeFeatureMember + | OwnedFeatureMember + +TypeFeatureMember : OwningMembership = + MemberPrefix 'member' ownedRelatedElement += FeatureElement + +OwnedFeatureMember : FeatureMembership = + MemberPrefix ownedRelatedElement += FeatureElement + +// Clause 8.2.4.2 Classifiers Concrete Syntax + +// Clause 8.2.4.2.1 Classifiers + +Classifier = + TypePrefix 'classifier' + ClassifierDeclaration TypeBody + +ClassifierDeclaration : Classifier = + ( isSufficient ?= 'all' )? Identification + ( ownedRelationship += OwnedMultiplicity )? + ( SuperclassingPart | ConjugationPart )? + TypeRelationshipPart* + +SuperclassingPart : Classifier = + SPECIALIZES ownedRelationship += OwnedSubclassification + ( ',' ownedRelationship += OwnedSubclassification )* + +// Clause 8.2.4.2.2 Subclassification + +Subclassification = + ( 'specialization' Identification )? + 'subclassifier' subclassifier = [QualifiedName] + SPECIALIZES superclassifier = [QualifiedName] + RelationshipBody + +OwnedSubclassification : Subclassification = + superclassifier = [QualifiedName] + +// Clause 8.2.4.3 Features Concrete Syntax + +// Clause 8.2.4.3.1 Features + +Feature = + ( FeaturePrefix + ( 'feature' | ownedRelationship += PrefixMetadataMember ) + FeatureDeclaration? + ) + | ( EndFeaturePrefix | BasicFeaturePrefix ) + FeatureDeclaration + ) + ValuePart? TypeBody + +// (See Note 1) + +EndFeaturePrefix : Feature = + ( isConstant ?= 'const' { isVariable = true } )? + isEnd ?= 'end' + +BasicFeaturePrefix : Feature : + ( direction = FeatureDirection )? + ( isDerived ?= 'derived' )? + ( isAbstract ?= 'abstract' )? + ( isComposite ?= 'composite' | isPortion ?= 'portion' )? + ( isVariable ?= 'var' | isConstant ?= 'const' { isVariable = true } )? + +FeaturePrefix : + ( EndFeaturePrefix ( ownedRelationship += OwnedCrossFeatureMember )? + | BasicFeaturePrefix + ) + ( ownedRelationship += PrefixMetadataMember )* + +// (See Note 1) + +OwnedCrossFeatureMember : OwningMembership = + ownedRelatedElement += OwnedCrossFeature + +OwnedCrossFeature : Feature = + BasicFeaturePrefix FeatureDeclaration + +FeatureDirection : FeatureDirectionKind = + 'in' | 'out' | 'inout' + +FeatureDeclaration : Feature = + ( isSufficient ?= 'all' )? + ( FeatureIdentification + ( FeatureSpecializationPart | ConjugationPart )? + | FeatureSpecializationPart + | ConjugationPart + ) + FeatureRelationshipPart* + +FeatureIdentification : Feature = + '<' declaredShortName = NAME '>' ( declaredName = NAME )? + | declaredName = NAME + +FeatureRelationshipPart : Feature = + TypeRelationshipPart + | ChainingPart + | InvertingPart + | TypeFeaturingPart + +ChainingPart : Feature = + 'chains' + ( ownedRelationship += OwnedFeatureChaining + | FeatureChain ) + +InvertingPart : Feature = + 'inverse' 'of' ownedRelationship += OwnedFeatureInverting + +TypeFeaturingPart : Feature = + 'featured' 'by' ownedRelatioship += OwnedTypeFeaturing + ( ',' ownedTypeFeaturing += OwnedTypeFeaturing )* + +FeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? FeatureSpecialization* + | MultiplicityPart FeatureSpecialization* + +MultiplicityPart : Feature = + ownedRelationship += OwnedMultiplicity + | ( ownedRelationship += OwnedMultiplicity )? + ( isOrdered ?= 'ordered' ( {isUnique = false} 'nonunique' )? + | {isUnique = false} 'nonunique' ( isOrdered ?= 'ordered' )? ) + +FeatureSpecialization : Feature = + Typings | Subsettings | References | Crosses | Redefinitions + +Typings : Feature = + TypedBy ( ',' ownedRelationship += OwnedFeatureTyping )* + +TypedBy : Feature = + TYPED_BY ownedRelationship += OwnedFeatureTyping + +Subsettings : Feature = + Subsets ( ',' ownedRelationship += OwnedSubsetting )* + +Subsets : Feature = + SUBSETS ownedRelationship += OwnedSubsetting + +References : Feature = + REFERENCES ownedRelationship += OwnedReferenceSubsetting + +Crosses : Feature = + CROSSES ownedRelationship += OwnedCrossSubsetting + +Redefinitions : Feature = + Redefines ( ',' ownedRelationship += OwnedRedefinition )* + +Redefines : Feature = + REDEFINES ownedRelationship += OwnedRedefinition + +// Notes: +//
          +//
        1. PrefixMetadataMember is defined in the Kernel layer (see 8.3.4.12).
        + +// Clause 8.2.4.3.2 Feature Typing + +FeatureTyping = + ( 'specialization' Identification )? + 'typing' typedFeature = [QualifiedName] + TYPED_BY GeneralType + RelationshipBody + +OwnedFeatureTyping : FeatureTyping = + GeneralType + +// Clause 8.2.4.3.3 Subsetting + +Subsetting = + ( 'specialization' Identification )? + 'subset' SpecificType + SUBSETS GeneralType + RelationshipBody + +OwnedSubsetting : Subsetting = + GeneralType + +OwnedReferenceSubsetting : ReferenceSubsetting = + GeneralType + +OwnedCrossSubsetting : CrossSubsetting = + GeneralType + +// Clause 8.2.4.3.4 Redefinition + +Redefinition = + ( 'specialization' Identification )? + 'redefinition' SpecificType + REDEFINES GeneralType + RelationshipBody + +OwnedRedefinition : Redefinition = + GeneralType + +// Clause 8.2.4.3.5 Feature Chaining + +OwnedFeatureChain : Feature = + FeatureChain + +FeatureChain : Feature = + ownedRelationship += OwnedFeatureChaining + ( '.' ownedRelationship += OwnedFeatureChaining )+ + +OwnedFeatureChaining : FeatureChaining = + chainingFeature = [QualifiedName] + +// Clause 8.2.4.3.6 Feature Inverting + +FeatureInverting = + ( 'inverting' Identification? )? + 'inverse' + ( featureInverted = [QualifiedName] + | featureInverted = OwnedFeatureChain + { ownedRelatedElement += featureInverted } + ) + 'of' + ( invertingFeature = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + { ownedRelatedElement += invertingFeature } + ) + RelationshipBody + +OwnedFeatureInverting : FeatureInverting = + invertingFeature = [QualifiedName] + | invertingFeature = OwnedFeatureChain + { ownedRelatedElement += invertingFeature } + +// Clause 8.2.4.3.7 Type Featuring + +TypeFeaturing = + 'featuring' ( Identification 'of' )? + featureOfType = [QualifiedName] + 'by' featuringType = [QualifiedName] + RelationshipBody + +OwnedTypeFeaturing : TypeFeaturing = + featuringType = [QualifiedName] + +// Clause 8.2.5 Kernel Concrete Syntax + +// Clause 8.2.5.1 Data Types Concrete Syntax + +DataType = + TypePrefix 'datatype' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.2 Classes Concrete Syntax + +Class = + TypePrefix 'class' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.3 Structures Concrete Syntax + +Structure = + TypePrefix 'struct' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.4 Associations Concrete Syntax + +Association = + TypePrefix 'assoc' + ClassifierDeclaration TypeBody + +AssociationStructure = + TypePrefix 'assoc' 'struct' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.5 Connectors Concrete Syntax + +// Clause 8.2.5.5.1 Connectors + +Connector = + FeaturePrefix 'connector' + ( FeatureDeclaration? ValuePart? + | ConnectorDeclaration + ) + TypeBody + +ConnectorDeclaration : Connector = + BinaryConnectorDeclaration | NaryConnectorDeclaration + +BinaryConnectorDeclaration : Connector = + ( FeatureDeclaration? 'from' | isSufficient ?= 'all' 'from'? )? + ownedRelationship += ConnectorEndMember 'to' + ownedRelationship += ConnectorEndMember + +NaryConnectorDeclaration : Connector = + FeatureDeclaration? + '(' ownedRelationship += ConnectorEndMember ',' + ownedRelationship += ConnectorEndMember + ( ',' ownedRelationship += ConnectorEndMember )* + ')' + +ConnectorEndMember : EndFeatureMembership = + ownedRelatedElement += ConnectorEnd + +ConnectorEnd : Feature = + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +OwnedCrossMultiplicityMember : OwningMembership = + ownedRelatedElement += OwnedCrossMultiplicity + +OwnedCrossMultiplicity : Feature = + ownedRelationship += OwnedMultiplicity + +// Clause 8.2.5.5.2 Binding Connectors + +BindingConnector = + FeaturePrefix 'binding' + BindingConnectorDeclaration TypeBody + +BindingConnectorDeclaration : BindingConnector = + FeatureDeclaration + ( 'of' ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember )? + | ( isSufficient ?= 'all' )? + ( 'of'? ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember )? + +// Clause 8.2.5.5.3 Successions + +Succession = + FeaturePrefix 'succession' + SuccessionDeclaration TypeBody + +SuccessionDeclaration : Succession = + FeatureDeclaration + ( 'first' ownedRelationship += ConnectorEndMember + 'then' ownedRelationship += ConnectorEndMember )? + | ( s.isSufficient ?= 'all' )? + ( 'first'? ownedRelationship += ConnectorEndMember + 'then' ownedRelationship += ConnectorEndMember )? + +// Clause 8.2.5.6 Behaviors Concrete Syntax + +// Clause 8.2.5.6.1 Behaviors + +Behavior = + TypePrefix 'behavior' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.6.2 Steps + +Step = + FeaturePrefix + 'step' FeatureDeclaration ValuePart? + TypeBody + +// Clause 8.2.5.7 Functions Concrete Syntax + +// Clause 8.2.5.7.1 Functions + +Function = + TypePrefix 'function' + ClassifierDeclaration FunctionBody + +FunctionBody : Type = + ';' | '{' FunctionBodyPart '}' + +FunctionBodyPart : Type = + ( TypeBodyElement + | ownedRelationship += ReturnFeatureMember + )* + ( ownedRelationship += ResultExpressionMember )? + +ReturnFeatureMember : ReturnParameterMembership = + MemberPrefix 'return' + ownedRelatedElement += FeatureElement + +ResultExpressionMember : ResultExpressionMembership = + MemberPrefix + ownedRelatedElement += OwnedExpression + +// Clause 8.2.5.7.2 Expressions + +Expression = + FeaturePrefix + 'expr' FeatureDeclaration ValuePart? + FunctionBody + +// Clause 8.2.5.7.3 Predicates + +Predicate = + TypePrefix 'predicate' + ClassifierDeclaration FunctionBody + +// Clause 8.2.5.7.4 Boolean Expressions and Invariants + +BooleanExpression = + FeaturePrefix + 'bool' FeatureDeclaration ValuePart? + FunctionBody + +Invariant = + FeaturePrefix + 'inv' ( 'true' | isNegated ?= 'false' )? + FeatureDeclaration ValuePart? + FunctionBody + +// Clause 8.2.5.8 Expressions Concrete Syntax + +// Clause 8.2.5.8.1 Operator Expressions + +OwnedExpressionReferenceMember : FeatureMembership = + ownedRelationship += OwnedExpressionReference + +OwnedExpressionReference : FeatureReferenceExpression = + ownedRelationship += OwnedExpressionMember + +OwnedExpressionMember : FeatureMembership = + ownedFeatureMember = OwnedExpression + +OwnedExpression : Expression = + ConditionalExpression + | ConditionalBinaryOperatorExpression + | BinaryOperatorExpression + | UnaryOperatorExpression + | ClassificationExpression + | MetaclassificationExpression + | ExtentExpression + | PrimaryExpression + +ConditionalExpression : OperatorExpression = + operator = 'if' + ownedRelationship += ArgumentMember '?' + ownedRelationship += ArgumentExpressionMember 'else' + ownedRelationship += ArgumentExpressionMember + ownedRelationship += EmptyResultMember + +ConditionalBinaryOperatorExpression : OperatorExpression = + ownedRelationship += ArgumentMember + operator = ConditionalBinaryOperator + ownedRelationship += ArgumentExpressionMember + ownedRelationship += EmptyResultMember + +ConditionalBinaryOperator = + '??' | 'or' | 'and' | 'implies' + +BinaryOperatorExpression : OperatorExpression = + ownedRelationship += ArgumentMember + operator = BinaryOperator + ownedRelationship += ArgumentMember + ownedRelationship += EmptyResultMember + +BinaryOperator = + '|' | '&' | 'xor' | '..' + | '==' | '!=' | '===' | '!==' + | '<' | '>' | '<=' | '>=' + | '+' | '-' | '*' | '/' + | '%' | '^' | '**' + +UnaryOperatorExpression : OperatorExpression = + operator = UnaryOperator + ownedRelationship += ArgumentMember + ownedRelationship += EmptyResultMember + +UnaryOperator = + '+' | '-' | '~' | 'not' + +ClassificationExpression : OperatorExpression = + ( ownedRelationship += ArgumentMember )? + ( operator = ClassificationTestOperator + ownedRelationship += TypeReferenceMember + | operator = CastOperator + ownedRelationship += TypeResultMember + ) + ownedRelationship += EmptyResultMember + +ClassificationTestOperator = + 'istype' | 'hastype' | '@' + +CastOperator = + 'as' + +MetaclassificationExpression : OperatorExpression = + ownedRelationship += MetadataArgumentMember + ( operator = MetaClassificationTestOperator + ownedRelationship += TypeReferenceMember + | operator = MetaCastOperator + ownedRelationship += TypeResultMember + ) + ownedRelationship += EmptyResultMember + +ArgumentMember : ParameterMembership = + ownedMemberParameter = Argument + +Argument : Feature = + ownedRelationship += ArgumentValue + +ArgumentValue : FeatureValue = + value = OwnedExpression + +ArgumentExpressionMember : FeatureMembership = + ownedRelatedElement += ArgumentExpression + +ArgumentExpression : Feature = + ownedRelationship += ArgumentExpressionValue + +ArgumentExpressionValue : FeatureValue = + value = OwnedExpressionReference + +MetadataArgumentMember : ParameterMembership = + ownedRelatedElement += MetadataArgument + +MetadataArgument : Feature = + ownedRelationship += MetadataValue + +MetadataValue : FeatureValue = + value = MetadataReference + +MetadataReference : MetadataAccessExpression = + ownedRelationship += ElementReferenceMember + +MetaclassificationTestOperator = + '@@' + +MetaCastOperator = + 'meta' + +ExtentExpression : OperatorExpression = + operator = 'all' + ownedRelationship += TypeReferenceMember + +TypeReferenceMember : ParameterMembership = + ownedMemberFeature = TypeReference + +TypeResultMember : ResultParameterMembership = + ownedMemberFeature = TypeReference + +TypeReference : Feature = + ownedRelationship += ReferenceTyping + +ReferenceTyping : FeatureTyping = + type = [QualifiedName] + +EmptyResultMember : ReturnParameterMembership = + ownedRelatedElement += EmptyFeature + +EmptyFeature : Feature = + { } + +// Notes: +//
          +//
        1. OperatorExpressions provide a shorthand notation for InvocationExpressions that invoke a library Function represented as an operator symbol. Table 5 shows the mapping from operator symbols to the Functions they represent from the Kernel Model Library (see Clause 9). An OperatorExpression contains subexpressions called its operands that generally correspond to the argument Expressions of the OperatorExpression, except in the case of operators representing control Functions, in which case the evaluation of certain operands is as determined by the Function (see 8.4.4.9 for details).
        2. +//
        3. Though not directly expressed in the syntactic productions given above, in any OperatorExpression containing nested OperatorExpressions, the nested OperatorExpressions shall be implicitly grouped according to the precedence of the operators involved, as given in Table 6. OperatorExpressions with higher precedence operators shall be grouped more tightly than those with lower precedence operators. Further, all BinaryOperators other than exponentiation are left-associative (i.e, they group to the left), while the exponentiation operators (^ and **) are right-associative (i.e., they group to the right).
        4. +//
        5. The unary operator symbol ~ maps to the library Function DataFunctions::'~', as shown in Table 5. This abstract Function may be given a concrete definition in a domain-specific Function library, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        + +// Clause 8.2.5.8.2 Primary Expressions + +PrimaryExpression : Expression = + FeatureChainExpression + | NonFeatureChainPrimaryExpression + +PrimaryArgumentValue : FeatureValue = + value = PrimaryExpression + +PrimaryArgument : Feature = + ownedRelationship += PrimaryArgumentValue + +PrimaryArgumentMember : ParameterMembership = + ownedMemberParameter = PrimaryArgument + +NonFeatureChainPrimaryExpression : Expression = + BracketExpression + | IndexExpression + | SequenceExpression + | SelectExpression + | CollectExpression + | FunctionOperationExpression + | BaseExpression + +NonFeatureChainPrimaryArgumentValue : FeatureValue = + value = NonFeatureChainPrimaryExpression + +NonFeatureChainPrimaryArgument : Feature = + ownedRelationship += NonFeatureChainPrimaryArgumentValue + +NonFeatureChainPrimaryArgumentMember : ParameterMembership = + ownedMemberParameter = PrimaryArgument + +BracketExpression : OperatorExpression = + ownedRelationship += PrimaryArgumentMember + operator = '[' + ownedRelationship += SequenceExpressionListMember ']' + +IndexExpression = + ownedRelationship += PrimaryArgumentMember '#' + '(' ownedRelationship += SequenceExpressionListMember ')' + +SequenceExpression : Expression = + '(' SequenceExpressionList ')' + +SequenceExpressionList : Expression = + OwnedExpression ','? | SequenceOperatorExpression + +SequenceOperatorExpression : OperatorExpression = + ownedRelationship += OwnedExpressionMember + operator = ',' + ownedRelationship += SequenceExpressionListMember + +SequenceExpressionListMember : FeatureMembership = + ownedMemberFeature = SequenceExpressionList + +FeatureChainExpression = + ownedRelationship += NonFeatureChainPrimaryArgumentMember '.' + ownedRelationship += FeatureChainMember + +CollectExpression = + ownedRelationship += PrimaryArgumentMember '.' + ownedRelationship += BodyArgumentMember + +SelectExpression = + ownedRelationship += PrimaryArgumentMember '.?' + ownedRelationship += BodyArgumentMember + +FunctionOperationExpression : InvocationExpression = + ownedRelationship += PrimaryArgumentMember '->' + ownedRelationship += InvocationTypeMember + ( ownedRelationship += BodyArgumentMember + | ownedRelationship += FunctionReferenceArgumentMember + | ArgumentList ) + ownedRelationship += EmptyResultMember + +BodyArgumentMember : ParameterMembership = + ownedMemberParameter = BodyArgument + +BodyArgument : Feature = + ownedRelationship += BodyArgumentValue + +BodyArgumentValue : FeatureValue = + value = BodyExpression + +FunctionReferenceArgumentMember : ParameterMembership = + ownedMemberParameter = FunctionReferenceArgument + +FunctionReferenceArgument : Feature = + ownedRelationship += FunctionReferenceArgumentValue + +FunctionReferenceArgumentValue : FeatureValue = + value = FunctionReferenceExpression + +FunctionReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FunctionReferenceMember + +FunctionReferenceMember : FeatureMembership = + ownedMemberFeature = FunctionReference + +FunctionReference : Expression = + ownedRelationship += ReferenceTyping + +FeatureChainMember : Membership = + FeatureReferenceMember + | OwnedFeatureChainMember + +OwnedFeatureChainMember : OwningMembership = + ownedMemberElement = FeatureChain + +// Notes: +//
          +//
        1. Primary expressions provide additional shorthand notations for certain kinds of InvocationExpressions. For those cases in which the InvocationExpression is an OperatorExpression, its operator shall be resolved to the appropriate library function as given in Table 7. Note also that, for a CollectionExpression or SelectExpression, the abstract syntax constrains the operator to be collect and select, respectively, separately from the . and .? symbols used in their concrete syntax notation (see 8.3.4.8.2 and 8.3.4.8.18).
        2. +//
        3. The grammar allows a bracket syntax [...]that parses to an invocation of the library Function BaseFunctions::'[', as shown in Table 7. This notation is available for use with domain-specific library models that given a concrete definition to the abstract base '[' Function, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        + +// Clause 8.2.5.8.3 Base Expressions + +BaseExpression : Expression = + NullExpression + | LiteralExpression + | FeatureReferenceExpression + | MetadataAccessExpression + | InvocationExpression + | ConstructorExpression + | BodyExpression + +NullExpression : NullExpression = + 'null' | '(' ')' + +FeatureReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FeatureReferenceMember + ownedRelationship += EmptyResultMember + +FeatureReferenceMember : Membership = + memberElement = FeatureReference + +FeatureReference : Feature = + [QualifiedName] + +MetadataAccessExpression = + ownedRelationship += ElementReferenceMember '.' 'metadata' + +ElementReferenceMember : Membership = + memberElement = [QualifiedName] + +InvocationExpression : InvocationExpression = + ownedRelationship += InstatiatedTypeMember + ArgumentList + ownedRelationship += EmptyResultMember + +ConstructorExpression = + 'new' ownedRelationship += InstantiatedTypeMember + ownedRelationship += ConstructorResultMember + +ConstructorResultMember : ReturnParameterMembership = + ownedRelatedElement += ConstructorResult + +ConstructorResult : Feature = + ArgumentList + +InstantiatedTypeMember : Membership = + memberElement = InstantiatedTypeReference + | OwnedFeatureChainMember + +InstantiatedTypeReference : Type = + [QualifiedName] + +ArgumentList : Feature = + '(' ( PositionalArgumentList | NamedArgumentList )? ')' + +PositionalArgumentList : Feature = + e.ownedRelationship += ArgumentMember + ( ',' e.ownedRelationship += ArgumentMember )* + +NamedArgumentList : Feature = + ownedRelationship += NamedArgumentMember + ( ',' ownedRelationship += NamedArgumentMember )* + +NamedArgumentMember : FeatureMembership = + ownedMemberFeature = NamedArgument + +NamedArgument : Feature = + ownedRelationship += ParameterRedefinition '=' + ownedRelationship += ArgumentValue + +ParameterRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + +BodyExpression : FeatureReferenceExpression = + ownedRelationship += ExpressionBodyMember + +ExpressionBodyMember : FeatureMembership = + ownedMemberFeature = ExpressionBody + +ExpressionBody : Expression = + '{' FunctionBodyPart '}' + +// Clause 8.2.5.8.4 Literal Expressions + +LiteralExpression = + LiteralBoolean + | LiteralString + | LiteralInteger + | LiteralReal + | LiteralInfinity + +LiteralBoolean = + value = BooleanValue + +BooleanValue : Boolean = + 'true' | 'false' + +LiteralString = + value = STRING_VALUE + +LiteralInteger = + value = DECIMAL_VALUE + +LiteralReal = + value = RealValue + +RealValue : Real = + DECIMAL_VALUE? '.' ( DECIMAL_VALUE | EXPONENTIAL_VALUE ) + | EXPONENTIAL_VALUE + +LiteralInfinity = + '*' + +// Clause 8.2.5.9 Interactions Concrete Syntax + +// Clause 8.2.5.9.1 Interactions + +Interaction = + TypePrefix 'interaction' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.9.2 Flows + +Flow = + FeaturePrefix 'flow' + ItemFlowDeclaration TypeBody + +SuccessionFlow = + FeaturePrefix 'succession' 'flow' + ItemFlowDeclaration TypeBody + +FlowDeclaration : Flow = + FeatureDeclaration ValuePart? + ( 'of' ownedRelationship += PayloadFeatureMember )? + ( 'from' ownedRelationship += FlowEndMember + 'to' ownedRelationship += FlowEndMember )? + | ( isSufficient ?= 'all' )? + ownedRelationship += FlowEndMember 'to' + ownedRelationship += FlowEndMember + +PayloadFeatureMember : FeatureMembership = + ownedRelatedElement = PayloadFeature + +PayloadFeature = + Identification PayloadFeatureSpecializationPart ValuePart? + | Identification ValuePart + | ( ownedRelationship += OwnedFeatureTyping + ( ownedRelationship += OwnedMultiplicity )? + | ownedRelationship += OwnedMultiplicity + ( ownedRelationship += OwnedFeatureTyping )? + +PayloadFeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? + FeatureSpecialization* + | MultiplicityPart FeatureSpecialization+ + +FlowEndMember : EndFeatureMembership = + ownedRelatedElement += FlowEnd + +FlowEnd = + ( ownedRelationship += OwnedReferenceSubsetting '.' )? + ownedRelationship += FlowFeatureMember + +FlowFeatureMember : FeatureMembership = + ownedRelatedElement += FlowFeature + +FlowFeature : Feature = + ownedRelationship += FlowFeatureRedefinition + +// (See Note 1) + +FlowFeatureRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + +// Notes: +//
          +//
        1. To ensure that an FlowFeature passes the validateRedefinitionDirectionConformance constraint (see 8.3.3.3.8), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature)
        + +// Clause 8.2.5.10 Feature Values Concrete Syntax + +ValuePart : Feature = + ownedRelationship += FeatureValue + +FeatureValue = + ( '=' + | isInitial ?= ':=' + | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )? + ) + ownedRelatedElement += OwnedExpression + +// Clause 8.2.5.11 Multiplicities Concrete Syntax + +Multiplicity = + MultiplicitySubset | MultiplicityRange + +MultiplicitySubset : Multiplicity = + 'multiplicity' Identification Subsets + TypeBody + +MultiplicityRange = + 'multiplicity' Identification MultiplicityBounds + TypeBody + +OwnedMultiplicity : OwningMembership = + ownedRelatedElement += OwnedMultiplicityRange + +OwnedMultiplicityRange : MultiplicityRange = + MultiplicityBounds + +MultiplicityBounds : MultiplicityRange = + '[' ( ownedRelationship += MultiplicityExpressionMember '..' )? + ownedRelationship += MultiplicityExpressionMember ']' + +MultiplicityExpressionMember : OwningMembership = + ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression ) + +// Clause 8.2.5.12 Metadata Concrete Syntax + +Metaclass = + TypePrefix 'metaclass' + ClassifierDeclaration TypeBody + +PrefixMetadataAnnotation : Annotation = + '#' ownedRelatedElement += PrefixMetadataFeature + +PrefixMetadataMember : OwningMembership = + '#' ownedRelatedElement += PrefixMetadataFeature + +PrefixMetadataFeature : MetadataFeature : + ownedRelationship += OwnedFeatureTyping + +MetadataFeature = + ( ownedRelationship += PrefixMetadataMember )* + ( '@' | 'metadata' ) + MetadataFeatureDeclaration + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + MetadataBody + +MetadataFeatureDeclaration : MetadataFeature = + ( Identification ( ':' | 'typed' 'by' ) )? + ownedRelationship += OwnedFeatureTyping + +MetadataBody : Feature = + ';' | '{' ( ownedRelationship += MetadataBodyElement )* '}' + +MetadataBodyElement : Membership = + NonFeatureMember + | MetadataBodyFeatureMember + | AliasMember + | Import + +MetadataBodyFeatureMember : FeatureMembership = + ownedMemberFeature = MetadataBodyFeature + +MetadataBodyFeature : Feature = + 'feature'? ( ':>>' | 'redefines')? ownedRelationship += OwnedRedefinition + FeatureSpecializationPart? ValuePart? + MetadataBody + +// Clause 8.2.5.13 Packages Concrete Syntax + +Package = + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +LibraryPackage = + ( isStandard ?= 'standard' ) 'library' + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +PackageDeclaration : Package = + 'package' Identification + +PackageBody : Package = + ';' + | '{' ( NamespaceBodyElement + | ownedRelationship += ElementFilterMember + )* + '}' + +ElementFilterMember : ElementFilterMembership = + MemberPrefix + 'filter' condition = OwnedExpression ';' + +// End of BNF + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf.html b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf.html new file mode 100644 index 000000000..b2559b191 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf.html @@ -0,0 +1,1695 @@ + + + + +KerML-textual-bnf + + + +

        // Source document: tests/KerML_and_SysML_spec_sources/KerML-spec.html
        +// Generated by bnf_grammar_processor at: 2025-12-04T19:31:35Z +

        +

        // Part 1 - Kernel Modeling Language (KerML)

        +

        // Clause 8.2 Concrete Syntax

        +

        // Clause 8.2.1 Concrete Syntax Overview

        +

        // Clause 8.2.2 Lexical Structure

        +

        // Clause 8.2.2.1 Line Terminators and White Space

        + +
        LINE_TERMINATOR =
        +    implementation defined character sequence
        +
        + +
        LINE_TEXT =
        +    character sequence excluding LINE_TERMINATORs
        +
        + +
        WHITE_SPACE =
        +    space | tab | form_feed | LINE_TERMINATOR
        +
        +

        // Notes:

        +
          +
        1. // 1. Notation text is divided up into lines separated by line terminators. A line terminator may be a single character (such as a line feed) or a sequence of characters (such as a carriage return/line feed combination). This specification does not require any specific encoding for a line terminator, but any encoding used must be consistent throughout any specific input text.
        2. +
        3. // 2. Any characters in text line that are not a part of the line terminator are referred to as line text.
        4. +
        5. // 3. A white space character is a space, tab, form feed or line terminator. Any contiguous sequence of white space characters can be used to separate tokens that would otherwise be considered to be part of a single token. It is otherwise ignored, with the single exception that a line terminator is used to mark the end of a single-line note (see 8.2.2.2).
        6. +
        +

        // Clause 8.2.2.2 Notes and Comments

        + +
        SINGLE_LINE_NOTE =
        +    '//' LINE_TEXT
        +
        + +
        MULTILINE_NOTE =
        +    '//*' COMMENT_TEXT '*/'
        +
        + +
        REGULAR_COMMENT =
        +    '/*' COMMENT_TEXT '*/'
        +
        + +
        COMMENT_TEXT =
        +    ( COMMENT_LINE_TEXT | LINE_TERMINATOR )*
        +
        + +
        COMMENT_LINE_TEXT =
        +    LINE_TEXT excluding the sequence '*/'
        +
        +

        // Clause 8.2.2.3 Names

        + +
        NAME =
        +    BASIC_NAME | UNRESTRICTED_NAME
        +
        + +
        BASIC_NAME =
        +    BASIC_INITIAL_CHARACTER BASIC_NAME_CHARACTER*
        +
        + +
        UNRESTRICTED_NAME =
        +    single_quote ( NAME_CHARACTER | ESCAPE_SEQUENCE )* single_quote
        +
        +

        // (See Note 1)

        + +
        BASIC_INITIAL_CHARACTER =
        +    ALPHABETIC_CHARACTER | '_'
        +
        + +
        BASIC_NAME_CHARACTER =
        +    BASIC_INITIAL_CHARACTER | DECIMAL_DIGIT
        +
        + +
        ALPHABETIC_CHARACTER =
        +    any character 'a' through 'z' or 'A' through 'Z'
        +
        + +
        DECIMAL_DIGIT =
        +    any character '0' through '9'
        +
        + +
        NAME_CHARACTER =
        +    any printable character other than backslash or single_quote
        +
        + +
        ESCAPE_SEQUENCE =
        +
        +

        // (See Note 2)

        +

        // Notes:

        +
          +
        1. // 1. The single_quote character is '. The name represented by an UNRESTRICTED_NAME shall consist of the characters within the single quotes, with escape characters resolved as described below. The surrounding single quote characters are not part of the represented name.
        2. +
        3. // 2. An ESCAPE_SEQUENCE is a sequence of two text characters starting with a backslash that actually denotes only a single character, except for the newline escape sequence, which represents however many characters is necessary to represent an end of line in a specific implementation (see also 8.2.2.1). Table 4 shows the meaning of the allowed escape sequences. The ESCAPE_SEQUENCES in an UNRESTRICTED_NAME shall be replaced by the characters specified as their meanings in the actual represented name.
        4. +
        +

        // Clause 8.2.2.4 Numeric Values

        + +
        DECIMAL_VALUE =
        +    DECIMAL_DIGIT+
        +
        + +
        EXPONENTIAL_VALUE =
        +    DECIMAL_VALUE ('e' | 'E') ('+' | '-')? DECIMAL_VALUE
        +
        +

        // Notes:

        +
          +
        1. // 1. A DECIMAL_VALUE may specify a natural literal, or it may be part of the specification of a real literal (see 8.2.5.8.4). Note that a DECIMAL_VALUE does not include a sign, because negating a literal is an operator in the KerML Expression syntax.
        2. +
        3. // 2. An EXPONENTIAL_VALUE may be used in the specification of a real literal (see 8.2.5.8.4). Note that a decimal point and fractional part are not included in the lexical structure of an exponential value. They are handled as part of the syntax of real literals.
        4. +
        +

        // Clause 8.2.2.5 String Value

        + +
        STRING_VALUE =
        +    '"' ( STRING_CHARACTER | ESCAPE_SEQUENCE )* '"'
        +
        + +
        STRING_CHARACTER =
        +    any printable character other than backslash or '"'
        +
        +

        // Notes:

        +
          +
        1. // 1. ESCAPE_SEQUENCE is specified in 8.2.2.3.
        2. +
        +

        // Clause 8.2.2.6 Reserved Words

        + +
        RESERVED_KEYWORD =
        +    'about' | 'abstract' | 'alias' | 'all' | 'and' | 'as' | 'assoc' | 'behavior' | 'binding' | 'bool' | 'by' | 'chains'
        +    | 'class' | 'classifier' | 'comment' | 'composite' | 'conjugate' | 'conjugates' | 'conjugation' | 'connector'
        +    | 'const' | 'crosses' | 'datatype' | 'default' | 'dependency' | 'derived' | 'differences' | 'disjoining' | 'disjoint'
        +    | 'doc' | 'else' | 'end' | 'expr' | 'false' | 'feature' | 'featured' | 'featuring' | 'filter' | 'first' | 'flow'
        +    | 'for' | 'from' | 'function' | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'inout' | 'interaction'
        +    | 'intersects' | 'inv' | 'inverse' | 'inverting' | 'istype' | 'language' | 'library' | 'locale' | 'member' | 'meta'
        +    | 'metaclass' | 'metadata' | 'multiplicity' | 'namespace' | 'nonunique' | 'not' | 'null' | 'of' | 'or' | 'ordered'
        +    | 'out' | 'package' | 'portion' | 'predicate' | 'private' | 'protected' | 'public' | 'redefines' | 'redefinition'
        +    | 'references' | 'rep' | 'return' | 'specialization' | 'specializes' | 'standard' | 'step' | 'struct'
        +    | 'subclassifier' | 'subset' | 'subsets' | 'subtype' | 'succession' | 'then' | 'to' | 'true' | 'type' | 'typed'
        +    | 'typing' | 'unions' | 'var' | 'xor'
        +
        +

        // Clause 8.2.2.7 Symbols

        + +
        RESERVED_SYMBOL = 
        +    '~' | '}' | '|' | '{' | '^' | ']' | '[' | '@' | '??' | '?' | '>=' | '>' | '=>' | '===' | '==' | '=' | '<=' | '<'
        +    | ';' | ':>>' | ':>' | ':=' | '::>' | '::' | ':' | '/' | '.?' | '..' | '.' | '->' | '-' | ',' | '+' | '**' | '*' | ')'
        +    | '(' | '&' | '%' | '$' | '#' | '!==' | '!='
        +
        + +
        TYPED_BY    = ':'   | 'typed' 'by'
        +
        + +
        SPECIALIZES = ':>'  | 'specializes'
        +
        + +
        SUBSETS     = ':>'  | 'subsets'
        +
        + +
        REFERENCES  = '::>' | 'references'
        +
        + +
        CROSSES     = '=>'  | 'crosses'
        +
        + +
        REDEFINES   = ':>>' | 'redefines'
        +
        + +
        CONJUGATES  = '~'   | 'conjugates'
        +
        +

        // Clause 8.2.3 Root Concrete Syntax

        +

        // Clause 8.2.3.1 Elements and Relationships Concrete Syntax

        + +
        Identification : Element =
        +    ( '<' declaredShortName = NAME '>' )?
        +    ( declaredName = NAME )?
        +
        + +
        RelationshipBody : Relationship =
        +    ';' | '{' RelationshipOwnedElement* '}'
        +
        + +
        RelationshipOwnedElement : Relationship =
        +      ownedRelatedElement += OwnedRelatedElement
        +    | ownedRelationship += OwnedAnnotation
        +
        + +
        OwnedRelatedElement : Element =
        +    NonFeatureElement | FeatureElement
        +
        +

        // Clause 8.2.3.2 Dependencies Concrete Syntax

        + +
        Dependency =
        +    ( ownedRelationship += PrefixMetadataAnnotation )*
        +    'dependency' ( Identification? 'from' )?
        +    client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to'
        +    supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )*
        +    RelationshipBody
        +
        +

        // Notes:

        +
          +
        1. // 1. PrefixMetadataAnnotation is defined in the Kernel layer (see 8.2.5.12).
        2. +
        +

        // Clause 8.2.3.3 Annotations Concrete Syntax

        +
        // Clause 8.2.3.3.1 Annotations
        + +
        Annotation =
        +    annotatedElement = [QualifiedName]
        +
        + +
        OwnedAnnotation : Annotation =
        +    ownedRelatedElement += AnnotatingElement
        +
        + +
        AnnotatingElement =
        +      Comment
        +    | Documentation
        +    | TextualRepresentation
        +    | MetadataFeature
        +
        +

        // Notes:

        +
          +
        1. // 1. MetadataFeature is defined in the Kernel layer (see 8.2.5.12).
        2. +
        +
        // Clause 8.2.3.3.2 Comments and Documentation
        + +
        Comment =
        +    ( 'comment' Identification
        +      ( 'about' ownedRelationsip += Annotation
        +        ( ',' ownedRelationship += Annotation )*
        +      )?
        +    )?
        +    ( 'locale' locale = STRING_VALUE )?
        +    body = REGULAR_COMMENT
        +
        + +
        Documentation =
        +    'doc' Identification
        +    ( 'locale' locale = STRING_VALUE )?
        +    body = REGULAR_COMMENT
        +
        +

        // Notes:

        +
          +
        1. // 1. The text of a lexical REGULAR_COMMENT or PREFIX_COMMENT shall be processed as follows before it is included as the body of a Comment or Documentation: +
            +
          • // • Remove the initial /* and final */ characters.
          • +
          • // • Remove any white space immediately after the initial /*, up to and including the first line terminator (if any).
          • +
          • // • On each subsequent line of the text: +
              +
            • // • Strip initial white space other than line terminators.
            • +
            • // • Then, if the first remaining character is "*", remove it.
            • +
            • // • Then, if the first remaining character is now a space, remove it.
            • +
            +
          • +
          +
        2. +
        3. // 2. The body text of a Comment can include markup information (such as HTML), and a conforming tool may display such text as rendered according to the markup. However, marked up "rich text" for a Comment written using the KerML textual concrete syntax shall be stored in the Comment body in plain text including all mark up text, with all line terminators and white space included as entered, other than what is removed according to the rules above.
        4. +
        +
        // Clause 8.2.3.3.3 Textual Representation
        + +
        TextualRepresentation =
        +    ( 'rep' Identification )?
        +    'language' language = STRING_VALUE
        +    body = REGULAR_COMMENT
        +
        +

        // Notes:

        +
          +
        1. // 1. The lexical text of a REGULAR_COMMENT shall be processed as specified in 8.2.3.3.2 for Comments before being included as the body of a TextualRepresentation.
        2. +
        3. // 2. See also 8.3.2.3.6 on the standard language names recognized for a TextualRepresentation.
        4. +
        +

        // Clause 8.2.3.4 Namespaces Concrete Syntax

        +
        // Clause 8.2.3.4.1 Namespaces
        + +
        RootNamespace : Namespace =
        +    NamespaceBodyElement*
        +
        +

        // (See Note 1)

        + +
        Namespace =
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    NamespaceDeclaration NamespaceBody
        +
        +

        // (See Note 2)

        + +
        NamespaceDeclaration : Namespace =
        +    'namespace' Identification
        +
        + +
        NamespaceBody : Namespace =
        +    ';' | '{' NamespaceBodyElement* '}'
        +
        + +
        NamespaceBodyElement : Namespace =
        +      ownedRelationship += NamespaceMember
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += Import
        +
        + +
        MemberPrefix : Membership =
        +    ( visibility = VisibilityIndicator )?
        +
        + +
        VisibilityIndicator : VisibilityKind =
        +    'public' | 'private' | 'protected'
        +
        + +
        NamespaceMember : OwningMembership =
        +      NonFeatureMember
        +    | NamespaceFeatureMember
        +
        + +
        NonFeatureMember : OwningMembership =
        +    MemberPrefix
        +    ownedRelatedElement += MemberElement
        +
        + +
        NamespaceFeatureMember : OwningMembership =
        +    MemberPrefix
        +    ownedRelatedElement += FeatureElement
        +
        + +
        AliasMember : Membership =
        +    MemberPrefix
        +    'alias' ( '<' memberShortName = NAME '>' )?
        +    ( memberName = NAME )?
        +    'for' memberElement = [QualifiedName]
        +    RelationshipBody
        +
        + +
        QualifiedName =
        +   ( '$' '::' )? ( NAME '::' )* NAME
        +
        +

        // (See Note 3)

        +

        // Notes:

        +
          +
        1. // 1. A root Namespace is a Namespace that has no owningNamespace (see 8.3.2.4). Every Element other than a root Namespace must be contained, directly or indirectly, within some root Namespace. Therefore, every valid KerML concrete syntax text can be parsed starting from the RootNamespace production.
        2. +
        3. // 2. PrefixMetadataMember is defined in the Kernel layer (see 8.2.5.12).
        4. +
        5. // 3. A qualified name is notated as a sequence of segment names separated by "::" punctuation, optionally with the global scope qualifier "$" as an initial segment. An unqualified name can be considered the degenerate case of a qualified name with a single segment name. A qualified name is used in the KerML textual concrete syntax to identify an Element that is being referred to in the representation of another Element. A qualified name used in this way does not appear in the corresponding abstract syntax—instead, the abstract syntax representation contains an actual reference to the identified Element. Name resolution is the process of determining the Element that is identified by a qualified name. The segment names of the qualified name other than the last identify a sequence of nested Namespaces that provide the context for resolving the final segment name (see 8.2.3.5). The notation [QualifiedName] is used in concrete syntax grammar productions to indicate the result of resolving text parsed as a QualifiedName (see also 8.2.1).
        6. +
        +
        // Clause 8.2.3.4.2 Imports
        + +
        Import =
        +    visibility = VisibilityIndicator
        +    'import' ( isImportAll ?= 'all' )?
        +    ImportDeclaration RelationshipBody
        +
        + +
        ImportDeclaration : Import
        +    MembershipImport | NamespaceImport
        +
        + +
        MembershipImport =
        +    importedMembership = [QualifiedName]
        +    ( '::' isRecursive ?= '**' )?
        +
        +

        // (See Note 1)

        + +
        NamespaceImport =
        +      importedNamespace = [QualifiedName] '::' '*'
        +      ( '::' isRecursive ?= '**' )?
        +    | importedNamespace = FilterPackage
        +      { ownedRelatedElement += importedNamespace }
        +
        + +
        FilterPackage : Package =
        +    ownedRelationship += ImportDeclaration
        +    ( ownedRelationship += FilterPackageMember )+
        +
        + +
        FilterPackageMember : ElementFilterMembership =
        +    '[' ownedRelatedElement += OwnedExpression ']'
        +
        +

        // Notes:

        +
          +
        1. // 1. The importedMembership of a MembershipImport is the single case in which the Element required from the resolution [QualifiedName] is the actual Membership identified by the QualifedName, not the memberElement of that Membership (see 8.2.3.5).
        2. +
        +
        // Clause 8.2.3.4.3 Namespace Elements
        + +
        MemberElement : Element =
        +    AnnotatingElement | NonFeatureElement
        +
        + +
        NonFeatureElement : Element =
        +      Dependency
        +    | Namespace
        +    | Type
        +    | Classifier
        +    | DataType
        +    | Class
        +    | Structure
        +    | Metaclass
        +    | Association
        +    | AssociationStructure
        +    | Interaction
        +    | Behavior
        +    | Function
        +    | Predicate
        +    | Multiplicity
        +    | Package
        +    | LibraryPackage
        +    | Specialization
        +    | Conjugation
        +    | Subclassification
        +    | Disjoining
        +    | FeatureInverting
        +    | FeatureTyping
        +    | Subsetting
        +    | Redefinition
        +    | TypeFeaturing
        +
        + +
        FeatureElement : Feature =
        +      Feature
        +    | Step
        +    | Expression
        +    | BooleanExpression
        +    | Invariant
        +    | Connector
        +    | BindingConnector
        +    | Succession
        +    | Flow
        +    | SuccessionFlow
        +
        +

        // Clause 8.2.3.5 Name Resolution

        +
        // Clause 8.2.3.5.1 Name Resolution Overview
        +
        // Clause 8.2.3.5.2 Local and Global Namespaces
        +
        // Clause 8.2.3.5.3 Local and Visible Resolution
        +
        // Clause 8.2.3.5.4 Full Resolution
        +

        // Clause 8.2.4 Core Concrete Syntax

        +

        // Clause 8.2.4.1 Types Concrete Syntax

        +
        // Clause 8.2.4.1.1 Types
        + +
        Type =
        +    TypePrefix 'type'
        +    TypeDeclaration TypeBody
        +
        + +
        TypePrefix : Type =
        +    ( isAbstract ?= 'abstract' )?
        +    ( ownedRelationship += PrefixMetadataMember )*
        +
        + +
        TypeDeclaration : Type =
        +    ( isSufficient ?= 'all' )? Identification
        +    ( ownedRelationship += OwnedMultiplicity )?
        +    ( SpecializationPart | ConjugationPart )+
        +    TypeRelationshipPart*
        +
        + +
        SpecializationPart : Type =
        +    SPECIALIZES ownedRelationship += OwnedSpecialization
        +    ( ',' ownedRelationship += OwnedSpecialization )*
        +
        + +
        ConjugationPart : Type =
        +    CONJUGATES ownedRelationship += OwnedConjugation
        +
        + +
        TypeRelationshipPart : Type =
        +      DisjoiningPart
        +    | UnioningPart
        +    | IntersectingPart
        +    | DifferencingPart
        +
        + +
        DisjoiningPart : Type =
        +    'disjoint' 'from' ownedRelationship += OwnedDisjoining
        +    ( ',' ownedRelationship += OwnedDisjoining )*
        +
        + +
        UnioningPart : Type =
        +    'unions' ownedRelationship += Unioning
        +    ( ',' ownedRelationship += Unioning )*
        +
        + +
        IntersectingPart : Type =
        +    'intersects' ownedRelationship += Intersecting
        +    ( ',' ownedRelationship += Intersecting )*
        +
        + +
        DifferencingPart : Type =
        +    'differences' ownedRelationship += Differencing
        +    ( ',' ownedRelationship += Differencing )*
        +
        + +
        TypeBody : Type =
        +    ';' | '{' TypeBodyElement* '}'
        +
        + +
        TypeBodyElement : Type =
        +      ownedRelationship += NonFeatureMember
        +    | ownedRelationship += FeatureMember
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += Import
        +
        +
        // Clause 8.2.4.1.2 Specialization
        + +
        Specialization =
        +    ( 'specialization' Identification )?
        +    'subtype' SpecificType
        +    SPECIALIZES GeneralType
        +    RelationshipBody
        +
        + +
        OwnedSpecialization : Specialization =
        +    GeneralType
        +
        + +
        SpecificType : Specialization :
        +      specific = [QualifiedName]
        +    | specific += OwnedFeatureChain
        +      { ownedRelatedElement += specific }
        +
        + +
        GeneralType : Specialization =
        +      general = [QualifiedName]
        +    | general += OwnedFeatureChain
        +      { ownedRelatedElement += general }
        +
        +
        // Clause 8.2.4.1.3 Conjugation
        + +
        Conjugation =
        +    ( 'conjugation' Identification )?
        +    'conjugate'
        +    ( conjugatedType = [QualifiedName]
        +    | conjugatedType = FeatureChain
        +      { ownedRelatedElement += conjugatedType }
        +    )
        +    CONJUGATES
        +    ( originalType = [QualifiedName]
        +    | originalType = FeatureChain
        +      { ownedRelatedElement += originalType }
        +    )
        +    RelationshipBody
        +
        + +
        OwnedConjugation : Conjugation =
        +      originalType = [QualifiedName]
        +    | originalType = FeatureChain
        +      { ownedRelatedElement += originalType }
        +
        +
        // Clause 8.2.4.1.4 Disjoining
        + +
        Disjoining =
        +    ( 'disjoining' Identification )?
        +    'disjoint'
        +    ( typeDisjoined = [QualifiedName]
        +    | typeDisjoined = FeatureChain
        +      { ownedRelatedElement += typeDisjoined }
        +    )
        +    'from'
        +    ( disjoiningType = [QualifiedName]
        +    | disjoiningType = FeatureChain
        +      { ownedRelatedElement += disjoiningType }
        +    )
        +    RelationshipBody
        +
        + +
        OwnedDisjoining : Disjoining =
        +      disjoiningType = [QualifiedName]
        +    | disjoiningType = FeatureChain
        +      { ownedRelatedElement += disjoiningType }
        +
        +
        // Clause 8.2.4.1.5 Unioning, Intersecting and Differencing
        + +
        Unioning =
        +      unioningType = [QualifiedName]
        +    | ownedRelatedElement += OwnedFeatureChain
        +
        + +
        Intersecting =
        +      intersectingType = [QualifiedName]
        +    | ownedRelatedElement += OwnedFeatureChain
        +
        + +
        Differencing =
        +      differencingType = [QualifiedName]
        +    | ownedRelatedElement += OwnedFeatureChain
        +
        +
        // Clause 8.2.4.1.6 Feature Membership
        + +
        FeatureMember : OwningMembership =
        +      TypeFeatureMember
        +    | OwnedFeatureMember
        +
        + +
        TypeFeatureMember : OwningMembership =
        +    MemberPrefix 'member' ownedRelatedElement += FeatureElement
        +
        + +
        OwnedFeatureMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += FeatureElement
        +
        +

        // Clause 8.2.4.2 Classifiers Concrete Syntax

        +
        // Clause 8.2.4.2.1 Classifiers
        + +
        Classifier =
        +    TypePrefix 'classifier'
        +    ClassifierDeclaration TypeBody
        +
        + +
        ClassifierDeclaration : Classifier =
        +    ( isSufficient ?= 'all' )? Identification
        +    ( ownedRelationship += OwnedMultiplicity )?
        +    ( SuperclassingPart | ConjugationPart )?
        +    TypeRelationshipPart*
        +
        + +
        SuperclassingPart : Classifier =
        +      SPECIALIZES ownedRelationship += OwnedSubclassification
        +      ( ',' ownedRelationship += OwnedSubclassification )*
        +
        +
        // Clause 8.2.4.2.2 Subclassification
        + +
        Subclassification =
        +    ( 'specialization' Identification )?
        +    'subclassifier' subclassifier = [QualifiedName]
        +    SPECIALIZES superclassifier = [QualifiedName]
        +    RelationshipBody
        +
        + +
        OwnedSubclassification : Subclassification =
        +    superclassifier = [QualifiedName]
        +
        +

        // Clause 8.2.4.3 Features Concrete Syntax

        +
        // Clause 8.2.4.3.1 Features
        + +
        Feature =
        +    ( FeaturePrefix
        +      ( 'feature' | ownedRelationship += PrefixMetadataMember )
        +      FeatureDeclaration?
        +      )
        +    | ( EndFeaturePrefix | BasicFeaturePrefix )
        +      FeatureDeclaration
        +    )
        +    ValuePart? TypeBody
        +
        +

        // (See Note 1)

        + +
        EndFeaturePrefix : Feature =
        +    ( isConstant ?= 'const' { isVariable = true } )?
        +    isEnd ?= 'end'
        +
        + +
        BasicFeaturePrefix : Feature :
        +    ( direction = FeatureDirection )?
        +    ( isDerived ?= 'derived' )?
        +    ( isAbstract ?= 'abstract' )?
        +    ( isComposite ?= 'composite' | isPortion ?= 'portion' )?
        +    ( isVariable ?= 'var' | isConstant ?= 'const' { isVariable = true } )?
        +
        + +
        FeaturePrefix :
        +    ( EndFeaturePrefix ( ownedRelationship += OwnedCrossFeatureMember )?
        +    | BasicFeaturePrefix
        +    )
        +    ( ownedRelationship += PrefixMetadataMember )*
        +
        +

        // (See Note 1)

        + +
        OwnedCrossFeatureMember : OwningMembership =
        +    ownedRelatedElement += OwnedCrossFeature
        +
        + +
        OwnedCrossFeature : Feature =
        +    BasicFeaturePrefix FeatureDeclaration
        +
        + +
        FeatureDirection : FeatureDirectionKind =
        +    'in' | 'out' | 'inout'
        +
        + +
        FeatureDeclaration : Feature =
        +    ( isSufficient ?= 'all' )?
        +    ( FeatureIdentification
        +      ( FeatureSpecializationPart | ConjugationPart )?
        +    | FeatureSpecializationPart
        +    | ConjugationPart
        +    )
        +    FeatureRelationshipPart*
        +
        + +
        FeatureIdentification : Feature =
        +      '<' declaredShortName = NAME '>' ( declaredName = NAME )?
        +    | declaredName = NAME
        +
        + +
        FeatureRelationshipPart : Feature =
        +      TypeRelationshipPart
        +    | ChainingPart
        +    | InvertingPart
        +    | TypeFeaturingPart
        +
        + +
        ChainingPart : Feature =
        +    'chains'
        +    ( ownedRelationship += OwnedFeatureChaining
        +    | FeatureChain )
        +
        + +
        InvertingPart : Feature =
        +    'inverse' 'of' ownedRelationship += OwnedFeatureInverting
        +
        + +
        TypeFeaturingPart : Feature =
        +    'featured' 'by' ownedRelatioship += OwnedTypeFeaturing
        +    ( ',' ownedTypeFeaturing += OwnedTypeFeaturing )*
        +
        + +
        FeatureSpecializationPart : Feature =
        +      FeatureSpecialization+ MultiplicityPart? FeatureSpecialization*
        +    | MultiplicityPart FeatureSpecialization*
        +
        + +
        MultiplicityPart : Feature =
        +      ownedRelationship += OwnedMultiplicity
        +    | ( ownedRelationship += OwnedMultiplicity )?
        +      ( isOrdered ?= 'ordered' ( {isUnique = false} 'nonunique' )?
        +      | {isUnique = false} 'nonunique' ( isOrdered ?= 'ordered' )? )
        +
        + +
        FeatureSpecialization : Feature =
        +    Typings | Subsettings | References | Crosses | Redefinitions
        +
        + +
        Typings : Feature =
        +      TypedBy ( ',' ownedRelationship += OwnedFeatureTyping )*
        +
        + +
        TypedBy : Feature =
        +    TYPED_BY ownedRelationship += OwnedFeatureTyping
        +
        + +
        Subsettings : Feature =
        +    Subsets ( ',' ownedRelationship += OwnedSubsetting )*
        +
        + +
        Subsets : Feature =
        +    SUBSETS ownedRelationship += OwnedSubsetting
        +
        + +
        References : Feature =
        +    REFERENCES ownedRelationship += OwnedReferenceSubsetting
        +
        + +
        Crosses : Feature =
        +    CROSSES ownedRelationship += OwnedCrossSubsetting
        +
        + +
        Redefinitions : Feature =
        +    Redefines ( ',' ownedRelationship += OwnedRedefinition )*
        +
        + +
        Redefines : Feature =
        +    REDEFINES ownedRelationship += OwnedRedefinition
        +
        +

        // Notes:

        +
          +
        1. // 1. PrefixMetadataMember is defined in the Kernel layer (see 8.3.4.12).
        2. +
        +
        // Clause 8.2.4.3.2 Feature Typing
        + +
        FeatureTyping =
        +    ( 'specialization' Identification )?
        +    'typing' typedFeature = [QualifiedName]
        +    TYPED_BY GeneralType
        +    RelationshipBody
        +
        + +
        OwnedFeatureTyping : FeatureTyping =
        +    GeneralType
        +
        +
        // Clause 8.2.4.3.3 Subsetting
        + +
        Subsetting =
        +    ( 'specialization' Identification )?
        +    'subset' SpecificType
        +    SUBSETS GeneralType
        +    RelationshipBody
        +
        + +
        OwnedSubsetting : Subsetting =
        +    GeneralType
        +
        + +
        OwnedReferenceSubsetting : ReferenceSubsetting =
        +    GeneralType
        +
        + +
        OwnedCrossSubsetting : CrossSubsetting =
        +    GeneralType
        +
        +
        // Clause 8.2.4.3.4 Redefinition
        + +
        Redefinition =
        +    ( 'specialization' Identification )?
        +    'redefinition' SpecificType
        +    REDEFINES GeneralType
        +    RelationshipBody
        +
        + +
        OwnedRedefinition : Redefinition =
        +    GeneralType
        +
        +
        // Clause 8.2.4.3.5 Feature Chaining
        + +
        OwnedFeatureChain : Feature =
        +    FeatureChain
        +
        + +
        FeatureChain : Feature =
        +    ownedRelationship += OwnedFeatureChaining
        +    ( '.' ownedRelationship += OwnedFeatureChaining )+
        +
        + +
        OwnedFeatureChaining : FeatureChaining =
        +    chainingFeature = [QualifiedName]
        +
        +
        // Clause 8.2.4.3.6 Feature Inverting
        + +
        FeatureInverting =
        +    ( 'inverting' Identification? )?
        +    'inverse'
        +    ( featureInverted = [QualifiedName]
        +    | featureInverted = OwnedFeatureChain
        +      { ownedRelatedElement += featureInverted }
        +    )
        +    'of'
        +    ( invertingFeature = [QualifiedName]
        +    | ownedRelatedElement += OwnedFeatureChain
        +      { ownedRelatedElement += invertingFeature }
        +    )
        +    RelationshipBody
        +
        + +
        OwnedFeatureInverting : FeatureInverting =
        +      invertingFeature = [QualifiedName]
        +    | invertingFeature = OwnedFeatureChain
        +      { ownedRelatedElement += invertingFeature }
        +
        +
        // Clause 8.2.4.3.7 Type Featuring
        + +
        TypeFeaturing =
        +    'featuring' ( Identification 'of' )?
        +    featureOfType = [QualifiedName]
        +    'by' featuringType = [QualifiedName]
        +    RelationshipBody
        +
        + +
        OwnedTypeFeaturing : TypeFeaturing =
        +    featuringType = [QualifiedName]
        +
        +

        // Clause 8.2.5 Kernel Concrete Syntax

        +

        // Clause 8.2.5.1 Data Types Concrete Syntax

        + +
        DataType =
        +    TypePrefix 'datatype'
        +    ClassifierDeclaration TypeBody
        +
        +

        // Clause 8.2.5.2 Classes Concrete Syntax

        + +
        Class =
        +    TypePrefix 'class'
        +    ClassifierDeclaration TypeBody
        +
        +

        // Clause 8.2.5.3 Structures Concrete Syntax

        + +
        Structure =
        +    TypePrefix 'struct'
        +    ClassifierDeclaration TypeBody
        +
        +

        // Clause 8.2.5.4 Associations Concrete Syntax

        + +
        Association =
        +    TypePrefix 'assoc'
        +    ClassifierDeclaration TypeBody
        +
        + +
        AssociationStructure =
        +    TypePrefix 'assoc' 'struct'
        +    ClassifierDeclaration TypeBody
        +
        +

        // Clause 8.2.5.5 Connectors Concrete Syntax

        +
        // Clause 8.2.5.5.1 Connectors
        + +
        Connector =
        +    FeaturePrefix 'connector'
        +    ( FeatureDeclaration? ValuePart?
        +    | ConnectorDeclaration
        +    )
        +    TypeBody
        +
        + +
        ConnectorDeclaration : Connector =
        +    BinaryConnectorDeclaration | NaryConnectorDeclaration
        +
        + +
        BinaryConnectorDeclaration : Connector =
        +    ( FeatureDeclaration? 'from' | isSufficient ?= 'all' 'from'? )?
        +    ownedRelationship += ConnectorEndMember 'to'
        +    ownedRelationship += ConnectorEndMember
        +
        + +
        NaryConnectorDeclaration : Connector =
        +    FeatureDeclaration?
        +    '(' ownedRelationship += ConnectorEndMember ','
        +        ownedRelationship += ConnectorEndMember
        +        ( ',' ownedRelationship += ConnectorEndMember )*
        +    ')'
        +
        + +
        ConnectorEndMember : EndFeatureMembership =
        +    ownedRelatedElement += ConnectorEnd
        +
        + +
        ConnectorEnd : Feature =
        +	( ownedRelationship += OwnedCrossMultiplicityMember )?
        +	( declaredName = NAME REFERENCES )?
        +	ownedRelationship += OwnedReferenceSubsetting
        +
        + +
        OwnedCrossMultiplicityMember : OwningMembership =
        +	ownedRelatedElement += OwnedCrossMultiplicity
        +
        + +
        OwnedCrossMultiplicity : Feature =
        +	ownedRelationship += OwnedMultiplicity
        +
        +
        // Clause 8.2.5.5.2 Binding Connectors
        + +
        BindingConnector =
        +    FeaturePrefix 'binding'
        +    BindingConnectorDeclaration TypeBody
        +
        + +
        BindingConnectorDeclaration : BindingConnector =
        +      FeatureDeclaration
        +      ( 'of' ownedRelationship += ConnectorEndMember
        +        '='  ownedRelationship += ConnectorEndMember )?
        +    | ( isSufficient ?= 'all' )?
        +      ( 'of'? ownedRelationship += ConnectorEndMember
        +        '='   ownedRelationship += ConnectorEndMember )?
        +
        +
        // Clause 8.2.5.5.3 Successions
        + +
        Succession =
        +    FeaturePrefix 'succession'
        +    SuccessionDeclaration TypeBody
        +
        + +
        SuccessionDeclaration : Succession =
        +      FeatureDeclaration
        +      ( 'first' ownedRelationship += ConnectorEndMember
        +        'then'  ownedRelationship += ConnectorEndMember )?
        +    | ( s.isSufficient ?= 'all' )?
        +      ( 'first'? ownedRelationship += ConnectorEndMember
        +        'then'   ownedRelationship += ConnectorEndMember )?
        +
        +

        // Clause 8.2.5.6 Behaviors Concrete Syntax

        +
        // Clause 8.2.5.6.1 Behaviors
        + +
        Behavior =
        +    TypePrefix 'behavior'
        +    ClassifierDeclaration TypeBody
        +
        +
        // Clause 8.2.5.6.2 Steps
        + +
        Step =
        +    FeaturePrefix
        +    'step' FeatureDeclaration ValuePart?
        +    TypeBody
        +
        +

        // Clause 8.2.5.7 Functions Concrete Syntax

        +
        // Clause 8.2.5.7.1 Functions
        + +
        Function =
        +    TypePrefix 'function'
        +    ClassifierDeclaration FunctionBody
        +
        + +
        FunctionBody : Type =
        +    ';' | '{' FunctionBodyPart '}'
        +
        + +
        FunctionBodyPart : Type =
        +    ( TypeBodyElement
        +    | ownedRelationship += ReturnFeatureMember
        +    )*
        +   ( ownedRelationship += ResultExpressionMember )?
        +
        + +
        ReturnFeatureMember : ReturnParameterMembership =
        +    MemberPrefix 'return'
        +    ownedRelatedElement += FeatureElement
        +
        + +
        ResultExpressionMember : ResultExpressionMembership =
        +    MemberPrefix
        +    ownedRelatedElement += OwnedExpression
        +
        +
        // Clause 8.2.5.7.2 Expressions
        + +
        Expression =
        +    FeaturePrefix
        +    'expr' FeatureDeclaration ValuePart?
        +    FunctionBody
        +
        +
        // Clause 8.2.5.7.3 Predicates
        + +
        Predicate =
        +    TypePrefix 'predicate'
        +    ClassifierDeclaration FunctionBody
        +
        +
        // Clause 8.2.5.7.4 Boolean Expressions and Invariants
        + +
        BooleanExpression =
        +    FeaturePrefix
        +    'bool' FeatureDeclaration ValuePart?
        +    FunctionBody
        +
        + +
        Invariant =
        +    FeaturePrefix
        +    'inv' ( 'true' | isNegated ?= 'false' )?
        +    FeatureDeclaration ValuePart?
        +    FunctionBody
        +
        +

        // Clause 8.2.5.8 Expressions Concrete Syntax

        +
        // Clause 8.2.5.8.1 Operator Expressions
        + +
        OwnedExpressionReferenceMember : FeatureMembership =
        +    ownedRelationship += OwnedExpressionReference
        +
        + +
        OwnedExpressionReference : FeatureReferenceExpression =
        +    ownedRelationship += OwnedExpressionMember
        +
        + +
        OwnedExpressionMember : FeatureMembership =
        +    ownedFeatureMember = OwnedExpression
        +
        + +
        OwnedExpression : Expression =
        +      ConditionalExpression
        +    | ConditionalBinaryOperatorExpression
        +    | BinaryOperatorExpression
        +    | UnaryOperatorExpression
        +    | ClassificationExpression
        +    | MetaclassificationExpression
        +    | ExtentExpression
        +    | PrimaryExpression
        +
        + +
        ConditionalExpression : OperatorExpression =
        +    operator = 'if'
        +    ownedRelationship += ArgumentMember '?'
        +    ownedRelationship += ArgumentExpressionMember 'else'
        +    ownedRelationship += ArgumentExpressionMember
        +    ownedRelationship += EmptyResultMember
        +
        + +
        ConditionalBinaryOperatorExpression : OperatorExpression =
        +    ownedRelationship += ArgumentMember
        +    operator = ConditionalBinaryOperator
        +    ownedRelationship += ArgumentExpressionMember
        +    ownedRelationship += EmptyResultMember
        +
        + +
        ConditionalBinaryOperator =
        +    '??' | 'or' | 'and' | 'implies'
        +
        + +
        BinaryOperatorExpression : OperatorExpression =
        +    ownedRelationship += ArgumentMember
        +    operator = BinaryOperator
        +    ownedRelationship += ArgumentMember
        +    ownedRelationship += EmptyResultMember
        +
        + +
        BinaryOperator =
        +      '|'  | '&'  | 'xor' | '..'
        +    | '==' | '!=' | '===' | '!=='
        +    | '<'  | '>'  | '<='  | '>='
        +    | '+'  | '-'  | '*'   | '/'
        +    | '%'  | '^'  | '**'
        +
        + +
        UnaryOperatorExpression : OperatorExpression =
        +    operator = UnaryOperator
        +    ownedRelationship += ArgumentMember
        +    ownedRelationship += EmptyResultMember
        +
        + +
        UnaryOperator =
        +    '+' | '-' | '~' | 'not'
        +
        + +
        ClassificationExpression : OperatorExpression =
        +    ( ownedRelationship += ArgumentMember )?
        +    ( operator = ClassificationTestOperator
        +      ownedRelationship += TypeReferenceMember
        +    | operator = CastOperator
        +      ownedRelationship += TypeResultMember
        +    )
        +    ownedRelationship += EmptyResultMember
        +
        + +
        ClassificationTestOperator =
        +    'istype' | 'hastype' | '@'
        +
        + +
        CastOperator =
        +    'as'
        +
        + +
        MetaclassificationExpression : OperatorExpression =
        +    ownedRelationship += MetadataArgumentMember
        +    ( operator = MetaClassificationTestOperator
        +      ownedRelationship += TypeReferenceMember
        +    | operator = MetaCastOperator
        +      ownedRelationship += TypeResultMember
        +    )
        +    ownedRelationship += EmptyResultMember
        +
        + +
        ArgumentMember : ParameterMembership =
        +    ownedMemberParameter = Argument
        +
        + +
        Argument : Feature =
        +    ownedRelationship += ArgumentValue
        +
        + +
        ArgumentValue : FeatureValue =
        +    value = OwnedExpression
        +
        + +
        ArgumentExpressionMember : FeatureMembership =
        +    ownedRelatedElement += ArgumentExpression
        +
        + +
        ArgumentExpression : Feature =
        +    ownedRelationship += ArgumentExpressionValue
        +
        + +
        ArgumentExpressionValue : FeatureValue =
        +    value = OwnedExpressionReference
        +
        + +
        MetadataArgumentMember : ParameterMembership =
        +    ownedRelatedElement += MetadataArgument
        +
        + +
        MetadataArgument : Feature =
        +    ownedRelationship += MetadataValue
        +
        + +
        MetadataValue : FeatureValue =
        +    value = MetadataReference
        +
        + +
        MetadataReference : MetadataAccessExpression =
        +    ownedRelationship += ElementReferenceMember
        +
        + +
        MetaclassificationTestOperator =
        +    '@@'
        +
        + +
        MetaCastOperator =
        +    'meta'
        +
        + +
        ExtentExpression : OperatorExpression =
        +    operator = 'all'
        +    ownedRelationship += TypeReferenceMember
        +
        + +
        TypeReferenceMember : ParameterMembership =
        +    ownedMemberFeature = TypeReference
        +
        + +
        TypeResultMember : ResultParameterMembership =
        +    ownedMemberFeature = TypeReference
        +
        + +
        TypeReference : Feature =
        +    ownedRelationship += ReferenceTyping
        +
        + +
        ReferenceTyping : FeatureTyping =
        +    type = [QualifiedName]
        +
        + +
        EmptyResultMember : ReturnParameterMembership =
        +    ownedRelatedElement += EmptyFeature
        +
        + +
        EmptyFeature : Feature =
        +    { }
        +
        +

        // Notes:

        +
          +
        1. // 1. OperatorExpressions provide a shorthand notation for InvocationExpressions that invoke a library Function represented as an operator symbol. Table 5 shows the mapping from operator symbols to the Functions they represent from the Kernel Model Library (see Clause 9). An OperatorExpression contains subexpressions called its operands that generally correspond to the argument Expressions of the OperatorExpression, except in the case of operators representing control Functions, in which case the evaluation of certain operands is as determined by the Function (see 8.4.4.9 for details).
        2. +
        3. // 2. Though not directly expressed in the syntactic productions given above, in any OperatorExpression containing nested OperatorExpressions, the nested OperatorExpressions shall be implicitly grouped according to the precedence of the operators involved, as given in Table 6. OperatorExpressions with higher precedence operators shall be grouped more tightly than those with lower precedence operators. Further, all BinaryOperators other than exponentiation are left-associative (i.e, they group to the left), while the exponentiation operators (^ and **) are right-associative (i.e., they group to the right).
        4. +
        5. // 3. The unary operator symbol ~ maps to the library Function DataFunctions::'~', as shown in Table 5. This abstract Function may be given a concrete definition in a domain-specific Function library, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        6. +
        +
        // Clause 8.2.5.8.2 Primary Expressions
        + +
        PrimaryExpression : Expression =
        +      FeatureChainExpression
        +    | NonFeatureChainPrimaryExpression
        +
        + +
        PrimaryArgumentValue : FeatureValue =
        +    value = PrimaryExpression
        +
        + +
        PrimaryArgument : Feature =
        +    ownedRelationship += PrimaryArgumentValue
        +
        + +
        PrimaryArgumentMember : ParameterMembership =
        +    ownedMemberParameter = PrimaryArgument
        +
        + +
        NonFeatureChainPrimaryExpression : Expression =
        +      BracketExpression
        +    | IndexExpression
        +    | SequenceExpression
        +    | SelectExpression
        +    | CollectExpression
        +    | FunctionOperationExpression
        +    | BaseExpression
        +
        + +
        NonFeatureChainPrimaryArgumentValue : FeatureValue =
        +    value = NonFeatureChainPrimaryExpression
        +
        + +
        NonFeatureChainPrimaryArgument : Feature =
        +    ownedRelationship += NonFeatureChainPrimaryArgumentValue
        +
        + +
        NonFeatureChainPrimaryArgumentMember : ParameterMembership =
        +    ownedMemberParameter = PrimaryArgument
        +
        + +
        BracketExpression : OperatorExpression =
        +    ownedRelationship += PrimaryArgumentMember
        +    operator = '['
        +    ownedRelationship += SequenceExpressionListMember ']'
        +
        + +
        IndexExpression =
        +    ownedRelationship += PrimaryArgumentMember '#'
        +    '(' ownedRelationship += SequenceExpressionListMember ')'
        +
        + +
        SequenceExpression : Expression =
        +    '(' SequenceExpressionList ')'
        +
        + +
        SequenceExpressionList : Expression =
        +    OwnedExpression ','? | SequenceOperatorExpression
        +
        + +
        SequenceOperatorExpression : OperatorExpression =
        +    ownedRelationship += OwnedExpressionMember
        +    operator = ','
        +    ownedRelationship += SequenceExpressionListMember
        +
        + +
        SequenceExpressionListMember : FeatureMembership =
        +    ownedMemberFeature = SequenceExpressionList
        +
        + +
        FeatureChainExpression =
        +    ownedRelationship += NonFeatureChainPrimaryArgumentMember '.'
        +    ownedRelationship += FeatureChainMember
        +
        + +
        CollectExpression =
        +    ownedRelationship += PrimaryArgumentMember '.'
        +    ownedRelationship += BodyArgumentMember
        +
        + +
        SelectExpression =
        +    ownedRelationship += PrimaryArgumentMember '.?'
        +    ownedRelationship += BodyArgumentMember
        +
        + +
        FunctionOperationExpression : InvocationExpression =
        +    ownedRelationship += PrimaryArgumentMember '->'
        +    ownedRelationship += InvocationTypeMember
        +    ( ownedRelationship += BodyArgumentMember
        +    | ownedRelationship += FunctionReferenceArgumentMember
        +    | ArgumentList )
        +    ownedRelationship += EmptyResultMember
        +
        + +
        BodyArgumentMember : ParameterMembership =
        +    ownedMemberParameter = BodyArgument
        +
        + +
        BodyArgument : Feature =
        +    ownedRelationship += BodyArgumentValue
        +
        + +
        BodyArgumentValue : FeatureValue =
        +    value = BodyExpression
        +
        + +
        FunctionReferenceArgumentMember : ParameterMembership =
        +    ownedMemberParameter = FunctionReferenceArgument
        +
        + +
        FunctionReferenceArgument : Feature =
        +    ownedRelationship += FunctionReferenceArgumentValue
        +
        + +
        FunctionReferenceArgumentValue : FeatureValue =
        +    value = FunctionReferenceExpression
        +
        + +
        FunctionReferenceExpression : FeatureReferenceExpression =
        +    ownedRelationship += FunctionReferenceMember
        +
        + +
        FunctionReferenceMember : FeatureMembership =
        +    ownedMemberFeature = FunctionReference
        +
        + +
        FunctionReference : Expression =
        +    ownedRelationship += ReferenceTyping
        +
        + +
        FeatureChainMember : Membership =
        +      FeatureReferenceMember
        +    | OwnedFeatureChainMember
        +
        + +
        OwnedFeatureChainMember : OwningMembership =
        +    ownedMemberElement = FeatureChain
        +
        +

        // Notes:

        +
          +
        1. // 1. Primary expressions provide additional shorthand notations for certain kinds of InvocationExpressions. For those cases in which the InvocationExpression is an OperatorExpression, its operator shall be resolved to the appropriate library function as given in Table 7. Note also that, for a CollectionExpression or SelectExpression, the abstract syntax constrains the operator to be collect and select, respectively, separately from the . and .? symbols used in their concrete syntax notation (see 8.3.4.8.2 and 8.3.4.8.18).
        2. +
        3. // 2. The grammar allows a bracket syntax [...]that parses to an invocation of the library Function BaseFunctions::'[', as shown in Table 7. This notation is available for use with domain-specific library models that given a concrete definition to the abstract base '[' Function, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used.
        4. +
        +
        // Clause 8.2.5.8.3 Base Expressions
        + +
        BaseExpression : Expression =
        +      NullExpression
        +    | LiteralExpression
        +    | FeatureReferenceExpression
        +    | MetadataAccessExpression
        +    | InvocationExpression
        +    | ConstructorExpression
        +    | BodyExpression
        +
        + +
        NullExpression : NullExpression =
        +    'null' | '(' ')'
        +
        + +
        FeatureReferenceExpression : FeatureReferenceExpression =
        +    ownedRelationship += FeatureReferenceMember
        +    ownedRelationship += EmptyResultMember
        +
        + +
        FeatureReferenceMember : Membership =
        +    memberElement = FeatureReference
        +
        + +
        FeatureReference : Feature =
        +    [QualifiedName]
        +
        + +
        MetadataAccessExpression =
        +    ownedRelationship += ElementReferenceMember '.' 'metadata'
        +
        + +
        ElementReferenceMember : Membership =
        +    memberElement = [QualifiedName]
        +
        + +
        InvocationExpression : InvocationExpression =
        +    ownedRelationship += InstatiatedTypeMember
        +    ArgumentList
        +    ownedRelationship += EmptyResultMember
        +
        + +
        ConstructorExpression =
        +    'new' ownedRelationship += InstantiatedTypeMember
        +    ownedRelationship += ConstructorResultMember
        +
        + +
        ConstructorResultMember : ReturnParameterMembership =
        +    ownedRelatedElement += ConstructorResult
        +
        + +
        ConstructorResult : Feature =
        +    ArgumentList
        +
        + +
        InstantiatedTypeMember : Membership =
        +      memberElement = InstantiatedTypeReference
        +    | OwnedFeatureChainMember
        +
        + +
        InstantiatedTypeReference : Type =
        +    [QualifiedName]
        +
        + +
        ArgumentList : Feature =
        +    '(' ( PositionalArgumentList | NamedArgumentList )? ')'
        +
        + +
        PositionalArgumentList : Feature =
        +    e.ownedRelationship += ArgumentMember
        +    ( ',' e.ownedRelationship += ArgumentMember )*
        +
        + +
        NamedArgumentList : Feature =
        +    ownedRelationship += NamedArgumentMember
        +    ( ',' ownedRelationship += NamedArgumentMember )*
        +
        + +
        NamedArgumentMember : FeatureMembership =
        +    ownedMemberFeature = NamedArgument
        +
        + +
        NamedArgument : Feature =
        +    ownedRelationship += ParameterRedefinition '='
        +    ownedRelationship += ArgumentValue
        +
        + +
        ParameterRedefinition : Redefinition =
        +    redefinedFeature = [QualifiedName]
        +
        + +
        BodyExpression : FeatureReferenceExpression =
        +    ownedRelationship += ExpressionBodyMember
        +
        + +
        ExpressionBodyMember : FeatureMembership =
        +    ownedMemberFeature = ExpressionBody
        +
        + +
        ExpressionBody : Expression =
        +    '{' FunctionBodyPart '}'
        +
        +
        // Clause 8.2.5.8.4 Literal Expressions
        + +
        LiteralExpression =
        +      LiteralBoolean
        +    | LiteralString
        +    | LiteralInteger
        +    | LiteralReal
        +    | LiteralInfinity
        +
        + +
        LiteralBoolean =
        +    value = BooleanValue
        +
        + +
        BooleanValue : Boolean =
        +    'true' | 'false'
        +
        + +
        LiteralString =
        +    value = STRING_VALUE
        +
        + +
        LiteralInteger =
        +    value = DECIMAL_VALUE
        +
        + +
        LiteralReal =
        +    value = RealValue
        +
        + +
        RealValue : Real =
        +      DECIMAL_VALUE? '.' ( DECIMAL_VALUE | EXPONENTIAL_VALUE )
        +    | EXPONENTIAL_VALUE
        +
        + +
        LiteralInfinity =
        +    '*'
        +
        +

        // Clause 8.2.5.9 Interactions Concrete Syntax

        +
        // Clause 8.2.5.9.1 Interactions
        + +
        Interaction =
        +    TypePrefix 'interaction'
        +    ClassifierDeclaration TypeBody
        +
        +
        // Clause 8.2.5.9.2 Flows
        + +
        Flow =
        +    FeaturePrefix 'flow'
        +    ItemFlowDeclaration TypeBody
        +
        + +
        SuccessionFlow =
        +    FeaturePrefix 'succession' 'flow'
        +    ItemFlowDeclaration TypeBody
        +
        + +
        FlowDeclaration : Flow =
        +      FeatureDeclaration ValuePart?
        +      ( 'of' ownedRelationship += PayloadFeatureMember )?
        +      ( 'from' ownedRelationship += FlowEndMember
        +        'to' ownedRelationship += FlowEndMember )?
        +    | ( isSufficient ?= 'all' )?
        +      ownedRelationship += FlowEndMember 'to'
        +      ownedRelationship += FlowEndMember
        +
        + +
        PayloadFeatureMember : FeatureMembership =
        +    ownedRelatedElement = PayloadFeature
        +
        + +
        PayloadFeature =
        +      Identification PayloadFeatureSpecializationPart ValuePart?
        +    | Identification ValuePart
        +    | ( ownedRelationship += OwnedFeatureTyping
        +      ( ownedRelationship += OwnedMultiplicity )?
        +    | ownedRelationship += OwnedMultiplicity
        +      ( ownedRelationship += OwnedFeatureTyping )?
        +
        + +
        PayloadFeatureSpecializationPart : Feature =
        +      FeatureSpecialization+ MultiplicityPart?
        +      FeatureSpecialization*
        +    | MultiplicityPart FeatureSpecialization+
        +
        + +
        FlowEndMember : EndFeatureMembership =
        +    ownedRelatedElement += FlowEnd
        +
        + +
        FlowEnd =
        +    ( ownedRelationship += OwnedReferenceSubsetting '.' )?
        +    ownedRelationship += FlowFeatureMember
        +
        + +
        FlowFeatureMember : FeatureMembership =
        +    ownedRelatedElement += FlowFeature
        +
        + +
        FlowFeature : Feature =
        +    ownedRelationship += FlowFeatureRedefinition
        +
        +

        // (See Note 1)

        + +
        FlowFeatureRedefinition : Redefinition =
        +    redefinedFeature = [QualifiedName]
        +
        +

        // Notes:

        +
          +
        1. // 1. To ensure that an FlowFeature passes the validateRedefinitionDirectionConformance constraint (see 8.3.3.3.8), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature)
        2. +
        +

        // Clause 8.2.5.10 Feature Values Concrete Syntax

        + +
        ValuePart : Feature =
        +    ownedRelationship += FeatureValue
        +
        + +
        FeatureValue =
        +    ( '='
        +    | isInitial ?= ':='
        +    | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )?
        +    )
        +    ownedRelatedElement += OwnedExpression
        +
        +

        // Clause 8.2.5.11 Multiplicities Concrete Syntax

        + +
        Multiplicity =
        +    MultiplicitySubset | MultiplicityRange
        +
        + +
        MultiplicitySubset : Multiplicity =
        +    'multiplicity' Identification Subsets
        +    TypeBody
        +
        + +
        MultiplicityRange =
        +    'multiplicity' Identification MultiplicityBounds
        +    TypeBody
        +
        + +
        OwnedMultiplicity : OwningMembership =
        +    ownedRelatedElement += OwnedMultiplicityRange
        +
        + +
        OwnedMultiplicityRange : MultiplicityRange =
        +    MultiplicityBounds
        +
        + +
        MultiplicityBounds : MultiplicityRange =
        +    '[' ( ownedRelationship += MultiplicityExpressionMember '..' )?
        +          ownedRelationship += MultiplicityExpressionMember ']'
        +
        + +
        MultiplicityExpressionMember : OwningMembership =
        +    ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression )
        +
        +

        // Clause 8.2.5.12 Metadata Concrete Syntax

        + +
        Metaclass =
        +    TypePrefix 'metaclass'
        +    ClassifierDeclaration TypeBody
        +
        + +
        PrefixMetadataAnnotation : Annotation =
        +    '#' ownedRelatedElement += PrefixMetadataFeature
        +
        + +
        PrefixMetadataMember : OwningMembership =
        +    '#' ownedRelatedElement += PrefixMetadataFeature
        +
        + +
        PrefixMetadataFeature : MetadataFeature :
        +    ownedRelationship += OwnedFeatureTyping
        +
        + +
        MetadataFeature =
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    ( '@' | 'metadata' )
        +    MetadataFeatureDeclaration
        +    ( 'about' ownedRelationship += Annotation
        +      ( ',' ownedRelationship += Annotation )*
        +    )?
        +    MetadataBody
        +
        + +
        MetadataFeatureDeclaration : MetadataFeature =
        +    ( Identification ( ':' | 'typed' 'by' ) )?
        +    ownedRelationship += OwnedFeatureTyping
        +
        + +
        MetadataBody : Feature =
        +    ';' | '{' ( ownedRelationship += MetadataBodyElement )* '}'
        +
        + +
        MetadataBodyElement : Membership =
        +      NonFeatureMember
        +    | MetadataBodyFeatureMember
        +    | AliasMember
        +    | Import
        +
        + +
        MetadataBodyFeatureMember : FeatureMembership =
        +    ownedMemberFeature = MetadataBodyFeature
        +
        + +
        MetadataBodyFeature : Feature =
        +    'feature'? ( ':>>' | 'redefines')? ownedRelationship += OwnedRedefinition
        +    FeatureSpecializationPart? ValuePart?
        +    MetadataBody
        +
        +

        // Clause 8.2.5.13 Packages Concrete Syntax

        + +
        Package =
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    PackageDeclaration PackageBody
        +
        + +
        LibraryPackage =
        +    ( isStandard ?= 'standard' ) 'library'
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    PackageDeclaration PackageBody
        +
        + +
        PackageDeclaration : Package =
        +    'package' Identification
        +
        + +
        PackageBody : Package =
        +      ';'
        +    | '{' ( NamespaceBodyElement
        +          | ownedRelationship += ElementFilterMember
        +          )*
        +      '}'
        +
        + +
        ElementFilterMember : ElementFilterMembership =
        +    MemberPrefix
        +    'filter' condition = OwnedExpression ';'
        +
        +

        // End of BNF + +

        + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf.kebnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf.kebnf new file mode 100644 index 000000000..e4441e46a --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/KerML-textual-bnf.kebnf @@ -0,0 +1,1461 @@ +// Source document: tests/KerML_and_SysML_spec_sources/KerML-spec.html +// Generated by bnf_grammar_processor at: 2025-12-04T19:31:35Z + + +// Part 1 - Kernel Modeling Language (KerML) + +// Clause 8.2 Concrete Syntax + +// Clause 8.2.1 Concrete Syntax Overview + +// Clause 8.2.2 Lexical Structure + +// Clause 8.2.2.1 Line Terminators and White Space + +LINE_TERMINATOR = + implementation defined character sequence + +LINE_TEXT = + character sequence excluding LINE_TERMINATORs + +WHITE_SPACE = + space | tab | form_feed | LINE_TERMINATOR + +// Notes: +// 1. Notation text is divided up into lines separated by line terminators. A line terminator may be a single character (such as a line feed) or a sequence of characters (such as a carriage return/line feed combination). This specification does not require any specific encoding for a line terminator, but any encoding used must be consistent throughout any specific input text. +// 2. Any characters in text line that are not a part of the line terminator are referred to as line text. +// 3. A white space character is a space, tab, form feed or line terminator. Any contiguous sequence of white space characters can be used to separate tokens that would otherwise be considered to be part of a single token. It is otherwise ignored, with the single exception that a line terminator is used to mark the end of a single-line note (see 8.2.2.2). + +// Clause 8.2.2.2 Notes and Comments + +SINGLE_LINE_NOTE = + '//' LINE_TEXT + +MULTILINE_NOTE = + '//*' COMMENT_TEXT '*/' + +REGULAR_COMMENT = + '/*' COMMENT_TEXT '*/' + +COMMENT_TEXT = + ( COMMENT_LINE_TEXT | LINE_TERMINATOR )* + +COMMENT_LINE_TEXT = + LINE_TEXT excluding the sequence '*/' + +// Clause 8.2.2.3 Names + +NAME = + BASIC_NAME | UNRESTRICTED_NAME + +BASIC_NAME = + BASIC_INITIAL_CHARACTER BASIC_NAME_CHARACTER* + +UNRESTRICTED_NAME = + single_quote ( NAME_CHARACTER | ESCAPE_SEQUENCE )* single_quote + +// (See Note 1) + +BASIC_INITIAL_CHARACTER = + ALPHABETIC_CHARACTER | '_' + +BASIC_NAME_CHARACTER = + BASIC_INITIAL_CHARACTER | DECIMAL_DIGIT + +ALPHABETIC_CHARACTER = + any character 'a' through 'z' or 'A' through 'Z' + +DECIMAL_DIGIT = + any character '0' through '9' + +NAME_CHARACTER = + any printable character other than backslash or single_quote + +ESCAPE_SEQUENCE = + +// (See Note 2) + +// Notes: +// 1. The single_quote character is '. The name represented by an UNRESTRICTED_NAME shall consist of the characters within the single quotes, with escape characters resolved as described below. The surrounding single quote characters are not part of the represented name. +// 2. An ESCAPE_SEQUENCE is a sequence of two text characters starting with a backslash that actually denotes only a single character, except for the newline escape sequence, which represents however many characters is necessary to represent an end of line in a specific implementation (see also 8.2.2.1). Table 4 shows the meaning of the allowed escape sequences. The ESCAPE_SEQUENCES in an UNRESTRICTED_NAME shall be replaced by the characters specified as their meanings in the actual represented name. + +// Clause 8.2.2.4 Numeric Values + +DECIMAL_VALUE = + DECIMAL_DIGIT+ + +EXPONENTIAL_VALUE = + DECIMAL_VALUE ('e' | 'E') ('+' | '-')? DECIMAL_VALUE + +// Notes: +// 1. A DECIMAL_VALUE may specify a natural literal, or it may be part of the specification of a real literal (see 8.2.5.8.4). Note that a DECIMAL_VALUE does not include a sign, because negating a literal is an operator in the KerML Expression syntax. +// 2. An EXPONENTIAL_VALUE may be used in the specification of a real literal (see 8.2.5.8.4). Note that a decimal point and fractional part are not included in the lexical structure of an exponential value. They are handled as part of the syntax of real literals. + +// Clause 8.2.2.5 String Value + +STRING_VALUE = + '"' ( STRING_CHARACTER | ESCAPE_SEQUENCE )* '"' + +STRING_CHARACTER = + any printable character other than backslash or '"' + +// Notes: +// 1. ESCAPE_SEQUENCE is specified in 8.2.2.3. + +// Clause 8.2.2.6 Reserved Words + +RESERVED_KEYWORD = + 'about' | 'abstract' | 'alias' | 'all' | 'and' | 'as' | 'assoc' | 'behavior' | 'binding' | 'bool' | 'by' | 'chains' + | 'class' | 'classifier' | 'comment' | 'composite' | 'conjugate' | 'conjugates' | 'conjugation' | 'connector' + | 'const' | 'crosses' | 'datatype' | 'default' | 'dependency' | 'derived' | 'differences' | 'disjoining' | 'disjoint' + | 'doc' | 'else' | 'end' | 'expr' | 'false' | 'feature' | 'featured' | 'featuring' | 'filter' | 'first' | 'flow' + | 'for' | 'from' | 'function' | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'inout' | 'interaction' + | 'intersects' | 'inv' | 'inverse' | 'inverting' | 'istype' | 'language' | 'library' | 'locale' | 'member' | 'meta' + | 'metaclass' | 'metadata' | 'multiplicity' | 'namespace' | 'nonunique' | 'not' | 'null' | 'of' | 'or' | 'ordered' + | 'out' | 'package' | 'portion' | 'predicate' | 'private' | 'protected' | 'public' | 'redefines' | 'redefinition' + | 'references' | 'rep' | 'return' | 'specialization' | 'specializes' | 'standard' | 'step' | 'struct' + | 'subclassifier' | 'subset' | 'subsets' | 'subtype' | 'succession' | 'then' | 'to' | 'true' | 'type' | 'typed' + | 'typing' | 'unions' | 'var' | 'xor' + +// Clause 8.2.2.7 Symbols + +RESERVED_SYMBOL = + '~' | '}' | '|' | '{' | '^' | ']' | '[' | '@' | '??' | '?' | '>=' | '>' | '=>' | '===' | '==' | '=' | '<=' | '<' + | ';' | ':>>' | ':>' | ':=' | '::>' | '::' | ':' | '/' | '.?' | '..' | '.' | '->' | '-' | ',' | '+' | '**' | '*' | ')' + | '(' | '&' | '%' | '$' | '#' | '!==' | '!=' + +TYPED_BY = ':' | 'typed' 'by' + +SPECIALIZES = ':>' | 'specializes' + +SUBSETS = ':>' | 'subsets' + +REFERENCES = '::>' | 'references' + +CROSSES = '=>' | 'crosses' + +REDEFINES = ':>>' | 'redefines' + +CONJUGATES = '~' | 'conjugates' + +// Clause 8.2.3 Root Concrete Syntax + +// Clause 8.2.3.1 Elements and Relationships Concrete Syntax + +Identification : Element = + ( '<' declaredShortName = NAME '>' )? + ( declaredName = NAME )? + +RelationshipBody : Relationship = + ';' | '{' RelationshipOwnedElement* '}' + +RelationshipOwnedElement : Relationship = + ownedRelatedElement += OwnedRelatedElement + | ownedRelationship += OwnedAnnotation + +OwnedRelatedElement : Element = + NonFeatureElement | FeatureElement + +// Clause 8.2.3.2 Dependencies Concrete Syntax + +Dependency = + ( ownedRelationship += PrefixMetadataAnnotation )* + 'dependency' ( Identification? 'from' )? + client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to' + supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )* + RelationshipBody + +// Notes: +// 1. PrefixMetadataAnnotation is defined in the Kernel layer (see 8.2.5.12). + +// Clause 8.2.3.3 Annotations Concrete Syntax + +// Clause 8.2.3.3.1 Annotations + +Annotation = + annotatedElement = [QualifiedName] + +OwnedAnnotation : Annotation = + ownedRelatedElement += AnnotatingElement + +AnnotatingElement = + Comment + | Documentation + | TextualRepresentation + | MetadataFeature + +// Notes: +// 1. MetadataFeature is defined in the Kernel layer (see 8.2.5.12). + +// Clause 8.2.3.3.2 Comments and Documentation + +Comment = + ( 'comment' Identification + ( 'about' ownedRelationsip += Annotation + ( ',' ownedRelationship += Annotation )* + )? + )? + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +Documentation = + 'doc' Identification + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +// Notes: +// 1. The text of a lexical REGULAR_COMMENT or PREFIX_COMMENT shall be processed as follows before it is included as the body of a Comment or Documentation: +// • Remove the initial /* and final */ characters. +// • Remove any white space immediately after the initial /*, up to and including the first line terminator (if any). +// • On each subsequent line of the text: +// • Strip initial white space other than line terminators. +// • Then, if the first remaining character is "*", remove it. +// • Then, if the first remaining character is now a space, remove it. +// 2. The body text of a Comment can include markup information (such as HTML), and a conforming tool may display such text as rendered according to the markup. However, marked up "rich text" for a Comment written using the KerML textual concrete syntax shall be stored in the Comment body in plain text including all mark up text, with all line terminators and white space included as entered, other than what is removed according to the rules above. + +// Clause 8.2.3.3.3 Textual Representation + +TextualRepresentation = + ( 'rep' Identification )? + 'language' language = STRING_VALUE + body = REGULAR_COMMENT + +// Notes: +// 1. The lexical text of a REGULAR_COMMENT shall be processed as specified in 8.2.3.3.2 for Comments before being included as the body of a TextualRepresentation. +// 2. See also 8.3.2.3.6 on the standard language names recognized for a TextualRepresentation. + +// Clause 8.2.3.4 Namespaces Concrete Syntax + +// Clause 8.2.3.4.1 Namespaces + +RootNamespace : Namespace = + NamespaceBodyElement* + +// (See Note 1) + +Namespace = + ( ownedRelationship += PrefixMetadataMember )* + NamespaceDeclaration NamespaceBody + +// (See Note 2) + +NamespaceDeclaration : Namespace = + 'namespace' Identification + +NamespaceBody : Namespace = + ';' | '{' NamespaceBodyElement* '}' + +NamespaceBodyElement : Namespace = + ownedRelationship += NamespaceMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +MemberPrefix : Membership = + ( visibility = VisibilityIndicator )? + +VisibilityIndicator : VisibilityKind = + 'public' | 'private' | 'protected' + +NamespaceMember : OwningMembership = + NonFeatureMember + | NamespaceFeatureMember + +NonFeatureMember : OwningMembership = + MemberPrefix + ownedRelatedElement += MemberElement + +NamespaceFeatureMember : OwningMembership = + MemberPrefix + ownedRelatedElement += FeatureElement + +AliasMember : Membership = + MemberPrefix + 'alias' ( '<' memberShortName = NAME '>' )? + ( memberName = NAME )? + 'for' memberElement = [QualifiedName] + RelationshipBody + +QualifiedName = + ( '$' '::' )? ( NAME '::' )* NAME + +// (See Note 3) + +// Notes: +// 1. A root Namespace is a Namespace that has no owningNamespace (see 8.3.2.4). Every Element other than a root Namespace must be contained, directly or indirectly, within some root Namespace. Therefore, every valid KerML concrete syntax text can be parsed starting from the RootNamespace production. +// 2. PrefixMetadataMember is defined in the Kernel layer (see 8.2.5.12). +// 3. A qualified name is notated as a sequence of segment names separated by "::" punctuation, optionally with the global scope qualifier "$" as an initial segment. An unqualified name can be considered the degenerate case of a qualified name with a single segment name. A qualified name is used in the KerML textual concrete syntax to identify an Element that is being referred to in the representation of another Element. A qualified name used in this way does not appear in the corresponding abstract syntax—instead, the abstract syntax representation contains an actual reference to the identified Element. Name resolution is the process of determining the Element that is identified by a qualified name. The segment names of the qualified name other than the last identify a sequence of nested Namespaces that provide the context for resolving the final segment name (see 8.2.3.5). The notation [QualifiedName] is used in concrete syntax grammar productions to indicate the result of resolving text parsed as a QualifiedName (see also 8.2.1). + +// Clause 8.2.3.4.2 Imports + +Import = + visibility = VisibilityIndicator + 'import' ( isImportAll ?= 'all' )? + ImportDeclaration RelationshipBody + +ImportDeclaration : Import + MembershipImport | NamespaceImport + +MembershipImport = + importedMembership = [QualifiedName] + ( '::' isRecursive ?= '**' )? + +// (See Note 1) + +NamespaceImport = + importedNamespace = [QualifiedName] '::' '*' + ( '::' isRecursive ?= '**' )? + | importedNamespace = FilterPackage + { ownedRelatedElement += importedNamespace } + +FilterPackage : Package = + ownedRelationship += ImportDeclaration + ( ownedRelationship += FilterPackageMember )+ + +FilterPackageMember : ElementFilterMembership = + '[' ownedRelatedElement += OwnedExpression ']' + +// Notes: +// 1. The importedMembership of a MembershipImport is the single case in which the Element required from the resolution [QualifiedName] is the actual Membership identified by the QualifedName, not the memberElement of that Membership (see 8.2.3.5). + +// Clause 8.2.3.4.3 Namespace Elements + +MemberElement : Element = + AnnotatingElement | NonFeatureElement + +NonFeatureElement : Element = + Dependency + | Namespace + | Type + | Classifier + | DataType + | Class + | Structure + | Metaclass + | Association + | AssociationStructure + | Interaction + | Behavior + | Function + | Predicate + | Multiplicity + | Package + | LibraryPackage + | Specialization + | Conjugation + | Subclassification + | Disjoining + | FeatureInverting + | FeatureTyping + | Subsetting + | Redefinition + | TypeFeaturing + +FeatureElement : Feature = + Feature + | Step + | Expression + | BooleanExpression + | Invariant + | Connector + | BindingConnector + | Succession + | Flow + | SuccessionFlow + +// Clause 8.2.3.5 Name Resolution + +// Clause 8.2.3.5.1 Name Resolution Overview + +// Clause 8.2.3.5.2 Local and Global Namespaces + +// Clause 8.2.3.5.3 Local and Visible Resolution + +// Clause 8.2.3.5.4 Full Resolution + +// Clause 8.2.4 Core Concrete Syntax + +// Clause 8.2.4.1 Types Concrete Syntax + +// Clause 8.2.4.1.1 Types + +Type = + TypePrefix 'type' + TypeDeclaration TypeBody + +TypePrefix : Type = + ( isAbstract ?= 'abstract' )? + ( ownedRelationship += PrefixMetadataMember )* + +TypeDeclaration : Type = + ( isSufficient ?= 'all' )? Identification + ( ownedRelationship += OwnedMultiplicity )? + ( SpecializationPart | ConjugationPart )+ + TypeRelationshipPart* + +SpecializationPart : Type = + SPECIALIZES ownedRelationship += OwnedSpecialization + ( ',' ownedRelationship += OwnedSpecialization )* + +ConjugationPart : Type = + CONJUGATES ownedRelationship += OwnedConjugation + +TypeRelationshipPart : Type = + DisjoiningPart + | UnioningPart + | IntersectingPart + | DifferencingPart + +DisjoiningPart : Type = + 'disjoint' 'from' ownedRelationship += OwnedDisjoining + ( ',' ownedRelationship += OwnedDisjoining )* + +UnioningPart : Type = + 'unions' ownedRelationship += Unioning + ( ',' ownedRelationship += Unioning )* + +IntersectingPart : Type = + 'intersects' ownedRelationship += Intersecting + ( ',' ownedRelationship += Intersecting )* + +DifferencingPart : Type = + 'differences' ownedRelationship += Differencing + ( ',' ownedRelationship += Differencing )* + +TypeBody : Type = + ';' | '{' TypeBodyElement* '}' + +TypeBodyElement : Type = + ownedRelationship += NonFeatureMember + | ownedRelationship += FeatureMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +// Clause 8.2.4.1.2 Specialization + +Specialization = + ( 'specialization' Identification )? + 'subtype' SpecificType + SPECIALIZES GeneralType + RelationshipBody + +OwnedSpecialization : Specialization = + GeneralType + +SpecificType : Specialization : + specific = [QualifiedName] + | specific += OwnedFeatureChain + { ownedRelatedElement += specific } + +GeneralType : Specialization = + general = [QualifiedName] + | general += OwnedFeatureChain + { ownedRelatedElement += general } + +// Clause 8.2.4.1.3 Conjugation + +Conjugation = + ( 'conjugation' Identification )? + 'conjugate' + ( conjugatedType = [QualifiedName] + | conjugatedType = FeatureChain + { ownedRelatedElement += conjugatedType } + ) + CONJUGATES + ( originalType = [QualifiedName] + | originalType = FeatureChain + { ownedRelatedElement += originalType } + ) + RelationshipBody + +OwnedConjugation : Conjugation = + originalType = [QualifiedName] + | originalType = FeatureChain + { ownedRelatedElement += originalType } + +// Clause 8.2.4.1.4 Disjoining + +Disjoining = + ( 'disjoining' Identification )? + 'disjoint' + ( typeDisjoined = [QualifiedName] + | typeDisjoined = FeatureChain + { ownedRelatedElement += typeDisjoined } + ) + 'from' + ( disjoiningType = [QualifiedName] + | disjoiningType = FeatureChain + { ownedRelatedElement += disjoiningType } + ) + RelationshipBody + +OwnedDisjoining : Disjoining = + disjoiningType = [QualifiedName] + | disjoiningType = FeatureChain + { ownedRelatedElement += disjoiningType } + +// Clause 8.2.4.1.5 Unioning, Intersecting and Differencing + +Unioning = + unioningType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +Intersecting = + intersectingType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +Differencing = + differencingType = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + +// Clause 8.2.4.1.6 Feature Membership + +FeatureMember : OwningMembership = + TypeFeatureMember + | OwnedFeatureMember + +TypeFeatureMember : OwningMembership = + MemberPrefix 'member' ownedRelatedElement += FeatureElement + +OwnedFeatureMember : FeatureMembership = + MemberPrefix ownedRelatedElement += FeatureElement + +// Clause 8.2.4.2 Classifiers Concrete Syntax + +// Clause 8.2.4.2.1 Classifiers + +Classifier = + TypePrefix 'classifier' + ClassifierDeclaration TypeBody + +ClassifierDeclaration : Classifier = + ( isSufficient ?= 'all' )? Identification + ( ownedRelationship += OwnedMultiplicity )? + ( SuperclassingPart | ConjugationPart )? + TypeRelationshipPart* + +SuperclassingPart : Classifier = + SPECIALIZES ownedRelationship += OwnedSubclassification + ( ',' ownedRelationship += OwnedSubclassification )* + +// Clause 8.2.4.2.2 Subclassification + +Subclassification = + ( 'specialization' Identification )? + 'subclassifier' subclassifier = [QualifiedName] + SPECIALIZES superclassifier = [QualifiedName] + RelationshipBody + +OwnedSubclassification : Subclassification = + superclassifier = [QualifiedName] + +// Clause 8.2.4.3 Features Concrete Syntax + +// Clause 8.2.4.3.1 Features + +Feature = + ( FeaturePrefix + ( 'feature' | ownedRelationship += PrefixMetadataMember ) + FeatureDeclaration? + ) + | ( EndFeaturePrefix | BasicFeaturePrefix ) + FeatureDeclaration + ) + ValuePart? TypeBody + +// (See Note 1) + +EndFeaturePrefix : Feature = + ( isConstant ?= 'const' { isVariable = true } )? + isEnd ?= 'end' + +BasicFeaturePrefix : Feature : + ( direction = FeatureDirection )? + ( isDerived ?= 'derived' )? + ( isAbstract ?= 'abstract' )? + ( isComposite ?= 'composite' | isPortion ?= 'portion' )? + ( isVariable ?= 'var' | isConstant ?= 'const' { isVariable = true } )? + +FeaturePrefix : + ( EndFeaturePrefix ( ownedRelationship += OwnedCrossFeatureMember )? + | BasicFeaturePrefix + ) + ( ownedRelationship += PrefixMetadataMember )* + +// (See Note 1) + +OwnedCrossFeatureMember : OwningMembership = + ownedRelatedElement += OwnedCrossFeature + +OwnedCrossFeature : Feature = + BasicFeaturePrefix FeatureDeclaration + +FeatureDirection : FeatureDirectionKind = + 'in' | 'out' | 'inout' + +FeatureDeclaration : Feature = + ( isSufficient ?= 'all' )? + ( FeatureIdentification + ( FeatureSpecializationPart | ConjugationPart )? + | FeatureSpecializationPart + | ConjugationPart + ) + FeatureRelationshipPart* + +FeatureIdentification : Feature = + '<' declaredShortName = NAME '>' ( declaredName = NAME )? + | declaredName = NAME + +FeatureRelationshipPart : Feature = + TypeRelationshipPart + | ChainingPart + | InvertingPart + | TypeFeaturingPart + +ChainingPart : Feature = + 'chains' + ( ownedRelationship += OwnedFeatureChaining + | FeatureChain ) + +InvertingPart : Feature = + 'inverse' 'of' ownedRelationship += OwnedFeatureInverting + +TypeFeaturingPart : Feature = + 'featured' 'by' ownedRelatioship += OwnedTypeFeaturing + ( ',' ownedTypeFeaturing += OwnedTypeFeaturing )* + +FeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? FeatureSpecialization* + | MultiplicityPart FeatureSpecialization* + +MultiplicityPart : Feature = + ownedRelationship += OwnedMultiplicity + | ( ownedRelationship += OwnedMultiplicity )? + ( isOrdered ?= 'ordered' ( {isUnique = false} 'nonunique' )? + | {isUnique = false} 'nonunique' ( isOrdered ?= 'ordered' )? ) + +FeatureSpecialization : Feature = + Typings | Subsettings | References | Crosses | Redefinitions + +Typings : Feature = + TypedBy ( ',' ownedRelationship += OwnedFeatureTyping )* + +TypedBy : Feature = + TYPED_BY ownedRelationship += OwnedFeatureTyping + +Subsettings : Feature = + Subsets ( ',' ownedRelationship += OwnedSubsetting )* + +Subsets : Feature = + SUBSETS ownedRelationship += OwnedSubsetting + +References : Feature = + REFERENCES ownedRelationship += OwnedReferenceSubsetting + +Crosses : Feature = + CROSSES ownedRelationship += OwnedCrossSubsetting + +Redefinitions : Feature = + Redefines ( ',' ownedRelationship += OwnedRedefinition )* + +Redefines : Feature = + REDEFINES ownedRelationship += OwnedRedefinition + +// Notes: +// 1. PrefixMetadataMember is defined in the Kernel layer (see 8.3.4.12). + +// Clause 8.2.4.3.2 Feature Typing + +FeatureTyping = + ( 'specialization' Identification )? + 'typing' typedFeature = [QualifiedName] + TYPED_BY GeneralType + RelationshipBody + +OwnedFeatureTyping : FeatureTyping = + GeneralType + +// Clause 8.2.4.3.3 Subsetting + +Subsetting = + ( 'specialization' Identification )? + 'subset' SpecificType + SUBSETS GeneralType + RelationshipBody + +OwnedSubsetting : Subsetting = + GeneralType + +OwnedReferenceSubsetting : ReferenceSubsetting = + GeneralType + +OwnedCrossSubsetting : CrossSubsetting = + GeneralType + +// Clause 8.2.4.3.4 Redefinition + +Redefinition = + ( 'specialization' Identification )? + 'redefinition' SpecificType + REDEFINES GeneralType + RelationshipBody + +OwnedRedefinition : Redefinition = + GeneralType + +// Clause 8.2.4.3.5 Feature Chaining + +OwnedFeatureChain : Feature = + FeatureChain + +FeatureChain : Feature = + ownedRelationship += OwnedFeatureChaining + ( '.' ownedRelationship += OwnedFeatureChaining )+ + +OwnedFeatureChaining : FeatureChaining = + chainingFeature = [QualifiedName] + +// Clause 8.2.4.3.6 Feature Inverting + +FeatureInverting = + ( 'inverting' Identification? )? + 'inverse' + ( featureInverted = [QualifiedName] + | featureInverted = OwnedFeatureChain + { ownedRelatedElement += featureInverted } + ) + 'of' + ( invertingFeature = [QualifiedName] + | ownedRelatedElement += OwnedFeatureChain + { ownedRelatedElement += invertingFeature } + ) + RelationshipBody + +OwnedFeatureInverting : FeatureInverting = + invertingFeature = [QualifiedName] + | invertingFeature = OwnedFeatureChain + { ownedRelatedElement += invertingFeature } + +// Clause 8.2.4.3.7 Type Featuring + +TypeFeaturing = + 'featuring' ( Identification 'of' )? + featureOfType = [QualifiedName] + 'by' featuringType = [QualifiedName] + RelationshipBody + +OwnedTypeFeaturing : TypeFeaturing = + featuringType = [QualifiedName] + +// Clause 8.2.5 Kernel Concrete Syntax + +// Clause 8.2.5.1 Data Types Concrete Syntax + +DataType = + TypePrefix 'datatype' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.2 Classes Concrete Syntax + +Class = + TypePrefix 'class' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.3 Structures Concrete Syntax + +Structure = + TypePrefix 'struct' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.4 Associations Concrete Syntax + +Association = + TypePrefix 'assoc' + ClassifierDeclaration TypeBody + +AssociationStructure = + TypePrefix 'assoc' 'struct' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.5 Connectors Concrete Syntax + +// Clause 8.2.5.5.1 Connectors + +Connector = + FeaturePrefix 'connector' + ( FeatureDeclaration? ValuePart? + | ConnectorDeclaration + ) + TypeBody + +ConnectorDeclaration : Connector = + BinaryConnectorDeclaration | NaryConnectorDeclaration + +BinaryConnectorDeclaration : Connector = + ( FeatureDeclaration? 'from' | isSufficient ?= 'all' 'from'? )? + ownedRelationship += ConnectorEndMember 'to' + ownedRelationship += ConnectorEndMember + +NaryConnectorDeclaration : Connector = + FeatureDeclaration? + '(' ownedRelationship += ConnectorEndMember ',' + ownedRelationship += ConnectorEndMember + ( ',' ownedRelationship += ConnectorEndMember )* + ')' + +ConnectorEndMember : EndFeatureMembership = + ownedRelatedElement += ConnectorEnd + +ConnectorEnd : Feature = + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +OwnedCrossMultiplicityMember : OwningMembership = + ownedRelatedElement += OwnedCrossMultiplicity + +OwnedCrossMultiplicity : Feature = + ownedRelationship += OwnedMultiplicity + +// Clause 8.2.5.5.2 Binding Connectors + +BindingConnector = + FeaturePrefix 'binding' + BindingConnectorDeclaration TypeBody + +BindingConnectorDeclaration : BindingConnector = + FeatureDeclaration + ( 'of' ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember )? + | ( isSufficient ?= 'all' )? + ( 'of'? ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember )? + +// Clause 8.2.5.5.3 Successions + +Succession = + FeaturePrefix 'succession' + SuccessionDeclaration TypeBody + +SuccessionDeclaration : Succession = + FeatureDeclaration + ( 'first' ownedRelationship += ConnectorEndMember + 'then' ownedRelationship += ConnectorEndMember )? + | ( s.isSufficient ?= 'all' )? + ( 'first'? ownedRelationship += ConnectorEndMember + 'then' ownedRelationship += ConnectorEndMember )? + +// Clause 8.2.5.6 Behaviors Concrete Syntax + +// Clause 8.2.5.6.1 Behaviors + +Behavior = + TypePrefix 'behavior' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.6.2 Steps + +Step = + FeaturePrefix + 'step' FeatureDeclaration ValuePart? + TypeBody + +// Clause 8.2.5.7 Functions Concrete Syntax + +// Clause 8.2.5.7.1 Functions + +Function = + TypePrefix 'function' + ClassifierDeclaration FunctionBody + +FunctionBody : Type = + ';' | '{' FunctionBodyPart '}' + +FunctionBodyPart : Type = + ( TypeBodyElement + | ownedRelationship += ReturnFeatureMember + )* + ( ownedRelationship += ResultExpressionMember )? + +ReturnFeatureMember : ReturnParameterMembership = + MemberPrefix 'return' + ownedRelatedElement += FeatureElement + +ResultExpressionMember : ResultExpressionMembership = + MemberPrefix + ownedRelatedElement += OwnedExpression + +// Clause 8.2.5.7.2 Expressions + +Expression = + FeaturePrefix + 'expr' FeatureDeclaration ValuePart? + FunctionBody + +// Clause 8.2.5.7.3 Predicates + +Predicate = + TypePrefix 'predicate' + ClassifierDeclaration FunctionBody + +// Clause 8.2.5.7.4 Boolean Expressions and Invariants + +BooleanExpression = + FeaturePrefix + 'bool' FeatureDeclaration ValuePart? + FunctionBody + +Invariant = + FeaturePrefix + 'inv' ( 'true' | isNegated ?= 'false' )? + FeatureDeclaration ValuePart? + FunctionBody + +// Clause 8.2.5.8 Expressions Concrete Syntax + +// Clause 8.2.5.8.1 Operator Expressions + +OwnedExpressionReferenceMember : FeatureMembership = + ownedRelationship += OwnedExpressionReference + +OwnedExpressionReference : FeatureReferenceExpression = + ownedRelationship += OwnedExpressionMember + +OwnedExpressionMember : FeatureMembership = + ownedFeatureMember = OwnedExpression + +OwnedExpression : Expression = + ConditionalExpression + | ConditionalBinaryOperatorExpression + | BinaryOperatorExpression + | UnaryOperatorExpression + | ClassificationExpression + | MetaclassificationExpression + | ExtentExpression + | PrimaryExpression + +ConditionalExpression : OperatorExpression = + operator = 'if' + ownedRelationship += ArgumentMember '?' + ownedRelationship += ArgumentExpressionMember 'else' + ownedRelationship += ArgumentExpressionMember + ownedRelationship += EmptyResultMember + +ConditionalBinaryOperatorExpression : OperatorExpression = + ownedRelationship += ArgumentMember + operator = ConditionalBinaryOperator + ownedRelationship += ArgumentExpressionMember + ownedRelationship += EmptyResultMember + +ConditionalBinaryOperator = + '??' | 'or' | 'and' | 'implies' + +BinaryOperatorExpression : OperatorExpression = + ownedRelationship += ArgumentMember + operator = BinaryOperator + ownedRelationship += ArgumentMember + ownedRelationship += EmptyResultMember + +BinaryOperator = + '|' | '&' | 'xor' | '..' + | '==' | '!=' | '===' | '!==' + | '<' | '>' | '<=' | '>=' + | '+' | '-' | '*' | '/' + | '%' | '^' | '**' + +UnaryOperatorExpression : OperatorExpression = + operator = UnaryOperator + ownedRelationship += ArgumentMember + ownedRelationship += EmptyResultMember + +UnaryOperator = + '+' | '-' | '~' | 'not' + +ClassificationExpression : OperatorExpression = + ( ownedRelationship += ArgumentMember )? + ( operator = ClassificationTestOperator + ownedRelationship += TypeReferenceMember + | operator = CastOperator + ownedRelationship += TypeResultMember + ) + ownedRelationship += EmptyResultMember + +ClassificationTestOperator = + 'istype' | 'hastype' | '@' + +CastOperator = + 'as' + +MetaclassificationExpression : OperatorExpression = + ownedRelationship += MetadataArgumentMember + ( operator = MetaClassificationTestOperator + ownedRelationship += TypeReferenceMember + | operator = MetaCastOperator + ownedRelationship += TypeResultMember + ) + ownedRelationship += EmptyResultMember + +ArgumentMember : ParameterMembership = + ownedMemberParameter = Argument + +Argument : Feature = + ownedRelationship += ArgumentValue + +ArgumentValue : FeatureValue = + value = OwnedExpression + +ArgumentExpressionMember : FeatureMembership = + ownedRelatedElement += ArgumentExpression + +ArgumentExpression : Feature = + ownedRelationship += ArgumentExpressionValue + +ArgumentExpressionValue : FeatureValue = + value = OwnedExpressionReference + +MetadataArgumentMember : ParameterMembership = + ownedRelatedElement += MetadataArgument + +MetadataArgument : Feature = + ownedRelationship += MetadataValue + +MetadataValue : FeatureValue = + value = MetadataReference + +MetadataReference : MetadataAccessExpression = + ownedRelationship += ElementReferenceMember + +MetaclassificationTestOperator = + '@@' + +MetaCastOperator = + 'meta' + +ExtentExpression : OperatorExpression = + operator = 'all' + ownedRelationship += TypeReferenceMember + +TypeReferenceMember : ParameterMembership = + ownedMemberFeature = TypeReference + +TypeResultMember : ResultParameterMembership = + ownedMemberFeature = TypeReference + +TypeReference : Feature = + ownedRelationship += ReferenceTyping + +ReferenceTyping : FeatureTyping = + type = [QualifiedName] + +EmptyResultMember : ReturnParameterMembership = + ownedRelatedElement += EmptyFeature + +EmptyFeature : Feature = + { } + +// Notes: +// 1. OperatorExpressions provide a shorthand notation for InvocationExpressions that invoke a library Function represented as an operator symbol. Table 5 shows the mapping from operator symbols to the Functions they represent from the Kernel Model Library (see Clause 9). An OperatorExpression contains subexpressions called its operands that generally correspond to the argument Expressions of the OperatorExpression, except in the case of operators representing control Functions, in which case the evaluation of certain operands is as determined by the Function (see 8.4.4.9 for details). +// 2. Though not directly expressed in the syntactic productions given above, in any OperatorExpression containing nested OperatorExpressions, the nested OperatorExpressions shall be implicitly grouped according to the precedence of the operators involved, as given in Table 6. OperatorExpressions with higher precedence operators shall be grouped more tightly than those with lower precedence operators. Further, all BinaryOperators other than exponentiation are left-associative (i.e, they group to the left), while the exponentiation operators (^ and **) are right-associative (i.e., they group to the right). +// 3. The unary operator symbol ~ maps to the library Function DataFunctions::'~', as shown in Table 5. This abstract Function may be given a concrete definition in a domain-specific Function library, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used. + +// Clause 8.2.5.8.2 Primary Expressions + +PrimaryExpression : Expression = + FeatureChainExpression + | NonFeatureChainPrimaryExpression + +PrimaryArgumentValue : FeatureValue = + value = PrimaryExpression + +PrimaryArgument : Feature = + ownedRelationship += PrimaryArgumentValue + +PrimaryArgumentMember : ParameterMembership = + ownedMemberParameter = PrimaryArgument + +NonFeatureChainPrimaryExpression : Expression = + BracketExpression + | IndexExpression + | SequenceExpression + | SelectExpression + | CollectExpression + | FunctionOperationExpression + | BaseExpression + +NonFeatureChainPrimaryArgumentValue : FeatureValue = + value = NonFeatureChainPrimaryExpression + +NonFeatureChainPrimaryArgument : Feature = + ownedRelationship += NonFeatureChainPrimaryArgumentValue + +NonFeatureChainPrimaryArgumentMember : ParameterMembership = + ownedMemberParameter = PrimaryArgument + +BracketExpression : OperatorExpression = + ownedRelationship += PrimaryArgumentMember + operator = '[' + ownedRelationship += SequenceExpressionListMember ']' + +IndexExpression = + ownedRelationship += PrimaryArgumentMember '#' + '(' ownedRelationship += SequenceExpressionListMember ')' + +SequenceExpression : Expression = + '(' SequenceExpressionList ')' + +SequenceExpressionList : Expression = + OwnedExpression ','? | SequenceOperatorExpression + +SequenceOperatorExpression : OperatorExpression = + ownedRelationship += OwnedExpressionMember + operator = ',' + ownedRelationship += SequenceExpressionListMember + +SequenceExpressionListMember : FeatureMembership = + ownedMemberFeature = SequenceExpressionList + +FeatureChainExpression = + ownedRelationship += NonFeatureChainPrimaryArgumentMember '.' + ownedRelationship += FeatureChainMember + +CollectExpression = + ownedRelationship += PrimaryArgumentMember '.' + ownedRelationship += BodyArgumentMember + +SelectExpression = + ownedRelationship += PrimaryArgumentMember '.?' + ownedRelationship += BodyArgumentMember + +FunctionOperationExpression : InvocationExpression = + ownedRelationship += PrimaryArgumentMember '->' + ownedRelationship += InvocationTypeMember + ( ownedRelationship += BodyArgumentMember + | ownedRelationship += FunctionReferenceArgumentMember + | ArgumentList ) + ownedRelationship += EmptyResultMember + +BodyArgumentMember : ParameterMembership = + ownedMemberParameter = BodyArgument + +BodyArgument : Feature = + ownedRelationship += BodyArgumentValue + +BodyArgumentValue : FeatureValue = + value = BodyExpression + +FunctionReferenceArgumentMember : ParameterMembership = + ownedMemberParameter = FunctionReferenceArgument + +FunctionReferenceArgument : Feature = + ownedRelationship += FunctionReferenceArgumentValue + +FunctionReferenceArgumentValue : FeatureValue = + value = FunctionReferenceExpression + +FunctionReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FunctionReferenceMember + +FunctionReferenceMember : FeatureMembership = + ownedMemberFeature = FunctionReference + +FunctionReference : Expression = + ownedRelationship += ReferenceTyping + +FeatureChainMember : Membership = + FeatureReferenceMember + | OwnedFeatureChainMember + +OwnedFeatureChainMember : OwningMembership = + ownedMemberElement = FeatureChain + +// Notes: +// 1. Primary expressions provide additional shorthand notations for certain kinds of InvocationExpressions. For those cases in which the InvocationExpression is an OperatorExpression, its operator shall be resolved to the appropriate library function as given in Table 7. Note also that, for a CollectionExpression or SelectExpression, the abstract syntax constrains the operator to be collect and select, respectively, separately from the . and .? symbols used in their concrete syntax notation (see 8.3.4.8.2 and 8.3.4.8.18). +// 2. The grammar allows a bracket syntax [...]that parses to an invocation of the library Function BaseFunctions::'[', as shown in Table 7. This notation is available for use with domain-specific library models that given a concrete definition to the abstract base '[' Function, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used. + +// Clause 8.2.5.8.3 Base Expressions + +BaseExpression : Expression = + NullExpression + | LiteralExpression + | FeatureReferenceExpression + | MetadataAccessExpression + | InvocationExpression + | ConstructorExpression + | BodyExpression + +NullExpression : NullExpression = + 'null' | '(' ')' + +FeatureReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FeatureReferenceMember + ownedRelationship += EmptyResultMember + +FeatureReferenceMember : Membership = + memberElement = FeatureReference + +FeatureReference : Feature = + [QualifiedName] + +MetadataAccessExpression = + ownedRelationship += ElementReferenceMember '.' 'metadata' + +ElementReferenceMember : Membership = + memberElement = [QualifiedName] + +InvocationExpression : InvocationExpression = + ownedRelationship += InstatiatedTypeMember + ArgumentList + ownedRelationship += EmptyResultMember + +ConstructorExpression = + 'new' ownedRelationship += InstantiatedTypeMember + ownedRelationship += ConstructorResultMember + +ConstructorResultMember : ReturnParameterMembership = + ownedRelatedElement += ConstructorResult + +ConstructorResult : Feature = + ArgumentList + +InstantiatedTypeMember : Membership = + memberElement = InstantiatedTypeReference + | OwnedFeatureChainMember + +InstantiatedTypeReference : Type = + [QualifiedName] + +ArgumentList : Feature = + '(' ( PositionalArgumentList | NamedArgumentList )? ')' + +PositionalArgumentList : Feature = + e.ownedRelationship += ArgumentMember + ( ',' e.ownedRelationship += ArgumentMember )* + +NamedArgumentList : Feature = + ownedRelationship += NamedArgumentMember + ( ',' ownedRelationship += NamedArgumentMember )* + +NamedArgumentMember : FeatureMembership = + ownedMemberFeature = NamedArgument + +NamedArgument : Feature = + ownedRelationship += ParameterRedefinition '=' + ownedRelationship += ArgumentValue + +ParameterRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + +BodyExpression : FeatureReferenceExpression = + ownedRelationship += ExpressionBodyMember + +ExpressionBodyMember : FeatureMembership = + ownedMemberFeature = ExpressionBody + +ExpressionBody : Expression = + '{' FunctionBodyPart '}' + +// Clause 8.2.5.8.4 Literal Expressions + +LiteralExpression = + LiteralBoolean + | LiteralString + | LiteralInteger + | LiteralReal + | LiteralInfinity + +LiteralBoolean = + value = BooleanValue + +BooleanValue : Boolean = + 'true' | 'false' + +LiteralString = + value = STRING_VALUE + +LiteralInteger = + value = DECIMAL_VALUE + +LiteralReal = + value = RealValue + +RealValue : Real = + DECIMAL_VALUE? '.' ( DECIMAL_VALUE | EXPONENTIAL_VALUE ) + | EXPONENTIAL_VALUE + +LiteralInfinity = + '*' + +// Clause 8.2.5.9 Interactions Concrete Syntax + +// Clause 8.2.5.9.1 Interactions + +Interaction = + TypePrefix 'interaction' + ClassifierDeclaration TypeBody + +// Clause 8.2.5.9.2 Flows + +Flow = + FeaturePrefix 'flow' + ItemFlowDeclaration TypeBody + +SuccessionFlow = + FeaturePrefix 'succession' 'flow' + ItemFlowDeclaration TypeBody + +FlowDeclaration : Flow = + FeatureDeclaration ValuePart? + ( 'of' ownedRelationship += PayloadFeatureMember )? + ( 'from' ownedRelationship += FlowEndMember + 'to' ownedRelationship += FlowEndMember )? + | ( isSufficient ?= 'all' )? + ownedRelationship += FlowEndMember 'to' + ownedRelationship += FlowEndMember + +PayloadFeatureMember : FeatureMembership = + ownedRelatedElement = PayloadFeature + +PayloadFeature = + Identification PayloadFeatureSpecializationPart ValuePart? + | Identification ValuePart + | ( ownedRelationship += OwnedFeatureTyping + ( ownedRelationship += OwnedMultiplicity )? + | ownedRelationship += OwnedMultiplicity + ( ownedRelationship += OwnedFeatureTyping )? + +PayloadFeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? + FeatureSpecialization* + | MultiplicityPart FeatureSpecialization+ + +FlowEndMember : EndFeatureMembership = + ownedRelatedElement += FlowEnd + +FlowEnd = + ( ownedRelationship += OwnedReferenceSubsetting '.' )? + ownedRelationship += FlowFeatureMember + +FlowFeatureMember : FeatureMembership = + ownedRelatedElement += FlowFeature + +FlowFeature : Feature = + ownedRelationship += FlowFeatureRedefinition + +// (See Note 1) + +FlowFeatureRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + +// Notes: +// 1. To ensure that an FlowFeature passes the validateRedefinitionDirectionConformance constraint (see 8.3.3.3.8), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature) + +// Clause 8.2.5.10 Feature Values Concrete Syntax + +ValuePart : Feature = + ownedRelationship += FeatureValue + +FeatureValue = + ( '=' + | isInitial ?= ':=' + | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )? + ) + ownedRelatedElement += OwnedExpression + +// Clause 8.2.5.11 Multiplicities Concrete Syntax + +Multiplicity = + MultiplicitySubset | MultiplicityRange + +MultiplicitySubset : Multiplicity = + 'multiplicity' Identification Subsets + TypeBody + +MultiplicityRange = + 'multiplicity' Identification MultiplicityBounds + TypeBody + +OwnedMultiplicity : OwningMembership = + ownedRelatedElement += OwnedMultiplicityRange + +OwnedMultiplicityRange : MultiplicityRange = + MultiplicityBounds + +MultiplicityBounds : MultiplicityRange = + '[' ( ownedRelationship += MultiplicityExpressionMember '..' )? + ownedRelationship += MultiplicityExpressionMember ']' + +MultiplicityExpressionMember : OwningMembership = + ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression ) + +// Clause 8.2.5.12 Metadata Concrete Syntax + +Metaclass = + TypePrefix 'metaclass' + ClassifierDeclaration TypeBody + +PrefixMetadataAnnotation : Annotation = + '#' ownedRelatedElement += PrefixMetadataFeature + +PrefixMetadataMember : OwningMembership = + '#' ownedRelatedElement += PrefixMetadataFeature + +PrefixMetadataFeature : MetadataFeature : + ownedRelationship += OwnedFeatureTyping + +MetadataFeature = + ( ownedRelationship += PrefixMetadataMember )* + ( '@' | 'metadata' ) + MetadataFeatureDeclaration + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + MetadataBody + +MetadataFeatureDeclaration : MetadataFeature = + ( Identification ( ':' | 'typed' 'by' ) )? + ownedRelationship += OwnedFeatureTyping + +MetadataBody : Feature = + ';' | '{' ( ownedRelationship += MetadataBodyElement )* '}' + +MetadataBodyElement : Membership = + NonFeatureMember + | MetadataBodyFeatureMember + | AliasMember + | Import + +MetadataBodyFeatureMember : FeatureMembership = + ownedMemberFeature = MetadataBodyFeature + +MetadataBodyFeature : Feature = + 'feature'? ( ':>>' | 'redefines')? ownedRelationship += OwnedRedefinition + FeatureSpecializationPart? ValuePart? + MetadataBody + +// Clause 8.2.5.13 Packages Concrete Syntax + +Package = + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +LibraryPackage = + ( isStandard ?= 'standard' ) 'library' + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +PackageDeclaration : Package = + 'package' Identification + +PackageBody : Package = + ';' + | '{' ( NamespaceBodyElement + | ownedRelationship += ElementFilterMember + )* + '}' + +ElementFilterMember : ElementFilterMembership = + MemberPrefix + 'filter' condition = OwnedExpression ';' + +// End of BNF + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected-elements.json b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected-elements.json new file mode 100644 index 000000000..b6cf8f4b6 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected-elements.json @@ -0,0 +1,7543 @@ +[ + { + "@type": "Info", + "clause_id": "", + "lines": [], + "source": "tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected-marked_up.kgbnf", + "timestamp": "2025-12-04T19:29:18Z" + }, + { + "@type": "Comment", + "clause_id": "", + "lines": [ + "// Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html", + "// Generated by bnf_grammar_processor at: 2025-11-28T15:06:37Z" + ] + }, + { + "@type": "Comment", + "clause_id": "", + "lines": [ + "// Corrected manually by HP de Koning" + ] + }, + { + "@type": "Heading", + "clause_id": "", + "lines": [ + "Part 2 - Systems Modeling Language (SysML)" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3", + "lines": [ + "Clause 8.2.3 Graphical Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.1", + "lines": [ + "Clause 8.2.3.1 Graphical Notation Overview" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.2", + "lines": [ + "Clause 8.2.3.2 Elements and Relationships Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "element =", + " dependencies-and-annotations-element", + " | general-element", + " | element-inside-textual-compartment" + ], + "name": "element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": true, + "lines": [ + "compartment =| general-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "general-compartment =", + " ", + " general-view" + ], + "name": "general-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "general-view =", + " (general-element)*", + " (dependencies-and-annotations-element)*", + " (ellipsis-at-lower-left-corner)?" + ], + "name": "general-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "ellipsis-at-lower-left-corner = '...'" + ], + "name": "ellipsis-at-lower-left-corner" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "general-element =", + " general-node", + " | general-relationship" + ], + "name": "general-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "element-node =", + " usage-node | definition-node | annotation-node | namespace-node" + ], + "name": "element-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "element-inside-textual-compartment =", + " " + ], + "name": "element-inside-textual-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "rel-name =", + " Identification", + " | QualifiedName" + ], + "name": "rel-name" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.2", + "lines": [ + "// Note. An element inside a textual compartment is selected by graying out a substring containing the element. The grayed-out section must cover a single element within the textual syntax inside the compartment." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.3", + "lines": [ + "Clause 8.2.3.3 Dependencies Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": true, + "lines": [ + "dependencies-and-annotations-element =| dependencies-element" + ], + "name": "dependencies-and-annotations-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": true, + "lines": [ + "dependencies-element =|", + " binary-dependency", + " | n-ary-dependency" + ], + "name": "dependencies-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "binary-dependency =", + " " + ], + "name": "binary-dependency" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "n-ary-dependency =", + " &n-ary-association-dot (n-ary-dependency-client-or-supplier-link &element-node)+" + ], + "name": "n-ary-dependency" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "n-ary-dependency-client-or-supplier-link =", + " n-ary-dependency-client-link", + " | n-ary-dependency-supplier-link" + ], + "name": "n-ary-dependency-client-or-supplier-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "n-ary-association-dot =", + " " + ], + "name": "n-ary-association-dot" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "n-ary-dependency-client-link =", + " " + ], + "name": "n-ary-dependency-client-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "n-ary-dependency-supplier-link =", + " " + ], + "name": "n-ary-dependency-supplier-link" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.3", + "lines": [ + "// Note. An n-ary dependency must have two or more client elements or two or more supplier elements." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.4", + "lines": [ + "Clause 8.2.3.4 Annotations Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": true, + "lines": [ + "dependencies-and-annotations-element =|", + " annotation-node", + " | annotation-link" + ], + "name": "dependencies-and-annotations-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "annotation-node =", + " comment-node", + " | documentation-node", + " | textual-representation-node" + ], + "name": "annotation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "text-block = (LINE_TEXT)*" + ], + "name": "text-block" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "comment-node =", + " comment-without-keyword", + " | comment-with-keyword" + ], + "name": "comment-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "comment-without-keyword =", + " " + ], + "name": "comment-without-keyword" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "comment-with-keyword =", + " " + ], + "name": "comment-with-keyword" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "documentation-node =", + " " + ], + "name": "documentation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "documentation-compartment =", + " ", + " Identification", + " text-block" + ], + "name": "documentation-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "textual-representation-node =", + " " + ], + "name": "textual-representation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "language-string = 'language' '=' STRING_VALUE" + ], + "name": "language-string" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "annotation-link =", + " " + ], + "name": "annotation-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "annotated-element =", + " element", + " | element-inside-textual-compartment" + ], + "name": "annotated-element" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.4", + "lines": [ + "// Note. A comment node may be attached to zero, one, or more than one annotated elements. All other annotation nodes must be attached to one and only one annotated element." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5", + "lines": [ + "Clause 8.2.3.5 Namespaces and Packages Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": true, + "lines": [ + "general-node =| namespace-node" + ], + "name": "general-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": true, + "lines": [ + "namespace-node =| package-node" + ], + "name": "namespace-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "package-node =", + " package-with-name-inside", + " | package-with-name-in-tab", + " | imported-package-with-name-inside", + " | imported-package-with-name-in-tab" + ], + "name": "package-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "package-with-name-inside =", + " " + ], + "name": "package-with-name-inside" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "package-with-name-in-tab =", + " " + ], + "name": "package-with-name-in-tab" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "imported-package-with-name-inside =", + " " + ], + "name": "imported-package-with-name-inside" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "imported-package-with-name-in-tab =", + " " + ], + "name": "imported-package-with-name-in-tab" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "package-compartment =", + " general-compartment", + " | documentation-compartment", + " | packages-compartment", + " | members-compartment", + " | relationships-compartment" + ], + "name": "package-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": true, + "lines": [ + "compartment =| package-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "packages-compartment =", + " ", + " packages-compartment-contents" + ], + "name": "packages-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "packages-compartment-contents = packages-compartment-element* '…'?" + ], + "name": "packages-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "packages-compartment-element = el-prefix? Identification" + ], + "name": "packages-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "members-compartment =", + " ", + " members-compartment-contents" + ], + "name": "members-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "members-compartment-contents = members-compartment-element* '…'?" + ], + "name": "members-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "members-compartment-element = el-prefix? (DefinitionElement | UsageElement)" + ], + "name": "members-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "relationships-compartment =", + " ", + " relationships-compartment-contents" + ], + "name": "relationships-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "relationships-compartment-contents = (relationships-compartment-element)* '…'?" + ], + "name": "relationships-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "relationships-compartment-element = el-prefix? relationship-name QualifiedName" + ], + "name": "relationships-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "relationship-name =", + " 'defines' | 'defined by' | 'specializes' | 'specialized by' | 'connect to'", + " | 'subsets' | 'subsetted by' | 'performs' | 'performed by' | 'allocated' | 'allocated to'", + " | 'satisfy' | 'satisfied by'" + ], + "name": "relationship-name" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": true, + "lines": [ + "general-relationship =|", + " import", + " | top-level-import", + " | recursive-import", + " | owned-membership", + " | unowned-membership" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "import =", + " " + ], + "name": "import" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "top-level-import =", + " " + ], + "name": "top-level-import" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "recursive-import =", + " " + ], + "name": "recursive-import" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "owned-membership =", + " " + ], + "name": "owned-membership" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "unowned-membership =", + " " + ], + "name": "unowned-membership" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.6", + "lines": [ + "Clause 8.2.3.6 Definition and Usage Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "general-node =| type-node" + ], + "name": "general-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "type-node =", + " definition-node", + " | usage-node" + ], + "name": "type-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "general-node =| usage-node definition-node" + ], + "name": "general-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "namespace-node =| type-node" + ], + "name": "namespace-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "definition-name-with-alias =", + " DefinitionDeclaration", + " ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?" + ], + "name": "definition-name-with-alias" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "usage-name-with-alias =", + " '^'? UsageDeclaration", + " ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?" + ], + "name": "usage-name-with-alias" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "compartment-stack = (compartment)*" + ], + "name": "compartment-stack" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "compartment =|", + " features-compartment", + " | variants-compartment", + " | variant-elementusages-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "features-compartment =", + " ", + " features-compartment-contents" + ], + "name": "features-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "features-compartment-contents = (features-compartment-element)* '…'?" + ], + "name": "features-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "features-compartment-element = el-prefix? UsagePrefix usage-cp" + ], + "name": "features-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "variants-compartment =", + " ", + " variants-compartment-contents" + ], + "name": "variants-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "variants-compartment-contents = members-compartment-contents" + ], + "name": "variants-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "variant-elementusages-compartment =", + " ", + " variants-compartment-contents" + ], + "name": "variant-elementusages-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "general-relationship =|", + " type-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "type-relationship =", + " subclassification", + " | subsetting", + " | definition", + " | redefinition", + " | composite-feature-membership", + " | noncomposite-feature-membership" + ], + "name": "type-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "subclassification =", + " " + ], + "name": "subclassification" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "definition =", + " " + ], + "name": "definition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "subsetting =", + " " + ], + "name": "subsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "reference-subsetting =", + " " + ], + "name": "reference-subsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "redefinition =", + " " + ], + "name": "redefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "composite-feature-membership =", + " " + ], + "name": "composite-feature-membership" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "noncomposite-feature-membership =", + " " + ], + "name": "noncomposite-feature-membership" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "el-prefix = '^' | '/'" + ], + "name": "el-prefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "usage-cp = usageDeclaration ValuePart?" + ], + "name": "usage-cp" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "extended-def =", + " " + ], + "name": "extended-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "extended-def-name-compartment =", + " '«' BasicDefinitionPrefix? DefinitionExtensionKeyword+ 'def' '»'", + " definition-name-with-alias" + ], + "name": "extended-def-name-compartment" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.6", + "lines": [ + "// Note. This production is only valid for cases where one or more", + "// DefinitionExtensionKeyword names a MetadataDefinition that is a direct", + "// or indirect specialization of KerML metaclass SemanticMetadata." + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "definition-node =| extended-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "extended-usage =", + " " + ], + "name": "extended-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "extended-usage-name-compartment =", + " '«' BasicUsagePrefix? UsageExtensionKeyword+ '»'", + " usage-name-with-alias" + ], + "name": "extended-usage-name-compartment" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.6", + "lines": [ + "// Note. This production is only valid for cases where one or more", + "// UsageExtensionKeyword names a MetadataDefinition that is a direct", + "// or indirect specialization of KerML metaclass SemanticMetadata." + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "usage-node =| extended-usage" + ], + "name": "usage-node" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.7", + "lines": [ + "Clause 8.2.3.7 Attributes Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": true, + "lines": [ + "definition-node =| attribute-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attribute-def =", + " " + ], + "name": "attribute-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attribute-def-name-compartment =", + " '«' DefinitionPrefix 'attribute' 'def' '»'", + " definition-name-with-alias" + ], + "name": "attribute-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": true, + "lines": [ + "usage-node =| attribute" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attribute =", + " " + ], + "name": "attribute" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attribute-name-compartment =", + " '«' UsagePrefix 'attribute' '»'", + " usage-name-with-alias" + ], + "name": "attribute-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": true, + "lines": [ + "compartment =| attributes-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attributes-compartment =", + " ", + " attributes-compartment-contents" + ], + "name": "attributes-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attributes-compartment-contents = (attributes-compartment-element)* '…'?" + ], + "name": "attributes-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attributes-compartment-element = el-prefix? UsagePrefix usage-cp" + ], + "name": "attributes-compartment-element" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.8", + "lines": [ + "Clause 8.2.3.8 Enumerations Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": true, + "lines": [ + "definition-node =| enumeration-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enumeration-def =", + " " + ], + "name": "enumeration-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enumeration-def-name-compartment =", + " '«' DefinitionPrefix 'enum' 'def' '»'", + " definition-name-with-alias" + ], + "name": "enumeration-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": true, + "lines": [ + "usage-node =| enumeration" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enumeration =", + " " + ], + "name": "enumeration" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enumeration-name-compartment =", + " '«' UsagePrefix 'enum' '»'", + " usage-name-with-alias" + ], + "name": "enumeration-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": true, + "lines": [ + "compartment =| enums-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enums-compartment =", + " ", + " enums-compartment-contents" + ], + "name": "enums-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enums-compartment-contents = (enums-compartment-element)* '…'?" + ], + "name": "enums-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enums-compartment-element = el-prefix? UsagePrefix usage-cp" + ], + "name": "enums-compartment-element" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.9", + "lines": [ + "Clause 8.2.3.9 Occurrences Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": true, + "lines": [ + "definition-node =| occurrence-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": true, + "lines": [ + "general-relationship =| portion-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrence-def =", + " " + ], + "name": "occurrence-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrence-def-name-compartment =", + " '«' DefinitionPrefix 'occurrence' 'def' '»'", + " definition-name-with-alias" + ], + "name": "occurrence-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": true, + "lines": [ + "usage-node =|", + " occurrence", + " | occurrence-ref", + " | timeslice-or-snapshot-node" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrence =", + " " + ], + "name": "occurrence" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrence-ref =", + " " + ], + "name": "occurrence-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrence-name-compartment =", + " '«' OccurrenceUsagePrefix 'occurrence' '»'", + " usage-name-with-alias" + ], + "name": "occurrence-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslice-or-snapshot-node =", + " timeslice", + " | snapshot" + ], + "name": "timeslice-or-snapshot-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslice =", + " " + ], + "name": "timeslice" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslice-name-compartment =", + " '«timeslice»'", + " usage-name-with-alias" + ], + "name": "timeslice-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "snapshot =", + " " + ], + "name": "snapshot" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "snapshots-name-compartment =", + " '«snapshot»'", + " usage-name-with-alias" + ], + "name": "snapshots-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "event-occurrence-def =", + " " + ], + "name": "event-occurrence-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "event-occurrence-def-name-compartment =", + " '«' DefinitionPrefix 'event' 'occurrence' 'def' '»'", + " definition-name-with-alias" + ], + "name": "event-occurrence-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": true, + "lines": [ + "definition-node =| event-occurrence-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "event-occurrence =", + " " + ], + "name": "event-occurrence" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "event-occurrence-name-compartment =", + " '«' OccurrenceUsagePrefix 'event' 'occurrence' '»'", + " usage-name-with-alias" + ], + "name": "event-occurrence-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": true, + "lines": [ + "usage-node =| event-occurrence" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "event-edge =", + " " + ], + "name": "event-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "eventer = usage-node | definition-node" + ], + "name": "eventer" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "portion-relationship =", + " " + ], + "name": "portion-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": true, + "lines": [ + "compartment =|", + " occurrences-compartment", + " | individuals-compartment", + " | timeslices-compartment", + " | snapshots-compartment", + " | sequence-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrences-compartment =", + " ", + " occurrences-compartment-contents" + ], + "name": "occurrences-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrences-compartment-contents = (occurrences-compartment-element)* '…'?" + ], + "name": "occurrences-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrences-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp" + ], + "name": "occurrences-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "individuals-compartment =", + " ", + " individuals-compartment-contents" + ], + "name": "individuals-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "individuals-compartment-contents = (individuals-compartment-element)* '…'?" + ], + "name": "individuals-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "individuals-compartment-element = occurrences-compartment-element" + ], + "name": "individuals-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslices-compartment =", + " ", + " timeslices-compartment-contents" + ], + "name": "timeslices-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslices-compartment-contents = (timeslices-compartment-element)* '…'?" + ], + "name": "timeslices-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslices-compartment-element = occurrences-compartment-element" + ], + "name": "timeslices-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "snapshots-compartment =", + " ", + " snapshots-compartment-contents" + ], + "name": "snapshots-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "snapshots-compartment-contents = (snapshots-compartment-element)* '…'?" + ], + "name": "snapshots-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "snapshots-compartment-element = occurrences-compartment-element" + ], + "name": "snapshots-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sequence-compartment =", + " ", + " sequence-view" + ], + "name": "sequence-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sequence-view = (sq-graphical-element)*" + ], + "name": "sequence-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-graphical-element =", + " sq-graphical-node", + " | sq-graphical-relationship", + " | dependencies-and-annotations-element" + ], + "name": "sq-graphical-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-graphical-node = sq-head-node | lifeline" + ], + "name": "sq-graphical-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-head-node = sq-part | sq-port" + ], + "name": "sq-head-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-part =", + " " + ], + "name": "sq-part" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-port =", + " " + ], + "name": "sq-port" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-port-label = UsageDeclaration" + ], + "name": "sq-port-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-l-node =", + " lifeline", + " | sq-proxy" + ], + "name": "sq-l-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "lifeline =", + " " + ], + "name": "lifeline" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-proxy =", + " ", + " |", + " " + ], + "name": "sq-proxy" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "proxy-label = '.'? FeatureChainMember" + ], + "name": "proxy-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-graphical-relationship = message | sq-succession" + ], + "name": "sq-graphical-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "succession-label = UsageDeclaration?" + ], + "name": "succession-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-succession =", + " " + ], + "name": "sq-succession" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "succession-label = Identification" + ], + "name": "succession-label" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.9", + "lines": [ + "// Note: the proxy nodes attached to a succession must refer to an event" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.10", + "lines": [ + "Clause 8.2.3.10 Items Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": true, + "lines": [ + "definition-node =| item-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": true, + "lines": [ + "interconnection-element =| item| item-ref" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "item-def =", + " " + ], + "name": "item-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "item-def-name-compartment =", + " '«' DefinitionPrefix 'item' 'def' '»'", + " definition-name-with-alias" + ], + "name": "item-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": true, + "lines": [ + "usage-node =| item" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "item =", + " " + ], + "name": "item" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "item-name-compartment =", + " '«' OccurrenceUsagePrefix 'item' '»'", + " usage-name-with-alias" + ], + "name": "item-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "item-ref =", + " " + ], + "name": "item-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": true, + "lines": [ + "compartment =| items-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "items-compartment =", + " ", + " items-compartment-contents" + ], + "name": "items-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "items-compartment-contents = (items-compartment-element)* '…'" + ], + "name": "items-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "items-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp" + ], + "name": "items-compartment-element" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.11", + "lines": [ + "Clause 8.2.3.11 Parts Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "definition-node =| part-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "interconnection-element =| part | part-ref" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "part-def =", + " " + ], + "name": "part-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "part-def-name-compartment =", + " '«' DefinitionPrefix 'part' 'def' '»'", + " definition-name-with-alias" + ], + "name": "part-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "usage-node =| part" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "part =", + " " + ], + "name": "part" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "part-name-compartment =", + " '«' OccurrenceUsagePrefix 'part' '»'", + " usage-name-with-alias" + ], + "name": "part-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "part-ref =", + " " + ], + "name": "part-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "compartment =|", + " parts-compartment", + " | directed-features-compartment", + " | interconnection-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "parts-compartment =", + " ", + " parts-compartment-contents" + ], + "name": "parts-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "parts-compartment-contents = (parts-compartment-element)* '…'?" + ], + "name": "parts-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "parts-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp" + ], + "name": "parts-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "directed-features-compartment =", + " ", + " directed-features-compartment-contents" + ], + "name": "directed-features-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "directed-features-compartment-contents = (directed-features-compartment-element)* '…'?" + ], + "name": "directed-features-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "directed-features-compartment-element =", + " el-prefix FeatureDirection DefinitionBodyItem*" + ], + "name": "directed-features-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "interconnection-compartment =", + " ", + " interconnection-view" + ], + "name": "interconnection-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "interconnection-view =|", + " (interconnection-element)*", + " (dependencies-and-annotations-element)*", + " (ellipsis-at-lower-left-corner)?" + ], + "name": "interconnection-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "general-view =| interconnection-view" + ], + "name": "general-view" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.12", + "lines": [ + "Clause 8.2.3.12 Ports Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": true, + "lines": [ + "definition-node =| port-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-def =", + " " + ], + "name": "port-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-def-name-compartment =", + " '«' DefinitionPrefix 'port' 'def' '»'", + " definition-name-with-alias" + ], + "name": "port-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": true, + "lines": [ + "usage-node =| port-usage" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-usage =", + " " + ], + "name": "port-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-name-compartment =", + " '«' OccurrenceUsagePrefix 'port' '»'", + " usage-name-with-alias" + ], + "name": "port-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": true, + "lines": [ + "compartment =| ports-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "ports-compartment =", + " ", + " ports-compartment-contents" + ], + "name": "ports-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "ports-compartment-contents = (ports-compartment-element)* '…'?" + ], + "name": "ports-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "ports-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp" + ], + "name": "ports-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": true, + "lines": [ + "interconnection-element =| port-def | port-usage" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "pdh =", + " ", + " |", + " ", + " |", + " " + ], + "name": "pdh" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "pdv =", + " ", + " |", + " ", + " |", + " " + ], + "name": "pdv" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-l =", + " ", + " |", + " ", + " |", + " ", + " |", + " proxy-v" + ], + "name": "port-l" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-r =", + " ", + " |", + " ", + " |", + " ", + " |", + " proxy-v" + ], + "name": "port-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-t =", + " ", + " |", + " ", + " |", + " ", + " |", + " proxy-h" + ], + "name": "port-t" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-b =", + " ", + " |", + " ", + " |", + " ", + " |", + " proxy-h" + ], + "name": "port-b" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-label = QualifiedName (':' QualifiedName)?" + ], + "name": "port-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "proxy-v =", + " ", + " |", + " " + ], + "name": "proxy-v" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "proxy-h =", + " ", + " |", + " " + ], + "name": "proxy-h" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.12", + "lines": [ + "// Note. Dotted line port productions (references) are only possible for nested ports" + ] + }, + { + "@type": "Comment", + "clause_id": "8.2.3.12", + "lines": [ + "// Note. The proxy option of a port production is valid only on a part usage contained within an interconnection view." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.13", + "lines": [ + "Clause 8.2.3.13 Connections Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "definition-node =| connection-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-def =", + " " + ], + "name": "connection-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-def-name-compartment =", + " '«' DefinitionPrefix 'connection' 'def' '»'", + " definition-name-with-alias" + ], + "name": "connection-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "usage-node =| connection" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection =", + " " + ], + "name": "connection" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-name-compartment =", + " '«' OccurrenceUsagePrefix 'connection' '»'", + " usage-name-with-alias" + ], + "name": "connection-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "compartment =| connections-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connections-compartment =", + " ", + " connections-compartment-contents" + ], + "name": "connections-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connections-compartment-contents = (connections-compartment-element)* '…'?" + ], + "name": "connections-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connections-compartment-element =", + " el-prefix? OccurrenceUsagePrefix UsageDeclaration" + ], + "name": "connections-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "interconnection-element =|", + " connection-def", + " | connection", + " | connection-relationship", + " | attribute" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-relationship =", + " binding-connection", + " | connection-graphical", + " | n-ary-connection", + " | n-ary-connection-def", + " | connection-definition-elaboration", + " | connection-usage-elaboration", + " | connection-def-graphical" + ], + "name": "connection-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-graphical =", + " ", + " |", + " " + ], + "name": "connection-graphical" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "c-adornment =", + " (a-property | a-direction | a-subsetting |a-redefinition)*" + ], + "name": "c-adornment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "a-property =", + " 'ordered' | 'nonunique' | 'abstract' | 'derived' | 'readonly'" + ], + "name": "a-property" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "a-direction =", + " 'in' | 'out' | 'inout'" + ], + "name": "a-direction" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "a-subsetting =", + " 'subsets' OwnedSubsetting (',' OwnedSubsetting)*" + ], + "name": "a-subsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "a-redefinition =", + " 'redefines' OwnedRedefinition (',' OwnedRedefinition)*" + ], + "name": "a-redefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-end = usage-node | usage-edge" + ], + "name": "connection-end" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "usage-edge =| connection-graphical | binding-connection" + ], + "name": "usage-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-label = UsageDeclaration" + ], + "name": "connection-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-def-graphical =", + " ", + " |", + " " + ], + "name": "connection-def-graphical" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "general-relationship =| connection-def-graphical" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "cdef-label = Identification" + ], + "name": "cdef-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-connection-def =", + " n-ary-def-connection-dot n-ary-def-segment+" + ], + "name": "n-ary-connection-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-def-connection-dot =", + " " + ], + "name": "n-ary-def-connection-dot" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-def-segment =", + " " + ], + "name": "n-ary-def-segment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "definition-node =| n-ary-def-connection-dot" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "general-relationship =| n-ary-def-segment" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-connection =", + " n-ary-connection-dot n-ary-segment+" + ], + "name": "n-ary-connection" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-connection-dot =", + " " + ], + "name": "n-ary-connection-dot" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "usage-node =| n-ary-connection-dot" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "cdot-label = UsageDeclaration" + ], + "name": "cdot-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-segment =", + " " + ], + "name": "n-ary-segment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "binding-connection =", + " " + ], + "name": "binding-connection" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "rolename = Identification?" + ], + "name": "rolename" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "multiplicity = MultiplicityRange?" + ], + "name": "multiplicity" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-definition-elaboration =", + " " + ], + "name": "connection-definition-elaboration" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-usage-elaboration =", + " " + ], + "name": "connection-usage-elaboration" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.13", + "lines": [ + "// Note. The usage-nodes at the ends of a binding-connection must be of compatible types." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.14", + "lines": [ + "Clause 8.2.3.14 Interfaces Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": true, + "lines": [ + "definition-node =| interface-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": true, + "lines": [ + "interconnection-element =| interface" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface-def =", + " " + ], + "name": "interface-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface-def-name-compartment =", + " '«' DefinitionPrefix 'interface' 'def' '»'", + " definition-name-with-alias" + ], + "name": "interface-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": true, + "lines": [ + "usage-node =| interface" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface =", + " " + ], + "name": "interface" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface-name-compartment =", + " '«' OccurrenceUsagePrefix 'interface' '»'", + " usage-name-with-alias" + ], + "name": "interface-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": true, + "lines": [ + "compartment =|", + " interfaces-compartment", + " | ends-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interfaces-compartment =", + " ", + " interfaces-compartment-contents" + ], + "name": "interfaces-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interfaces-compartment-contents = (interfaces-compartment-element)* '…'?" + ], + "name": "interfaces-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interfaces-compartment-element =", + " el-prefix? OccurrenceUsagePrefix InterfaceUsageDeclaration" + ], + "name": "interfaces-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "ends-compartment =", + " ", + " ends-compartment-contents" + ], + "name": "ends-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "ends-compartment-contents = (ends-compartment-element)* '…'?" + ], + "name": "ends-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "ends-compartment-element = QualifiedName (':' QualifiedName)?" + ], + "name": "ends-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": true, + "lines": [ + "connection-relationship =|", + " interface-connection" + ], + "name": "connection-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface-connection =", + " " + ], + "name": "interface-connection" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface-label = UsageDeclaration?" + ], + "name": "interface-label" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.15", + "lines": [ + "Clause 8.2.3.15 Allocations Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": true, + "lines": [ + "definition-node =| allocation-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocation-def =", + " " + ], + "name": "allocation-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocation-def-name-compartment =", + " '«' DefinitionPrefix 'allocation' 'def' '»'", + " definition-name-with-alias" + ], + "name": "allocation-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": true, + "lines": [ + "usage-node =| allocation" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocation =", + " " + ], + "name": "allocation" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocation-name-compartment =", + " '«' OccurrenceUsagePrefix 'allocation' '»'", + " usage-name-with-alias" + ], + "name": "allocation-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": true, + "lines": [ + "compartment =| allocations-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocations-compartment =", + " ", + " allocations-compartment-contents" + ], + "name": "allocations-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocations-compartment-contents = (allocations-compartment-element)* '…'?" + ], + "name": "allocations-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocations-compartment-element =", + " el-prefix? OccurrenceUsagePrefix AllocationUsageDeclaration UsageBody*" + ], + "name": "allocations-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": true, + "lines": [ + "general-relationship =| allocate-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocate-relationship =", + " " + ], + "name": "allocate-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocation-node =", + " general-node", + " | element-in-textual-compartment" + ], + "name": "allocation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": true, + "lines": [ + "usage-edge =| allocate-relationship" + ], + "name": "usage-edge" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.16", + "lines": [ + "Clause 8.2.3.16 Flows Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "definition-node =| flow-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-def =", + " " + ], + "name": "flow-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-def-name-compartment =", + " '«' DefinitionPrefix 'succession'? 'flow' 'def' '»'", + " definition-name-with-alias" + ], + "name": "flow-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "usage-node =| flow-node" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-node =", + " " + ], + "name": "flow-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-name-compartment =", + " '«' OccurrenceUsagePrefix ( 'message' | 'succession'? 'flow' ) '»'", + " usage-name-with-alias" + ], + "name": "flow-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "compartment =| flows-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flows-compartment =", + " ", + " flows-compartment-contents" + ], + "name": "flows-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flows-compartment-contents = (flows-compartment-element)* '...'?" + ], + "name": "flows-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flows-compartment-element =", + " el-prefix? OccurrenceUsagePrefix", + " ( 'message' MessageDeclaration", + " | 'succession'? FlowDeclaration", + " )" + ], + "name": "flows-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "interconnection-element =|", + " flow-def", + " | flow" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "connection-relationship =|", + " message-connection", + " | flow", + " | succession-flow", + " | flow-on-connection" + ], + "name": "connection-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "usage-edge =| message | flow | succession-flow" + ], + "name": "usage-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "msg-end-node =", + " occurrence| sq-l-node| item | part | port | action | state", + " | use-case | verification-case | analysis-case | proxy" + ], + "name": "msg-end-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "message =", + " " + ], + "name": "message" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.16", + "lines": [ + "// Note: proxy nodes and ends of messages must refer to occurrences" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "message-label =", + " UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember" + ], + "name": "message-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow =", + " " + ], + "name": "flow" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-label =", + " UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember" + ], + "name": "flow-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-end-node =", + " parameter | proxy" + ], + "name": "flow-end-node" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.16", + "lines": [ + "// Note: proxy nodes at ends of flows must refer to directed features" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "succession-flow =", + " " + ], + "name": "succession-flow" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "succession-flow-label = flow-label" + ], + "name": "succession-flow-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-on-connection =", + " " + ], + "name": "flow-on-connection" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-node =", + " flow-node-r", + " | flow-node-l", + " | sflow-node-r", + " | sflow-node-l", + " | message-node-r", + " | message-node-l" + ], + "name": "flow-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-node-r =", + " " + ], + "name": "flow-node-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-node-l =", + " " + ], + "name": "flow-node-l" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "sflow-node-r =", + " " + ], + "name": "sflow-node-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "sflow-node-l =", + " " + ], + "name": "sflow-node-l" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "message-node-r =", + " " + ], + "name": "message-node-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "message-node-l =", + " " + ], + "name": "message-node-l" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-label =", + " Identification | FlowPayloadFeatureMember" + ], + "name": "flow-label" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.17", + "lines": [ + "Clause 8.2.3.17 Actions Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": true, + "lines": [ + "definition-node =| action-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-def =", + " " + ], + "name": "action-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-def-name-compartment =", + " '«' DefinitionPrefix 'action' 'def' '»'", + " definition-name-with-alias" + ], + "name": "action-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": true, + "lines": [ + "usage-node =|", + " action", + " | perform-action-usage" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action =", + " " + ], + "name": "action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-name-compartment =", + " '«' OccurrenceUsagePrefix 'action' '»'", + " usage-name-with-alias" + ], + "name": "action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-action-usage =", + " " + ], + "name": "perform-action-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-ref =", + " " + ], + "name": "action-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'perform' 'action' '»'", + " usage-name-with-alias" + ], + "name": "perform-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": true, + "lines": [ + "compartment =|", + " actions-compartment", + " | perform-actions-compartment", + " | parameters-compartment", + " | action-flow-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "actions-compartment =", + " ", + " actions-compartment-contents" + ], + "name": "actions-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "actions-compartment-contents = (actions-compartment-element)* '…'?" + ], + "name": "actions-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "actions-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration" + ], + "name": "actions-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-actions-compartment =", + " ", + " perform-actions-compartment-contents" + ], + "name": "perform-actions-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-actions-compartment-contents = (perform-actions-compartment-element)* '…'?" + ], + "name": "perform-actions-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-actions-compartment-element =", + " el-prefix? OccurrenceUsagePrefix PerformActionUsageDeclaration" + ], + "name": "perform-actions-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "parameters-compartment =", + " ", + " parameters-compartment-contents" + ], + "name": "parameters-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "parameters-compartment-contents = (parameters-compartment-element)* '…'?" + ], + "name": "parameters-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "parameters-compartment-element =", + " el-prefix? FeatureDirection UsageDeclaration ValueOrFlowPart? DefinitionBodyItem*" + ], + "name": "parameters-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "performed-by-compartment =", + " ", + " performed-by-compartment-contents" + ], + "name": "performed-by-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "performed-by-compartment-contents = QualifiedName* '…'?" + ], + "name": "performed-by-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-flow-compartment =", + " ", + " action-flow-view" + ], + "name": "action-flow-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-flow-view =", + " (dependencies-and-annotations-element)*", + " (action-flow-element)*", + " (perform-action-swimlanes)?" + ], + "name": "action-flow-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": true, + "lines": [ + "action-flow-element =|", + " action-ref", + " | action", + " | action-flow-node", + " | action-flow-relationship" + ], + "name": "action-flow-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-flow-node =", + " start-node", + " | done-node", + " | terminate-node", + " | fork-node", + " | join-node", + " | decision-node", + " | merge-node", + " | send-action-node", + " | accept-action-node", + " | while-loop-action-node", + " | for-loop-action-node", + " | if-else-action-node", + " | assign-action-node" + ], + "name": "action-flow-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-flow-relationship =", + " flow", + " | aflow-succession", + " | binding-connection", + " | else-branch" + ], + "name": "action-flow-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "param-l =", + " ", + " |", + " ", + " |", + " proxy-v" + ], + "name": "param-l" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "param-r =", + " ", + " |", + " ", + " |", + " proxy-v" + ], + "name": "param-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "param-t =", + " ", + " |", + " ", + " |", + " proxy-h" + ], + "name": "param-t" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "param-b =", + " ", + " |", + " ", + " |", + " proxy-h" + ], + "name": "param-b" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "param-label = QualifiedName (':' QualifiedName)*" + ], + "name": "param-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "start-node =", + " " + ], + "name": "start-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "done-node =", + " " + ], + "name": "done-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "terminate-node =", + " " + ], + "name": "terminate-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "fork-node =", + " " + ], + "name": "fork-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "join-node =", + " " + ], + "name": "join-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "decision-node =", + " " + ], + "name": "decision-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "merge-node =", + " " + ], + "name": "merge-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "send-action-node =", + " " + ], + "name": "send-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "send-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'send' 'action' '»'", + " usage-name-with-alias" + ], + "name": "send-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "send-action-expression = NodeParameterMember 'to' NodeParameterMember" + ], + "name": "send-action-expression" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "accept-action-node =", + " " + ], + "name": "accept-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "accept-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'accept' 'action' '»'", + " usage-name-with-alias" + ], + "name": "accept-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "accept-action-expression = AcceptParameterPart" + ], + "name": "accept-action-expression" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "while-loop-action-node =", + " " + ], + "name": "while-loop-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "while-condition =", + " ", + " condition-expression" + ], + "name": "while-condition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "until-condition =", + " ", + " condition-expression" + ], + "name": "until-condition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "while-loop-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'loop' '»'", + " usage-name-with-alias" + ], + "name": "while-loop-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "for-loop-action-node =", + " " + ], + "name": "for-loop-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "iteration =", + " ", + " iteration-expression" + ], + "name": "iteration" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "loop-body =", + " ", + " action-body" + ], + "name": "loop-body" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "for-loop-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'loop' '»'", + " usage-name-with-alias" + ], + "name": "for-loop-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "if-else-action-node =", + " " + ], + "name": "if-else-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "if-condition =", + " ", + " condition-expression" + ], + "name": "if-condition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "then-body =", + " ", + " action-body" + ], + "name": "then-body" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "else-body =", + " ", + " action-body" + ], + "name": "else-body" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "ifelse-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'if' '»'", + " usage-name-with-alias" + ], + "name": "ifelse-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-body =", + " action-body-textual | action-flow-view" + ], + "name": "action-body" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "condition-expression =", + " ExpressionParameterMember" + ], + "name": "condition-expression" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "iteration-expression =", + " ForVariableDeclarationMember 'in' NodeParameterMember" + ], + "name": "iteration-expression" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-body-textual =", + " ActionBodyParameterMember" + ], + "name": "action-body-textual" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "assign-action-node =", + " " + ], + "name": "assign-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "assign-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'assign' '»'", + " usage-name-with-alias" + ], + "name": "assign-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-actions-swimlanes = (swimlane)*" + ], + "name": "perform-actions-swimlanes" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "swimlane =", + " " + ], + "name": "swimlane" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "parameter =", + " param-l | param-r | param-t | param-b" + ], + "name": "parameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "aflow-succession =", + " " + ], + "name": "aflow-succession" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "else-branch =", + " " + ], + "name": "else-branch" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-edge =", + " " + ], + "name": "perform-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "performer-node = part | action | part-def | action-def | distinguished-parameter" + ], + "name": "performer-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": true, + "lines": [ + "usage-edge =| succession perform-edge" + ], + "name": "usage-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "guard-expression = '[' OwnedExpression ']'" + ], + "name": "guard-expression" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.17", + "lines": [ + "// Note. All swimlanes are attached to each other on vertical edges and aligned along the top and bottom horizontal edges." + ] + }, + { + "@type": "Comment", + "clause_id": "8.2.3.17", + "lines": [ + "// Note. The proxy option of a parameter production is valid only on an action usage contained within an action flow view." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.18", + "lines": [ + "Clause 8.2.3.18 States Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": true, + "lines": [ + "definition-node =| state-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-def =", + " " + ], + "name": "state-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-def-name-compartment =", + " '«' DefinitionPrefix 'state' 'def' '»'", + " definition-name-with-alias", + " ('«' 'parallel' '»')?" + ], + "name": "state-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": true, + "lines": [ + "usage-node =|", + " state", + " | exhibit-state-usage" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state =", + " " + ], + "name": "state" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-ref =", + " " + ], + "name": "state-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-name-compartment =", + " '«' OccurrenceUsagePrefix 'state' '»'", + " usage-name-with-alias", + " ('«' 'parallel' '»')?" + ], + "name": "state-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-state-usage =", + " " + ], + "name": "exhibit-state-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-subaction-body = state-subaction-body-textual | action-flow-view" + ], + "name": "state-subaction-body" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-subaction-body-textual = state-subaction-declaration? ( '{' ActionBodyItem* '}' )?" + ], + "name": "state-subaction-body-textual" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-subaction-declaration =", + " PerformActionUsageDeclaration", + " | AcceptNodeDeclaration", + " | SendNodeDeclaration", + " | AssignmentNodeDeclaration" + ], + "name": "state-subaction-declaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-do-action =", + " ", + " state-subaction-body" + ], + "name": "state-do-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-entry-action =", + " ", + " state-subaction-body" + ], + "name": "state-entry-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-exit-action =", + " ", + " state-subaction-body" + ], + "name": "state-exit-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "entry-action =", + " ", + " |", + " " + ], + "name": "entry-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "entry-action-name-comp =", + " '«' 'entry' OccurrenceUsagePrefix 'action' '»'", + " usage-name-with-alias" + ], + "name": "entry-action-name-comp" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exit-action =", + " " + ], + "name": "exit-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exit-action-name-comp =", + " '«' 'exit' OccurrenceUsagePrefix 'action' '»'", + " usage-name-with-alias" + ], + "name": "exit-action-name-comp" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "do-action =", + " " + ], + "name": "do-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "do-action-name-comp =", + " '«' 'do' OccurrenceUsagePrefix 'action' '»'", + " usage-name-with-alias" + ], + "name": "do-action-name-comp" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-state-name-compartment =", + " '«exhibit-state»'", + " state-name-compartment" + ], + "name": "exhibit-state-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": true, + "lines": [ + "compartment =|", + " states-compartment", + " | state-actions-compartment", + " | exhibit-states-compartment", + " | successions-compartment", + " | state-transition-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "states-compartment =", + " ", + " states-compartment-contents" + ], + "name": "states-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "states-compartment-contents = (states-compartment-element)* '…'?" + ], + "name": "states-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "states-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration" + ], + "name": "states-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-actions-compartment =", + " ", + " state-actions-compartment-contents" + ], + "name": "state-actions-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-actions-compartment-contents = (state-actions-compartment-element)* '…'?" + ], + "name": "state-actions-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-actions-compartment-element =", + " el-prefix? EntryActionMember | DoActionMember | ExitActionMember" + ], + "name": "state-actions-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-states-compartment =", + " ", + " exhibit-states-compartment-contents" + ], + "name": "exhibit-states-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'?" + ], + "name": "exhibit-states-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-states-compartment-element-compartment = UsageDeclaration" + ], + "name": "exhibit-states-compartment-element-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "successions-compartment =", + " ", + " successions-compartment-contents" + ], + "name": "successions-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "successions-compartment-contents = QualifiedName* '…'?" + ], + "name": "successions-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-transition-compartment =", + " ", + " state-transition-view" + ], + "name": "state-transition-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-transition-view =", + " (state-transition-element)*", + " (dependencies-and-annotations-element)*" + ], + "name": "state-transition-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-transition-element =", + " state-transition-node", + " | transition", + " | st-succession" + ], + "name": "state-transition-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-transition-node =", + " state", + " | state-ref", + " | start-node", + " | entry-action", + " | do-action", + " | exit-action", + " | done-node", + " | fork-node", + " | join-node", + " | decision-node", + " | merge-node", + " | terminate-node", + " | action", + " | perform-action-usage", + " | action-ref" + ], + "name": "state-transition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "transition =", + " ", + " |", + " " + ], + "name": "transition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-source =", + " state | state-ref" + ], + "name": "state-source" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "transition-label = trigger-expression '/' ActionUsage" + ], + "name": "transition-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "trigger-expression = AcceptParameterPart (guard-expression)?" + ], + "name": "trigger-expression" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "st-succession =", + " ", + " |", + " " + ], + "name": "st-succession" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-edge =", + " " + ], + "name": "exhibit-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibitor = part | part-def" + ], + "name": "exhibitor" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": true, + "lines": [ + "general-relationship =| exhibit-edge" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": true, + "lines": [ + "usage-edge =| transition | st-succession | exhibit-edge" + ], + "name": "usage-edge" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.19", + "lines": [ + "Clause 8.2.3.19 Calculations Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": true, + "lines": [ + "definition-node =| calc-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calc-def =", + " " + ], + "name": "calc-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calc-def-name-compartment =", + " '«' DefinitionPrefix 'calc' 'def' '»'", + " definition-name-with-alias" + ], + "name": "calc-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": true, + "lines": [ + "usage-node =| calc" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calc =", + " " + ], + "name": "calc" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calc-name-compartment =", + " '«' OccurrenceUsagePrefix 'calc' '»'", + " usage-name-with-alias" + ], + "name": "calc-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": true, + "lines": [ + "action-flow-element =|", + " calc-def", + " | calc" + ], + "name": "action-flow-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": true, + "lines": [ + "compartment =|", + " calcs-compartment", + " | result-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calcs-compartment =", + " ", + " calcs-compartment-contents" + ], + "name": "calcs-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calcs-compartment-contents = calcs-compartment-element* '…'?" + ], + "name": "calcs-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calcs-compartment-element = el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration" + ], + "name": "calcs-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "result-compartment =", + " ", + " result-compartment-contents" + ], + "name": "result-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "result-compartment-contents = OwnedExpression" + ], + "name": "result-compartment-contents" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.20", + "lines": [ + "Clause 8.2.3.20 Constraints Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": true, + "lines": [ + "definition-node =| constraint-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraint-def =", + " " + ], + "name": "constraint-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraint-def-name-compartment =", + " '«' DefinitionPrefix 'constraint' 'def' '»'", + " definition-name-with-alias" + ], + "name": "constraint-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "usage-node =", + " constraint", + " | assert-constraint-node" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraint =", + " " + ], + "name": "constraint" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraint-ref =", + " " + ], + "name": "constraint-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraint-name-compartment =", + " '«' OccurrenceUsagePrefix 'constraint' '»'", + " usage-name-with-alias" + ], + "name": "constraint-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-constraint-node =", + " " + ], + "name": "assert-constraint-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-constraint-name-compartment =", + " '«assert constraint»'", + " constraint-name-compartment" + ], + "name": "assert-constraint-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assume-constraint-node =", + " " + ], + "name": "assume-constraint-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assume-constraint-name-compartment =", + " '«' OccurrenceUsagePrefix 'assume' 'constraint' '»'", + " usage-name-with-alias" + ], + "name": "assume-constraint-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": true, + "lines": [ + "usage-node =| assume-constraint-node | assert-constraint-node" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assume-edge =", + " " + ], + "name": "assume-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assumer = requirement | requirement-def" + ], + "name": "assumer" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": true, + "lines": [ + "general-relationship =| assume-edge" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-edge =", + " " + ], + "name": "assert-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assertor = usage-node | definition-node" + ], + "name": "assertor" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": true, + "lines": [ + "general-relationship =| assert-edge" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": true, + "lines": [ + "compartment =|", + " constraints-compartment", + " | assert-constraints-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraints-compartment =", + " ", + " constraints-compartment-contents" + ], + "name": "constraints-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraints-compartment-contents = (constraints-usage-compartment-element)* '…'?" + ], + "name": "constraints-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraints-usage-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CalculationBody*" + ], + "name": "constraints-usage-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-constraints-compartment =", + " ", + " assert-constraints-compartment-contents" + ], + "name": "assert-constraints-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-constraints-compartment-contents = (assert-constraints-compartment-element)* '…'?" + ], + "name": "assert-constraints-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-constraints-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ( 'not' )?", + " ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )", + " CalculationUsageParameterPart CalculationBody" + ], + "name": "assert-constraints-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": true, + "lines": [ + "interconnection-element =|", + " constraint-ref", + " | constraint" + ], + "name": "interconnection-element" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.21", + "lines": [ + "Clause 8.2.3.21 Requirements Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "definition-node =|", + " requirement-def", + " | concern-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirement-def =", + " " + ], + "name": "requirement-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirement-def-name-compartment =", + " '«' DefinitionPrefix 'requirement' 'def' '»'", + " definition-name-with-alias" + ], + "name": "requirement-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "usage-node =", + " requirement", + " | satisfy-requirement-usage", + " | concern" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirement =", + " " + ], + "name": "requirement" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirement-ref =", + " " + ], + "name": "requirement-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirement-name-compartment =", + " '«' OccurrenceUsagePrefix 'requirement' '»'", + " usage-name-with-alias" + ], + "name": "requirement-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfy-requirement-usage =", + " " + ], + "name": "satisfy-requirement-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfy-requirement-name-compartment =", + " '«satisfy requirement»'", + " requirement-name-compartment" + ], + "name": "satisfy-requirement-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concern-def =", + " " + ], + "name": "concern-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concern-def-name-compartment =", + " '«' DefinitionPrefix 'concern' 'def' '»'", + " definition-name-with-alias" + ], + "name": "concern-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concern =", + " " + ], + "name": "concern" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concern-name-compartment =", + " '«' OccurrenceUsagePrefix 'concern' '»'", + " usage-name-with-alias" + ], + "name": "concern-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "compartment =|", + " constraints-compartment", + " | assert-constraints-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "compartment =|", + " requirements-compartment", + " | require-constraints-compartment", + " | assume-constraints-compartment", + " | satisfy-requirements-compartment", + " | satisfies-compartment", + " | actors-compartment", + " | subject-compartment", + " | stakeholders-compartment", + " | frames-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirements-compartment =", + " ", + " requirements-compartment-contents" + ], + "name": "requirements-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirements-compartment-contents = (requirements-compartment-element)* '…'?" + ], + "name": "requirements-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirements-compartment-element =", + " OccurrenceUsagePrefix ConstraintUsageDeclaration" + ], + "name": "requirements-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-constraints-compartment =", + " ", + " require-constraints-compartment-contents" + ], + "name": "require-constraints-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-constraints-compartment-contents = require-constraint-element* '…'?" + ], + "name": "require-constraints-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-constraint-element =", + " el-prefix? requireMemberPrefix? RequirementConstraintUsage" + ], + "name": "require-constraint-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "assume-constraints-compartment =", + " ", + " assume-constraints-compartment-contents" + ], + "name": "assume-constraints-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "assume-constraints-compartment-contents = require-constraint-element* '…'?" + ], + "name": "assume-constraints-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfy-requirements-compartment =", + " ", + " satisfy-requirements-compartment-contents" + ], + "name": "satisfy-requirements-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfy-requirements-compartment-contents = text-block" + ], + "name": "satisfy-requirements-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfies-compartment =", + " ", + " satisfies-compartment-contents" + ], + "name": "satisfies-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfies-compartment-contents = UsageDeclaration* '…'?" + ], + "name": "satisfies-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "actors-compartment =", + " ", + " actors-compartment-contents" + ], + "name": "actors-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "actors-compartment-contents = (actors-compartment-element)* '…'?" + ], + "name": "actors-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "actors-compartment-element = el-prefix? MemberPrefix usage-cp" + ], + "name": "actors-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "subject-compartment =", + " ", + " subject-compartment-contents" + ], + "name": "subject-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "subject-compartment-contents = (subject-compartment-element)* '…'?" + ], + "name": "subject-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "subject-compartment-element = el-prefix? MemberPrefix usage-cp" + ], + "name": "subject-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "stakeholders-compartment =", + " ", + " stakeholders-compartment-contents" + ], + "name": "stakeholders-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "stakeholders-compartment-contents = (stakeholders-compartment-element)* '…'?" + ], + "name": "stakeholders-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "stakeholders-compartment-element = el-prefix? MemberPrefix usage-cp" + ], + "name": "stakeholders-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frames-compartment =", + " ", + " frames-compartment-contents" + ], + "name": "frames-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frames-compartment-contents = (frames-compartment-element)* '…'?" + ], + "name": "frames-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frames-compartment-element = el-prefix* MemberPrefix? FramedConcernUsage" + ], + "name": "frames-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concerns-compartment =", + " ", + " concerns-compartment-contents" + ], + "name": "concerns-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "interconnection-element =|", + " requirement-ref", + " | requirement", + " | concern", + " | distinguished-parameter", + " | distinguished-parameter-link", + " | concern-stakeholder-link" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "general-relationship =| frame-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "subject-actors-stakeholders-node =| requirement" + ], + "name": "subject-actors-stakeholders-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "distinguished-parameter =", + " subject", + " | actor", + " | stakeholder" + ], + "name": "distinguished-parameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "subject =", + " " + ], + "name": "subject" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "actor =", + " ", + " |", + " " + ], + "name": "actor" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "stakeholder =", + " " + ], + "name": "stakeholder" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "subject-name = UsageDeclaration" + ], + "name": "subject-name" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "actor-name = UsageDeclaration" + ], + "name": "actor-name" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "stakeholder-name = UsageDeclaration" + ], + "name": "stakeholder-name" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "distinguished-parameter-link =", + " " + ], + "name": "distinguished-parameter-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frame-relationship =", + " " + ], + "name": "frame-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concern-stakeholder-link =", + " " + ], + "name": "concern-stakeholder-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfy-edge =", + " " + ], + "name": "satisfy-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfier = usage-node | definition-node" + ], + "name": "satisfier" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "general-relationship =| satisfy-edge" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-edge =", + " " + ], + "name": "require-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirer = usage-node | definition-node" + ], + "name": "requirer" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "general-relationship =| require-edge" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-constraint-node =", + " " + ], + "name": "require-constraint-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-constraint-name-compartment =", + " '«' OccurrenceUsagePrefix 'require' 'constraint' '»'", + " usage-name-with-alias" + ], + "name": "require-constraint-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "usage-node =| require-constraint-node" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frame-concern-node =", + " " + ], + "name": "frame-concern-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frame-concern-name-compartment =", + " '«' OccurrenceUsagePrefix 'frame' 'concern' '»'", + " usage-name-with-alias" + ], + "name": "frame-concern-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "usage-node =| frame-concern-node" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frame-edge =", + " " + ], + "name": "frame-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "framer = requirement | requirement-def | viewpoint | viewpoint-def" + ], + "name": "framer" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "general-relationship =| frame-edge" + ], + "name": "general-relationship" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.22", + "lines": [ + "Clause 8.2.3.22 Cases Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.22", + "is_partial": true, + "lines": [ + "compartment =| objective-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.22", + "is_partial": false, + "lines": [ + "objective-compartment =", + " ", + " objective-compartment-contents" + ], + "name": "objective-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.22", + "is_partial": false, + "lines": [ + "objective-compartment-contents = (objective-compartment-element)* '…'?" + ], + "name": "objective-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.22", + "is_partial": false, + "lines": [ + "objective-compartment-element =", + " comp-prefix? MemberPrefix ConstraintUsageDeclaration RequirementBody" + ], + "name": "objective-compartment-element" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.23", + "lines": [ + "Clause 8.2.3.23 Analysis Cases Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": true, + "lines": [ + "definition-node =| analysis-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analysis-def =", + " " + ], + "name": "analysis-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analysis-def-name-compartment =", + " '«' DefinitionPrefix 'analysis' 'def' '»'", + " definition-name-with-alias" + ], + "name": "analysis-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": true, + "lines": [ + "usage-node =| analysis" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analysis =", + " " + ], + "name": "analysis" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analysis-name-compartment =", + " '«' OccurrenceUsagePrefix 'analysis' '»'", + " usage-name-with-alias" + ], + "name": "analysis-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": true, + "lines": [ + "compartment =| analyses-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analyses-compartment =", + " ", + " analyses-compartment-contents" + ], + "name": "analyses-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analyses-compartment-contents = analyses-compartment-element* '…'?" + ], + "name": "analyses-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analyses-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody" + ], + "name": "analyses-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": true, + "lines": [ + "action-flow-element =|", + " analysis-def", + " | analysis" + ], + "name": "action-flow-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": true, + "lines": [ + "subject-actors-stakeholders-node =| analysis | analysis-def" + ], + "name": "subject-actors-stakeholders-node" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.24", + "lines": [ + "Clause 8.2.3.24 Verification Cases Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "definition-node =| verification-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-def =", + " " + ], + "name": "verification-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-def-name-compartment =", + " '«' DefinitionPrefix 'verification' 'def' '»'", + " definition-name-with-alias" + ], + "name": "verification-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "usage-node =| verification" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification =", + " " + ], + "name": "verification" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-name-compartment =", + " '«' OccurrenceUsagePrefix 'verification' '»'", + " usage-name-with-alias" + ], + "name": "verification-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verify-requirement-node =", + " " + ], + "name": "verify-requirement-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verify-requirement-name-compartment =", + " '«' OccurrenceUsagePrefix 'verify' 'requirement' '»'", + " usage-name-with-alias" + ], + "name": "verify-requirement-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "usage-node =| verify-requirement-node" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "compartment =|", + " verifications-compartment", + " | verifies-compartment", + " | verification-methods-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifications-compartment =", + " ", + " verifications-compartment-contents" + ], + "name": "verifications-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifications-compartment-contents = (verifications-compartment-element)* '…'?" + ], + "name": "verifications-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifications-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody '…'" + ], + "name": "verifications-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifies-compartment =", + " ", + " verifies-compartment-contents" + ], + "name": "verifies-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifies-compartment-contents = (verifies-compartment-element)* '…'?" + ], + "name": "verifies-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifies-compartment-element = el-prefix? MemberPrefix RequirementVerificationUsage '…'" + ], + "name": "verifies-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-methods-compartment =", + " ", + " verification-methods-compartment-contents" + ], + "name": "verification-methods-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-methods-compartment-contents = (verification-methods-compartment-element)* '…'?" + ], + "name": "verification-methods-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-methods-compartment-element = MetadataBody" + ], + "name": "verification-methods-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "action-flow-element =|", + " verification-def", + " | verification" + ], + "name": "action-flow-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "general-relationship =| verify-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verify-relationship =", + " " + ], + "name": "verify-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "subject-actors-stakeholders-node =| verification | verification-def" + ], + "name": "subject-actors-stakeholders-node" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.25", + "lines": [ + "Clause 8.2.3.25 Use Cases Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "definition-node =| use-case-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-case-def =", + " " + ], + "name": "use-case-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-case-def-name-compartment =", + " '«' DefinitionPrefix 'use' 'case' 'def' '»'", + " definition-name-with-alias" + ], + "name": "use-case-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "usage-node =|", + " use-case", + " | include-use-case-usage" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-case =", + " " + ], + "name": "use-case" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-case-name-compartment =", + " '«' OccurrenceUsagePrefix 'use' 'case' '»'", + " usage-name-with-alias" + ], + "name": "use-case-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-case-usage =", + " " + ], + "name": "include-use-case-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-case-name-compartment =", + " '«include use case»'", + " requirement-name-compartment" + ], + "name": "include-use-case-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "compartment =|", + " use-cases-compartment", + " | include-actions-compartment", + " | includes-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-cases-compartment =", + " ", + " use-cases-compartment-contents" + ], + "name": "use-cases-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-cases-compartment-contents = use-cases-compartment-element* '…'?" + ], + "name": "use-cases-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-cases-compartment-element = el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration" + ], + "name": "use-cases-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-cases-compartment =", + " ", + " include-use-cases-compartment-contents" + ], + "name": "include-use-cases-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-cases-compartment-contents = (include-use-cases-compartment-element)* '…'?" + ], + "name": "include-use-cases-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-cases-compartment-element =", + " el-prefix? OccurrenceUsagePrefix", + " ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )", + " ( ValuePart | ActionUsageParameterList )? CaseBody" + ], + "name": "include-use-cases-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "includes-compartment =", + " ", + " includes-compartment-contents" + ], + "name": "includes-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "includes-compartment-contents = (includes-compartment-element)* '…'?" + ], + "name": "includes-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "includes-compartment-element =", + " el-prefix? OccurrenceUsagePrefix", + " ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )" + ], + "name": "includes-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "action-flow-element =|", + " use-case-def", + " | use-case" + ], + "name": "action-flow-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "general-relationship =| include-use-case-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-case-relationship =", + " " + ], + "name": "include-use-case-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "subject-actors-stakeholders-node =| use-case | use-case-def" + ], + "name": "subject-actors-stakeholders-node" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.26", + "lines": [ + "Clause 8.2.3.26 Views and Viewpoints Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "root-view =", + "\tframed-view" + ], + "name": "root-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": true, + "lines": [ + "definition-node =|", + " viewpoint-def", + " | view-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoint-def =", + " " + ], + "name": "viewpoint-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoint-def-name-compartment =", + " '«' DefinitionPrefix 'viewpoint' 'def' '»'", + " definition-name-with-alias" + ], + "name": "viewpoint-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-def =", + " " + ], + "name": "view-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-def-name-compartment =", + " '«' DefinitionPrefix 'view' 'def' '»'", + " definition-name-with-alias" + ], + "name": "view-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": true, + "lines": [ + "usage-node =|", + " viewpoint", + " | view", + " | framed-view" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoint =", + " " + ], + "name": "viewpoint" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoint-name-compartment =", + " '«' OccurrenceUsagePrefix 'viewpoint' '»'", + " usage-name-with-alias" + ], + "name": "viewpoint-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view =", + " " + ], + "name": "view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-name-compartment =", + " '«' OccurrenceUsagePrefix 'view' '»'", + " usage-name-with-alias" + ], + "name": "view-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": true, + "lines": [ + "compartment =|", + " views-compartment", + " | viewpoints-compartment", + " | exposes-compartment", + " | filters-compartment", + " | rendering-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "views-compartment =", + " ", + " views-compartment-contents" + ], + "name": "views-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "views-compartment-contents = (views-compartment-element)* '…'" + ], + "name": "views-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "views-compartment-element =", + " el-prefix? OccurrenceUsagePrefix UsageDeclaration? ValueOrFlowPart? ViewBody" + ], + "name": "views-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoints-compartment =", + " ", + " viewpoints-compartment-contents" + ], + "name": "viewpoints-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoints-compartment-contents = (viewpoints-compartment-element)* '…'?" + ], + "name": "viewpoints-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoints-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration RequirementBody" + ], + "name": "viewpoints-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "exposes-compartment =", + " ", + " exposes-compartment-contents" + ], + "name": "exposes-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "exposes-compartment-contents = exposes-compartment-element* '…'?" + ], + "name": "exposes-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "exposes-compartment-element = MembershipExpose | NamespaceExpose" + ], + "name": "exposes-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "filters-compartment =", + " ", + " filters-compartment-contents" + ], + "name": "filters-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "filters-compartment-contents = (filters-compartment-element)* '…'?" + ], + "name": "filters-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "filters-compartment-element = el-prefix? MemberPrefix OwnedExpression" + ], + "name": "filters-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "rendering-compartment =", + " ", + " rendering-compartment-contents" + ], + "name": "rendering-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "rendering-compartment-contents = usage-cp* '…'?" + ], + "name": "rendering-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": true, + "lines": [ + "interconnection-element =|", + " viewpoint-def", + " | viewpoint", + " | view-def", + " | view" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "framed-view =", + " " + ], + "name": "framed-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "frameless-view =", + " general-view", + " | interconnection-view", + " | action-flow-view", + " | state-transition-view", + " | sequence-view" + ], + "name": "frameless-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-frame-name-compartment = '«view»' QualifiedName (':' QualifiedName)?" + ], + "name": "view-frame-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-frame-info-contents = Expose? ElementFilterMember? AnnotatingElement*" + ], + "name": "view-frame-info-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-frame-info-compartment-tr =", + " " + ], + "name": "view-frame-info-compartment-tr" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-frame-info-compartment-bl =", + " " + ], + "name": "view-frame-info-compartment-bl" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-frame-info-compartment-br =", + " " + ], + "name": "view-frame-info-compartment-br" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": true, + "lines": [ + "general-relationship =| expose-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "expose-relationship =", + " expose-r | toplevel-expose-r | recursive-expose-r" + ], + "name": "expose-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "expose-r =", + " " + ], + "name": "expose-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "toplevel-expose-r =", + " " + ], + "name": "toplevel-expose-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "recursive-expose-r =", + " " + ], + "name": "recursive-expose-r" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.26", + "lines": [ + "// Note. The view frame info compartments are optional elements. The AnnotatingElement* enables adding any relevant supporting information related to a view, possibly using a configurable rendering." + ] + }, + { + "@type": "Comment", + "clause_id": "8.2.3.26", + "lines": [ + "// Note. A model library in Section 9.2.18 defines standard graphical view definitions for SysML. These may be supplemented by further, customized view definitions specific to a model." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.27", + "lines": [ + "Clause 8.2.3.27 Metadata Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": true, + "lines": [ + "annotation-node =| metadata-feature-annotation-node" + ], + "name": "annotation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-feature-annotation-node =", + " " + ], + "name": "metadata-feature-annotation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-feature-decl = Identification" + ], + "name": "metadata-feature-decl" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-feature-name-value-list =", + " ( metadata-feature-name '=' expression-text )*" + ], + "name": "metadata-feature-name-value-list" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-feature-name = Identification" + ], + "name": "metadata-feature-name" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "expression-text = text-block" + ], + "name": "expression-text" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-def =", + " " + ], + "name": "metadata-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-def-name-compartment =", + " '«' BasicUsagePrefix? keyword* 'metadata' 'def' '»'", + " definition-name-with-alias" + ], + "name": "metadata-def-name-compartment" + }, + { + "@type": "Comment", + "clause_id": "8.2.3.27", + "lines": [ + "// End of BNF", + "" + ] + } +] \ No newline at end of file diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected-marked_up.kgbnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected-marked_up.kgbnf new file mode 100644 index 000000000..c57251cb8 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected-marked_up.kgbnf @@ -0,0 +1,2185 @@ +// Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html +// Generated by bnf_grammar_processor at: 2025-11-28T15:06:37Z + +// Corrected manually by HP de Koning + +// Part 2 - Systems Modeling Language (SysML) + +// Clause 8.2.3 Graphical Notation + +// Clause 8.2.3.1 Graphical Notation Overview + +// Clause 8.2.3.2 Elements and Relationships Graphical Notation + +element = + dependencies-and-annotations-element + | general-element + | element-inside-textual-compartment + +compartment =| general-compartment + +general-compartment = + + general-view + +general-view = + (general-element)* + (dependencies-and-annotations-element)* + (ellipsis-at-lower-left-corner)? + +ellipsis-at-lower-left-corner = '...' + +general-element = + general-node + | general-relationship + +element-node = + usage-node | definition-node | annotation-node | namespace-node + +element-inside-textual-compartment = + + +rel-name = + Identification + | QualifiedName + +// Note. An element inside a textual compartment is selected by graying out a substring containing the element. The grayed-out section must cover a single element within the textual syntax inside the compartment. + +// Clause 8.2.3.3 Dependencies Graphical Notation + +dependencies-and-annotations-element =| dependencies-element + +dependencies-element =| + binary-dependency + | n-ary-dependency + +binary-dependency = + + +n-ary-dependency = + &n-ary-association-dot (n-ary-dependency-client-or-supplier-link &element-node)+ + +n-ary-dependency-client-or-supplier-link = + n-ary-dependency-client-link + | n-ary-dependency-supplier-link + +n-ary-association-dot = + + +n-ary-dependency-client-link = + + +n-ary-dependency-supplier-link = + + +// Note. An n-ary dependency must have two or more client elements or two or more supplier elements. + +// Clause 8.2.3.4 Annotations Graphical Notation + +dependencies-and-annotations-element =| + annotation-node + | annotation-link + +annotation-node = + comment-node + | documentation-node + | textual-representation-node + +text-block = (LINE_TEXT)* + +comment-node = + comment-without-keyword + | comment-with-keyword + +comment-without-keyword = + + +comment-with-keyword = + + +documentation-node = + + +documentation-compartment = + + Identification + text-block + +textual-representation-node = + + +language-string = 'language' '=' STRING_VALUE + +annotation-link = + + +annotated-element = + element + | element-inside-textual-compartment + +// Note. A comment node may be attached to zero, one, or more than one annotated elements. All other annotation nodes must be attached to one and only one annotated element. + +// Clause 8.2.3.5 Namespaces and Packages Graphical Notation + +general-node =| namespace-node + +namespace-node =| package-node + +package-node = + package-with-name-inside + | package-with-name-in-tab + | imported-package-with-name-inside + | imported-package-with-name-in-tab + +package-with-name-inside = + + +package-with-name-in-tab = + + +imported-package-with-name-inside = + + +imported-package-with-name-in-tab = + + +package-compartment = + general-compartment + | documentation-compartment + | packages-compartment + | members-compartment + | relationships-compartment + +compartment =| package-compartment + +packages-compartment = + + packages-compartment-contents + +packages-compartment-contents = packages-compartment-element* '…'? + +packages-compartment-element = el-prefix? Identification + +members-compartment = + + members-compartment-contents + +members-compartment-contents = members-compartment-element* '…'? + +members-compartment-element = el-prefix? (DefinitionElement | UsageElement) + +relationships-compartment = + + relationships-compartment-contents + +relationships-compartment-contents = (relationships-compartment-element)* '…'? + +relationships-compartment-element = el-prefix? relationship-name QualifiedName + +relationship-name = + 'defines' | 'defined by' | 'specializes' | 'specialized by' | 'connect to' + | 'subsets' | 'subsetted by' | 'performs' | 'performed by' | 'allocated' | 'allocated to' + | 'satisfy' | 'satisfied by' + +general-relationship =| + import + | top-level-import + | recursive-import + | owned-membership + | unowned-membership + +import = + + +top-level-import = + + +recursive-import = + + +owned-membership = + + +unowned-membership = + + +// Clause 8.2.3.6 Definition and Usage Graphical Notation + +general-node =| type-node + +type-node = + definition-node + | usage-node + +general-node =| usage-node definition-node + +namespace-node =| type-node + +definition-name-with-alias = + DefinitionDeclaration + ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )? + +usage-name-with-alias = + '^'? UsageDeclaration + ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )? + +compartment-stack = (compartment)* + +compartment =| + features-compartment + | variants-compartment + | variant-elementusages-compartment + +features-compartment = + + features-compartment-contents + +features-compartment-contents = (features-compartment-element)* '…'? + +features-compartment-element = el-prefix? UsagePrefix usage-cp + +variants-compartment = + + variants-compartment-contents + +variants-compartment-contents = members-compartment-contents + +variant-elementusages-compartment = + + variants-compartment-contents + +general-relationship =| + type-relationship + +type-relationship = + subclassification + | subsetting + | definition + | redefinition + | composite-feature-membership + | noncomposite-feature-membership + +subclassification = + + +definition = + + +subsetting = + + +reference-subsetting = + + +redefinition = + + +composite-feature-membership = + + +noncomposite-feature-membership = + + +el-prefix = '^' | '/' + +usage-cp = usageDeclaration ValuePart? + +extended-def = + + +extended-def-name-compartment = + '«' BasicDefinitionPrefix? DefinitionExtensionKeyword+ 'def' '»' + definition-name-with-alias + +// Note. This production is only valid for cases where one or more +// DefinitionExtensionKeyword names a MetadataDefinition that is a direct +// or indirect specialization of KerML metaclass SemanticMetadata. + +definition-node =| extended-def + +extended-usage = + + +extended-usage-name-compartment = + '«' BasicUsagePrefix? UsageExtensionKeyword+ '»' + usage-name-with-alias + +// Note. This production is only valid for cases where one or more +// UsageExtensionKeyword names a MetadataDefinition that is a direct +// or indirect specialization of KerML metaclass SemanticMetadata. + +usage-node =| extended-usage + +// Clause 8.2.3.7 Attributes Graphical Notation + +definition-node =| attribute-def + +attribute-def = + + +attribute-def-name-compartment = + '«' DefinitionPrefix 'attribute' 'def' '»' + definition-name-with-alias + +usage-node =| attribute + +attribute = + + +attribute-name-compartment = + '«' UsagePrefix 'attribute' '»' + usage-name-with-alias + +compartment =| attributes-compartment + +attributes-compartment = + + attributes-compartment-contents + +attributes-compartment-contents = (attributes-compartment-element)* '…'? + +attributes-compartment-element = el-prefix? UsagePrefix usage-cp + +// Clause 8.2.3.8 Enumerations Graphical Notation + +definition-node =| enumeration-def + +enumeration-def = + + +enumeration-def-name-compartment = + '«' DefinitionPrefix 'enum' 'def' '»' + definition-name-with-alias + +usage-node =| enumeration + +enumeration = + + +enumeration-name-compartment = + '«' UsagePrefix 'enum' '»' + usage-name-with-alias + +compartment =| enums-compartment + +enums-compartment = + + enums-compartment-contents + +enums-compartment-contents = (enums-compartment-element)* '…'? + +enums-compartment-element = el-prefix? UsagePrefix usage-cp + +// Clause 8.2.3.9 Occurrences Graphical Notation + +definition-node =| occurrence-def + +general-relationship =| portion-relationship + +occurrence-def = + + +occurrence-def-name-compartment = + '«' DefinitionPrefix 'occurrence' 'def' '»' + definition-name-with-alias + +usage-node =| + occurrence + | occurrence-ref + | timeslice-or-snapshot-node + +occurrence = + + +occurrence-ref = + + +occurrence-name-compartment = + '«' OccurrenceUsagePrefix 'occurrence' '»' + usage-name-with-alias + +timeslice-or-snapshot-node = + timeslice + | snapshot + +timeslice = + + +timeslice-name-compartment = + '«timeslice»' + usage-name-with-alias + +snapshot = + + +snapshots-name-compartment = + '«snapshot»' + usage-name-with-alias + +event-occurrence-def = + + +event-occurrence-def-name-compartment = + '«' DefinitionPrefix 'event' 'occurrence' 'def' '»' + definition-name-with-alias + +definition-node =| event-occurrence-def + +event-occurrence = + + +event-occurrence-name-compartment = + '«' OccurrenceUsagePrefix 'event' 'occurrence' '»' + usage-name-with-alias + +usage-node =| event-occurrence + +event-edge = + + +eventer = usage-node | definition-node + +portion-relationship = + + +compartment =| + occurrences-compartment + | individuals-compartment + | timeslices-compartment + | snapshots-compartment + | sequence-compartment + +occurrences-compartment = + + occurrences-compartment-contents + +occurrences-compartment-contents = (occurrences-compartment-element)* '…'? + +occurrences-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +individuals-compartment = + + individuals-compartment-contents + +individuals-compartment-contents = (individuals-compartment-element)* '…'? + +individuals-compartment-element = occurrences-compartment-element + +timeslices-compartment = + + timeslices-compartment-contents + +timeslices-compartment-contents = (timeslices-compartment-element)* '…'? + +timeslices-compartment-element = occurrences-compartment-element + +snapshots-compartment = + + snapshots-compartment-contents + +snapshots-compartment-contents = (snapshots-compartment-element)* '…'? + +snapshots-compartment-element = occurrences-compartment-element + +sequence-compartment = + + sequence-view + +sequence-view = (sq-graphical-element)* + +sq-graphical-element = + sq-graphical-node + | sq-graphical-relationship + | dependencies-and-annotations-element + +sq-graphical-node = sq-head-node | lifeline + +sq-head-node = sq-part | sq-port + +sq-part = + + +sq-port = + + +sq-port-label = UsageDeclaration + +sq-l-node = + lifeline + | sq-proxy + +lifeline = + + +sq-proxy = + + | + + +proxy-label = '.'? FeatureChainMember + +sq-graphical-relationship = message | sq-succession + +succession-label = UsageDeclaration? + +sq-succession = + + +succession-label = Identification + +// Note: the proxy nodes attached to a succession must refer to an event + +// Clause 8.2.3.10 Items Graphical Notation + +definition-node =| item-def + +interconnection-element =| item| item-ref + +item-def = + + +item-def-name-compartment = + '«' DefinitionPrefix 'item' 'def' '»' + definition-name-with-alias + +usage-node =| item + +item = + + +item-name-compartment = + '«' OccurrenceUsagePrefix 'item' '»' + usage-name-with-alias + +item-ref = + + +compartment =| items-compartment + +items-compartment = + + items-compartment-contents + +items-compartment-contents = (items-compartment-element)* '…' + +items-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +// Clause 8.2.3.11 Parts Graphical Notation + +definition-node =| part-def + +interconnection-element =| part | part-ref + +part-def = + + +part-def-name-compartment = + '«' DefinitionPrefix 'part' 'def' '»' + definition-name-with-alias + +usage-node =| part + +part = + + +part-name-compartment = + '«' OccurrenceUsagePrefix 'part' '»' + usage-name-with-alias + +part-ref = + + +compartment =| + parts-compartment + | directed-features-compartment + | interconnection-compartment + +parts-compartment = + + parts-compartment-contents + +parts-compartment-contents = (parts-compartment-element)* '…'? + +parts-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +directed-features-compartment = + + directed-features-compartment-contents + +directed-features-compartment-contents = (directed-features-compartment-element)* '…'? + +directed-features-compartment-element = + el-prefix FeatureDirection DefinitionBodyItem* + +interconnection-compartment = + + interconnection-view + +interconnection-view =| + (interconnection-element)* + (dependencies-and-annotations-element)* + (ellipsis-at-lower-left-corner)? + +general-view =| interconnection-view + +// Clause 8.2.3.12 Ports Graphical Notation + +definition-node =| port-def + +port-def = + + +port-def-name-compartment = + '«' DefinitionPrefix 'port' 'def' '»' + definition-name-with-alias + +usage-node =| port-usage + +port-usage = + + +port-name-compartment = + '«' OccurrenceUsagePrefix 'port' '»' + usage-name-with-alias + +compartment =| ports-compartment + +ports-compartment = + + ports-compartment-contents + +ports-compartment-contents = (ports-compartment-element)* '…'? + +ports-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +interconnection-element =| port-def | port-usage + +pdh = + + | + + | + + +pdv = + + | + + | + + +port-l = + + | + + | + + | + proxy-v + +port-r = + + | + + | + + | + proxy-v + +port-t = + + | + + | + + | + proxy-h + +port-b = + + | + + | + + | + proxy-h + +port-label = QualifiedName (':' QualifiedName)? + +proxy-v = + + | + + +proxy-h = + + | + + +// Note. Dotted line port productions (references) are only possible for nested ports + +// Note. The proxy option of a port production is valid only on a part usage contained within an interconnection view. + +// Clause 8.2.3.13 Connections Graphical Notation + +definition-node =| connection-def + +connection-def = + + +connection-def-name-compartment = + '«' DefinitionPrefix 'connection' 'def' '»' + definition-name-with-alias + +usage-node =| connection + +connection = + + +connection-name-compartment = + '«' OccurrenceUsagePrefix 'connection' '»' + usage-name-with-alias + +compartment =| connections-compartment + +connections-compartment = + + connections-compartment-contents + +connections-compartment-contents = (connections-compartment-element)* '…'? + +connections-compartment-element = + el-prefix? OccurrenceUsagePrefix UsageDeclaration + +interconnection-element =| + connection-def + | connection + | connection-relationship + | attribute + +connection-relationship = + binding-connection + | connection-graphical + | n-ary-connection + | n-ary-connection-def + | connection-definition-elaboration + | connection-usage-elaboration + | connection-def-graphical + +connection-graphical = + + | + + +c-adornment = + (a-property | a-direction | a-subsetting |a-redefinition)* + +a-property = + 'ordered' | 'nonunique' | 'abstract' | 'derived' | 'readonly' + +a-direction = + 'in' | 'out' | 'inout' + +a-subsetting = + 'subsets' OwnedSubsetting (',' OwnedSubsetting)* + +a-redefinition = + 'redefines' OwnedRedefinition (',' OwnedRedefinition)* + +connection-end = usage-node | usage-edge + +usage-edge =| connection-graphical | binding-connection + +connection-label = UsageDeclaration + +connection-def-graphical = + + | + + +general-relationship =| connection-def-graphical + +cdef-label = Identification + +n-ary-connection-def = + n-ary-def-connection-dot n-ary-def-segment+ + +n-ary-def-connection-dot = + + +n-ary-def-segment = + + +definition-node =| n-ary-def-connection-dot + +general-relationship =| n-ary-def-segment + +n-ary-connection = + n-ary-connection-dot n-ary-segment+ + +n-ary-connection-dot = + + +usage-node =| n-ary-connection-dot + +cdot-label = UsageDeclaration + +n-ary-segment = + + +binding-connection = + + +rolename = Identification? + +multiplicity = MultiplicityRange? + +connection-definition-elaboration = + + +connection-usage-elaboration = + + +// Note. The usage-nodes at the ends of a binding-connection must be of compatible types. + +// Clause 8.2.3.14 Interfaces Graphical Notation + +definition-node =| interface-def + +interconnection-element =| interface + +interface-def = + + +interface-def-name-compartment = + '«' DefinitionPrefix 'interface' 'def' '»' + definition-name-with-alias + +usage-node =| interface + +interface = + + +interface-name-compartment = + '«' OccurrenceUsagePrefix 'interface' '»' + usage-name-with-alias + +compartment =| + interfaces-compartment + | ends-compartment + +interfaces-compartment = + + interfaces-compartment-contents + +interfaces-compartment-contents = (interfaces-compartment-element)* '…'? + +interfaces-compartment-element = + el-prefix? OccurrenceUsagePrefix InterfaceUsageDeclaration + +ends-compartment = + + ends-compartment-contents + +ends-compartment-contents = (ends-compartment-element)* '…'? + +ends-compartment-element = QualifiedName (':' QualifiedName)? + +connection-relationship =| + interface-connection + +interface-connection = + + +interface-label = UsageDeclaration? + +// Clause 8.2.3.15 Allocations Graphical Notation + +definition-node =| allocation-def + +allocation-def = + + +allocation-def-name-compartment = + '«' DefinitionPrefix 'allocation' 'def' '»' + definition-name-with-alias + +usage-node =| allocation + +allocation = + + +allocation-name-compartment = + '«' OccurrenceUsagePrefix 'allocation' '»' + usage-name-with-alias + +compartment =| allocations-compartment + +allocations-compartment = + + allocations-compartment-contents + +allocations-compartment-contents = (allocations-compartment-element)* '…'? + +allocations-compartment-element = + el-prefix? OccurrenceUsagePrefix AllocationUsageDeclaration UsageBody* + +general-relationship =| allocate-relationship + +allocate-relationship = + + +allocation-node = + general-node + | element-in-textual-compartment + +usage-edge =| allocate-relationship + +// Clause 8.2.3.16 Flows Graphical Notation + +definition-node =| flow-def + +flow-def = + + +flow-def-name-compartment = + '«' DefinitionPrefix 'succession'? 'flow' 'def' '»' + definition-name-with-alias + +usage-node =| flow-node + +flow-node = + + +flow-name-compartment = + '«' OccurrenceUsagePrefix ( 'message' | 'succession'? 'flow' ) '»' + usage-name-with-alias + +compartment =| flows-compartment + +flows-compartment = + + flows-compartment-contents + +flows-compartment-contents = (flows-compartment-element)* '...'? + +flows-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( 'message' MessageDeclaration + | 'succession'? FlowDeclaration + ) + +interconnection-element =| + flow-def + | flow + +connection-relationship =| + message-connection + | flow + | succession-flow + | flow-on-connection + +usage-edge =| message | flow | succession-flow + +msg-end-node = + occurrence| sq-l-node| item | part | port | action | state + | use-case | verification-case | analysis-case | proxy + +message = + + +// Note: proxy nodes and ends of messages must refer to occurrences + +message-label = + UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember + +flow = + + +flow-label = + UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember + +flow-end-node = + parameter | proxy + +// Note: proxy nodes at ends of flows must refer to directed features + +succession-flow = + + +succession-flow-label = flow-label + +flow-on-connection = + + +flow-node = + flow-node-r + | flow-node-l + | sflow-node-r + | sflow-node-l + | message-node-r + | message-node-l + +flow-node-r = + + +flow-node-l = + + +sflow-node-r = + + +sflow-node-l = + + +message-node-r = + + +message-node-l = + + +flow-label = + Identification | FlowPayloadFeatureMember + +// Clause 8.2.3.17 Actions Graphical Notation + +definition-node =| action-def + +action-def = + + +action-def-name-compartment = + '«' DefinitionPrefix 'action' 'def' '»' + definition-name-with-alias + +usage-node =| + action + | perform-action-usage + +action = + + +action-name-compartment = + '«' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +perform-action-usage = + + +action-ref = + + +perform-action-name-compartment = + '«' OccurrenceUsagePrefix 'perform' 'action' '»' + usage-name-with-alias + +compartment =| + actions-compartment + | perform-actions-compartment + | parameters-compartment + | action-flow-compartment + +actions-compartment = + + actions-compartment-contents + +actions-compartment-contents = (actions-compartment-element)* '…'? + +actions-compartment-element = + el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration + +perform-actions-compartment = + + perform-actions-compartment-contents + +perform-actions-compartment-contents = (perform-actions-compartment-element)* '…'? + +perform-actions-compartment-element = + el-prefix? OccurrenceUsagePrefix PerformActionUsageDeclaration + +parameters-compartment = + + parameters-compartment-contents + +parameters-compartment-contents = (parameters-compartment-element)* '…'? + +parameters-compartment-element = + el-prefix? FeatureDirection UsageDeclaration ValueOrFlowPart? DefinitionBodyItem* + +performed-by-compartment = + + performed-by-compartment-contents + +performed-by-compartment-contents = QualifiedName* '…'? + +action-flow-compartment = + + action-flow-view + +action-flow-view = + (dependencies-and-annotations-element)* + (action-flow-element)* + (perform-action-swimlanes)? + +action-flow-element =| + action-ref + | action + | action-flow-node + | action-flow-relationship + +action-flow-node = + start-node + | done-node + | terminate-node + | fork-node + | join-node + | decision-node + | merge-node + | send-action-node + | accept-action-node + | while-loop-action-node + | for-loop-action-node + | if-else-action-node + | assign-action-node + +action-flow-relationship = + flow + | aflow-succession + | binding-connection + | else-branch + +param-l = + + | + + | + proxy-v + +param-r = + + | + + | + proxy-v + +param-t = + + | + + | + proxy-h + +param-b = + + | + + | + proxy-h + +param-label = QualifiedName (':' QualifiedName)* + +start-node = + + +done-node = + + +terminate-node = + + +fork-node = + + +join-node = + + +decision-node = + + +merge-node = + + +send-action-node = + + +send-action-name-compartment = + '«' OccurrenceUsagePrefix 'send' 'action' '»' + usage-name-with-alias + +send-action-expression = NodeParameterMember 'to' NodeParameterMember + +accept-action-node = + + +accept-action-name-compartment = + '«' OccurrenceUsagePrefix 'accept' 'action' '»' + usage-name-with-alias + +accept-action-expression = AcceptParameterPart + +while-loop-action-node = + + +while-condition = + + condition-expression + +until-condition = + + condition-expression + +while-loop-action-name-compartment = + '«' OccurrenceUsagePrefix 'loop' '»' + usage-name-with-alias + +for-loop-action-node = + + +iteration = + + iteration-expression + +loop-body = + + action-body + +for-loop-action-name-compartment = + '«' OccurrenceUsagePrefix 'loop' '»' + usage-name-with-alias + +if-else-action-node = + + +if-condition = + + condition-expression + +then-body = + + action-body + +else-body = + + action-body + +ifelse-action-name-compartment = + '«' OccurrenceUsagePrefix 'if' '»' + usage-name-with-alias + +action-body = + action-body-textual | action-flow-view + +condition-expression = + ExpressionParameterMember + +iteration-expression = + ForVariableDeclarationMember 'in' NodeParameterMember + +action-body-textual = + ActionBodyParameterMember + +assign-action-node = + + +assign-action-name-compartment = + '«' OccurrenceUsagePrefix 'assign' '»' + usage-name-with-alias + +perform-actions-swimlanes = (swimlane)* + +swimlane = + + +parameter = + param-l | param-r | param-t | param-b + +aflow-succession = + + +else-branch = + + +perform-edge = + + +performer-node = part | action | part-def | action-def | distinguished-parameter + +usage-edge =| succession perform-edge + +guard-expression = '[' OwnedExpression ']' + +// Note. All swimlanes are attached to each other on vertical edges and aligned along the top and bottom horizontal edges. + +// Note. The proxy option of a parameter production is valid only on an action usage contained within an action flow view. + +// Clause 8.2.3.18 States Graphical Notation + +definition-node =| state-def + +state-def = + + +state-def-name-compartment = + '«' DefinitionPrefix 'state' 'def' '»' + definition-name-with-alias + ('«' 'parallel' '»')? + +usage-node =| + state + | exhibit-state-usage + +state = + + +state-ref = + + +state-name-compartment = + '«' OccurrenceUsagePrefix 'state' '»' + usage-name-with-alias + ('«' 'parallel' '»')? + +exhibit-state-usage = + + +state-subaction-body = state-subaction-body-textual | action-flow-view + +state-subaction-body-textual = state-subaction-declaration? ( '{' ActionBodyItem* '}' )? + +state-subaction-declaration = + PerformActionUsageDeclaration + | AcceptNodeDeclaration + | SendNodeDeclaration + | AssignmentNodeDeclaration + +state-do-action = + + state-subaction-body + +state-entry-action = + + state-subaction-body + +state-exit-action = + + state-subaction-body + +entry-action = + + | + + +entry-action-name-comp = + '«' 'entry' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +exit-action = + + +exit-action-name-comp = + '«' 'exit' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +do-action = + + +do-action-name-comp = + '«' 'do' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +exhibit-state-name-compartment = + '«exhibit-state»' + state-name-compartment + +compartment =| + states-compartment + | state-actions-compartment + | exhibit-states-compartment + | successions-compartment + | state-transition-compartment + +states-compartment = + + states-compartment-contents + +states-compartment-contents = (states-compartment-element)* '…'? + +states-compartment-element = + el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration + +state-actions-compartment = + + state-actions-compartment-contents + +state-actions-compartment-contents = (state-actions-compartment-element)* '…'? + +state-actions-compartment-element = + el-prefix? EntryActionMember | DoActionMember | ExitActionMember + +exhibit-states-compartment = + + exhibit-states-compartment-contents + +exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'? + +exhibit-states-compartment-element-compartment = UsageDeclaration + +successions-compartment = + + successions-compartment-contents + +successions-compartment-contents = QualifiedName* '…'? + +state-transition-compartment = + + state-transition-view + +state-transition-view = + (state-transition-element)* + (dependencies-and-annotations-element)* + +state-transition-element = + state-transition-node + | transition + | st-succession + +state-transition-node = + state + | state-ref + | start-node + | entry-action + | do-action + | exit-action + | done-node + | fork-node + | join-node + | decision-node + | merge-node + | terminate-node + | action + | perform-action-usage + | action-ref + +transition = + + | + + +state-source = + state | state-ref + +transition-label = trigger-expression '/' ActionUsage + +trigger-expression = AcceptParameterPart (guard-expression)? + +st-succession = + + | + + +exhibit-edge = + + +exhibitor = part | part-def + +general-relationship =| exhibit-edge + +usage-edge =| transition | st-succession | exhibit-edge + +// Clause 8.2.3.19 Calculations Graphical Notation + +definition-node =| calc-def + +calc-def = + + +calc-def-name-compartment = + '«' DefinitionPrefix 'calc' 'def' '»' + definition-name-with-alias + +usage-node =| calc + +calc = + + +calc-name-compartment = + '«' OccurrenceUsagePrefix 'calc' '»' + usage-name-with-alias + +action-flow-element =| + calc-def + | calc + +compartment =| + calcs-compartment + | result-compartment + +calcs-compartment = + + calcs-compartment-contents + +calcs-compartment-contents = calcs-compartment-element* '…'? + +calcs-compartment-element = el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration + +result-compartment = + + result-compartment-contents + +result-compartment-contents = OwnedExpression + +// Clause 8.2.3.20 Constraints Graphical Notation + +definition-node =| constraint-def + +constraint-def = + + +constraint-def-name-compartment = + '«' DefinitionPrefix 'constraint' 'def' '»' + definition-name-with-alias + +usage-node = + constraint + | assert-constraint-node + +constraint = + + +constraint-ref = + + +constraint-name-compartment = + '«' OccurrenceUsagePrefix 'constraint' '»' + usage-name-with-alias + +assert-constraint-node = + + +assert-constraint-name-compartment = + '«assert constraint»' + constraint-name-compartment + +assume-constraint-node = + + +assume-constraint-name-compartment = + '«' OccurrenceUsagePrefix 'assume' 'constraint' '»' + usage-name-with-alias + +usage-node =| assume-constraint-node | assert-constraint-node + +assume-edge = + + +assumer = requirement | requirement-def + +general-relationship =| assume-edge + +assert-edge = + + +assertor = usage-node | definition-node + +general-relationship =| assert-edge + +compartment =| + constraints-compartment + | assert-constraints-compartment + +constraints-compartment = + + constraints-compartment-contents + +constraints-compartment-contents = (constraints-usage-compartment-element)* '…'? + +constraints-usage-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CalculationBody* + +assert-constraints-compartment = + + assert-constraints-compartment-contents + +assert-constraints-compartment-contents = (assert-constraints-compartment-element)* '…'? + +assert-constraints-compartment-element = + el-prefix? OccurrenceUsagePrefix ( 'not' )? + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + CalculationUsageParameterPart CalculationBody + +interconnection-element =| + constraint-ref + | constraint + +// Clause 8.2.3.21 Requirements Graphical Notation + +definition-node =| + requirement-def + | concern-def + +requirement-def = + + +requirement-def-name-compartment = + '«' DefinitionPrefix 'requirement' 'def' '»' + definition-name-with-alias + +usage-node = + requirement + | satisfy-requirement-usage + | concern + +requirement = + + +requirement-ref = + + +requirement-name-compartment = + '«' OccurrenceUsagePrefix 'requirement' '»' + usage-name-with-alias + +satisfy-requirement-usage = + + +satisfy-requirement-name-compartment = + '«satisfy requirement»' + requirement-name-compartment + +concern-def = + + +concern-def-name-compartment = + '«' DefinitionPrefix 'concern' 'def' '»' + definition-name-with-alias + +concern = + + +concern-name-compartment = + '«' OccurrenceUsagePrefix 'concern' '»' + usage-name-with-alias + +compartment =| + constraints-compartment + | assert-constraints-compartment + +compartment =| + requirements-compartment + | require-constraints-compartment + | assume-constraints-compartment + | satisfy-requirements-compartment + | satisfies-compartment + | actors-compartment + | subject-compartment + | stakeholders-compartment + | frames-compartment + +requirements-compartment = + + requirements-compartment-contents + +requirements-compartment-contents = (requirements-compartment-element)* '…'? + +requirements-compartment-element = + OccurrenceUsagePrefix ConstraintUsageDeclaration + +require-constraints-compartment = + + require-constraints-compartment-contents + +require-constraints-compartment-contents = require-constraint-element* '…'? + +require-constraint-element = + el-prefix? requireMemberPrefix? RequirementConstraintUsage + +assume-constraints-compartment = + + assume-constraints-compartment-contents + +assume-constraints-compartment-contents = require-constraint-element* '…'? + +satisfy-requirements-compartment = + + satisfy-requirements-compartment-contents + +satisfy-requirements-compartment-contents = text-block + +satisfies-compartment = + + satisfies-compartment-contents + +satisfies-compartment-contents = UsageDeclaration* '…'? + +actors-compartment = + + actors-compartment-contents + +actors-compartment-contents = (actors-compartment-element)* '…'? + +actors-compartment-element = el-prefix? MemberPrefix usage-cp + +subject-compartment = + + subject-compartment-contents + +subject-compartment-contents = (subject-compartment-element)* '…'? + +subject-compartment-element = el-prefix? MemberPrefix usage-cp + +stakeholders-compartment = + + stakeholders-compartment-contents + +stakeholders-compartment-contents = (stakeholders-compartment-element)* '…'? + +stakeholders-compartment-element = el-prefix? MemberPrefix usage-cp + +frames-compartment = + + frames-compartment-contents + +frames-compartment-contents = (frames-compartment-element)* '…'? + +frames-compartment-element = el-prefix* MemberPrefix? FramedConcernUsage + +concerns-compartment = + + concerns-compartment-contents + +interconnection-element =| + requirement-ref + | requirement + | concern + | distinguished-parameter + | distinguished-parameter-link + | concern-stakeholder-link + +general-relationship =| frame-relationship + +subject-actors-stakeholders-node =| requirement + +distinguished-parameter = + subject + | actor + | stakeholder + +subject = + + +actor = + + | + + +stakeholder = + + +subject-name = UsageDeclaration + +actor-name = UsageDeclaration + +stakeholder-name = UsageDeclaration + +distinguished-parameter-link = + + +frame-relationship = + + +concern-stakeholder-link = + + +satisfy-edge = + + +satisfier = usage-node | definition-node + +general-relationship =| satisfy-edge + +require-edge = + + +requirer = usage-node | definition-node + +general-relationship =| require-edge + +require-constraint-node = + + +require-constraint-name-compartment = + '«' OccurrenceUsagePrefix 'require' 'constraint' '»' + usage-name-with-alias + +usage-node =| require-constraint-node + +frame-concern-node = + + +frame-concern-name-compartment = + '«' OccurrenceUsagePrefix 'frame' 'concern' '»' + usage-name-with-alias + +usage-node =| frame-concern-node + +frame-edge = + + +framer = requirement | requirement-def | viewpoint | viewpoint-def + +general-relationship =| frame-edge + +// Clause 8.2.3.22 Cases Graphical Notation + +compartment =| objective-compartment + +objective-compartment = + + objective-compartment-contents + +objective-compartment-contents = (objective-compartment-element)* '…'? + +objective-compartment-element = + comp-prefix? MemberPrefix ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.3.23 Analysis Cases Graphical Notation + +definition-node =| analysis-def + +analysis-def = + + +analysis-def-name-compartment = + '«' DefinitionPrefix 'analysis' 'def' '»' + definition-name-with-alias + +usage-node =| analysis + +analysis = + + +analysis-name-compartment = + '«' OccurrenceUsagePrefix 'analysis' '»' + usage-name-with-alias + +compartment =| analyses-compartment + +analyses-compartment = + + analyses-compartment-contents + +analyses-compartment-contents = analyses-compartment-element* '…'? + +analyses-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody + +action-flow-element =| + analysis-def + | analysis + +subject-actors-stakeholders-node =| analysis | analysis-def + +// Clause 8.2.3.24 Verification Cases Graphical Notation + +definition-node =| verification-def + +verification-def = + + +verification-def-name-compartment = + '«' DefinitionPrefix 'verification' 'def' '»' + definition-name-with-alias + +usage-node =| verification + +verification = + + +verification-name-compartment = + '«' OccurrenceUsagePrefix 'verification' '»' + usage-name-with-alias + +verify-requirement-node = + + +verify-requirement-name-compartment = + '«' OccurrenceUsagePrefix 'verify' 'requirement' '»' + usage-name-with-alias + +usage-node =| verify-requirement-node + +compartment =| + verifications-compartment + | verifies-compartment + | verification-methods-compartment + +verifications-compartment = + + verifications-compartment-contents + +verifications-compartment-contents = (verifications-compartment-element)* '…'? + +verifications-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody '…' + +verifies-compartment = + + verifies-compartment-contents + +verifies-compartment-contents = (verifies-compartment-element)* '…'? + +verifies-compartment-element = el-prefix? MemberPrefix RequirementVerificationUsage '…' + +verification-methods-compartment = + + verification-methods-compartment-contents + +verification-methods-compartment-contents = (verification-methods-compartment-element)* '…'? + +verification-methods-compartment-element = MetadataBody + +action-flow-element =| + verification-def + | verification + +general-relationship =| verify-relationship + +verify-relationship = + + +subject-actors-stakeholders-node =| verification | verification-def + +// Clause 8.2.3.25 Use Cases Graphical Notation + +definition-node =| use-case-def + +use-case-def = + + +use-case-def-name-compartment = + '«' DefinitionPrefix 'use' 'case' 'def' '»' + definition-name-with-alias + +usage-node =| + use-case + | include-use-case-usage + +use-case = + + +use-case-name-compartment = + '«' OccurrenceUsagePrefix 'use' 'case' '»' + usage-name-with-alias + +include-use-case-usage = + + +include-use-case-name-compartment = + '«include use case»' + requirement-name-compartment + +compartment =| + use-cases-compartment + | include-actions-compartment + | includes-compartment + +use-cases-compartment = + + use-cases-compartment-contents + +use-cases-compartment-contents = use-cases-compartment-element* '…'? + +use-cases-compartment-element = el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration + +include-use-cases-compartment = + + include-use-cases-compartment-contents + +include-use-cases-compartment-contents = (include-use-cases-compartment-element)* '…'? + +include-use-cases-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + ( ValuePart | ActionUsageParameterList )? CaseBody + +includes-compartment = + + includes-compartment-contents + +includes-compartment-contents = (includes-compartment-element)* '…'? + +includes-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + +action-flow-element =| + use-case-def + | use-case + +general-relationship =| include-use-case-relationship + +include-use-case-relationship = + + +subject-actors-stakeholders-node =| use-case | use-case-def + +// Clause 8.2.3.26 Views and Viewpoints Graphical Notation + +root-view = + framed-view + +definition-node =| + viewpoint-def + | view-def + +viewpoint-def = + + +viewpoint-def-name-compartment = + '«' DefinitionPrefix 'viewpoint' 'def' '»' + definition-name-with-alias + +view-def = + + +view-def-name-compartment = + '«' DefinitionPrefix 'view' 'def' '»' + definition-name-with-alias + +usage-node =| + viewpoint + | view + | framed-view + +viewpoint = + + +viewpoint-name-compartment = + '«' OccurrenceUsagePrefix 'viewpoint' '»' + usage-name-with-alias + +view = + + +view-name-compartment = + '«' OccurrenceUsagePrefix 'view' '»' + usage-name-with-alias + +compartment =| + views-compartment + | viewpoints-compartment + | exposes-compartment + | filters-compartment + | rendering-compartment + +views-compartment = + + views-compartment-contents + +views-compartment-contents = (views-compartment-element)* '…' + +views-compartment-element = + el-prefix? OccurrenceUsagePrefix UsageDeclaration? ValueOrFlowPart? ViewBody + +viewpoints-compartment = + + viewpoints-compartment-contents + +viewpoints-compartment-contents = (viewpoints-compartment-element)* '…'? + +viewpoints-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration RequirementBody + +exposes-compartment = + + exposes-compartment-contents + +exposes-compartment-contents = exposes-compartment-element* '…'? + +exposes-compartment-element = MembershipExpose | NamespaceExpose + +filters-compartment = + + filters-compartment-contents + +filters-compartment-contents = (filters-compartment-element)* '…'? + +filters-compartment-element = el-prefix? MemberPrefix OwnedExpression + +rendering-compartment = + + rendering-compartment-contents + +rendering-compartment-contents = usage-cp* '…'? + +interconnection-element =| + viewpoint-def + | viewpoint + | view-def + | view + +framed-view = + + +frameless-view = + general-view + | interconnection-view + | action-flow-view + | state-transition-view + | sequence-view + +view-frame-name-compartment = '«view»' QualifiedName (':' QualifiedName)? + +view-frame-info-contents = Expose? ElementFilterMember? AnnotatingElement* + +view-frame-info-compartment-tr = + + +view-frame-info-compartment-bl = + + +view-frame-info-compartment-br = + + +general-relationship =| expose-relationship + +expose-relationship = + expose-r | toplevel-expose-r | recursive-expose-r + +expose-r = + + +toplevel-expose-r = + + +recursive-expose-r = + + +// Note. The view frame info compartments are optional elements. The AnnotatingElement* enables adding any relevant supporting information related to a view, possibly using a configurable rendering. + +// Note. A model library in Section 9.2.18 defines standard graphical view definitions for SysML. These may be supplemented by further, customized view definitions specific to a model. + +// Clause 8.2.3.27 Metadata Graphical Notation + +annotation-node =| metadata-feature-annotation-node + +metadata-feature-annotation-node = + + +metadata-feature-decl = Identification + +metadata-feature-name-value-list = + ( metadata-feature-name '=' expression-text )* + +metadata-feature-name = Identification + +expression-text = text-block + +metadata-def = + + +metadata-def-name-compartment = + '«' BasicUsagePrefix? keyword* 'metadata' 'def' '»' + definition-name-with-alias + +// End of BNF diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected.html b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected.html new file mode 100644 index 000000000..0bf12c09c --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected.html @@ -0,0 +1,2799 @@ + + + + +SysML-graphical-bnf-corrected + + + +

        // Source document: tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected-marked_up.kgbnf
        +// Generated by bnf_grammar_processor at: 2025-12-04T19:29:18Z +

        +

        // Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html
        +// Generated by bnf_grammar_processor at: 2025-11-28T15:06:37Z +

        +

        // Corrected manually by HP de Koning +

        +

        // Part 2 - Systems Modeling Language (SysML)

        +

        // Clause 8.2.3 Graphical Notation

        +

        // Clause 8.2.3.1 Graphical Notation Overview

        +

        // Clause 8.2.3.2 Elements and Relationships Graphical Notation

        + +
        element =
        +     dependencies-and-annotations-element
        +   | general-element
        +   | element-inside-textual-compartment
        +
        +
        compartment =| general-compartment
        +
        + +
        general-compartment =
        +      
        +      general-view
        +
        + +
        general-view =
        +      (general-element)*
        +      (dependencies-and-annotations-element)*
        +      (ellipsis-at-lower-left-corner)?
        +
        + +
        ellipsis-at-lower-left-corner = '...'
        +
        + +
        general-element =
        +      general-node
        +    | general-relationship
        +
        + +
        element-node =
        +    usage-node | definition-node | annotation-node | namespace-node
        +
        + +
        element-inside-textual-compartment =
        +                           
        +
        + +
        rel-name =
        +      Identification
        +    | QualifiedName
        +
        +

        // Note. An element inside a textual compartment is selected by graying out a substring containing the element. The grayed-out section must cover a single element within the textual syntax inside the compartment. +

        +

        // Clause 8.2.3.3 Dependencies Graphical Notation

        +
        dependencies-and-annotations-element =| dependencies-element
        +
        +
        dependencies-element =|
        +      binary-dependency
        +    | n-ary-dependency
        +
        + +
        binary-dependency =
        +     
        +
        + +
        n-ary-dependency =
        +    &n-ary-association-dot (n-ary-dependency-client-or-supplier-link &element-node)+
        +
        + +
        n-ary-dependency-client-or-supplier-link =
        +      n-ary-dependency-client-link
        +    | n-ary-dependency-supplier-link
        +
        + +
        n-ary-association-dot =
        +     
        +
        + +
        n-ary-dependency-client-link =
        +      
        +
        + +
        n-ary-dependency-supplier-link =
        +      
        +
        +

        // Note. An n-ary dependency must have two or more client elements or two or more supplier elements. +

        +

        // Clause 8.2.3.4 Annotations Graphical Notation

        +
        dependencies-and-annotations-element =|
        +      annotation-node
        +    | annotation-link
        +
        + +
        annotation-node =
        +       comment-node
        +     | documentation-node
        +     | textual-representation-node
        +
        + +
        text-block = (LINE_TEXT)*
        +
        + +
        comment-node =
        +       comment-without-keyword
        +     | comment-with-keyword
        +
        + +
        comment-without-keyword =
        +       
        +
        + +
        comment-with-keyword =
        +       
        +
        + +
        documentation-node =
        +        
        +
        + +
        documentation-compartment =
        +       
        +       Identification
        +       text-block
        +
        + +
        textual-representation-node =
        +        
        +
        + +
        language-string = 'language' '=' STRING_VALUE
        +
        + +
        annotation-link =
        +       
        +
        + +
        annotated-element =
        +      element
        +    | element-inside-textual-compartment
        +
        +

        // Note. A comment node may be attached to zero, one, or more than one annotated elements. All other annotation nodes must be attached to one and only one annotated element. +

        +

        // Clause 8.2.3.5 Namespaces and Packages Graphical Notation

        +
        general-node =| namespace-node
        +
        +
        namespace-node =| package-node
        +
        + +
        package-node =
        +      package-with-name-inside
        +    | package-with-name-in-tab
        +    | imported-package-with-name-inside
        +    | imported-package-with-name-in-tab
        +
        + +
        package-with-name-inside =
        +     
        +
        + +
        package-with-name-in-tab =
        +     
        +
        + +
        imported-package-with-name-inside =
        +     
        +
        + +
        imported-package-with-name-in-tab =
        +     
        +
        + +
        package-compartment =
        +      general-compartment
        +    | documentation-compartment
        +    | packages-compartment
        +    | members-compartment
        +    | relationships-compartment
        +
        +
        compartment =| package-compartment
        +
        + +
        packages-compartment =
        +      
        +      packages-compartment-contents
        +
        + +
        packages-compartment-contents = packages-compartment-element* '…'?
        +
        + +
        packages-compartment-element = el-prefix? Identification
        +
        + +
        members-compartment =
        +      
        +      members-compartment-contents
        +
        + +
        members-compartment-contents = members-compartment-element* '…'?
        +
        + +
        members-compartment-element = el-prefix? (DefinitionElement | UsageElement)
        +
        + +
        relationships-compartment =
        +       
        +       relationships-compartment-contents
        +
        + +
        relationships-compartment-contents = (relationships-compartment-element)* '…'?
        +
        + +
        relationships-compartment-element = el-prefix? relationship-name QualifiedName
        +
        + +
        relationship-name =
        +      'defines' |  'defined by' | 'specializes' |  'specialized by' |  'connect to'
        +    | 'subsets' |  'subsetted by' | 'performs' |  'performed by' | 'allocated' |  'allocated to'
        +    | 'satisfy' |  'satisfied by'
        +
        +
        general-relationship =|
        +      import
        +    | top-level-import
        +    | recursive-import
        +    | owned-membership
        +    | unowned-membership
        +
        + +
        import =
        +    
        +
        + +
        top-level-import =
        +    
        +
        + +
        recursive-import =
        +    
        +
        + +
        owned-membership =
        +     
        +
        + +
        unowned-membership =
        +     
        +
        +

        // Clause 8.2.3.6 Definition and Usage Graphical Notation

        +
        general-node =| type-node
        +
        + +
        type-node =
        +      definition-node
        +    | usage-node
        +
        +
        general-node =| usage-node definition-node
        +
        +
        namespace-node =| type-node
        +
        + +
        definition-name-with-alias =
        +    DefinitionDeclaration
        +    ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?
        +
        + +
        usage-name-with-alias =
        +    '^'? UsageDeclaration
        +    ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?
        +
        + +
        compartment-stack = (compartment)*
        +
        +
        compartment =|
        +      features-compartment
        +    | variants-compartment
        +    | variant-elementusages-compartment
        +
        + +
        features-compartment =
        +    
        +      features-compartment-contents
        +
        + +
        features-compartment-contents = (features-compartment-element)* '…'?
        +
        + +
        features-compartment-element = el-prefix? UsagePrefix usage-cp
        +
        + +
        variants-compartment =
        +    
        +      variants-compartment-contents
        +
        + +
        variants-compartment-contents = members-compartment-contents
        +
        + +
        variant-elementusages-compartment =
        +    
        +      variants-compartment-contents
        +
        +
        general-relationship =|
        +      type-relationship
        +
        + +
        type-relationship =
        +      subclassification
        +    | subsetting
        +    | definition
        +    | redefinition
        +    | composite-feature-membership
        +    | noncomposite-feature-membership
        +
        + +
        subclassification =
        +    
        +
        + +
        definition =
        +    
        +
        + +
        subsetting =
        +   
        +
        + +
        reference-subsetting =
        +   
        +
        + +
        redefinition =
        +    
        +
        + +
        composite-feature-membership =
        +    
        +
        + +
        noncomposite-feature-membership =
        +    
        +
        + +
        el-prefix = '^' | '/'
        +
        + +
        usage-cp = usageDeclaration ValuePart?
        +
        + +
        extended-def =
        +    
        +
        + +
        extended-def-name-compartment =
        +     '«' BasicDefinitionPrefix? DefinitionExtensionKeyword+ 'def' '»'
        +     definition-name-with-alias
        +
        +

        // Note. This production is only valid for cases where one or more
        +// DefinitionExtensionKeyword names a MetadataDefinition that is a direct
        +// or indirect specialization of KerML metaclass SemanticMetadata. +

        +
        definition-node =| extended-def
        +
        + +
        extended-usage =
        +    
        +
        + +
        extended-usage-name-compartment =
        +     '«' BasicUsagePrefix? UsageExtensionKeyword+ '»'
        +     usage-name-with-alias
        +
        +

        // Note. This production is only valid for cases where one or more
        +// UsageExtensionKeyword names a MetadataDefinition that is a direct
        +// or indirect specialization of KerML metaclass SemanticMetadata. +

        +
        usage-node =| extended-usage
        +
        +

        // Clause 8.2.3.7 Attributes Graphical Notation

        +
        definition-node =| attribute-def
        +
        + +
        attribute-def =
        +      
        +
        + +
        attribute-def-name-compartment =
        +      '«' DefinitionPrefix 'attribute' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| attribute
        +
        + +
        attribute =
        +      
        +
        + +
        attribute-name-compartment =
        +      '«' UsagePrefix 'attribute' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| attributes-compartment
        +
        + +
        attributes-compartment =
        +      
        +      attributes-compartment-contents
        +
        + +
        attributes-compartment-contents = (attributes-compartment-element)* '…'?
        +
        + +
        attributes-compartment-element = el-prefix? UsagePrefix usage-cp
        +
        +

        // Clause 8.2.3.8 Enumerations Graphical Notation

        +
        definition-node =| enumeration-def
        +
        + +
        enumeration-def =
        +      
        +
        + +
        enumeration-def-name-compartment =
        +      '«' DefinitionPrefix 'enum' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| enumeration
        +
        + +
        enumeration =
        +      
        +
        + +
        enumeration-name-compartment =
        +      '«' UsagePrefix 'enum' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| enums-compartment
        +
        + +
        enums-compartment =
        +      
        +      enums-compartment-contents
        +
        + +
        enums-compartment-contents = (enums-compartment-element)* '…'?
        +
        + +
        enums-compartment-element = el-prefix? UsagePrefix usage-cp
        +
        +

        // Clause 8.2.3.9 Occurrences Graphical Notation

        +
        definition-node =| occurrence-def
        +
        +
        general-relationship =| portion-relationship
        +
        + +
        occurrence-def =
        +      
        +
        + +
        occurrence-def-name-compartment =
        +      '«' DefinitionPrefix 'occurrence' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =|
        +      occurrence
        +    | occurrence-ref
        +    | timeslice-or-snapshot-node
        +
        + +
        occurrence =
        +      
        +
        + +
        occurrence-ref =
        +      
        +
        + +
        occurrence-name-compartment =
        +      '«' OccurrenceUsagePrefix 'occurrence' '»'
        +      usage-name-with-alias
        +
        + +
        timeslice-or-snapshot-node =
        +      timeslice
        +    | snapshot
        +
        + +
        timeslice =
        +      
        +
        + +
        timeslice-name-compartment =
        +      '«timeslice»'
        +      usage-name-with-alias
        +
        + +
        snapshot =
        +      
        +
        + +
        snapshots-name-compartment =
        +      '«snapshot»'
        +      usage-name-with-alias
        +
        + +
        event-occurrence-def =
        +  
        +
        + +
        event-occurrence-def-name-compartment =
        +      '«' DefinitionPrefix 'event'  'occurrence' 'def' '»'
        +      definition-name-with-alias
        +
        +
        definition-node =| event-occurrence-def
        +
        + +
        event-occurrence =
        +  
        +
        + +
        event-occurrence-name-compartment =
        +      '«' OccurrenceUsagePrefix 'event'  'occurrence' '»'
        +      usage-name-with-alias
        +
        +
        usage-node =| event-occurrence
        +
        + +
        event-edge =
        +  
        +
        + +
        eventer = usage-node | definition-node
        +
        + +
        portion-relationship =
        +      
        +
        +
        compartment =|
        +      occurrences-compartment
        +    | individuals-compartment
        +    | timeslices-compartment
        +    | snapshots-compartment
        +    | sequence-compartment
        +
        + +
        occurrences-compartment =
        +      
        +      occurrences-compartment-contents
        +
        + +
        occurrences-compartment-contents = (occurrences-compartment-element)* '…'?
        +
        + +
        occurrences-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp
        +
        + +
        individuals-compartment =
        +      
        +      individuals-compartment-contents
        +
        + +
        individuals-compartment-contents = (individuals-compartment-element)* '…'?
        +
        + +
        individuals-compartment-element = occurrences-compartment-element
        +
        + +
        timeslices-compartment =
        +      
        +      timeslices-compartment-contents
        +
        + +
        timeslices-compartment-contents = (timeslices-compartment-element)* '…'?
        +
        + +
        timeslices-compartment-element = occurrences-compartment-element
        +
        + +
        snapshots-compartment =
        +      
        +      snapshots-compartment-contents
        +
        + +
        snapshots-compartment-contents = (snapshots-compartment-element)* '…'?
        +
        + +
        snapshots-compartment-element = occurrences-compartment-element
        +
        + +
        sequence-compartment =
        +      
        +      sequence-view
        +
        + +
        sequence-view = (sq-graphical-element)*
        +
        + +
        sq-graphical-element =
        +      sq-graphical-node
        +    | sq-graphical-relationship
        +    | dependencies-and-annotations-element
        +
        + +
        sq-graphical-node = sq-head-node | lifeline
        +
        + +
        sq-head-node = sq-part | sq-port
        +
        + +
        sq-part =
        +      
        +
        + +
        sq-port =
        +      
        +
        + +
        sq-port-label = UsageDeclaration
        +
        + +
        sq-l-node =
        +      lifeline
        +    | sq-proxy
        +
        + +
        lifeline =
        +      
        +
        + +
        sq-proxy =
        +      
        +    |
        +      
        +
        + +
        proxy-label = '.'? FeatureChainMember
        +
        + +
        sq-graphical-relationship = message | sq-succession
        +
        + +
        succession-label = UsageDeclaration?
        +
        + +
        sq-succession =
        +    
        +
        + +
        succession-label = Identification
        +
        +

        // Note: the proxy nodes attached to a succession must refer to an event +

        +

        // Clause 8.2.3.10 Items Graphical Notation

        +
        definition-node =| item-def
        +
        +
        interconnection-element =| item| item-ref
        +
        + +
        item-def =
        +      
        +
        + +
        item-def-name-compartment =
        +      '«' DefinitionPrefix 'item' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| item
        +
        + +
        item =
        +      
        +
        + +
        item-name-compartment =
        +    '«' OccurrenceUsagePrefix 'item' '»'
        +    usage-name-with-alias
        +
        + +
        item-ref =
        +     
        +
        +
        compartment =| items-compartment
        +
        + +
        items-compartment =
        +     
        +     items-compartment-contents
        +
        + +
        items-compartment-contents = (items-compartment-element)* '…'
        +
        + +
        items-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp
        +
        +

        // Clause 8.2.3.11 Parts Graphical Notation

        +
        definition-node =| part-def
        +
        +
        interconnection-element =| part | part-ref
        +
        + +
        part-def =
        +     
        +
        + +
        part-def-name-compartment =
        +      '«' DefinitionPrefix 'part' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| part
        +
        + +
        part =
        +      
        +
        + +
        part-name-compartment =
        +      '«' OccurrenceUsagePrefix 'part' '»'
        +      usage-name-with-alias
        +
        + +
        part-ref =
        +      
        +
        +
        compartment =|
        +      parts-compartment
        +    | directed-features-compartment
        +    | interconnection-compartment
        +
        + +
        parts-compartment =
        +      
        +      parts-compartment-contents
        +
        + +
        parts-compartment-contents = (parts-compartment-element)* '…'?
        +
        + +
        parts-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp
        +
        + +
        directed-features-compartment =
        +      
        +      directed-features-compartment-contents
        +
        + +
        directed-features-compartment-contents = (directed-features-compartment-element)* '…'?
        +
        + +
        directed-features-compartment-element =
        +      el-prefix FeatureDirection DefinitionBodyItem*
        +
        + +
        interconnection-compartment =
        +      
        +      interconnection-view
        +
        +
        interconnection-view =|
        +      (interconnection-element)*
        +      (dependencies-and-annotations-element)*
        +      (ellipsis-at-lower-left-corner)?
        +
        +
        general-view =| interconnection-view
        +
        +

        // Clause 8.2.3.12 Ports Graphical Notation

        +
        definition-node =| port-def
        +
        + +
        port-def =
        +      
        +
        + +
        port-def-name-compartment =
        +      '«' DefinitionPrefix 'port' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| port-usage
        +
        + +
        port-usage =
        +      
        +
        + +
        port-name-compartment =
        +      '«' OccurrenceUsagePrefix 'port' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| ports-compartment
        +
        + +
        ports-compartment =
        +      
        +      ports-compartment-contents
        +
        + +
        ports-compartment-contents = (ports-compartment-element)* '…'?
        +
        + +
        ports-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp
        +
        +
        interconnection-element =| port-def | port-usage
        +
        + +
        pdh =
        +      
        +    |
        +      
        +    |
        +      
        +
        + +
        pdv =
        +      
        +    |
        +      
        +    |
        +      
        +
        + +
        port-l =
        +      
        +    |
        +      
        +    |
        +      
        +    |
        +      proxy-v
        +
        + +
        port-r =
        +      
        +    |
        +      
        +    |
        +      
        +    |
        +      proxy-v
        +
        + +
        port-t =
        +      
        +    |
        +      
        +    |
        +      
        +    |
        +      proxy-h
        +
        + +
        port-b =
        +      
        +    |
        +      
        +    |
        +      
        +    |
        +      proxy-h
        +
        + +
        port-label = QualifiedName (':' QualifiedName)?
        +
        + +
        proxy-v =
        +      
        +    |
        +      
        +
        + +
        proxy-h =
        +      
        +    |
        +      
        +
        +

        // Note. Dotted line port productions (references) are only possible for nested ports +

        +

        // Note. The proxy option of a port production is valid only on a part usage contained within an interconnection view. +

        +

        // Clause 8.2.3.13 Connections Graphical Notation

        +
        definition-node =| connection-def
        +
        + +
        connection-def =
        +      
        +
        + +
        connection-def-name-compartment =
        +      '«' DefinitionPrefix 'connection' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| connection
        +
        + +
        connection =
        +      
        +
        + +
        connection-name-compartment =
        +      '«' OccurrenceUsagePrefix 'connection' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| connections-compartment
        +
        + +
        connections-compartment =
        +      
        +      connections-compartment-contents
        +
        + +
        connections-compartment-contents = (connections-compartment-element)* '…'?
        +
        + +
        connections-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix UsageDeclaration
        +
        +
        interconnection-element =|
        +      connection-def
        +    | connection
        +    | connection-relationship
        +    | attribute
        +
        + +
        connection-relationship =
        +      binding-connection
        +    | connection-graphical
        +    | n-ary-connection
        +    | n-ary-connection-def
        +    | connection-definition-elaboration
        +    | connection-usage-elaboration
        +    | connection-def-graphical
        +
        + +
        connection-graphical =
        +      
        +    |
        +      
        +
        + +
        c-adornment =
        +    (a-property | a-direction | a-subsetting |a-redefinition)*
        +
        + +
        a-property =
        +    'ordered' | 'nonunique' | 'abstract' | 'derived' | 'readonly'
        +
        + +
        a-direction =
        +    'in' | 'out' | 'inout'
        +
        + +
        a-subsetting =
        +    'subsets' OwnedSubsetting (',' OwnedSubsetting)*
        +
        + +
        a-redefinition =
        +    'redefines' OwnedRedefinition (',' OwnedRedefinition)*
        +
        + +
        connection-end = usage-node | usage-edge
        +
        +
        usage-edge =| connection-graphical | binding-connection
        +
        + +
        connection-label = UsageDeclaration
        +
        + +
        connection-def-graphical =
        +      
        +    |
        +      
        +
        +
        general-relationship =| connection-def-graphical
        +
        + +
        cdef-label = Identification
        +
        + +
        n-ary-connection-def =
        +    n-ary-def-connection-dot n-ary-def-segment+
        +
        + +
        n-ary-def-connection-dot =
        +  
        +
        + +
        n-ary-def-segment =
        +   
        +
        +
        definition-node =| n-ary-def-connection-dot
        +
        +
        general-relationship =| n-ary-def-segment
        +
        + +
        n-ary-connection =
        +    n-ary-connection-dot n-ary-segment+
        +
        + +
        n-ary-connection-dot =
        +      
        +
        +
        usage-node =| n-ary-connection-dot
        +
        + +
        cdot-label = UsageDeclaration
        +
        + +
        n-ary-segment =
        +     
        +
        + +
        binding-connection =
        +     
        +
        + +
        rolename = Identification?
        +
        + +
        multiplicity = MultiplicityRange?
        +
        + +
        connection-definition-elaboration =
        +    
        +
        + +
        connection-usage-elaboration =
        +    
        +
        +

        // Note. The usage-nodes at the ends of a binding-connection must be of compatible types. +

        +

        // Clause 8.2.3.14 Interfaces Graphical Notation

        +
        definition-node =| interface-def
        +
        +
        interconnection-element =| interface
        +
        + +
        interface-def =
        +       
        +
        + +
        interface-def-name-compartment =
        +      '«' DefinitionPrefix 'interface' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| interface
        +
        + +
        interface =
        +       
        +
        + +
        interface-name-compartment =
        +      '«' OccurrenceUsagePrefix 'interface' '»'
        +      usage-name-with-alias
        +
        +
        compartment =|
        +      interfaces-compartment
        +    | ends-compartment
        +
        + +
        interfaces-compartment =
        +      
        +      interfaces-compartment-contents
        +
        + +
        interfaces-compartment-contents = (interfaces-compartment-element)* '…'?
        +
        + +
        interfaces-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix InterfaceUsageDeclaration
        +
        + +
        ends-compartment =
        +      
        +      ends-compartment-contents
        +
        + +
        ends-compartment-contents = (ends-compartment-element)* '…'?
        +
        + +
        ends-compartment-element = QualifiedName (':' QualifiedName)?
        +
        +
        connection-relationship =|
        +      interface-connection
        +
        + +
        interface-connection =
        +    
        +
        + +
        interface-label = UsageDeclaration?
        +
        +

        // Clause 8.2.3.15 Allocations Graphical Notation

        +
        definition-node =| allocation-def
        +
        + +
        allocation-def =
        +       
        +
        + +
        allocation-def-name-compartment =
        +      '«' DefinitionPrefix 'allocation' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| allocation
        +
        + +
        allocation =
        +       
        +
        + +
        allocation-name-compartment =
        +      '«' OccurrenceUsagePrefix 'allocation' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| allocations-compartment
        +
        + +
        allocations-compartment =
        +      
        +      allocations-compartment-contents
        +
        + +
        allocations-compartment-contents = (allocations-compartment-element)* '…'?
        +
        + +
        allocations-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix AllocationUsageDeclaration UsageBody*
        +
        +
        general-relationship =| allocate-relationship
        +
        + +
        allocate-relationship =
        +       
        +
        + +
        allocation-node =
        +      general-node
        +    | element-in-textual-compartment
        +
        +
        usage-edge =| allocate-relationship
        +
        +

        // Clause 8.2.3.16 Flows Graphical Notation

        +
        definition-node =| flow-def
        +
        + +
        flow-def =
        +    
        +
        + +
        flow-def-name-compartment =
        +    '«' DefinitionPrefix 'succession'? 'flow' 'def' '»'
        +    definition-name-with-alias
        +
        +
        usage-node =| flow-node
        +
        + +
        flow-node =
        +    
        +
        + +
        flow-name-compartment =
        +      '«' OccurrenceUsagePrefix ( 'message' | 'succession'? 'flow' ) '»'
        +      usage-name-with-alias
        +
        +
        compartment =| flows-compartment
        +
        + +
        flows-compartment =
        +      
        +      flows-compartment-contents
        +
        + +
        flows-compartment-contents = (flows-compartment-element)* '...'?
        +
        + +
        flows-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix
        +    ( 'message' MessageDeclaration
        +    | 'succession'? FlowDeclaration
        +    )
        +
        +
        interconnection-element =|
        +      flow-def
        +    | flow
        +
        +
        connection-relationship =|
        +      message-connection
        +    | flow
        +    | succession-flow
        +    | flow-on-connection
        +
        +
        usage-edge =| message | flow | succession-flow
        +
        + +
        msg-end-node =
        +      occurrence| sq-l-node| item | part | port | action | state
        +    | use-case | verification-case | analysis-case | proxy
        +
        + +
        message =
        +     
        +
        +

        // Note: proxy nodes and ends of messages must refer to occurrences +

        + +
        message-label =
        +    UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember
        +
        + +
        flow =
        +     
        +
        + +
        flow-label =
        +    UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember
        +
        + +
        flow-end-node =
        +    parameter | proxy
        +
        +

        // Note: proxy nodes at ends of flows must refer to directed features +

        + +
        succession-flow =
        +     
        +
        + +
        succession-flow-label = flow-label
        +
        + +
        flow-on-connection =
        +     
        +
        + +
        flow-node =
        +      flow-node-r
        +    | flow-node-l
        +    | sflow-node-r
        +    | sflow-node-l
        +    | message-node-r
        +    | message-node-l
        +
        + +
        flow-node-r =
        +    
        +
        + +
        flow-node-l =
        +    
        +
        + +
        sflow-node-r =
        +    
        +
        + +
        sflow-node-l =
        +    
        +
        + +
        message-node-r =
        +    
        +
        + +
        message-node-l =
        +    
        +
        + +
        flow-label =
        +    Identification | FlowPayloadFeatureMember
        +
        +

        // Clause 8.2.3.17 Actions Graphical Notation

        +
        definition-node =| action-def
        +
        + +
        action-def =
        +      
        +
        + +
        action-def-name-compartment =
        +      '«' DefinitionPrefix 'action' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =|
        +      action
        +    | perform-action-usage
        +
        + +
        action =
        +      
        +
        + +
        action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'action' '»'
        +      usage-name-with-alias
        +
        + +
        perform-action-usage =
        +      
        +
        + +
        action-ref =
        +      
        +
        + +
        perform-action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'perform' 'action' '»'
        +      usage-name-with-alias
        +
        +
        compartment =|
        +      actions-compartment
        +    | perform-actions-compartment
        +    | parameters-compartment
        +    | action-flow-compartment
        +
        + +
        actions-compartment =
        +      
        +      actions-compartment-contents
        +
        + +
        actions-compartment-contents = (actions-compartment-element)* '…'?
        +
        + +
        actions-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration
        +
        + +
        perform-actions-compartment =
        +      
        +      perform-actions-compartment-contents
        +
        + +
        perform-actions-compartment-contents = (perform-actions-compartment-element)* '…'?
        +
        + +
        perform-actions-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix PerformActionUsageDeclaration
        +
        + +
        parameters-compartment =
        +      
        +      parameters-compartment-contents
        +
        + +
        parameters-compartment-contents = (parameters-compartment-element)* '…'?
        +
        + +
        parameters-compartment-element =
        +      el-prefix? FeatureDirection UsageDeclaration ValueOrFlowPart? DefinitionBodyItem*
        +
        + +
        performed-by-compartment =
        +      
        +      performed-by-compartment-contents
        +
        + +
        performed-by-compartment-contents = QualifiedName* '…'?
        +
        + +
        action-flow-compartment =
        +      
        +      action-flow-view
        +
        + +
        action-flow-view =
        +     (dependencies-and-annotations-element)*
        +     (action-flow-element)*
        +     (perform-action-swimlanes)?
        +
        +
        action-flow-element =|
        +      action-ref
        +    | action
        +    | action-flow-node
        +    | action-flow-relationship
        +
        + +
        action-flow-node =
        +      start-node
        +    | done-node
        +    | terminate-node
        +    | fork-node
        +    | join-node
        +    | decision-node
        +    | merge-node
        +    | send-action-node
        +    | accept-action-node
        +    | while-loop-action-node
        +    | for-loop-action-node
        +    | if-else-action-node
        +    | assign-action-node
        +
        + +
        action-flow-relationship =
        +      flow
        +    | aflow-succession
        +    | binding-connection
        +    | else-branch
        +
        + +
        param-l =
        +      
        +    |
        +      
        +    |
        +      proxy-v
        +
        + +
        param-r =
        +      
        +    |
        +       
        +    |
        +      proxy-v
        +
        + +
        param-t =
        +      
        +    |
        +      
        +    |
        +      proxy-h
        +
        + +
        param-b =
        +      
        +    |
        +      
        +    |
        +      proxy-h
        +
        + +
        param-label = QualifiedName (':' QualifiedName)*
        +
        + +
        start-node =
        +      
        +
        + +
        done-node =
        +      
        +
        + +
        terminate-node =
        +     
        +
        + +
        fork-node =
        +      
        +
        + +
        join-node =
        +      
        +
        + +
        decision-node =
        +      
        +
        + +
        merge-node =
        +      
        +
        + +
        send-action-node =
        +      
        +
        + +
        send-action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'send' 'action' '»'
        +      usage-name-with-alias
        +
        + +
        send-action-expression = NodeParameterMember 'to' NodeParameterMember
        +
        + +
        accept-action-node =
        +      
        +
        + +
        accept-action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'accept' 'action' '»'
        +      usage-name-with-alias
        +
        + +
        accept-action-expression = AcceptParameterPart
        +
        + +
        while-loop-action-node =
        +  
        +
        + +
        while-condition =
        +  
        +  condition-expression
        +
        + +
        until-condition =
        +  
        +  condition-expression
        +
        + +
        while-loop-action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'loop' '»'
        +      usage-name-with-alias
        +
        + +
        for-loop-action-node =
        +  
        +
        + +
        iteration =
        +  
        +  iteration-expression
        +
        + +
        loop-body =
        +  
        +  action-body
        +
        + +
        for-loop-action-name-compartment =
        +    '«' OccurrenceUsagePrefix 'loop' '»'
        +    usage-name-with-alias
        +
        + +
        if-else-action-node =
        +     
        +
        + +
        if-condition =
        +  
        +  condition-expression
        +
        + +
        then-body =
        +  
        +  action-body
        +
        + +
        else-body =
        +  
        +  action-body
        +
        + +
        ifelse-action-name-compartment =
        +    '«' OccurrenceUsagePrefix 'if' '»'
        +    usage-name-with-alias
        +
        + +
        action-body =
        +    action-body-textual | action-flow-view
        +
        + +
        condition-expression =
        +    ExpressionParameterMember
        +
        + +
        iteration-expression =
        +    ForVariableDeclarationMember 'in' NodeParameterMember
        +
        + +
        action-body-textual =
        +    ActionBodyParameterMember
        +
        + +
        assign-action-node =
        +      
        +
        + +
        assign-action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'assign' '»'
        +      usage-name-with-alias
        +
        + +
        perform-actions-swimlanes = (swimlane)*
        +
        + +
        swimlane =
        +      
        +
        + +
        parameter =
        +  param-l | param-r | param-t | param-b
        +
        + +
        aflow-succession =
        +     
        +
        + +
        else-branch =
        +    
        +
        + +
        perform-edge =
        +    
        +
        + +
        performer-node = part | action | part-def | action-def | distinguished-parameter
        +
        +
        usage-edge =| succession perform-edge
        +
        + +
        guard-expression = '[' OwnedExpression ']'
        +
        +

        // Note. All swimlanes are attached to each other on vertical edges and aligned along the top and bottom horizontal edges. +

        +

        // Note. The proxy option of a parameter production is valid only on an action usage contained within an action flow view. +

        +

        // Clause 8.2.3.18 States Graphical Notation

        +
        definition-node =| state-def
        +
        + +
        state-def =
        +        
        +
        + +
        state-def-name-compartment =
        +      '«' DefinitionPrefix 'state' 'def' '»'
        +      definition-name-with-alias
        +      ('«' 'parallel' '»')?
        +
        +
        usage-node =|
        +      state
        +    | exhibit-state-usage
        +
        + +
        state =
        +       
        +
        + +
        state-ref =
        +      
        +
        + +
        state-name-compartment =
        +      '«' OccurrenceUsagePrefix 'state' '»'
        +      usage-name-with-alias
        +      ('«' 'parallel' '»')?
        +
        + +
        exhibit-state-usage =
        +      
        +
        + +
        state-subaction-body = state-subaction-body-textual | action-flow-view
        +
        + +
        state-subaction-body-textual = state-subaction-declaration? ( '{' ActionBodyItem* '}' )?
        +
        + +
        state-subaction-declaration =
        +      PerformActionUsageDeclaration
        +    | AcceptNodeDeclaration
        +    | SendNodeDeclaration
        +    | AssignmentNodeDeclaration
        +
        + +
        state-do-action =
        +      
        +      state-subaction-body
        +
        + +
        state-entry-action =
        +      
        +      state-subaction-body
        +
        + +
        state-exit-action =
        +      
        +      state-subaction-body
        +
        + +
        entry-action =
        +      
        +    |
        +      
        +
        + +
        entry-action-name-comp =
        +      '«' 'entry' OccurrenceUsagePrefix 'action' '»'
        +      usage-name-with-alias
        +
        + +
        exit-action =
        +      
        +
        + +
        exit-action-name-comp =
        +      '«' 'exit' OccurrenceUsagePrefix 'action' '»'
        +      usage-name-with-alias
        +
        + +
        do-action =
        +      
        +
        + +
        do-action-name-comp =
        +      '«' 'do' OccurrenceUsagePrefix 'action' '»'
        +      usage-name-with-alias
        +
        + +
        exhibit-state-name-compartment =
        +      '«exhibit-state»'
        +      state-name-compartment
        +
        +
        compartment =|
        +      states-compartment
        +    | state-actions-compartment
        +    | exhibit-states-compartment
        +    | successions-compartment
        +    | state-transition-compartment
        +
        + +
        states-compartment =
        +      
        +      states-compartment-contents
        +
        + +
        states-compartment-contents = (states-compartment-element)* '…'?
        +
        + +
        states-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration
        +
        + +
        state-actions-compartment =
        +      
        +      state-actions-compartment-contents
        +
        + +
        state-actions-compartment-contents = (state-actions-compartment-element)* '…'?
        +
        + +
        state-actions-compartment-element =
        +    el-prefix? EntryActionMember | DoActionMember | ExitActionMember
        +
        + +
        exhibit-states-compartment =
        +      
        +      exhibit-states-compartment-contents
        +
        + +
        exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'?
        +
        + +
        exhibit-states-compartment-element-compartment = UsageDeclaration
        +
        + +
        successions-compartment =
        +      
        +      successions-compartment-contents
        +
        + +
        successions-compartment-contents = QualifiedName* '…'?
        +
        + +
        state-transition-compartment =
        +      
        +      state-transition-view
        +
        + +
        state-transition-view =
        +      (state-transition-element)*
        +      (dependencies-and-annotations-element)*
        +
        + +
        state-transition-element =
        +    state-transition-node
        +  | transition
        +  | st-succession
        +
        + +
        state-transition-node =
        +    state
        +  | state-ref
        +  | start-node
        +  | entry-action
        +  | do-action
        +  | exit-action
        +  | done-node
        +  | fork-node
        +  | join-node
        +  | decision-node
        +  | merge-node
        +  | terminate-node
        +  | action
        +  | perform-action-usage
        +  | action-ref
        +
        + +
        transition =
        +    
        +    |
        +    
        +
        + +
        state-source =
        +   state | state-ref
        +
        + +
        transition-label = trigger-expression '/' ActionUsage
        +
        + +
        trigger-expression = AcceptParameterPart (guard-expression)?
        +
        + +
        st-succession =
        +     
        +   |
        +     
        +
        + +
        exhibit-edge =
        +  
        +
        + +
        exhibitor = part | part-def
        +
        +
        general-relationship =| exhibit-edge
        +
        +
        usage-edge =| transition | st-succession  | exhibit-edge
        +
        +

        // Clause 8.2.3.19 Calculations Graphical Notation

        +
        definition-node =| calc-def
        +
        + +
        calc-def =
        +      
        +
        + +
        calc-def-name-compartment =
        +      '«' DefinitionPrefix 'calc' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| calc
        +
        + +
        calc =
        +      
        +
        + +
        calc-name-compartment =
        +      '«' OccurrenceUsagePrefix 'calc' '»'
        +      usage-name-with-alias
        +
        +
        action-flow-element =|
        +      calc-def
        +    | calc
        +
        +
        compartment =|
        +      calcs-compartment
        +    | result-compartment
        +
        + +
        calcs-compartment =
        +      
        +      calcs-compartment-contents
        +
        + +
        calcs-compartment-contents = calcs-compartment-element* '…'?
        +
        + +
        calcs-compartment-element = el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration
        +
        + +
        result-compartment =
        +      
        +      result-compartment-contents
        +
        + +
        result-compartment-contents = OwnedExpression
        +
        +

        // Clause 8.2.3.20 Constraints Graphical Notation

        +
        definition-node =| constraint-def
        +
        + +
        constraint-def =
        +      
        +
        + +
        constraint-def-name-compartment =
        +      '«' DefinitionPrefix 'constraint' 'def' '»'
        +      definition-name-with-alias
        +
        + +
        usage-node =
        +      constraint
        +    | assert-constraint-node
        +
        + +
        constraint =
        +      
        +
        + +
        constraint-ref =
        +      
        +
        + +
        constraint-name-compartment =
        +      '«' OccurrenceUsagePrefix 'constraint' '»'
        +      usage-name-with-alias
        +
        + +
        assert-constraint-node =
        +      
        +
        + +
        assert-constraint-name-compartment =
        +        '«assert constraint»'
        +       constraint-name-compartment
        +
        + +
        assume-constraint-node =
        +  
        +
        + +
        assume-constraint-name-compartment =
        +      '«' OccurrenceUsagePrefix 'assume' 'constraint' '»'
        +      usage-name-with-alias
        +
        +
        usage-node =| assume-constraint-node | assert-constraint-node
        +
        + +
        assume-edge =
        +      
        +
        + +
        assumer = requirement | requirement-def
        +
        +
        general-relationship =| assume-edge
        +
        + +
        assert-edge =
        +      
        +
        + +
        assertor = usage-node | definition-node
        +
        +
        general-relationship =| assert-edge
        +
        +
        compartment =|
        +      constraints-compartment
        +    | assert-constraints-compartment
        +
        + +
        constraints-compartment =
        +      
        +      constraints-compartment-contents
        +
        + +
        constraints-compartment-contents = (constraints-usage-compartment-element)* '…'?
        +
        + +
        constraints-usage-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CalculationBody*
        +
        + +
        assert-constraints-compartment =
        +      
        +      assert-constraints-compartment-contents
        +
        + +
        assert-constraints-compartment-contents = (assert-constraints-compartment-element)* '…'?
        +
        + +
        assert-constraints-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix ( 'not' )?
        +      ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )
        +      CalculationUsageParameterPart CalculationBody
        +
        +
        interconnection-element =|
        +      constraint-ref
        +    | constraint
        +
        +

        // Clause 8.2.3.21 Requirements Graphical Notation

        +
        definition-node =|
        +      requirement-def
        +    | concern-def
        +
        + +
        requirement-def =
        +      
        +
        + +
        requirement-def-name-compartment =
        +      '«' DefinitionPrefix 'requirement' 'def' '»'
        +      definition-name-with-alias
        +
        + +
        usage-node =
        +      requirement
        +    | satisfy-requirement-usage
        +    | concern
        +
        + +
        requirement =
        +      
        +
        + +
        requirement-ref =
        +      
        +
        + +
        requirement-name-compartment =
        +      '«' OccurrenceUsagePrefix 'requirement' '»'
        +      usage-name-with-alias
        +
        + +
        satisfy-requirement-usage =
        +      
        +
        + +
        satisfy-requirement-name-compartment =
        +        '«satisfy requirement»'
        +       requirement-name-compartment
        +
        + +
        concern-def =
        +      
        +
        + +
        concern-def-name-compartment =
        +      '«' DefinitionPrefix 'concern' 'def' '»'
        +      definition-name-with-alias
        +
        + +
        concern =
        +      
        +
        + +
        concern-name-compartment =
        +      '«' OccurrenceUsagePrefix 'concern' '»'
        +      usage-name-with-alias
        +
        +
        compartment =|
        +      constraints-compartment
        +    | assert-constraints-compartment
        +
        +
        compartment =|
        +      requirements-compartment
        +    | require-constraints-compartment
        +    | assume-constraints-compartment
        +    | satisfy-requirements-compartment
        +    | satisfies-compartment
        +    | actors-compartment
        +    | subject-compartment
        +    | stakeholders-compartment
        +    | frames-compartment
        +
        + +
        requirements-compartment =
        +      
        +      requirements-compartment-contents
        +
        + +
        requirements-compartment-contents = (requirements-compartment-element)* '…'?
        +
        + +
        requirements-compartment-element =
        +    OccurrenceUsagePrefix ConstraintUsageDeclaration
        +
        + +
        require-constraints-compartment =
        +      
        +      require-constraints-compartment-contents
        +
        + +
        require-constraints-compartment-contents = require-constraint-element* '…'?
        +
        + +
        require-constraint-element =
        +    el-prefix? requireMemberPrefix? RequirementConstraintUsage
        +
        + +
        assume-constraints-compartment =
        +      
        +      assume-constraints-compartment-contents
        +
        + +
        assume-constraints-compartment-contents = require-constraint-element* '…'?
        +
        + +
        satisfy-requirements-compartment =
        +      
        +      satisfy-requirements-compartment-contents
        +
        + +
        satisfy-requirements-compartment-contents = text-block
        +
        + +
        satisfies-compartment =
        +      
        +      satisfies-compartment-contents
        +
        + +
        satisfies-compartment-contents = UsageDeclaration* '…'?
        +
        + +
        actors-compartment =
        +      
        +      actors-compartment-contents
        +
        + +
        actors-compartment-contents = (actors-compartment-element)* '…'?
        +
        + +
        actors-compartment-element = el-prefix? MemberPrefix usage-cp
        +
        + +
        subject-compartment =
        +      
        +      subject-compartment-contents
        +
        + +
        subject-compartment-contents = (subject-compartment-element)* '…'?
        +
        + +
        subject-compartment-element = el-prefix? MemberPrefix usage-cp
        +
        + +
        stakeholders-compartment =
        +      
        +      stakeholders-compartment-contents
        +
        + +
        stakeholders-compartment-contents = (stakeholders-compartment-element)* '…'?
        +
        + +
        stakeholders-compartment-element = el-prefix? MemberPrefix usage-cp
        +
        + +
        frames-compartment =
        +      
        +      frames-compartment-contents
        +
        + +
        frames-compartment-contents = (frames-compartment-element)* '…'?
        +
        + +
        frames-compartment-element = el-prefix* MemberPrefix? FramedConcernUsage
        +
        + +
        concerns-compartment =
        +      
        +      concerns-compartment-contents
        +
        +
        interconnection-element =|
        +      requirement-ref
        +    | requirement
        +    | concern
        +    | distinguished-parameter
        +    | distinguished-parameter-link
        +    | concern-stakeholder-link
        +
        +
        general-relationship =| frame-relationship
        +
        +
        subject-actors-stakeholders-node =| requirement
        +
        + +
        distinguished-parameter =
        +      subject
        +    | actor
        +    | stakeholder
        +
        + +
        subject =
        +       
        +
        + +
        actor =
        +        
        +    |
        +       
        +
        + +
        stakeholder =
        +       
        +
        + +
        subject-name = UsageDeclaration
        +
        + +
        actor-name = UsageDeclaration
        +
        + +
        stakeholder-name = UsageDeclaration
        +
        + +
        distinguished-parameter-link =
        +      
        +
        + +
        frame-relationship =
        +      
        +
        + +
        concern-stakeholder-link =
        +      
        +
        + +
        satisfy-edge =
        +  
        +
        + +
        satisfier = usage-node | definition-node
        +
        +
        general-relationship =| satisfy-edge
        +
        + +
        require-edge =
        +  
        +
        + +
        requirer = usage-node | definition-node
        +
        +
        general-relationship =| require-edge
        +
        + +
        require-constraint-node =
        +   
        +
        + +
        require-constraint-name-compartment =
        +      '«' OccurrenceUsagePrefix 'require' 'constraint' '»'
        +      usage-name-with-alias
        +
        +
        usage-node =| require-constraint-node
        +
        + +
        frame-concern-node =
        +    
        +
        + +
        frame-concern-name-compartment =
        +      '«' OccurrenceUsagePrefix 'frame' 'concern' '»'
        +      usage-name-with-alias
        +
        +
        usage-node =| frame-concern-node
        +
        + +
        frame-edge =
        +  
        +
        + +
        framer = requirement | requirement-def | viewpoint | viewpoint-def
        +
        +
        general-relationship =| frame-edge
        +
        +

        // Clause 8.2.3.22 Cases Graphical Notation

        +
        compartment =| objective-compartment
        +
        + +
        objective-compartment =
        +      
        +      objective-compartment-contents
        +
        + +
        objective-compartment-contents = (objective-compartment-element)* '…'?
        +
        + +
        objective-compartment-element =
        +      comp-prefix? MemberPrefix ConstraintUsageDeclaration RequirementBody
        +
        +

        // Clause 8.2.3.23 Analysis Cases Graphical Notation

        +
        definition-node =| analysis-def
        +
        + +
        analysis-def =
        +      
        +
        + +
        analysis-def-name-compartment =
        +      '«' DefinitionPrefix 'analysis' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| analysis
        +
        + +
        analysis =
        +      
        +
        + +
        analysis-name-compartment =
        +      '«' OccurrenceUsagePrefix 'analysis' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| analyses-compartment
        +
        + +
        analyses-compartment =
        +      
        +      analyses-compartment-contents
        +
        + +
        analyses-compartment-contents = analyses-compartment-element* '…'?
        +
        + +
        analyses-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody
        +
        +
        action-flow-element =|
        +      analysis-def
        +    | analysis
        +
        +
        subject-actors-stakeholders-node =| analysis  | analysis-def
        +
        +

        // Clause 8.2.3.24 Verification Cases Graphical Notation

        +
        definition-node =| verification-def
        +
        + +
        verification-def =
        +      
        +
        + +
        verification-def-name-compartment =
        +      '«' DefinitionPrefix 'verification' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| verification
        +
        + +
        verification =
        +      
        +
        + +
        verification-name-compartment =
        +      '«' OccurrenceUsagePrefix 'verification' '»'
        +      usage-name-with-alias
        +
        + +
        verify-requirement-node =
        +  
        +
        + +
        verify-requirement-name-compartment =
        +      '«' OccurrenceUsagePrefix 'verify' 'requirement' '»'
        +      usage-name-with-alias
        +
        +
        usage-node =| verify-requirement-node
        +
        +
        compartment =|
        +      verifications-compartment
        +    | verifies-compartment
        +    | verification-methods-compartment
        +
        + +
        verifications-compartment =
        +      
        +      verifications-compartment-contents
        +
        + +
        verifications-compartment-contents = (verifications-compartment-element)* '…'?
        +
        + +
        verifications-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody '…'
        +
        + +
        verifies-compartment =
        +      
        +      verifies-compartment-contents
        +
        + +
        verifies-compartment-contents = (verifies-compartment-element)* '…'?
        +
        + +
        verifies-compartment-element = el-prefix? MemberPrefix RequirementVerificationUsage '…'
        +
        + +
        verification-methods-compartment =
        +      
        +      verification-methods-compartment-contents
        +
        + +
        verification-methods-compartment-contents = (verification-methods-compartment-element)* '…'?
        +
        + +
        verification-methods-compartment-element = MetadataBody
        +
        +
        action-flow-element =|
        +      verification-def
        +    | verification
        +
        +
        general-relationship =| verify-relationship
        +
        + +
        verify-relationship =
        +      
        +
        +
        subject-actors-stakeholders-node =| verification | verification-def
        +
        +

        // Clause 8.2.3.25 Use Cases Graphical Notation

        +
        definition-node =| use-case-def
        +
        + +
        use-case-def =
        +      
        +
        + +
        use-case-def-name-compartment =
        +      '«' DefinitionPrefix 'use' 'case' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =|
        +      use-case
        +    | include-use-case-usage
        +
        + +
        use-case =
        +      
        +
        + +
        use-case-name-compartment =
        +      '«' OccurrenceUsagePrefix 'use' 'case' '»'
        +      usage-name-with-alias
        +
        + +
        include-use-case-usage =
        +      
        +
        + +
        include-use-case-name-compartment =
        +         '«include use case»'
        +       requirement-name-compartment
        +
        +
        compartment =|
        +      use-cases-compartment
        +    | include-actions-compartment
        +    | includes-compartment
        +
        + +
        use-cases-compartment =
        +      
        +      use-cases-compartment-contents
        +
        + +
        use-cases-compartment-contents = use-cases-compartment-element* '…'?
        +
        + +
        use-cases-compartment-element = el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration
        +
        + +
        include-use-cases-compartment =
        +      
        +      include-use-cases-compartment-contents
        +
        + +
        include-use-cases-compartment-contents = (include-use-cases-compartment-element)* '…'?
        +
        + +
        include-use-cases-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix
        +      ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )
        +      ( ValuePart | ActionUsageParameterList )? CaseBody
        +
        + +
        includes-compartment =
        +      
        +      includes-compartment-contents
        +
        + +
        includes-compartment-contents = (includes-compartment-element)* '…'?
        +
        + +
        includes-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix
        +    ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )
        +
        +
        action-flow-element =|
        +       use-case-def
        +     | use-case
        +
        +
        general-relationship =| include-use-case-relationship
        +
        + +
        include-use-case-relationship =
        +      
        +
        +
        subject-actors-stakeholders-node =| use-case | use-case-def
        +
        +

        // Clause 8.2.3.26 Views and Viewpoints Graphical Notation

        + +
        root-view =
        +	framed-view
        +
        +
        definition-node =|
        +      viewpoint-def
        +    | view-def
        +
        + +
        viewpoint-def =
        +      
        +
        + +
        viewpoint-def-name-compartment =
        +      '«' DefinitionPrefix 'viewpoint' 'def' '»'
        +      definition-name-with-alias
        +
        + +
        view-def =
        +      
        +
        + +
        view-def-name-compartment =
        +      '«' DefinitionPrefix 'view' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =|
        +      viewpoint
        +    | view
        +    | framed-view
        +
        + +
        viewpoint =
        +      
        +
        + +
        viewpoint-name-compartment =
        +      '«' OccurrenceUsagePrefix 'viewpoint' '»'
        +      usage-name-with-alias
        +
        + +
        view =
        +      
        +
        + +
        view-name-compartment =
        +      '«' OccurrenceUsagePrefix 'view' '»'
        +      usage-name-with-alias
        +
        +
        compartment =|
        +      views-compartment
        +    | viewpoints-compartment
        +    | exposes-compartment
        +    | filters-compartment
        +    | rendering-compartment
        +
        + +
        views-compartment =
        +      
        +      views-compartment-contents
        +
        + +
        views-compartment-contents = (views-compartment-element)* '…'
        +
        + +
        views-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix UsageDeclaration? ValueOrFlowPart? ViewBody
        +
        + +
        viewpoints-compartment =
        +      
        +      viewpoints-compartment-contents
        +
        + +
        viewpoints-compartment-contents = (viewpoints-compartment-element)* '…'?
        +
        + +
        viewpoints-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration RequirementBody
        +
        + +
        exposes-compartment =
        +      
        +      exposes-compartment-contents
        +
        + +
        exposes-compartment-contents = exposes-compartment-element* '…'?
        +
        + +
        exposes-compartment-element = MembershipExpose | NamespaceExpose
        +
        + +
        filters-compartment =
        +      
        +      filters-compartment-contents
        +
        + +
        filters-compartment-contents = (filters-compartment-element)* '…'?
        +
        + +
        filters-compartment-element = el-prefix? MemberPrefix OwnedExpression
        +
        + +
        rendering-compartment =
        +      
        +      rendering-compartment-contents
        +
        + +
        rendering-compartment-contents = usage-cp* '…'?
        +
        +
        interconnection-element =|
        +      viewpoint-def
        +    | viewpoint
        +    | view-def
        +    | view
        +
        + +
        framed-view =
        +   
        +
        + +
        frameless-view =
        +      general-view
        +    | interconnection-view
        +    | action-flow-view
        +    | state-transition-view
        +    | sequence-view
        +
        + +
        view-frame-name-compartment = '«view»' QualifiedName (':' QualifiedName)?
        +
        + +
        view-frame-info-contents = Expose? ElementFilterMember? AnnotatingElement*
        +
        + +
        view-frame-info-compartment-tr =
        +      
        +
        + +
        view-frame-info-compartment-bl =
        +      
        +
        + +
        view-frame-info-compartment-br =
        +      
        +
        +
        general-relationship =| expose-relationship
        +
        + +
        expose-relationship =
        +     expose-r | toplevel-expose-r | recursive-expose-r
        +
        + +
        expose-r =
        +      
        +
        + +
        toplevel-expose-r =
        +      
        +
        + +
        recursive-expose-r =
        +      
        +
        +

        // Note. The view frame info compartments are optional elements. The AnnotatingElement* enables adding any relevant supporting information related to a view, possibly using a configurable rendering. +

        +

        // Note. A model library in Section 9.2.18 defines standard graphical view definitions for SysML. These may be supplemented by further, customized view definitions specific to a model. +

        +

        // Clause 8.2.3.27 Metadata Graphical Notation

        +
        annotation-node =| metadata-feature-annotation-node
        +
        + +
        metadata-feature-annotation-node =
        +    
        +
        + +
        metadata-feature-decl = Identification
        +
        + +
        metadata-feature-name-value-list =
        +    ( metadata-feature-name '=' expression-text )*
        +
        + +
        metadata-feature-name = Identification
        +
        + +
        expression-text = text-block
        +
        + +
        metadata-def =
        +    
        +
        + +
        metadata-def-name-compartment =
        +    '«' BasicUsagePrefix? keyword* 'metadata' 'def' '»'
        +    definition-name-with-alias
        +
        +

        // End of BNF
        + +

        +

        // Consolidated partial productions: +

        
        +// action-flow-element =
        +//     action | action-flow-node | action-flow-relationship | action-ref | analysis | analysis-def | calc
        +//     | calc-def | use-case | use-case-def | verification | verification-def
        +
        +
        +
        
        +// annotation-node =
        +//     metadata-feature-annotation-node
        +
        +
        +
        
        +// compartment =
        +//     action-flow-compartment | actions-compartment | actors-compartment | allocations-compartment
        +//     | analyses-compartment | assert-constraints-compartment | assert-constraints-compartment | assume-constraints-compartment
        +//     | attributes-compartment | calcs-compartment | connections-compartment | constraints-compartment
        +//     | constraints-compartment | directed-features-compartment | ends-compartment | enums-compartment
        +//     | exhibit-states-compartment | exposes-compartment | features-compartment | filters-compartment | flows-compartment
        +//     | frames-compartment | general-compartment | include-actions-compartment | includes-compartment
        +//     | individuals-compartment | interconnection-compartment | interfaces-compartment | items-compartment
        +//     | objective-compartment | occurrences-compartment | package-compartment | parameters-compartment | parts-compartment
        +//     | perform-actions-compartment | ports-compartment | rendering-compartment | require-constraints-compartment
        +//     | requirements-compartment | result-compartment | satisfies-compartment | satisfy-requirements-compartment
        +//     | sequence-compartment | snapshots-compartment | stakeholders-compartment | state-actions-compartment
        +//     | state-transition-compartment | states-compartment | subject-compartment | successions-compartment
        +//     | timeslices-compartment | use-cases-compartment | variant-elementusages-compartment | variants-compartment
        +//     | verification-methods-compartment | verifications-compartment | verifies-compartment | viewpoints-compartment
        +//     | views-compartment
        +
        +
        +
        
        +// connection-relationship =
        +//     flow | flow-on-connection | interface-connection | message-connection | succession-flow
        +
        +
        +
        
        +// definition-node =
        +//     action-def | allocation-def | analysis-def | attribute-def | calc-def | concern-def | connection-def
        +//     | constraint-def | enumeration-def | event-occurrence-def | extended-def | flow-def | interface-def
        +//     | item-def | n-ary-def-connection-dot | occurrence-def | part-def | port-def | requirement-def
        +//     | state-def | use-case-def | verification-def | view-def | viewpoint-def
        +
        +
        +
        
        +// dependencies-and-annotations-element =
        +//     annotation-link | annotation-node | dependencies-element
        +
        +
        +
        
        +// dependencies-element =
        +//     binary-dependency | n-ary-dependency
        +
        +
        +
        
        +// general-node =
        +//     definition-node | namespace-node | type-node | usage-node
        +
        +
        +
        
        +// general-relationship =
        +//     allocate-relationship | assert-edge | assume-edge | connection-def-graphical | exhibit-edge
        +//     | expose-relationship | frame-edge | frame-relationship | import | include-use-case-relationship
        +//     | n-ary-def-segment | owned-membership | portion-relationship | recursive-import | require-edge
        +//     | satisfy-edge | top-level-import | type-relationship | unowned-membership | verify-relationship
        +
        +
        +
        
        +// general-view =
        +//     interconnection-view
        +
        +
        +
        
        +// interconnection-element =
        +//     attribute | concern | concern-stakeholder-link | connection | connection-def | connection-relationship
        +//     | constraint | constraint-ref | distinguished-parameter | distinguished-parameter-link | flow | flow-def
        +//     | interface | item | item-ref | part | part-ref | port-def | port-usage | requirement
        +//     | requirement-ref | view | view-def | viewpoint | viewpoint-def
        +
        +
        +
        
        +// interconnection-view =
        +//     dependencies-and-annotations-element | ellipsis-at-lower-left-corner | interconnection-element
        +
        +
        +
        
        +// namespace-node =
        +//     package-node | type-node
        +
        +
        +
        
        +// subject-actors-stakeholders-node =
        +//     analysis | analysis-def | requirement | use-case | use-case-def | verification | verification-def
        +
        +
        +
        
        +// usage-edge =
        +//     allocate-relationship | binding-connection | connection-graphical | exhibit-edge | flow | message
        +//     | perform-edge | st-succession | succession | succession-flow | transition
        +
        +
        +
        
        +// usage-node =
        +//     action | allocation | analysis | assert-constraint-node | assume-constraint-node | attribute | calc
        +//     | connection | enumeration | event-occurrence | exhibit-state-usage | extended-usage | flow-node
        +//     | frame-concern-node | framed-view | include-use-case-usage | interface | item | n-ary-connection-dot
        +//     | occurrence | occurrence-ref | part | perform-action-usage | port-usage | require-constraint-node
        +//     | state | timeslice-or-snapshot-node | use-case | verification | verify-requirement-node | view
        +//     | viewpoint
        +
        +
        + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected.kgbnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected.kgbnf new file mode 100644 index 000000000..40b8f93a2 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected.kgbnf @@ -0,0 +1,2271 @@ +// Source document: tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected-marked_up.kgbnf +// Generated by bnf_grammar_processor at: 2025-12-04T19:29:18Z + + +// Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html +// Generated by bnf_grammar_processor at: 2025-11-28T15:06:37Z + +// Corrected manually by HP de Koning + +// Part 2 - Systems Modeling Language (SysML) + +// Clause 8.2.3 Graphical Notation + +// Clause 8.2.3.1 Graphical Notation Overview + +// Clause 8.2.3.2 Elements and Relationships Graphical Notation + +element = + dependencies-and-annotations-element + | general-element + | element-inside-textual-compartment + +compartment =| general-compartment + +general-compartment = + + general-view + +general-view = + (general-element)* + (dependencies-and-annotations-element)* + (ellipsis-at-lower-left-corner)? + +ellipsis-at-lower-left-corner = '...' + +general-element = + general-node + | general-relationship + +element-node = + usage-node | definition-node | annotation-node | namespace-node + +element-inside-textual-compartment = + + +rel-name = + Identification + | QualifiedName + +// Note. An element inside a textual compartment is selected by graying out a substring containing the element. The grayed-out section must cover a single element within the textual syntax inside the compartment. + +// Clause 8.2.3.3 Dependencies Graphical Notation + +dependencies-and-annotations-element =| dependencies-element + +dependencies-element =| + binary-dependency + | n-ary-dependency + +binary-dependency = + + +n-ary-dependency = + &n-ary-association-dot (n-ary-dependency-client-or-supplier-link &element-node)+ + +n-ary-dependency-client-or-supplier-link = + n-ary-dependency-client-link + | n-ary-dependency-supplier-link + +n-ary-association-dot = + + +n-ary-dependency-client-link = + + +n-ary-dependency-supplier-link = + + +// Note. An n-ary dependency must have two or more client elements or two or more supplier elements. + +// Clause 8.2.3.4 Annotations Graphical Notation + +dependencies-and-annotations-element =| + annotation-node + | annotation-link + +annotation-node = + comment-node + | documentation-node + | textual-representation-node + +text-block = (LINE_TEXT)* + +comment-node = + comment-without-keyword + | comment-with-keyword + +comment-without-keyword = + + +comment-with-keyword = + + +documentation-node = + + +documentation-compartment = + + Identification + text-block + +textual-representation-node = + + +language-string = 'language' '=' STRING_VALUE + +annotation-link = + + +annotated-element = + element + | element-inside-textual-compartment + +// Note. A comment node may be attached to zero, one, or more than one annotated elements. All other annotation nodes must be attached to one and only one annotated element. + +// Clause 8.2.3.5 Namespaces and Packages Graphical Notation + +general-node =| namespace-node + +namespace-node =| package-node + +package-node = + package-with-name-inside + | package-with-name-in-tab + | imported-package-with-name-inside + | imported-package-with-name-in-tab + +package-with-name-inside = + + +package-with-name-in-tab = + + +imported-package-with-name-inside = + + +imported-package-with-name-in-tab = + + +package-compartment = + general-compartment + | documentation-compartment + | packages-compartment + | members-compartment + | relationships-compartment + +compartment =| package-compartment + +packages-compartment = + + packages-compartment-contents + +packages-compartment-contents = packages-compartment-element* '…'? + +packages-compartment-element = el-prefix? Identification + +members-compartment = + + members-compartment-contents + +members-compartment-contents = members-compartment-element* '…'? + +members-compartment-element = el-prefix? (DefinitionElement | UsageElement) + +relationships-compartment = + + relationships-compartment-contents + +relationships-compartment-contents = (relationships-compartment-element)* '…'? + +relationships-compartment-element = el-prefix? relationship-name QualifiedName + +relationship-name = + 'defines' | 'defined by' | 'specializes' | 'specialized by' | 'connect to' + | 'subsets' | 'subsetted by' | 'performs' | 'performed by' | 'allocated' | 'allocated to' + | 'satisfy' | 'satisfied by' + +general-relationship =| + import + | top-level-import + | recursive-import + | owned-membership + | unowned-membership + +import = + + +top-level-import = + + +recursive-import = + + +owned-membership = + + +unowned-membership = + + +// Clause 8.2.3.6 Definition and Usage Graphical Notation + +general-node =| type-node + +type-node = + definition-node + | usage-node + +general-node =| usage-node definition-node + +namespace-node =| type-node + +definition-name-with-alias = + DefinitionDeclaration + ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )? + +usage-name-with-alias = + '^'? UsageDeclaration + ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )? + +compartment-stack = (compartment)* + +compartment =| + features-compartment + | variants-compartment + | variant-elementusages-compartment + +features-compartment = + + features-compartment-contents + +features-compartment-contents = (features-compartment-element)* '…'? + +features-compartment-element = el-prefix? UsagePrefix usage-cp + +variants-compartment = + + variants-compartment-contents + +variants-compartment-contents = members-compartment-contents + +variant-elementusages-compartment = + + variants-compartment-contents + +general-relationship =| + type-relationship + +type-relationship = + subclassification + | subsetting + | definition + | redefinition + | composite-feature-membership + | noncomposite-feature-membership + +subclassification = + + +definition = + + +subsetting = + + +reference-subsetting = + + +redefinition = + + +composite-feature-membership = + + +noncomposite-feature-membership = + + +el-prefix = '^' | '/' + +usage-cp = usageDeclaration ValuePart? + +extended-def = + + +extended-def-name-compartment = + '«' BasicDefinitionPrefix? DefinitionExtensionKeyword+ 'def' '»' + definition-name-with-alias + +// Note. This production is only valid for cases where one or more +// DefinitionExtensionKeyword names a MetadataDefinition that is a direct +// or indirect specialization of KerML metaclass SemanticMetadata. + +definition-node =| extended-def + +extended-usage = + + +extended-usage-name-compartment = + '«' BasicUsagePrefix? UsageExtensionKeyword+ '»' + usage-name-with-alias + +// Note. This production is only valid for cases where one or more +// UsageExtensionKeyword names a MetadataDefinition that is a direct +// or indirect specialization of KerML metaclass SemanticMetadata. + +usage-node =| extended-usage + +// Clause 8.2.3.7 Attributes Graphical Notation + +definition-node =| attribute-def + +attribute-def = + + +attribute-def-name-compartment = + '«' DefinitionPrefix 'attribute' 'def' '»' + definition-name-with-alias + +usage-node =| attribute + +attribute = + + +attribute-name-compartment = + '«' UsagePrefix 'attribute' '»' + usage-name-with-alias + +compartment =| attributes-compartment + +attributes-compartment = + + attributes-compartment-contents + +attributes-compartment-contents = (attributes-compartment-element)* '…'? + +attributes-compartment-element = el-prefix? UsagePrefix usage-cp + +// Clause 8.2.3.8 Enumerations Graphical Notation + +definition-node =| enumeration-def + +enumeration-def = + + +enumeration-def-name-compartment = + '«' DefinitionPrefix 'enum' 'def' '»' + definition-name-with-alias + +usage-node =| enumeration + +enumeration = + + +enumeration-name-compartment = + '«' UsagePrefix 'enum' '»' + usage-name-with-alias + +compartment =| enums-compartment + +enums-compartment = + + enums-compartment-contents + +enums-compartment-contents = (enums-compartment-element)* '…'? + +enums-compartment-element = el-prefix? UsagePrefix usage-cp + +// Clause 8.2.3.9 Occurrences Graphical Notation + +definition-node =| occurrence-def + +general-relationship =| portion-relationship + +occurrence-def = + + +occurrence-def-name-compartment = + '«' DefinitionPrefix 'occurrence' 'def' '»' + definition-name-with-alias + +usage-node =| + occurrence + | occurrence-ref + | timeslice-or-snapshot-node + +occurrence = + + +occurrence-ref = + + +occurrence-name-compartment = + '«' OccurrenceUsagePrefix 'occurrence' '»' + usage-name-with-alias + +timeslice-or-snapshot-node = + timeslice + | snapshot + +timeslice = + + +timeslice-name-compartment = + '«timeslice»' + usage-name-with-alias + +snapshot = + + +snapshots-name-compartment = + '«snapshot»' + usage-name-with-alias + +event-occurrence-def = + + +event-occurrence-def-name-compartment = + '«' DefinitionPrefix 'event' 'occurrence' 'def' '»' + definition-name-with-alias + +definition-node =| event-occurrence-def + +event-occurrence = + + +event-occurrence-name-compartment = + '«' OccurrenceUsagePrefix 'event' 'occurrence' '»' + usage-name-with-alias + +usage-node =| event-occurrence + +event-edge = + + +eventer = usage-node | definition-node + +portion-relationship = + + +compartment =| + occurrences-compartment + | individuals-compartment + | timeslices-compartment + | snapshots-compartment + | sequence-compartment + +occurrences-compartment = + + occurrences-compartment-contents + +occurrences-compartment-contents = (occurrences-compartment-element)* '…'? + +occurrences-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +individuals-compartment = + + individuals-compartment-contents + +individuals-compartment-contents = (individuals-compartment-element)* '…'? + +individuals-compartment-element = occurrences-compartment-element + +timeslices-compartment = + + timeslices-compartment-contents + +timeslices-compartment-contents = (timeslices-compartment-element)* '…'? + +timeslices-compartment-element = occurrences-compartment-element + +snapshots-compartment = + + snapshots-compartment-contents + +snapshots-compartment-contents = (snapshots-compartment-element)* '…'? + +snapshots-compartment-element = occurrences-compartment-element + +sequence-compartment = + + sequence-view + +sequence-view = (sq-graphical-element)* + +sq-graphical-element = + sq-graphical-node + | sq-graphical-relationship + | dependencies-and-annotations-element + +sq-graphical-node = sq-head-node | lifeline + +sq-head-node = sq-part | sq-port + +sq-part = + + +sq-port = + + +sq-port-label = UsageDeclaration + +sq-l-node = + lifeline + | sq-proxy + +lifeline = + + +sq-proxy = + + | + + +proxy-label = '.'? FeatureChainMember + +sq-graphical-relationship = message | sq-succession + +succession-label = UsageDeclaration? + +sq-succession = + + +succession-label = Identification + +// Note: the proxy nodes attached to a succession must refer to an event + +// Clause 8.2.3.10 Items Graphical Notation + +definition-node =| item-def + +interconnection-element =| item| item-ref + +item-def = + + +item-def-name-compartment = + '«' DefinitionPrefix 'item' 'def' '»' + definition-name-with-alias + +usage-node =| item + +item = + + +item-name-compartment = + '«' OccurrenceUsagePrefix 'item' '»' + usage-name-with-alias + +item-ref = + + +compartment =| items-compartment + +items-compartment = + + items-compartment-contents + +items-compartment-contents = (items-compartment-element)* '…' + +items-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +// Clause 8.2.3.11 Parts Graphical Notation + +definition-node =| part-def + +interconnection-element =| part | part-ref + +part-def = + + +part-def-name-compartment = + '«' DefinitionPrefix 'part' 'def' '»' + definition-name-with-alias + +usage-node =| part + +part = + + +part-name-compartment = + '«' OccurrenceUsagePrefix 'part' '»' + usage-name-with-alias + +part-ref = + + +compartment =| + parts-compartment + | directed-features-compartment + | interconnection-compartment + +parts-compartment = + + parts-compartment-contents + +parts-compartment-contents = (parts-compartment-element)* '…'? + +parts-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +directed-features-compartment = + + directed-features-compartment-contents + +directed-features-compartment-contents = (directed-features-compartment-element)* '…'? + +directed-features-compartment-element = + el-prefix FeatureDirection DefinitionBodyItem* + +interconnection-compartment = + + interconnection-view + +interconnection-view =| + (interconnection-element)* + (dependencies-and-annotations-element)* + (ellipsis-at-lower-left-corner)? + +general-view =| interconnection-view + +// Clause 8.2.3.12 Ports Graphical Notation + +definition-node =| port-def + +port-def = + + +port-def-name-compartment = + '«' DefinitionPrefix 'port' 'def' '»' + definition-name-with-alias + +usage-node =| port-usage + +port-usage = + + +port-name-compartment = + '«' OccurrenceUsagePrefix 'port' '»' + usage-name-with-alias + +compartment =| ports-compartment + +ports-compartment = + + ports-compartment-contents + +ports-compartment-contents = (ports-compartment-element)* '…'? + +ports-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +interconnection-element =| port-def | port-usage + +pdh = + + | + + | + + +pdv = + + | + + | + + +port-l = + + | + + | + + | + proxy-v + +port-r = + + | + + | + + | + proxy-v + +port-t = + + | + + | + + | + proxy-h + +port-b = + + | + + | + + | + proxy-h + +port-label = QualifiedName (':' QualifiedName)? + +proxy-v = + + | + + +proxy-h = + + | + + +// Note. Dotted line port productions (references) are only possible for nested ports + +// Note. The proxy option of a port production is valid only on a part usage contained within an interconnection view. + +// Clause 8.2.3.13 Connections Graphical Notation + +definition-node =| connection-def + +connection-def = + + +connection-def-name-compartment = + '«' DefinitionPrefix 'connection' 'def' '»' + definition-name-with-alias + +usage-node =| connection + +connection = + + +connection-name-compartment = + '«' OccurrenceUsagePrefix 'connection' '»' + usage-name-with-alias + +compartment =| connections-compartment + +connections-compartment = + + connections-compartment-contents + +connections-compartment-contents = (connections-compartment-element)* '…'? + +connections-compartment-element = + el-prefix? OccurrenceUsagePrefix UsageDeclaration + +interconnection-element =| + connection-def + | connection + | connection-relationship + | attribute + +connection-relationship = + binding-connection + | connection-graphical + | n-ary-connection + | n-ary-connection-def + | connection-definition-elaboration + | connection-usage-elaboration + | connection-def-graphical + +connection-graphical = + + | + + +c-adornment = + (a-property | a-direction | a-subsetting |a-redefinition)* + +a-property = + 'ordered' | 'nonunique' | 'abstract' | 'derived' | 'readonly' + +a-direction = + 'in' | 'out' | 'inout' + +a-subsetting = + 'subsets' OwnedSubsetting (',' OwnedSubsetting)* + +a-redefinition = + 'redefines' OwnedRedefinition (',' OwnedRedefinition)* + +connection-end = usage-node | usage-edge + +usage-edge =| connection-graphical | binding-connection + +connection-label = UsageDeclaration + +connection-def-graphical = + + | + + +general-relationship =| connection-def-graphical + +cdef-label = Identification + +n-ary-connection-def = + n-ary-def-connection-dot n-ary-def-segment+ + +n-ary-def-connection-dot = + + +n-ary-def-segment = + + +definition-node =| n-ary-def-connection-dot + +general-relationship =| n-ary-def-segment + +n-ary-connection = + n-ary-connection-dot n-ary-segment+ + +n-ary-connection-dot = + + +usage-node =| n-ary-connection-dot + +cdot-label = UsageDeclaration + +n-ary-segment = + + +binding-connection = + + +rolename = Identification? + +multiplicity = MultiplicityRange? + +connection-definition-elaboration = + + +connection-usage-elaboration = + + +// Note. The usage-nodes at the ends of a binding-connection must be of compatible types. + +// Clause 8.2.3.14 Interfaces Graphical Notation + +definition-node =| interface-def + +interconnection-element =| interface + +interface-def = + + +interface-def-name-compartment = + '«' DefinitionPrefix 'interface' 'def' '»' + definition-name-with-alias + +usage-node =| interface + +interface = + + +interface-name-compartment = + '«' OccurrenceUsagePrefix 'interface' '»' + usage-name-with-alias + +compartment =| + interfaces-compartment + | ends-compartment + +interfaces-compartment = + + interfaces-compartment-contents + +interfaces-compartment-contents = (interfaces-compartment-element)* '…'? + +interfaces-compartment-element = + el-prefix? OccurrenceUsagePrefix InterfaceUsageDeclaration + +ends-compartment = + + ends-compartment-contents + +ends-compartment-contents = (ends-compartment-element)* '…'? + +ends-compartment-element = QualifiedName (':' QualifiedName)? + +connection-relationship =| + interface-connection + +interface-connection = + + +interface-label = UsageDeclaration? + +// Clause 8.2.3.15 Allocations Graphical Notation + +definition-node =| allocation-def + +allocation-def = + + +allocation-def-name-compartment = + '«' DefinitionPrefix 'allocation' 'def' '»' + definition-name-with-alias + +usage-node =| allocation + +allocation = + + +allocation-name-compartment = + '«' OccurrenceUsagePrefix 'allocation' '»' + usage-name-with-alias + +compartment =| allocations-compartment + +allocations-compartment = + + allocations-compartment-contents + +allocations-compartment-contents = (allocations-compartment-element)* '…'? + +allocations-compartment-element = + el-prefix? OccurrenceUsagePrefix AllocationUsageDeclaration UsageBody* + +general-relationship =| allocate-relationship + +allocate-relationship = + + +allocation-node = + general-node + | element-in-textual-compartment + +usage-edge =| allocate-relationship + +// Clause 8.2.3.16 Flows Graphical Notation + +definition-node =| flow-def + +flow-def = + + +flow-def-name-compartment = + '«' DefinitionPrefix 'succession'? 'flow' 'def' '»' + definition-name-with-alias + +usage-node =| flow-node + +flow-node = + + +flow-name-compartment = + '«' OccurrenceUsagePrefix ( 'message' | 'succession'? 'flow' ) '»' + usage-name-with-alias + +compartment =| flows-compartment + +flows-compartment = + + flows-compartment-contents + +flows-compartment-contents = (flows-compartment-element)* '...'? + +flows-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( 'message' MessageDeclaration + | 'succession'? FlowDeclaration + ) + +interconnection-element =| + flow-def + | flow + +connection-relationship =| + message-connection + | flow + | succession-flow + | flow-on-connection + +usage-edge =| message | flow | succession-flow + +msg-end-node = + occurrence| sq-l-node| item | part | port | action | state + | use-case | verification-case | analysis-case | proxy + +message = + + +// Note: proxy nodes and ends of messages must refer to occurrences + +message-label = + UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember + +flow = + + +flow-label = + UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember + +flow-end-node = + parameter | proxy + +// Note: proxy nodes at ends of flows must refer to directed features + +succession-flow = + + +succession-flow-label = flow-label + +flow-on-connection = + + +flow-node = + flow-node-r + | flow-node-l + | sflow-node-r + | sflow-node-l + | message-node-r + | message-node-l + +flow-node-r = + + +flow-node-l = + + +sflow-node-r = + + +sflow-node-l = + + +message-node-r = + + +message-node-l = + + +flow-label = + Identification | FlowPayloadFeatureMember + +// Clause 8.2.3.17 Actions Graphical Notation + +definition-node =| action-def + +action-def = + + +action-def-name-compartment = + '«' DefinitionPrefix 'action' 'def' '»' + definition-name-with-alias + +usage-node =| + action + | perform-action-usage + +action = + + +action-name-compartment = + '«' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +perform-action-usage = + + +action-ref = + + +perform-action-name-compartment = + '«' OccurrenceUsagePrefix 'perform' 'action' '»' + usage-name-with-alias + +compartment =| + actions-compartment + | perform-actions-compartment + | parameters-compartment + | action-flow-compartment + +actions-compartment = + + actions-compartment-contents + +actions-compartment-contents = (actions-compartment-element)* '…'? + +actions-compartment-element = + el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration + +perform-actions-compartment = + + perform-actions-compartment-contents + +perform-actions-compartment-contents = (perform-actions-compartment-element)* '…'? + +perform-actions-compartment-element = + el-prefix? OccurrenceUsagePrefix PerformActionUsageDeclaration + +parameters-compartment = + + parameters-compartment-contents + +parameters-compartment-contents = (parameters-compartment-element)* '…'? + +parameters-compartment-element = + el-prefix? FeatureDirection UsageDeclaration ValueOrFlowPart? DefinitionBodyItem* + +performed-by-compartment = + + performed-by-compartment-contents + +performed-by-compartment-contents = QualifiedName* '…'? + +action-flow-compartment = + + action-flow-view + +action-flow-view = + (dependencies-and-annotations-element)* + (action-flow-element)* + (perform-action-swimlanes)? + +action-flow-element =| + action-ref + | action + | action-flow-node + | action-flow-relationship + +action-flow-node = + start-node + | done-node + | terminate-node + | fork-node + | join-node + | decision-node + | merge-node + | send-action-node + | accept-action-node + | while-loop-action-node + | for-loop-action-node + | if-else-action-node + | assign-action-node + +action-flow-relationship = + flow + | aflow-succession + | binding-connection + | else-branch + +param-l = + + | + + | + proxy-v + +param-r = + + | + + | + proxy-v + +param-t = + + | + + | + proxy-h + +param-b = + + | + + | + proxy-h + +param-label = QualifiedName (':' QualifiedName)* + +start-node = + + +done-node = + + +terminate-node = + + +fork-node = + + +join-node = + + +decision-node = + + +merge-node = + + +send-action-node = + + +send-action-name-compartment = + '«' OccurrenceUsagePrefix 'send' 'action' '»' + usage-name-with-alias + +send-action-expression = NodeParameterMember 'to' NodeParameterMember + +accept-action-node = + + +accept-action-name-compartment = + '«' OccurrenceUsagePrefix 'accept' 'action' '»' + usage-name-with-alias + +accept-action-expression = AcceptParameterPart + +while-loop-action-node = + + +while-condition = + + condition-expression + +until-condition = + + condition-expression + +while-loop-action-name-compartment = + '«' OccurrenceUsagePrefix 'loop' '»' + usage-name-with-alias + +for-loop-action-node = + + +iteration = + + iteration-expression + +loop-body = + + action-body + +for-loop-action-name-compartment = + '«' OccurrenceUsagePrefix 'loop' '»' + usage-name-with-alias + +if-else-action-node = + + +if-condition = + + condition-expression + +then-body = + + action-body + +else-body = + + action-body + +ifelse-action-name-compartment = + '«' OccurrenceUsagePrefix 'if' '»' + usage-name-with-alias + +action-body = + action-body-textual | action-flow-view + +condition-expression = + ExpressionParameterMember + +iteration-expression = + ForVariableDeclarationMember 'in' NodeParameterMember + +action-body-textual = + ActionBodyParameterMember + +assign-action-node = + + +assign-action-name-compartment = + '«' OccurrenceUsagePrefix 'assign' '»' + usage-name-with-alias + +perform-actions-swimlanes = (swimlane)* + +swimlane = + + +parameter = + param-l | param-r | param-t | param-b + +aflow-succession = + + +else-branch = + + +perform-edge = + + +performer-node = part | action | part-def | action-def | distinguished-parameter + +usage-edge =| succession perform-edge + +guard-expression = '[' OwnedExpression ']' + +// Note. All swimlanes are attached to each other on vertical edges and aligned along the top and bottom horizontal edges. + +// Note. The proxy option of a parameter production is valid only on an action usage contained within an action flow view. + +// Clause 8.2.3.18 States Graphical Notation + +definition-node =| state-def + +state-def = + + +state-def-name-compartment = + '«' DefinitionPrefix 'state' 'def' '»' + definition-name-with-alias + ('«' 'parallel' '»')? + +usage-node =| + state + | exhibit-state-usage + +state = + + +state-ref = + + +state-name-compartment = + '«' OccurrenceUsagePrefix 'state' '»' + usage-name-with-alias + ('«' 'parallel' '»')? + +exhibit-state-usage = + + +state-subaction-body = state-subaction-body-textual | action-flow-view + +state-subaction-body-textual = state-subaction-declaration? ( '{' ActionBodyItem* '}' )? + +state-subaction-declaration = + PerformActionUsageDeclaration + | AcceptNodeDeclaration + | SendNodeDeclaration + | AssignmentNodeDeclaration + +state-do-action = + + state-subaction-body + +state-entry-action = + + state-subaction-body + +state-exit-action = + + state-subaction-body + +entry-action = + + | + + +entry-action-name-comp = + '«' 'entry' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +exit-action = + + +exit-action-name-comp = + '«' 'exit' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +do-action = + + +do-action-name-comp = + '«' 'do' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +exhibit-state-name-compartment = + '«exhibit-state»' + state-name-compartment + +compartment =| + states-compartment + | state-actions-compartment + | exhibit-states-compartment + | successions-compartment + | state-transition-compartment + +states-compartment = + + states-compartment-contents + +states-compartment-contents = (states-compartment-element)* '…'? + +states-compartment-element = + el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration + +state-actions-compartment = + + state-actions-compartment-contents + +state-actions-compartment-contents = (state-actions-compartment-element)* '…'? + +state-actions-compartment-element = + el-prefix? EntryActionMember | DoActionMember | ExitActionMember + +exhibit-states-compartment = + + exhibit-states-compartment-contents + +exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'? + +exhibit-states-compartment-element-compartment = UsageDeclaration + +successions-compartment = + + successions-compartment-contents + +successions-compartment-contents = QualifiedName* '…'? + +state-transition-compartment = + + state-transition-view + +state-transition-view = + (state-transition-element)* + (dependencies-and-annotations-element)* + +state-transition-element = + state-transition-node + | transition + | st-succession + +state-transition-node = + state + | state-ref + | start-node + | entry-action + | do-action + | exit-action + | done-node + | fork-node + | join-node + | decision-node + | merge-node + | terminate-node + | action + | perform-action-usage + | action-ref + +transition = + + | + + +state-source = + state | state-ref + +transition-label = trigger-expression '/' ActionUsage + +trigger-expression = AcceptParameterPart (guard-expression)? + +st-succession = + + | + + +exhibit-edge = + + +exhibitor = part | part-def + +general-relationship =| exhibit-edge + +usage-edge =| transition | st-succession | exhibit-edge + +// Clause 8.2.3.19 Calculations Graphical Notation + +definition-node =| calc-def + +calc-def = + + +calc-def-name-compartment = + '«' DefinitionPrefix 'calc' 'def' '»' + definition-name-with-alias + +usage-node =| calc + +calc = + + +calc-name-compartment = + '«' OccurrenceUsagePrefix 'calc' '»' + usage-name-with-alias + +action-flow-element =| + calc-def + | calc + +compartment =| + calcs-compartment + | result-compartment + +calcs-compartment = + + calcs-compartment-contents + +calcs-compartment-contents = calcs-compartment-element* '…'? + +calcs-compartment-element = el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration + +result-compartment = + + result-compartment-contents + +result-compartment-contents = OwnedExpression + +// Clause 8.2.3.20 Constraints Graphical Notation + +definition-node =| constraint-def + +constraint-def = + + +constraint-def-name-compartment = + '«' DefinitionPrefix 'constraint' 'def' '»' + definition-name-with-alias + +usage-node = + constraint + | assert-constraint-node + +constraint = + + +constraint-ref = + + +constraint-name-compartment = + '«' OccurrenceUsagePrefix 'constraint' '»' + usage-name-with-alias + +assert-constraint-node = + + +assert-constraint-name-compartment = + '«assert constraint»' + constraint-name-compartment + +assume-constraint-node = + + +assume-constraint-name-compartment = + '«' OccurrenceUsagePrefix 'assume' 'constraint' '»' + usage-name-with-alias + +usage-node =| assume-constraint-node | assert-constraint-node + +assume-edge = + + +assumer = requirement | requirement-def + +general-relationship =| assume-edge + +assert-edge = + + +assertor = usage-node | definition-node + +general-relationship =| assert-edge + +compartment =| + constraints-compartment + | assert-constraints-compartment + +constraints-compartment = + + constraints-compartment-contents + +constraints-compartment-contents = (constraints-usage-compartment-element)* '…'? + +constraints-usage-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CalculationBody* + +assert-constraints-compartment = + + assert-constraints-compartment-contents + +assert-constraints-compartment-contents = (assert-constraints-compartment-element)* '…'? + +assert-constraints-compartment-element = + el-prefix? OccurrenceUsagePrefix ( 'not' )? + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + CalculationUsageParameterPart CalculationBody + +interconnection-element =| + constraint-ref + | constraint + +// Clause 8.2.3.21 Requirements Graphical Notation + +definition-node =| + requirement-def + | concern-def + +requirement-def = + + +requirement-def-name-compartment = + '«' DefinitionPrefix 'requirement' 'def' '»' + definition-name-with-alias + +usage-node = + requirement + | satisfy-requirement-usage + | concern + +requirement = + + +requirement-ref = + + +requirement-name-compartment = + '«' OccurrenceUsagePrefix 'requirement' '»' + usage-name-with-alias + +satisfy-requirement-usage = + + +satisfy-requirement-name-compartment = + '«satisfy requirement»' + requirement-name-compartment + +concern-def = + + +concern-def-name-compartment = + '«' DefinitionPrefix 'concern' 'def' '»' + definition-name-with-alias + +concern = + + +concern-name-compartment = + '«' OccurrenceUsagePrefix 'concern' '»' + usage-name-with-alias + +compartment =| + constraints-compartment + | assert-constraints-compartment + +compartment =| + requirements-compartment + | require-constraints-compartment + | assume-constraints-compartment + | satisfy-requirements-compartment + | satisfies-compartment + | actors-compartment + | subject-compartment + | stakeholders-compartment + | frames-compartment + +requirements-compartment = + + requirements-compartment-contents + +requirements-compartment-contents = (requirements-compartment-element)* '…'? + +requirements-compartment-element = + OccurrenceUsagePrefix ConstraintUsageDeclaration + +require-constraints-compartment = + + require-constraints-compartment-contents + +require-constraints-compartment-contents = require-constraint-element* '…'? + +require-constraint-element = + el-prefix? requireMemberPrefix? RequirementConstraintUsage + +assume-constraints-compartment = + + assume-constraints-compartment-contents + +assume-constraints-compartment-contents = require-constraint-element* '…'? + +satisfy-requirements-compartment = + + satisfy-requirements-compartment-contents + +satisfy-requirements-compartment-contents = text-block + +satisfies-compartment = + + satisfies-compartment-contents + +satisfies-compartment-contents = UsageDeclaration* '…'? + +actors-compartment = + + actors-compartment-contents + +actors-compartment-contents = (actors-compartment-element)* '…'? + +actors-compartment-element = el-prefix? MemberPrefix usage-cp + +subject-compartment = + + subject-compartment-contents + +subject-compartment-contents = (subject-compartment-element)* '…'? + +subject-compartment-element = el-prefix? MemberPrefix usage-cp + +stakeholders-compartment = + + stakeholders-compartment-contents + +stakeholders-compartment-contents = (stakeholders-compartment-element)* '…'? + +stakeholders-compartment-element = el-prefix? MemberPrefix usage-cp + +frames-compartment = + + frames-compartment-contents + +frames-compartment-contents = (frames-compartment-element)* '…'? + +frames-compartment-element = el-prefix* MemberPrefix? FramedConcernUsage + +concerns-compartment = + + concerns-compartment-contents + +interconnection-element =| + requirement-ref + | requirement + | concern + | distinguished-parameter + | distinguished-parameter-link + | concern-stakeholder-link + +general-relationship =| frame-relationship + +subject-actors-stakeholders-node =| requirement + +distinguished-parameter = + subject + | actor + | stakeholder + +subject = + + +actor = + + | + + +stakeholder = + + +subject-name = UsageDeclaration + +actor-name = UsageDeclaration + +stakeholder-name = UsageDeclaration + +distinguished-parameter-link = + + +frame-relationship = + + +concern-stakeholder-link = + + +satisfy-edge = + + +satisfier = usage-node | definition-node + +general-relationship =| satisfy-edge + +require-edge = + + +requirer = usage-node | definition-node + +general-relationship =| require-edge + +require-constraint-node = + + +require-constraint-name-compartment = + '«' OccurrenceUsagePrefix 'require' 'constraint' '»' + usage-name-with-alias + +usage-node =| require-constraint-node + +frame-concern-node = + + +frame-concern-name-compartment = + '«' OccurrenceUsagePrefix 'frame' 'concern' '»' + usage-name-with-alias + +usage-node =| frame-concern-node + +frame-edge = + + +framer = requirement | requirement-def | viewpoint | viewpoint-def + +general-relationship =| frame-edge + +// Clause 8.2.3.22 Cases Graphical Notation + +compartment =| objective-compartment + +objective-compartment = + + objective-compartment-contents + +objective-compartment-contents = (objective-compartment-element)* '…'? + +objective-compartment-element = + comp-prefix? MemberPrefix ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.3.23 Analysis Cases Graphical Notation + +definition-node =| analysis-def + +analysis-def = + + +analysis-def-name-compartment = + '«' DefinitionPrefix 'analysis' 'def' '»' + definition-name-with-alias + +usage-node =| analysis + +analysis = + + +analysis-name-compartment = + '«' OccurrenceUsagePrefix 'analysis' '»' + usage-name-with-alias + +compartment =| analyses-compartment + +analyses-compartment = + + analyses-compartment-contents + +analyses-compartment-contents = analyses-compartment-element* '…'? + +analyses-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody + +action-flow-element =| + analysis-def + | analysis + +subject-actors-stakeholders-node =| analysis | analysis-def + +// Clause 8.2.3.24 Verification Cases Graphical Notation + +definition-node =| verification-def + +verification-def = + + +verification-def-name-compartment = + '«' DefinitionPrefix 'verification' 'def' '»' + definition-name-with-alias + +usage-node =| verification + +verification = + + +verification-name-compartment = + '«' OccurrenceUsagePrefix 'verification' '»' + usage-name-with-alias + +verify-requirement-node = + + +verify-requirement-name-compartment = + '«' OccurrenceUsagePrefix 'verify' 'requirement' '»' + usage-name-with-alias + +usage-node =| verify-requirement-node + +compartment =| + verifications-compartment + | verifies-compartment + | verification-methods-compartment + +verifications-compartment = + + verifications-compartment-contents + +verifications-compartment-contents = (verifications-compartment-element)* '…'? + +verifications-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody '…' + +verifies-compartment = + + verifies-compartment-contents + +verifies-compartment-contents = (verifies-compartment-element)* '…'? + +verifies-compartment-element = el-prefix? MemberPrefix RequirementVerificationUsage '…' + +verification-methods-compartment = + + verification-methods-compartment-contents + +verification-methods-compartment-contents = (verification-methods-compartment-element)* '…'? + +verification-methods-compartment-element = MetadataBody + +action-flow-element =| + verification-def + | verification + +general-relationship =| verify-relationship + +verify-relationship = + + +subject-actors-stakeholders-node =| verification | verification-def + +// Clause 8.2.3.25 Use Cases Graphical Notation + +definition-node =| use-case-def + +use-case-def = + + +use-case-def-name-compartment = + '«' DefinitionPrefix 'use' 'case' 'def' '»' + definition-name-with-alias + +usage-node =| + use-case + | include-use-case-usage + +use-case = + + +use-case-name-compartment = + '«' OccurrenceUsagePrefix 'use' 'case' '»' + usage-name-with-alias + +include-use-case-usage = + + +include-use-case-name-compartment = + '«include use case»' + requirement-name-compartment + +compartment =| + use-cases-compartment + | include-actions-compartment + | includes-compartment + +use-cases-compartment = + + use-cases-compartment-contents + +use-cases-compartment-contents = use-cases-compartment-element* '…'? + +use-cases-compartment-element = el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration + +include-use-cases-compartment = + + include-use-cases-compartment-contents + +include-use-cases-compartment-contents = (include-use-cases-compartment-element)* '…'? + +include-use-cases-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + ( ValuePart | ActionUsageParameterList )? CaseBody + +includes-compartment = + + includes-compartment-contents + +includes-compartment-contents = (includes-compartment-element)* '…'? + +includes-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + +action-flow-element =| + use-case-def + | use-case + +general-relationship =| include-use-case-relationship + +include-use-case-relationship = + + +subject-actors-stakeholders-node =| use-case | use-case-def + +// Clause 8.2.3.26 Views and Viewpoints Graphical Notation + +root-view = + framed-view + +definition-node =| + viewpoint-def + | view-def + +viewpoint-def = + + +viewpoint-def-name-compartment = + '«' DefinitionPrefix 'viewpoint' 'def' '»' + definition-name-with-alias + +view-def = + + +view-def-name-compartment = + '«' DefinitionPrefix 'view' 'def' '»' + definition-name-with-alias + +usage-node =| + viewpoint + | view + | framed-view + +viewpoint = + + +viewpoint-name-compartment = + '«' OccurrenceUsagePrefix 'viewpoint' '»' + usage-name-with-alias + +view = + + +view-name-compartment = + '«' OccurrenceUsagePrefix 'view' '»' + usage-name-with-alias + +compartment =| + views-compartment + | viewpoints-compartment + | exposes-compartment + | filters-compartment + | rendering-compartment + +views-compartment = + + views-compartment-contents + +views-compartment-contents = (views-compartment-element)* '…' + +views-compartment-element = + el-prefix? OccurrenceUsagePrefix UsageDeclaration? ValueOrFlowPart? ViewBody + +viewpoints-compartment = + + viewpoints-compartment-contents + +viewpoints-compartment-contents = (viewpoints-compartment-element)* '…'? + +viewpoints-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration RequirementBody + +exposes-compartment = + + exposes-compartment-contents + +exposes-compartment-contents = exposes-compartment-element* '…'? + +exposes-compartment-element = MembershipExpose | NamespaceExpose + +filters-compartment = + + filters-compartment-contents + +filters-compartment-contents = (filters-compartment-element)* '…'? + +filters-compartment-element = el-prefix? MemberPrefix OwnedExpression + +rendering-compartment = + + rendering-compartment-contents + +rendering-compartment-contents = usage-cp* '…'? + +interconnection-element =| + viewpoint-def + | viewpoint + | view-def + | view + +framed-view = + + +frameless-view = + general-view + | interconnection-view + | action-flow-view + | state-transition-view + | sequence-view + +view-frame-name-compartment = '«view»' QualifiedName (':' QualifiedName)? + +view-frame-info-contents = Expose? ElementFilterMember? AnnotatingElement* + +view-frame-info-compartment-tr = + + +view-frame-info-compartment-bl = + + +view-frame-info-compartment-br = + + +general-relationship =| expose-relationship + +expose-relationship = + expose-r | toplevel-expose-r | recursive-expose-r + +expose-r = + + +toplevel-expose-r = + + +recursive-expose-r = + + +// Note. The view frame info compartments are optional elements. The AnnotatingElement* enables adding any relevant supporting information related to a view, possibly using a configurable rendering. + +// Note. A model library in Section 9.2.18 defines standard graphical view definitions for SysML. These may be supplemented by further, customized view definitions specific to a model. + +// Clause 8.2.3.27 Metadata Graphical Notation + +annotation-node =| metadata-feature-annotation-node + +metadata-feature-annotation-node = + + +metadata-feature-decl = Identification + +metadata-feature-name-value-list = + ( metadata-feature-name '=' expression-text )* + +metadata-feature-name = Identification + +expression-text = text-block + +metadata-def = + + +metadata-def-name-compartment = + '«' BasicUsagePrefix? keyword* 'metadata' 'def' '»' + definition-name-with-alias + +// End of BNF + + + +// Consolidated partial productions: + +// action-flow-element = +// action | action-flow-node | action-flow-relationship | action-ref | analysis | analysis-def | calc | calc-def +// | use-case | use-case-def | verification | verification-def + +// annotation-node = +// metadata-feature-annotation-node + +// compartment = +// action-flow-compartment | actions-compartment | actors-compartment | allocations-compartment | analyses-compartment +// | assert-constraints-compartment | assert-constraints-compartment | assume-constraints-compartment +// | attributes-compartment | calcs-compartment | connections-compartment | constraints-compartment +// | constraints-compartment | directed-features-compartment | ends-compartment | enums-compartment +// | exhibit-states-compartment | exposes-compartment | features-compartment | filters-compartment | flows-compartment +// | frames-compartment | general-compartment | include-actions-compartment | includes-compartment +// | individuals-compartment | interconnection-compartment | interfaces-compartment | items-compartment +// | objective-compartment | occurrences-compartment | package-compartment | parameters-compartment | parts-compartment +// | perform-actions-compartment | ports-compartment | rendering-compartment | require-constraints-compartment +// | requirements-compartment | result-compartment | satisfies-compartment | satisfy-requirements-compartment +// | sequence-compartment | snapshots-compartment | stakeholders-compartment | state-actions-compartment +// | state-transition-compartment | states-compartment | subject-compartment | successions-compartment +// | timeslices-compartment | use-cases-compartment | variant-elementusages-compartment | variants-compartment +// | verification-methods-compartment | verifications-compartment | verifies-compartment | viewpoints-compartment +// | views-compartment + +// connection-relationship = +// flow | flow-on-connection | interface-connection | message-connection | succession-flow + +// definition-node = +// action-def | allocation-def | analysis-def | attribute-def | calc-def | concern-def | connection-def +// | constraint-def | enumeration-def | event-occurrence-def | extended-def | flow-def | interface-def | item-def +// | n-ary-def-connection-dot | occurrence-def | part-def | port-def | requirement-def | state-def | use-case-def +// | verification-def | view-def | viewpoint-def + +// dependencies-and-annotations-element = +// annotation-link | annotation-node | dependencies-element + +// dependencies-element = +// binary-dependency | n-ary-dependency + +// general-node = +// definition-node | namespace-node | type-node | usage-node + +// general-relationship = +// allocate-relationship | assert-edge | assume-edge | connection-def-graphical | exhibit-edge | expose-relationship +// | frame-edge | frame-relationship | import | include-use-case-relationship | n-ary-def-segment | owned-membership +// | portion-relationship | recursive-import | require-edge | satisfy-edge | top-level-import | type-relationship +// | unowned-membership | verify-relationship + +// general-view = +// interconnection-view + +// interconnection-element = +// attribute | concern | concern-stakeholder-link | connection | connection-def | connection-relationship | constraint +// | constraint-ref | distinguished-parameter | distinguished-parameter-link | flow | flow-def | interface | item +// | item-ref | part | part-ref | port-def | port-usage | requirement | requirement-ref | view | view-def | viewpoint +// | viewpoint-def + +// interconnection-view = +// dependencies-and-annotations-element | ellipsis-at-lower-left-corner | interconnection-element + +// namespace-node = +// package-node | type-node + +// subject-actors-stakeholders-node = +// analysis | analysis-def | requirement | use-case | use-case-def | verification | verification-def + +// usage-edge = +// allocate-relationship | binding-connection | connection-graphical | exhibit-edge | flow | message | perform-edge +// | st-succession | succession | succession-flow | transition + +// usage-node = +// action | allocation | analysis | assert-constraint-node | assume-constraint-node | attribute | calc | connection +// | enumeration | event-occurrence | exhibit-state-usage | extended-usage | flow-node | frame-concern-node | framed-view +// | include-use-case-usage | interface | item | n-ary-connection-dot | occurrence | occurrence-ref | part +// | perform-action-usage | port-usage | require-constraint-node | state | timeslice-or-snapshot-node | use-case +// | verification | verify-requirement-node | view | viewpoint + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-elements.json b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-elements.json new file mode 100644 index 000000000..19eda42b3 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-elements.json @@ -0,0 +1,7613 @@ +[ + { + "@type": "Info", + "clause_id": "", + "lines": [], + "source": "tests/KerML_and_SysML_spec_sources/SysML-spec.html", + "timestamp": "2025-12-04T19:31:35Z" + }, + { + "@type": "Heading", + "clause_id": "", + "lines": [ + "Part 2 - Systems Modeling Language (SysML)" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3", + "lines": [ + "Clause 8.2.3 Graphical Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.1", + "lines": [ + "Clause 8.2.3.1 Graphical Notation Overview" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.2", + "lines": [ + "Clause 8.2.3.2 Elements and Relationships Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "element =", + " dependencies-and-annotations-element", + " | general-element", + " | element-inside-textual-compartment" + ], + "name": "element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": true, + "lines": [ + "compartment =| general-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "general-compartment =", + " ", + " general-view" + ], + "name": "general-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "general-view =", + " (general-element)*", + " (dependencies-and-annotations-element)*", + " (ellipsis-at-lower-left-corner)?" + ], + "name": "general-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "ellipsis-at-lower-left-corner = '...'" + ], + "name": "ellipsis-at-lower-left-corner" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "general-element =", + " general-node", + " | general-relationship" + ], + "name": "general-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "element-node =", + " usage-node | definition-node | annotation-node | namespace-node" + ], + "name": "element-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + " element-inside-textual-compartment =", + " " + ], + "name": "element-inside-textual-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.2", + "is_partial": false, + "lines": [ + "rel-name =", + " Identification", + " | QualifiedName" + ], + "name": "rel-name" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.2", + "lines": [ + "Note. An element inside a textual compartment is selected by graying out a substring containing the element. The grayed-out section must cover a single element within the textual syntax inside the compartment." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.3", + "lines": [ + "Clause 8.2.3.3 Dependencies Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": true, + "lines": [ + "dependencies-and-annotations-element =| dependencies-element" + ], + "name": "dependencies-and-annotations-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": true, + "lines": [ + "dependencies-element =|", + " binary-dependency", + " | n-ary-dependency" + ], + "name": "dependencies-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "binary-dependency =", + " " + ], + "name": "binary-dependency" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "n-ary-dependency =", + " &n-ary-association-dot (n-ary-dependency-client-or-supplier-link &element-node)+" + ], + "name": "n-ary-dependency" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "n-ary-dependency-client-or-supplier-link =", + " n-ary-dependency-client-link", + " | n-ary-dependency-supplier-link" + ], + "name": "n-ary-dependency-client-or-supplier-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "n-ary-association-dot =", + " " + ], + "name": "n-ary-association-dot" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "n-ary-dependency-client-link =", + " " + ], + "name": "n-ary-dependency-client-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "n-ary-dependency-supplier-link =", + " " + ], + "name": "n-ary-dependency-supplier-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.3", + "is_partial": false, + "lines": [ + "element-node =", + " usage-node | definition-node | annotation-node | namespace-node" + ], + "name": "element-node" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.3", + "lines": [ + "Note. An n-ary dependency must have two or more client elements or two or more supplier elements." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.4", + "lines": [ + "Clause 8.2.3.4 Annotations Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": true, + "lines": [ + "dependencies-and-annotations-element =|", + " annotation-node", + " | annotation-link" + ], + "name": "dependencies-and-annotations-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "annotation-node =", + " comment-node", + " | documentation-node", + " | textual-representation-node" + ], + "name": "annotation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "text-block = (LINE_TEXT)*" + ], + "name": "text-block" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "comment-node =", + " comment-without-keyword", + " | comment-with-keyword" + ], + "name": "comment-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "comment-without-keyword =", + " " + ], + "name": "comment-without-keyword" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "comment-with-keyword =", + " " + ], + "name": "comment-with-keyword" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "documentation-node =", + " " + ], + "name": "documentation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "documentation-compartment =", + " ", + " Identification", + " text-block" + ], + "name": "documentation-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "textual-representation-node =", + " " + ], + "name": "textual-representation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "language-string = 'language' '=' STRING_VALUE" + ], + "name": "language-string" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "annotation-link =", + " " + ], + "name": "annotation-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.4", + "is_partial": false, + "lines": [ + "annotated-element =", + " element", + " | element-inside-textual-compartment" + ], + "name": "annotated-element" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.4", + "lines": [ + "Note. A comment node may be attached to zero, one, or more than one annotated elements. All other annotation nodes must be attached to one and only one annotated element." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.5", + "lines": [ + "Clause 8.2.3.5 Namespaces and Packages Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": true, + "lines": [ + "general-node =| namespace-node" + ], + "name": "general-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": true, + "lines": [ + "namespace-node =| package-node" + ], + "name": "namespace-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "package-node =", + " package-with-name-inside", + " | package-with-name-in-tab", + " | imported-package-with-name-inside", + " | imported-package-with-name-in-tab" + ], + "name": "package-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "package-with-name-inside =", + " " + ], + "name": "package-with-name-inside" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "package-with-name-in-tab =", + " " + ], + "name": "package-with-name-in-tab" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "imported-package-with-name-inside =", + " " + ], + "name": "imported-package-with-name-inside" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "imported-package-with-name-in-tab =", + " " + ], + "name": "imported-package-with-name-in-tab" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "package-compartment =", + " general-compartment", + " | documentation-compartment", + " | packages-compartment", + " | members-compartment", + " | relationships-compartment" + ], + "name": "package-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": true, + "lines": [ + "compartment =| package-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "packages-compartment =", + " ", + " packages-compartment-contents" + ], + "name": "packages-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "packages-compartment-contents = packages-compartment-element* '…'?" + ], + "name": "packages-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "packages-compartment-element = el-prefix? Identification" + ], + "name": "packages-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "members-compartment =", + " ", + " members-compartment-contents" + ], + "name": "members-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "members-compartment-contents = members-compartment-element* '…'?" + ], + "name": "members-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "members-compartment-element = el-prefix? (DefinitionElement | UsageElement)" + ], + "name": "members-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "relationships-compartment =", + " ", + " relationships-compartment-contents" + ], + "name": "relationships-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "relationships-compartment-contents = (relationships-compartment-element)* '…'?" + ], + "name": "relationships-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "relationships-compartment-element = el-prefix? relationship-name QualifiedName" + ], + "name": "relationships-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "relationship-name = 'defines', 'defined by', 'specializes', 'specialized by', 'connect to',", + " 'subsets', 'subsetted by', 'performs', 'performed by', 'allocated', 'allocated to',", + " 'satisfy', 'satisfied by'" + ], + "name": "relationship-name" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": true, + "lines": [ + "general-relationship =|", + " import", + " | top-level-import", + " | recursive-import", + " | owned-membership", + " | unowned-membership" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "import =", + " " + ], + "name": "import" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "top-level-import =", + " " + ], + "name": "top-level-import" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "recursive-import =", + " " + ], + "name": "recursive-import" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "owned-membership =", + " " + ], + "name": "owned-membership" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.5", + "is_partial": false, + "lines": [ + "unowned-membership =", + " " + ], + "name": "unowned-membership" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.6", + "lines": [ + "Clause 8.2.3.6 Definition and Usage Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "general-node =| type-node" + ], + "name": "general-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "type-node =", + " definition-node", + " | usage-node" + ], + "name": "type-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "general-node |= usage-node definition-node<" + ], + "name": "general-node |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "namespace-node =| type-node" + ], + "name": "namespace-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "definition-name-with-alias =", + " DefinitionDeclaration", + " ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?" + ], + "name": "definition-name-with-alias" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "usage-name-with-alias =", + " '^'? UsageDeclaration", + " ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?" + ], + "name": "usage-name-with-alias" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "compartment-stack = (compartment)*" + ], + "name": "compartment-stack" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "compartment =|", + " | features-compartment", + " | variants-compartment", + " | variant-elementusages-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "features-compartment =", + " ", + " features-compartment-contents" + ], + "name": "features-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "features-compartment-contents = (features-compartment-element)* '…'?" + ], + "name": "features-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "features-compartment-element = el-prefix? UsagePrefix usage-cp" + ], + "name": "features-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "variants-compartment =", + " ", + " variants-compartment-contents" + ], + "name": "variants-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "variants-compartment-contents = members-compartment-contents" + ], + "name": "variants-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "variant-elementusages-compartment =", + " ", + " variants-compartment-contents" + ], + "name": "variant-elementusages-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": true, + "lines": [ + "general-relationship =|", + " type-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "type-relationship =", + " subclassification", + " | subsetting", + " | definition", + " | redefinition", + " | composite-feature-membership", + " | noncomposite-feature-membership" + ], + "name": "type-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "subclassification =", + " " + ], + "name": "subclassification" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "definition =", + " " + ], + "name": "definition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "subsetting =", + " " + ], + "name": "subsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "reference-subsetting =", + " " + ], + "name": "reference-subsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "redefinition =", + " " + ], + "name": "redefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "composite-feature-membership =", + " " + ], + "name": "composite-feature-membership" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "noncomposite-feature-membership =", + " " + ], + "name": "noncomposite-feature-membership" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "el-prefix = '^' | '/'" + ], + "name": "el-prefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "usage-cp = usageDeclaration ValuePart?" + ], + "name": "usage-cp" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "extended-def =", + " " + ], + "name": "extended-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "extended-def-name-compartment =", + " '«' BasicDefinitionPrefix? DefinitionExtensionKeyword+ 'def' '»'", + " definition-name-with-alias" + ], + "name": "extended-def-name-compartment" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.6", + "lines": [ + "Note. This production is only valid for cases where one or more" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "DefinitionExtensionKeyword names a MetadataDefinition that is a direct" + ], + "name": "DefinitionExtensionKeyword names a MetadataDefinition that is a direct" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "or indirect specialization of KerML metaclass SemanticMetadata." + ], + "name": "or indirect specialization of KerML metaclass SemanticMetadata." + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "definition-node |= extended-def" + ], + "name": "definition-node |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "extended-usage =", + " " + ], + "name": "extended-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "extended-usage-name-compartment =", + " '«' BasicUsagePrefix? UsageExtensionKeyword+ '»'", + " usage-name-with-alias" + ], + "name": "extended-usage-name-compartment" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.6", + "lines": [ + "Note. This production is only valid for cases where one or more" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "UsageExtensionKeyword names a MetadataDefinition that is a direct" + ], + "name": "UsageExtensionKeyword names a MetadataDefinition that is a direct" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "or indirect specialization of KerML metaclass SemanticMetadata." + ], + "name": "or indirect specialization of KerML metaclass SemanticMetadata." + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.6", + "is_partial": false, + "lines": [ + "usage-node |= extended-usage" + ], + "name": "usage-node |" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.7", + "lines": [ + "Clause 8.2.3.7 Attributes Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": true, + "lines": [ + "definition-node =| attribute-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attribute-def =", + " " + ], + "name": "attribute-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attribute-def-name-compartment =", + " '«' DefinitionPrefix 'attribute' 'def' '»'", + " definition-name-with-alias" + ], + "name": "attribute-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": true, + "lines": [ + "usage-node =| attribute" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attribute =", + " " + ], + "name": "attribute" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attribute-name-compartment =", + " '«' UsagePrefix 'attribute' '»'", + " usage-name-with-alias" + ], + "name": "attribute-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": true, + "lines": [ + "compartment =| attributes-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attributes-compartment =", + " ", + " attributes-compartment-contents" + ], + "name": "attributes-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attributes-compartment-contents = (attributes-compartment-element)* '…'?" + ], + "name": "attributes-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.7", + "is_partial": false, + "lines": [ + "attributes-compartment-element = el-prefix? UsagePrefix usage-cp" + ], + "name": "attributes-compartment-element" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.8", + "lines": [ + "Clause 8.2.3.8 Enumerations Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": true, + "lines": [ + "definition-node =| enumeration-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enumeration-def =", + " " + ], + "name": "enumeration-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enumeration-def-name-compartment =", + " '«' DefinitionPrefix 'enum' 'def' '»'", + " definition-name-with-alias" + ], + "name": "enumeration-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": true, + "lines": [ + "usage-node =| enumeration" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enumeration =", + " " + ], + "name": "enumeration" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enumeration-name-compartment =", + " '«' UsagePrefix 'enum' '»'", + " usage-name-with-alias" + ], + "name": "enumeration-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": true, + "lines": [ + "compartment =| enums-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enums-compartment =", + " ", + " enums-compartment-contents" + ], + "name": "enums-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enums-compartment_contents = (enums-compartment-element)* '…'?" + ], + "name": "enums-compartment_contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.8", + "is_partial": false, + "lines": [ + "enums-compartment-element = el-prefix? UsagePrefix usage-cp" + ], + "name": "enums-compartment-element" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.9", + "lines": [ + "Clause 8.2.3.9 Occurrences Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": true, + "lines": [ + "definition-node =| occurrence-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": true, + "lines": [ + "general-relationship =| portion-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrence-def =", + " " + ], + "name": "occurrence-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrence-def-name-compartment =", + " '«' DefinitionPrefix 'occurrence' 'def' '»'", + " definition-name-with-alias" + ], + "name": "occurrence-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": true, + "lines": [ + "usage-node =|", + " occurrence", + " | occurrence-refxfx", + " | timeslice-or-snapshot-node" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrence =", + " " + ], + "name": "occurrence" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrence-ref =", + " " + ], + "name": "occurrence-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrence-name-compartment =", + " '«' OccurrenceUsagePrefix 'occurrence' '»'", + " usage-name-with-alias" + ], + "name": "occurrence-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslice-or-snapshot-node =", + " timeslice", + " | snapshot" + ], + "name": "timeslice-or-snapshot-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslice =", + " " + ], + "name": "timeslice" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslice-name-compartment =", + " '«timeslice»'", + " usage-name-with-alias" + ], + "name": "timeslice-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "snapshot =", + " " + ], + "name": "snapshot" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "snapshots-name-compartment", + " '«snapshot»'", + " usage-name-with-alias" + ], + "name": "snapshots-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "event-occurrence-def =", + " " + ], + "name": "event-occurrence-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "event-occurrence-def-name-compartment =", + " '«' DefinitionPrefix 'event' 'occurrence' 'def' '»'", + " definition-name-with-alias" + ], + "name": "event-occurrence-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "definition-node |= event-occurrence-def" + ], + "name": "definition-node |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "event-occurrence =", + " " + ], + "name": "event-occurrence" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "event-occurrence-name-compartment =", + " '«' OccurrenceUsagePrefix 'event' 'occurrence' '»'", + " usage-name-with-alias" + ], + "name": "event-occurrence-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "usage-node |= event-occurrence" + ], + "name": "usage-node |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "event-edge =", + " " + ], + "name": "event-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "eventer = usage-node | definition-node<" + ], + "name": "eventer" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "portion-relationship =", + " " + ], + "name": "portion-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": true, + "lines": [ + "compartment =|", + " occurrences-compartment", + " | individuals-compartment", + " | timeslices-compartment", + " | snapshots-compartment", + " | sequence-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrences-compartment =", + " ", + " occurrences-compartment-contents" + ], + "name": "occurrences-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrences-compartment-contents = (occurrences-compartment-element)* '…'?" + ], + "name": "occurrences-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "occurrences-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp" + ], + "name": "occurrences-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "individuals-compartment =", + " ", + " individuals-compartment-contents" + ], + "name": "individuals-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "individuals-compartment-contents = (individuals-compartment-element)* '…'?" + ], + "name": "individuals-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "individuals-compartment-element = occurrences-compartment-element" + ], + "name": "individuals-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslices-compartment =", + " ", + " timeslices-compartment-contents" + ], + "name": "timeslices-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslices-compartment-contents = (timeslices-compartment-element)* '…'?" + ], + "name": "timeslices-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "timeslices-compartment-element = occurrences-compartment-element" + ], + "name": "timeslices-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "snapshots-compartment =", + " ", + " snapshots-compartment-contents" + ], + "name": "snapshots-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "snapshots-compartment-contents = (snapshots-compartment-element)* '…'?" + ], + "name": "snapshots-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "snapshots-compartment-element = occurrences-compartment-element" + ], + "name": "snapshots-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sequence-compartment =", + " ", + " sequence-view" + ], + "name": "sequence-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sequence-view = (sq-graphical-element)*" + ], + "name": "sequence-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-graphical-element =", + " sq-graphical-node", + " | sq-graphical-relationship", + " | dependencies-and-annotations-element" + ], + "name": "sq-graphical-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-graphical-node = sq-head-node | lifeline" + ], + "name": "sq-graphical-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-head-node = sq-part | sq-port" + ], + "name": "sq-head-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-part =", + " " + ], + "name": "sq-part" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-port =", + " " + ], + "name": "sq-port" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-port-label = UsageDeclaration" + ], + "name": "sq-port-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-l-node =", + " lifeline", + " | sq-proxy" + ], + "name": "sq-l-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "lifeline =", + " " + ], + "name": "lifeline" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-proxy =", + " ", + " |", + " " + ], + "name": "sq-proxy" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "proxy-label = '.'? FeatureChainMember" + ], + "name": "proxy-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-graphical-relationship = message | sq-succession" + ], + "name": "sq-graphical-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "succession-label = UsageDeclaration?" + ], + "name": "succession-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "sq-succession =", + " " + ], + "name": "sq-succession" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.9", + "is_partial": false, + "lines": [ + "succession-label = Identification" + ], + "name": "succession-label" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.9", + "lines": [ + "Note: the proxy nodes attached to a succession must refer to an event" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.10", + "lines": [ + "Clause 8.2.3.10 Items Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": true, + "lines": [ + "definition-node =| item-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "interconnection-element = | item| item-ref" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "item-def =", + " " + ], + "name": "item-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "item-def-name-compartment =", + " '«' DefinitionPrefix 'item' 'def' '»'", + " definition-name-with-alias" + ], + "name": "item-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": true, + "lines": [ + "usage-node =| item" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "item =", + " " + ], + "name": "item" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "item-name-compartment =", + " '«' OccurrenceUsagePrefix 'item' '»'", + " usage-name-with-alias" + ], + "name": "item-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "item-ref =", + " " + ], + "name": "item-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": true, + "lines": [ + "compartment =| items-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "items-compartment =", + " ", + " items-compartment-contents" + ], + "name": "items-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "items-compartment-contents = (items-compartment-element)* '…'" + ], + "name": "items-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.10", + "is_partial": false, + "lines": [ + "items-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp" + ], + "name": "items-compartment-element" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.11", + "lines": [ + "Clause 8.2.3.11 Parts Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "definition-node =| part-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "interconnection-element = | part | part-ref" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "part-def =", + " " + ], + "name": "part-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "part-def-name-compartment =", + " '«' DefinitionPrefix 'part' 'def' '»'", + " definition-name-with-alias" + ], + "name": "part-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "usage-node =| part" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "part =", + " " + ], + "name": "part" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "part-name-compartment =", + " '«' OccurrenceUsagePrefix 'part' '»'", + " usage-name-with-alias" + ], + "name": "part-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "part-ref =", + " " + ], + "name": "part-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "compartment =|", + " parts-compartment", + " | directed-features-compartment", + " | interconnection-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "parts-compartment =", + " ", + " parts-compartment-contents" + ], + "name": "parts-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "parts-compartment-contents = (parts-compartment-element)* '…'?" + ], + "name": "parts-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "parts-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp" + ], + "name": "parts-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "directed-features-compartment =", + " ", + " directed-features-compartment-contents" + ], + "name": "directed-features-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "directed-features-compartment-contents = (directed-features-compartment-element)* '…'?" + ], + "name": "directed-features-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "directed-features-compartment-element =", + " el-prefix FeatureDirection Definition-Body-Item*" + ], + "name": "directed-features-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": false, + "lines": [ + "interconnection-compartment =", + " ", + " interconnection-view" + ], + "name": "interconnection-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "interconnection-view =|", + " (interconnection-element)*", + " (dependencies-and-annotations-element)*", + " (ellipsis-at-lower-left-corner)?" + ], + "name": "interconnection-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.11", + "is_partial": true, + "lines": [ + "general-view =| interconnection-view" + ], + "name": "general-view" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.12", + "lines": [ + "Clause 8.2.3.12 Ports Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": true, + "lines": [ + "definition-node =| port-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-def =", + " " + ], + "name": "port-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-def-name-compartment =", + " '«' DefinitionPrefix 'port' 'def' '»'", + " definition-name-with-alias" + ], + "name": "port-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": true, + "lines": [ + "usage-node =| port-usage" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-usage =", + " " + ], + "name": "port-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-name-compartment =", + " '«' OccurrenceUsagePrefix 'port' '»'", + " usage-name-with-alias" + ], + "name": "port-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": true, + "lines": [ + "compartment =| ports-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "ports-compartment =", + " ", + " ports-compartment-contents" + ], + "name": "ports-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "ports-compartment-contents = (ports-compartment-element)* '…'?" + ], + "name": "ports-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "ports-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp" + ], + "name": "ports-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": true, + "lines": [ + "interconnection-element =| port-def | port" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "pdh =", + " ", + " |", + " ", + " |", + " " + ], + "name": "pdh" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "pdv =", + " ", + " |", + " ", + " |", + " " + ], + "name": "pdv" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-l =", + " ", + " |", + " ", + " |", + " ", + " |", + " proxy-v" + ], + "name": "port-l" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-r =", + " ", + " |", + " " + ], + "name": "port-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + " |", + " ", + " |", + " proxy-v" + ], + "name": "|" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-t =", + " ", + " |", + " ", + " |", + " ", + " |", + " proxy-h" + ], + "name": "port-t" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-b =", + " ", + " |", + " ", + " |", + " ", + " |", + " proxy-h" + ], + "name": "port-b" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "port-label = QualifiedName (':' QualifiedName)?" + ], + "name": "port-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "proxy-v =", + " ", + " |", + " " + ], + "name": "proxy-v" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.12", + "is_partial": false, + "lines": [ + "proxy-h =", + " ", + " |", + " " + ], + "name": "proxy-h" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.12", + "lines": [ + "Note. Dotted line port productions (references) are only possible for nested ports" + ] + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.12", + "lines": [ + "Note. The proxy option of a port production is valid only on a part usage contained within an interconnection view." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.13", + "lines": [ + "Clause 8.2.3.13 Connections Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "definition-node =| connection-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-def =", + " " + ], + "name": "connection-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-def-name-compartment =", + " '«' DefinitionPrefix 'connection' 'def' '»'", + " definition-name-with-alias" + ], + "name": "connection-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "usage-node =| connection" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection =", + " " + ], + "name": "connection" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-name-compartment =", + " '«' OccurrenceUsagePrefix 'connection' '»'", + " usage-name-with-alias" + ], + "name": "connection-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "compartment =| connections-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connections-compartment =", + " ", + " connections-compartment-contents" + ], + "name": "connections-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connections-compartment-contents = (connections-compartment-element)* '…'?" + ], + "name": "connections-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connections-compartment-element =", + " el-prefix? OccurrenceUsagePrefix UsageDeclaration" + ], + "name": "connections-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "interconnection-element =|", + " connection-def", + " | connection", + " | connection-relationship", + " | attribute" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-relationship =", + " binding-connection", + " | connection-graphical", + " | n-ary-connection", + " | n-ary-connection-def", + " | connection-definition-elaboration", + " | connection-usage-elaboration", + " | connection-def-graphical" + ], + "name": "connection-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-graphical =", + " ", + " |", + " " + ], + "name": "connection-graphical" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "c-adornment =", + " (a-property | a-direction | a-subsetting |a-redefinition)*" + ], + "name": "c-adornment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "a-property =", + " 'ordered' | 'nonunique' | 'abstract' | 'derived' | 'readonly'" + ], + "name": "a-property" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "a-direction =", + " 'in' | 'out' | 'inout'" + ], + "name": "a-direction" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "a-subsetting =", + " 'subsets' OwnedSubsetting (',' OwnedSubsetting)*" + ], + "name": "a-subsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "a-redefinition =", + " 'redefines' OwnedRedefinition (',' OwnedRedefinition)*" + ], + "name": "a-redefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-end = usage-node | usage-edge" + ], + "name": "connection-end" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": true, + "lines": [ + "usage-edge =| connection-graphical | binding-connection" + ], + "name": "usage-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-label = UsageDeclaration" + ], + "name": "connection-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-def-graphical =", + " ", + " |", + " general-relationship |= connection-def-graphical" + ], + "name": "connection-def-graphical" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "cdef-label = Identification" + ], + "name": "cdef-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-connection-def =", + " n-ary-def-connection-dot n-ary-def-segment+" + ], + "name": "n-ary-connection-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-def-connection-dot =", + " " + ], + "name": "n-ary-def-connection-dot" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-def-segment =", + " " + ], + "name": "n-ary-def-segment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "definition-node |= n-ary-def-connection-dot" + ], + "name": "definition-node |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "general-relationship |= n-ary-def-segment" + ], + "name": "general-relationship |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-connection =", + " n-ary-connection-dot n-ary-segment+" + ], + "name": "n-ary-connection" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-connection-dot =", + " " + ], + "name": "n-ary-connection-dot" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "usage-node |= n-ary-connection-dot" + ], + "name": "usage-node |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "cdot-label = UsageDeclaration" + ], + "name": "cdot-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "n-ary-segment =", + " " + ], + "name": "n-ary-segment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "binding-connection =", + " " + ], + "name": "binding-connection" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "rolename = Identification?" + ], + "name": "rolename" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "multiplicity = MultiplicityRange?" + ], + "name": "multiplicity" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-definition-elaboration =", + " " + ], + "name": "connection-definition-elaboration" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.13", + "is_partial": false, + "lines": [ + "connection-usage-elaboration =", + " " + ], + "name": "connection-usage-elaboration" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.13", + "lines": [ + "Note. The usage-nodes at the ends of a binding-connection must be of compatible types." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.14", + "lines": [ + "Clause 8.2.3.14 Interfaces Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": true, + "lines": [ + "definition-node =| interface-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": true, + "lines": [ + "interconnection-element =| interface" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface-def =", + " " + ], + "name": "interface-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface-def-name-compartment =", + " '«' DefinitionPrefix 'interface' 'def' '»'", + " definition-name-with-alias<" + ], + "name": "interface-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": true, + "lines": [ + "usage-node =| interface" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface =", + " " + ], + "name": "interface" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface-name-compartment =", + " '«' OccurrenceUsagePrefix 'interface' '»'", + " usage-name-with-alias" + ], + "name": "interface-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": true, + "lines": [ + "compartment =|", + " interfaces-compartment", + " | ends-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interfaces-compartment =", + " ", + " interfaces-compartment-contents" + ], + "name": "interfaces-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interfaces-compartment-contents = (interfaces-compartment-element)* '…'?" + ], + "name": "interfaces-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interfaces-compartment-element =", + " el-prefix? OccurenceUsagePrefix InterfaceUsageDeclaration" + ], + "name": "interfaces-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "ends-compartment =", + " ", + " ends-compartment-contents" + ], + "name": "ends-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "ends-compartment-contents = (ends-compartment-element)* '…'?" + ], + "name": "ends-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "ends-compartment-element = QualifedName (':' QualifiedName)?" + ], + "name": "ends-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "connection-relationship =", + " | interface-connection" + ], + "name": "connection-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface-connection =", + " " + ], + "name": "interface-connection" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.14", + "is_partial": false, + "lines": [ + "interface-label = UsageDeclaration?" + ], + "name": "interface-label" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.15", + "lines": [ + "Clause 8.2.3.15 Allocations Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": true, + "lines": [ + "definition-node =| allocation-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocation-def =", + " " + ], + "name": "allocation-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocation-def-name-compartment =", + " '«' DefinitionPrefix 'allocation' 'def' '»'", + " definition-name-with-alias" + ], + "name": "allocation-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": true, + "lines": [ + "usage-node =| allocation" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocation =", + " " + ], + "name": "allocation" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocation-name-compartment =", + " '«' OccurrenceUsagePrefix 'allocation' '»'", + " usage-name-with-alias" + ], + "name": "allocation-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": true, + "lines": [ + "compartment =| allocations-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocations-compartment =", + " ", + " allocations-compartment-contents" + ], + "name": "allocations-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocations-compartment-contents = (allocations-compartment-element)* '…'?" + ], + "name": "allocations-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocations-compartment-element =", + " el-prefix? OccurrenceUsagePrefix AllocationUsageDeclaration UsageBody*" + ], + "name": "allocations-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": true, + "lines": [ + "general-relationship =| allocate-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocate-relationship =", + " " + ], + "name": "allocate-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "allocation-node =", + " general-node", + " | element-in-textual-compartment" + ], + "name": "allocation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.15", + "is_partial": false, + "lines": [ + "usage-edge = |allocate-relationship" + ], + "name": "usage-edge" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.16", + "lines": [ + "Clause 8.2.3.16 Flows Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "definition-node =| flow-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-def =", + " " + ], + "name": "flow-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-def-name-compartment =", + " '«' DefinitionPrefix 'succession'? 'flow' 'def' '»'", + " definition-name-with-alias" + ], + "name": "flow-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "usage-node =| flow-node" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-node =", + " " + ], + "name": "flow-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-name-compartment =", + " '«' OccurrenceUsagePrefix ( 'message' | 'succession'? 'flow' ) '»'", + " usage-name-with-alias" + ], + "name": "flow-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "compartment =| flows-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flows-compartment =", + " ________________________________________", + " 'flows'", + " flows-compartment-contents" + ], + "name": "flows-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flows-compartment-contents = (flows-compartment-element)* '...'?" + ], + "name": "flows-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flows-compartment-element =", + " el-prefix? OccurrenceUsagePrefix", + " ( 'message' MessageDeclaration", + " | 'succession'? FlowDeclaration", + " )" + ], + "name": "flows-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "interconnection-element =|", + " flow-def", + " | flow" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "connection-relationship =|", + " message-connection", + " | flow", + " | succession-flow", + " | flow-on-connection" + ], + "name": "connection-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": true, + "lines": [ + "usage-edge =| message | flow | succession-flow" + ], + "name": "usage-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "msg-end-node =", + " occurrence| sq-l-node| item | part | port | action | state", + " | use-case | verification-case | analysis-case | proxy" + ], + "name": "msg-end-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "message =", + " " + ], + "name": "message" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.16", + "lines": [ + "Note: proxy nodes and ends of messages must refer to occurrences" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "message-label =", + " UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember" + ], + "name": "message-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow =", + " " + ], + "name": "flow" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-label =", + " UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember" + ], + "name": "flow-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-end-node =", + " parameter | proxy" + ], + "name": "flow-end-node" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.16", + "lines": [ + "Note: proxy nodes at ends of flows must refer to directed features" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "succession-flow =", + " " + ], + "name": "succession-flow" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "succession-flow-label = flow-label" + ], + "name": "succession-flow-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-on-connection =", + " " + ], + "name": "flow-on-connection" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-node =", + " flow-node-r", + " | flow-node-l", + " | sflow-node-r", + " | sflow-node-l", + " | message-node-r", + " | message-node-l" + ], + "name": "flow-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-node-r =", + " " + ], + "name": "flow-node-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-node-l =", + " " + ], + "name": "flow-node-l" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "sflow-node-r =", + " " + ], + "name": "sflow-node-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "sflow-node-l =", + " " + ], + "name": "sflow-node-l" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "message-node-r =", + " " + ], + "name": "message-node-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "message-node-l =", + " " + ], + "name": "message-node-l" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.16", + "is_partial": false, + "lines": [ + "flow-label =", + " Identification | FlowPayloadFeatureMember" + ], + "name": "flow-label" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.17", + "lines": [ + "Clause 8.2.3.17 Actions Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": true, + "lines": [ + "definition-node =| action-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-def =", + " " + ], + "name": "action-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-def-name-compartment =", + " '«' DefinitionPrefix 'action' 'def' '»'", + " definition-name-with-alias<" + ], + "name": "action-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": true, + "lines": [ + "usage-node =|", + " action", + " | perform-action-usage" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action =", + " " + ], + "name": "action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-name-compartment =", + " '«' OccurrenceUsagePrefix 'action' '»'", + " usage-name-with-alias<" + ], + "name": "action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-action-usage =", + " " + ], + "name": "perform-action-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-ref =", + " " + ], + "name": "action-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'perform' 'action' '»'", + " usage-name-with-alias" + ], + "name": "perform-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": true, + "lines": [ + "compartment =|", + " actions-compartment", + " | perform-actions-compartment", + " | parameters-compartment", + " | action-flow-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "actions-compartment =", + " ", + " actions-compartment-contents" + ], + "name": "actions-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "actions-compartment-contents = (actions-compartment-element)* '…'?" + ], + "name": "actions-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "actions-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration" + ], + "name": "actions-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-actions-compartment =", + " ", + " perform-actions-compartment-contents" + ], + "name": "perform-actions-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-actions-compartment-contents = (perform-actions-compartment-element)* '…'?" + ], + "name": "perform-actions-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-actions-compartment-element =", + " el-prefix? OccurrenceUsagePrefix PerformActionUsageDeclaration" + ], + "name": "perform-actions-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "parameters-compartment =", + " ", + " parameters-compartment-contents" + ], + "name": "parameters-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "parameters-compartment-contents = (parameters-compartment-element)* '…'?" + ], + "name": "parameters-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "parameters-compartment-element =", + " el-prefix? FeatureDirection UsageDeclaration ValueOrFlowPart? DefinitionBodyItem*" + ], + "name": "parameters-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "performed-by-compartment =", + " ", + " performed-by-compartment-contents" + ], + "name": "performed-by-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "performed-by-compartment-contents = QualifiedName* '…'?" + ], + "name": "performed-by-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-flow-compartment =", + " ", + " action-flow-view" + ], + "name": "action-flow-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-flow-view =", + " (dependencies-and-annotations-element)*", + " (action-flow-element)*", + " (perform-action-swimlanes)?" + ], + "name": "action-flow-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": true, + "lines": [ + "action-flow-element =|", + " action-ref", + " | action", + " | action-flow-node", + " | action-flow-relationship" + ], + "name": "action-flow-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-flow-node =", + " start-node", + " | done-node", + " | terminate-node", + " | fork-node", + " | join-node", + " | decision-node", + " | merge-node", + " | send-action-node", + " | accept-action-node", + " | while-loop-action-node", + " | for-loop-action-node", + " | if-else-action-node", + " | assign-action-node" + ], + "name": "action-flow-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-flow-relationship =", + " flow", + " | aflow-succession", + " | binding-connection", + " | else-branch" + ], + "name": "action-flow-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "param-l =", + " ", + " |", + " ", + " |", + " proxy-v" + ], + "name": "param-l" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "param-r =", + " ", + " |", + " ", + " |", + " proxy-v" + ], + "name": "param-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "param-t =", + " ", + " |", + " ", + " |", + " proxy-h" + ], + "name": "param-t" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "param-b =", + " ", + " |", + " ", + " |", + " proxy-h" + ], + "name": "param-b" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "param-label = QualifiedName (‘:’ QualifiedName)*" + ], + "name": "param-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "start-node =", + " " + ], + "name": "start-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "done-node =", + " " + ], + "name": "done-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "terminate-node =", + " " + ], + "name": "terminate-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "fork-node =", + " " + ], + "name": "fork-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "join-node =", + " " + ], + "name": "join-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "decision-node =", + " " + ], + "name": "decision-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "merge-node =", + " " + ], + "name": "merge-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "send-action-node =", + " " + ], + "name": "send-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "send-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'send' 'action' '»'", + " usage-name-with-alias" + ], + "name": "send-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "send-action-expression = NodeParameterMember 'to' NodeParameterMember" + ], + "name": "send-action-expression" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "accept-action-node =", + " " + ], + "name": "accept-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "accept-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'accept' 'action' '»'", + " usage-name-with-alias" + ], + "name": "accept-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "accept-action-expression = AcceptParameterPart" + ], + "name": "accept-action-expression" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "while-loop-action-node =", + " " + ], + "name": "while-loop-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "while-condition =", + " ", + " condition-expression" + ], + "name": "while-condition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "until-condition =", + " ", + " condition-expression" + ], + "name": "until-condition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "while-loop-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'loop' '»'", + " usage-name-with-alias" + ], + "name": "while-loop-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "for-loop-action-node =", + " " + ], + "name": "for-loop-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "iteration =", + " ", + " iteration-expression" + ], + "name": "iteration" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "loop-body =", + " ", + " action-body" + ], + "name": "loop-body" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "for-loop-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'loop' '»'", + " usage-name-with-alias" + ], + "name": "for-loop-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "if-else-action-node =", + " " + ], + "name": "if-else-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "if-condition =", + " ", + " condition-expression" + ], + "name": "if-condition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "then-body =", + " ", + " action-body" + ], + "name": "then-body" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "else-body =", + " ", + " action-body" + ], + "name": "else-body" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "ifelse-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'if' '»'", + " usage-name-with-alias" + ], + "name": "ifelse-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-body =", + " action-body-textual | action-flow-view" + ], + "name": "action-body" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "condition-expression =", + " ExpressionParameterMember" + ], + "name": "condition-expression" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "iteration-expression =", + " ForVariableDeclarationMember 'in' NodeParameterMember" + ], + "name": "iteration-expression" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "action-body-textual =", + " ActionBodyParameterMember" + ], + "name": "action-body-textual" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "assign-action-node =", + " " + ], + "name": "assign-action-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "assign-action-name-compartment =", + " '«' OccurrenceUsagePrefix 'assign' '»'", + " usage-name-with-alias" + ], + "name": "assign-action-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-actions-swimlanes = (swimlane)*" + ], + "name": "perform-actions-swimlanes" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "swimlane =", + " " + ], + "name": "swimlane" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "parameter =", + " param-l | param-r | param-t | param-b" + ], + "name": "parameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "aflow-succession =", + " " + ], + "name": "aflow-succession" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "else-branch =", + " " + ], + "name": "else-branch" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "perform-edge =", + " " + ], + "name": "perform-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "performer-node = part | action | part-def | action-def | distinguished-parameter" + ], + "name": "performer-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "usage-edge = |succession perform-edge" + ], + "name": "usage-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.17", + "is_partial": false, + "lines": [ + "guard-expression = '[' OwnedExpression ']'" + ], + "name": "guard-expression" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.17", + "lines": [ + "Note. All swimlanes are attached to each other on vertical edges and aligned along the top and bottom horizontal edges." + ] + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.17", + "lines": [ + "Note. The proxy option of a parameter production is valid only on an action usage contained within an action flow view." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.18", + "lines": [ + "Clause 8.2.3.18 States Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": true, + "lines": [ + "definition-node =| state-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-def =", + " " + ], + "name": "state-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-def-name-compartment =", + " '«' DefinitionPrefix 'state' 'def' '»'", + " definition-name-with-alias", + " ('«' 'parallel' '»')?" + ], + "name": "state-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": true, + "lines": [ + "usage-node =|", + " state-node", + " | exhibit-state-usage" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state =", + " " + ], + "name": "state" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-ref =", + " " + ], + "name": "state-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-name-compartment =", + " '«' OccurrenceUsagePrefix 'state' '»'", + " usage-name-with-alias", + " ('«' 'parallel' '»')?" + ], + "name": "state-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-state-usage =", + " " + ], + "name": "exhibit-state-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-subaction-body = state-subaction-body-textual | action-flow-view" + ], + "name": "state-subaction-body" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-subaction-body-textual = state-subaction-declaration? ( '{' ActionBodyItem* '}' )?" + ], + "name": "state-subaction-body-textual" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-subaction-declaration =", + " PerformActionUsageDeclaration", + " | AcceptNodeDeclaration", + " | SendNodeDeclaration", + " | AssignmentNodeDeclaration" + ], + "name": "state-subaction-declaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-do-action =", + " ", + " state-subaction-body" + ], + "name": "state-do-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-entry-action =", + " ", + " state-subaction-body" + ], + "name": "state-entry-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-exit-action =", + " ", + " state-subaction-body" + ], + "name": "state-exit-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "entry-action =", + " |", + " " + ], + "name": "entry-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "entry-action-name-comp =" + ], + "name": "entry-action-name-comp" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", + " usage-name-with-alias" + ], + "name": "'«' 'entry' OccurrenceUsagePrefix 'action' '»'" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exit-action =", + " " + ], + "name": "exit-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exit-action-name-comp =" + ], + "name": "exit-action-name-comp" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", + " usage-name-with-alias" + ], + "name": "'«' 'exit' OccurrenceUsagePrefix 'action' '»'" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "do-action =", + " " + ], + "name": "do-action" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "do-action-name-comp =" + ], + "name": "do-action-name-comp" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "'«' 'do' OccurrenceUsagePrefix 'action' '»'", + " usage-name-with-alias" + ], + "name": "'«' 'do' OccurrenceUsagePrefix 'action' '»'" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-state-name-compartment =", + " '«exhibit-state»'", + " state-name-compartment" + ], + "name": "exhibit-state-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": true, + "lines": [ + "compartment =|", + " states-compartment", + " | states-actions-compartment", + " | exhibit-states-compartment", + " | successions-compartment", + " | state-transition-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "states-compartment =", + " ", + " states-compartment-contents" + ], + "name": "states-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "states-compartment-contents = (states-compartment-element)* '…'?" + ], + "name": "states-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "states-compartment-element =", + " el-prefix? OccurrencePrefix ActionUsageDeclaration" + ], + "name": "states-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-actions-compartment =", + " ", + " state-actions-compartment-contents" + ], + "name": "state-actions-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-actions-compartment-contents = (state-actions-compartment-element)* '…'?" + ], + "name": "state-actions-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-actions-compartment-element =", + " el-prefix? EntryActionMember | DoActionMember | ExitActionMember" + ], + "name": "state-actions-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-states-compartment =", + " ", + " exhibit-states-compartment-contents" + ], + "name": "exhibit-states-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'?" + ], + "name": "exhibit-states-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-states-compartment-element-compartment = UsageDeclaration" + ], + "name": "exhibit-states-compartment-element-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "succession-compartment =", + " ", + " succession-compartment-contents" + ], + "name": "succession-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "succession-compartment-contents = QualifiedName* '…'?" + ], + "name": "succession-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-transition-compartment =", + " ", + " state-transition-view" + ], + "name": "state-transition-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-transition-view =", + " (state-transition-element)*", + " (dependencies-and-annotations-element)*" + ], + "name": "state-transition-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-transition-element =", + " state-transition-node", + " | transition", + " | st-succession" + ], + "name": "state-transition-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-transition-node =", + " state-node", + " | state-ref-node", + " | start-node", + " | entry-action", + " | do-action", + " | exit-action", + " | done-node", + " | fork-node", + " | join-node", + " | decision-node", + " | merge-node", + " | terminate-node", + " | action", + " | perform-action-usage", + " | action-ref" + ], + "name": "state-transition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "transition =", + " ", + " |", + " " + ], + "name": "transition" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "state-source =", + " state-node | state-ref-node" + ], + "name": "state-source" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "transition-label = trigger-expression '/' ActionUsage" + ], + "name": "transition-label" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "trigger-expression = AcceptParameterPart (guard-expression)?" + ], + "name": "trigger-expression" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "st-succession =", + " ", + " |", + " " + ], + "name": "st-succession" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibit-edge =", + " " + ], + "name": "exhibit-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "exhibitor = part | part-def" + ], + "name": "exhibitor" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "general-relationship |= exhibit-edge" + ], + "name": "general-relationship |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.18", + "is_partial": false, + "lines": [ + "usage-edge = |transition | st-succession | exhibit-edge" + ], + "name": "usage-edge" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.19", + "lines": [ + "Clause 8.2.3.19 Calculations Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": true, + "lines": [ + "definition-node =| calc-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calc-def =", + " " + ], + "name": "calc-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calc-def-name-compartment =", + " '«' DefinitionPrefix 'calc' 'def' '»'", + " definition-name-with-alias" + ], + "name": "calc-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": true, + "lines": [ + "usage-node =| calc" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calc =", + " " + ], + "name": "calc" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calc-name-compartment =", + " occurrence-name-prefix", + " '«' 'ref'? keyword* 'calc' '»'", + " definition-name-with-alias" + ], + "name": "calc-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calc-name-compartment =", + " '«' OccurrenceUsagePrefix 'calc' '»'", + " usage-name-with-alias" + ], + "name": "calc-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": true, + "lines": [ + "action-flow-element =|", + " calc-def", + " | calc" + ], + "name": "action-flow-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": true, + "lines": [ + "compartment =|", + " calcs-compartment", + " | result-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calcs-compartment =", + " ", + " calcs-compartment-contents" + ], + "name": "calcs-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calcs-compartment-contents = calcs-compartment-element* '…'?" + ], + "name": "calcs-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "calcs-compartment-element = el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration" + ], + "name": "calcs-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "results-compartment =", + " ", + " result-compartment-contents" + ], + "name": "results-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.19", + "is_partial": false, + "lines": [ + "result-compartment-contents = OwnedExpression" + ], + "name": "result-compartment-contents" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.20", + "lines": [ + "Clause 8.2.3.20 Constraints Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": true, + "lines": [ + "definition-node =| constraint-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraint-def =", + " " + ], + "name": "constraint-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraint-def-name-compartment =", + " '«' DefinitionPrefix 'constraint' 'def' '»'", + " definition-name-with-alias" + ], + "name": "constraint-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "usage-node =", + " constraint", + " | assert-constraint-usage" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraint =", + " " + ], + "name": "constraint" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraint-ref =", + " " + ], + "name": "constraint-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraint-name-compartment =", + " '«' OccurrenceUsagePrefix 'constraint' '»'", + " usage-name-with-alias" + ], + "name": "constraint-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-constraint-node =", + " " + ], + "name": "assert-constraint-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-constraint-name-compartment =", + " '«assert constraint»'", + " constraint-name-compartment" + ], + "name": "assert-constraint-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assume-constraint-node =", + " " + ], + "name": "assume-constraint-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assume-constraint-name-compartment =", + " '«' OccurrenceUsagePrefix 'assume' 'constraint' '»'", + " usage-name-with-alias" + ], + "name": "assume-constraint-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": true, + "lines": [ + "usage-node =| assume-constraint-node assert-constraint-node<" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assume-edge =", + " " + ], + "name": "assume-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assumer = requirement | requirement-def" + ], + "name": "assumer" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "general-relationship |= assume-edge" + ], + "name": "general-relationship |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-edge =", + " " + ], + "name": "assert-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assertor = usage-node | definition-node" + ], + "name": "assertor" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "general-relationship |= assert-edge" + ], + "name": "general-relationship |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": true, + "lines": [ + "compartment =|", + " constraints-compartment", + " | assert-constraints-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraints-compartment =", + " ", + " constraints-compartment-contents" + ], + "name": "constraints-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraints-compartment-contents = (constraints-usage-compartment-element)* '…'?" + ], + "name": "constraints-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "constraints-usage-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CalculationBody*" + ], + "name": "constraints-usage-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-constraints-compartment =", + " ", + " assert-constraints-compartment-contents" + ], + "name": "assert-constraints-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-constraints-compartment-contents = (assert-constraints-compartment-element)* '…'?" + ], + "name": "assert-constraints-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": false, + "lines": [ + "assert-constraints-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ( 'not' )?", + " ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )", + " CalculationUsageParameterPart CalculationBody" + ], + "name": "assert-constraints-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.20", + "is_partial": true, + "lines": [ + "interconnection-element =|", + " constraint-ref", + " | constraint" + ], + "name": "interconnection-element" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.21", + "lines": [ + "Clause 8.2.3.21 Requirements Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "definition-node =|", + " requirement-def", + " | concern-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirement-def =", + " " + ], + "name": "requirement-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirement-def-name-compartment =", + " '«' DefinitionPrefix 'requirement' 'def' '»'", + " definition-name-with-alias" + ], + "name": "requirement-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "usage-node =", + " requirement", + " | satisfy-requirement-usage", + " | concern" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirement =", + " " + ], + "name": "requirement" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirement-ref =", + " " + ], + "name": "requirement-ref" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirement-name-compartment =", + " '«' OccurrenceUsagePrefix 'requirement' '»'", + " usage-name-with-alias" + ], + "name": "requirement-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfy-requirement-usage =", + " " + ], + "name": "satisfy-requirement-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfy-requirement-name-compartment =", + " '«satisfy requirement»'", + " requirement-name-compartment" + ], + "name": "satisfy-requirement-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concern-def =", + " " + ], + "name": "concern-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concern-def-name-compartment =", + " '«' DefinitionPrefix 'concern' 'def' '»'", + " definition-name-with-alias" + ], + "name": "concern-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concern =", + " " + ], + "name": "concern" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concern-name-compartment =", + " '«' OccurrenceUsagePrefix 'concern' '»'", + " usage-name-with-alias" + ], + "name": "concern-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "compartment =|", + " constraints-compartment", + " | assert-constraints-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "compartment =|", + " requirements-compartment", + " | require-constraints-compartment", + " | assume-constraints-compartment", + " | satisfy-requirements-compartment", + " | satisfies-compartment", + " | actors-compartment", + " | subject-compartment", + " | stakeholders-compartment", + " | frames-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirements-compartment =", + " ", + " requirements-compartment-contents" + ], + "name": "requirements-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirements-compartment-contents = (requirements-compartment-element)* '…'?" + ], + "name": "requirements-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirements-compartment-element =", + " OccurrenceUsagePrefix ConstraintUsageDeclaration" + ], + "name": "requirements-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-constraints-compartment =", + " ", + " require-constraints-compartment-contents" + ], + "name": "require-constraints-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-constraints-compartment-contents = require-constraint-element* '…'?" + ], + "name": "require-constraints-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-constraint-element =", + " el-prefix? requireMemberPrefix? RequirementConstraintUsage" + ], + "name": "require-constraint-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "assume-constraints-compartment =", + " ", + " assume-constraints-compartment-contents" + ], + "name": "assume-constraints-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "assume-constraints-compartment-contents = require-constraint-element* '…'?" + ], + "name": "assume-constraints-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfy-requirements-compartment =", + " ", + " satisfy-requirements-compartment-contents" + ], + "name": "satisfy-requirements-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfy-requirements-compartment-contents = text-block" + ], + "name": "satisfy-requirements-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfies-compartment =", + " ", + " satisfies-compartment-contents" + ], + "name": "satisfies-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfies-compartment-contents = UsageDeclaration* '…'?" + ], + "name": "satisfies-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "actors-compartment =", + " ", + " actors-compartment-contents" + ], + "name": "actors-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "actors-compartment-contents = (actors-compartment-element)* '…'?" + ], + "name": "actors-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "actors-compartment-element = el-prefix? MemberPrefix usage-cp" + ], + "name": "actors-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "subject-compartment =", + " ", + " subject-compartment-contents" + ], + "name": "subject-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "subject-compartment-contents = (subject-compartment-element)* '…'?" + ], + "name": "subject-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "subject-compartment-element = el-prefix? MemberPrefix usage-cp" + ], + "name": "subject-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "stakeholders-compartment =", + " ", + " stakeholders-compartment-contents" + ], + "name": "stakeholders-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "stakeholders-compartment-contents = (stakeholders-compartment-element)* '…'?" + ], + "name": "stakeholders-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "stakeholders-compartment-element = el-prefix? MemberPrefix usage-cp" + ], + "name": "stakeholders-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frames-compartment =", + " ", + " frames-compartment-contents" + ], + "name": "frames-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frames-compartment-contents = (frames-compartment-element)* '…'?" + ], + "name": "frames-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frames-compartment-element = el-prefix* MemberPrefix? FramedConcernUsage" + ], + "name": "frames-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concerns-compartment =", + " ", + " concerns-compartment-contents" + ], + "name": "concerns-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "interconnection-element =|", + " requirement-ref", + " | requirement", + " | concern", + " | distinguished-parameter", + " | distinguished-parameter-link", + " | concern-stakeholder-link" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "general-relationship =| frame-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": true, + "lines": [ + "subject-actors-stakeholders-node =| requirement" + ], + "name": "subject-actors-stakeholders-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "distinguished-parameter =", + " subject", + " | actor", + " | stakeholder" + ], + "name": "distinguished-parameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "subject =", + " " + ], + "name": "subject" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "actor =", + " ", + " |", + " " + ], + "name": "actor" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "stakeholder =", + " " + ], + "name": "stakeholder" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "subject-name = UsageDeclaration" + ], + "name": "subject-name" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "actor-name = UsageDeclaration" + ], + "name": "actor-name" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "stakeholder-name = UsageDeclaration" + ], + "name": "stakeholder-name" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "distinguished-parameter-link =", + " " + ], + "name": "distinguished-parameter-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frame-relationship =", + " " + ], + "name": "frame-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "concern-stakeholder-link =", + " " + ], + "name": "concern-stakeholder-link" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfy-edge =", + " " + ], + "name": "satisfy-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "satisfier = usage-node | definition-node" + ], + "name": "satisfier" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "general-relationship |= satisfy-edge" + ], + "name": "general-relationship |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-edge =", + " " + ], + "name": "require-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "requirer = usage-node | definition-node" + ], + "name": "requirer" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "general-relationship |= require-edge" + ], + "name": "general-relationship |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-constraint-node =", + " " + ], + "name": "require-constraint-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "require-constraint-name-compartment =", + " '«' OccurrenceUsagePrefix 'require' 'constraint' '»'", + " usage-name-with-alias" + ], + "name": "require-constraint-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "usage-node |= require-constraint-node" + ], + "name": "usage-node |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frame-concern-node =", + " " + ], + "name": "frame-concern-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frame-concern-name-compartment =", + " '«' OccurrenceUsagePrefix 'frame' 'concern' '»'", + " usage-name-with-alias" + ], + "name": "frame-concern-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "usage-node |= frame-concern-node" + ], + "name": "usage-node |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "frame-edge =", + " " + ], + "name": "frame-edge" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "framer = requirement | requirement-def | viewpoint | viewpoint-def" + ], + "name": "framer" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.21", + "is_partial": false, + "lines": [ + "general-relationship |= frame-edge" + ], + "name": "general-relationship |" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.22", + "lines": [ + "Clause 8.2.3.22 Cases Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.22", + "is_partial": true, + "lines": [ + "compartment =| objective-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.22", + "is_partial": false, + "lines": [ + "objective-compartment =", + " ", + " objective-compartment-contents" + ], + "name": "objective-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.22", + "is_partial": false, + "lines": [ + "objective-compartment-contents = (objective-compartment-element)* '…'?" + ], + "name": "objective-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.22", + "is_partial": false, + "lines": [ + "objective-compartment-element =", + " comp-prefix? MemberPrefix ConstraintUsageDeclaration RequirementBody" + ], + "name": "objective-compartment-element" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.23", + "lines": [ + "Clause 8.2.3.23 Analysis Cases Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": true, + "lines": [ + "definition-node =| analysis-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analysis-def =", + " " + ], + "name": "analysis-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analysis-def-name-compartment =", + " '«' DefinitionPrefix 'analysis' 'def' '»'", + " definition-name-with-alias" + ], + "name": "analysis-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": true, + "lines": [ + "usage-node =| analysis" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analysis =", + " " + ], + "name": "analysis" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analysis-name-compartment =", + " '«' OccurrenceUsagePrefix 'analysis' '»'", + " usage-name-with-alias" + ], + "name": "analysis-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": true, + "lines": [ + "compartment =| analyses-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analyses-compartment =", + " ", + " analyses-compartment-contents" + ], + "name": "analyses-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analyses-compartment-contents = analyses-compartment-element* '…'?" + ], + "name": "analyses-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": false, + "lines": [ + "analyses-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody" + ], + "name": "analyses-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": true, + "lines": [ + "action-flow-element =|", + " analysis-def", + " | analysis" + ], + "name": "action-flow-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.23", + "is_partial": true, + "lines": [ + "subject-actors-stakeholders-node =| analysis | analysis-def" + ], + "name": "subject-actors-stakeholders-node" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.24", + "lines": [ + "Clause 8.2.3.24 Verification Cases Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "definition-node =| verification-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-def =", + " " + ], + "name": "verification-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-def-name-compartment =", + " '«' DefinitionPrefix 'verification' 'def' '»'", + " definition-name-with-alias" + ], + "name": "verification-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "usage-node =| verification" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification =", + " " + ], + "name": "verification" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-name-compartment =", + " '«' OccurrenceUsagePrefix 'verification' '»'", + " usage-name-with-alias" + ], + "name": "verification-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verify-requirement-node =", + " " + ], + "name": "verify-requirement-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verify-requirement-name-compartment =", + " '«' OccurrenceUsagePrefix 'verify' 'requirement' '»'", + " usage-name-with-alias" + ], + "name": "verify-requirement-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "usage-node |= verify-requirement-node" + ], + "name": "usage-node |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "compartment =|", + " verifications-compartment", + " | verifies-compartment", + " | verification-methods-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifications-compartment =", + " ", + " verifications-compartment-contents" + ], + "name": "verifications-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifications-compartment-contents = (verifications-compartment-element)* '…'?" + ], + "name": "verifications-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifications-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody '…'" + ], + "name": "verifications-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifies-compartment =", + " ", + " verifies-compartment-contents" + ], + "name": "verifies-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifies-compartment-contents = (verifies-compartment-element)* '…'?" + ], + "name": "verifies-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verifies-compartment-element = el-prefix? MemberPrefix RequirementVerificationUsage '…'" + ], + "name": "verifies-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-methods-compartment =", + " ", + " verification-methods-compartment-contents" + ], + "name": "verification-methods-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-methods-compartment-contents = (verification-methods-compartment-element)* '…'?" + ], + "name": "verification-methods-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verification-methods-compartment-element = MetadataBody" + ], + "name": "verification-methods-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "action-flow-element =|", + " verification-def", + " | verification" + ], + "name": "action-flow-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "general-relationship =| verify-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": false, + "lines": [ + "verify-relationship =", + " " + ], + "name": "verify-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.24", + "is_partial": true, + "lines": [ + "subject-actors-stakeholders-node =| verification | verification-def" + ], + "name": "subject-actors-stakeholders-node" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.25", + "lines": [ + "Clause 8.2.3.25 Use Cases Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "definition-node =| use-case-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-case-def =", + " " + ], + "name": "use-case-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-case-def-name-compartment =", + " '«' DefinitionPrefix 'use' 'case' 'def' '»'", + " definition-name-with-alias" + ], + "name": "use-case-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "usage-node =|", + " use-case", + " | include-use-case-usage" + ], + "name": "usage-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-case =", + " " + ], + "name": "use-case" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-case-name-compartment =", + " '«' OccurrenceUsagePrefix 'use' 'case' '»'", + " usage-name-with-alias" + ], + "name": "use-case-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-case-usage =", + " " + ], + "name": "include-use-case-usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-case-name-compartment =", + " '«include use case»'", + " requirement-name-compartment" + ], + "name": "include-use-case-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "compartment =|", + " use-cases-compartment", + " | include-actions-compartment", + " | includes-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-cases-compartment =", + " ", + " use-cases-compartment-contents" + ], + "name": "use-cases-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-cases-compartment-contents = use-cases-compartment-element* '…'?" + ], + "name": "use-cases-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "use-cases-compartment-element = el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration" + ], + "name": "use-cases-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-cases-compartment =", + " ", + " include-use-cases-compartment-contents" + ], + "name": "include-use-cases-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-cases-compartment-contents = (include-use-cases-compartment-element* '…'?" + ], + "name": "include-use-cases-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-cases-compartment-element =", + " el-prefix? OccurrenceUsagePrefix", + " ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )", + " ( ValuePart | ActionUsageParameterList )? CaseBody" + ], + "name": "include-use-cases-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "includes-compartment =", + " ", + " includes-compartment-contents" + ], + "name": "includes-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "includes-compartment-contents = (includes-compartment-element)* '…'?" + ], + "name": "includes-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "includes-compartment-element =", + " el-prefix? OccurrenceUsagePrefix", + " ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )" + ], + "name": "includes-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "action-flow-element =|", + " use-case-def", + " | use-case" + ], + "name": "action-flow-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "general-relationship =| include-use-case-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": false, + "lines": [ + "include-use-case-relationship =", + " " + ], + "name": "include-use-case-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.25", + "is_partial": true, + "lines": [ + "subject-actors-stakeholders-node =| use-case | use-case-def" + ], + "name": "subject-actors-stakeholders-node" + }, + { + "@type": "Heading", + "clause_id": "8.2.3.26", + "lines": [ + "Clause 8.2.3.26 Views and Viewpoints Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "root-view =", + "\tframed-view<" + ], + "name": "root-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": true, + "lines": [ + "definition-node =|", + " viewpoint-def", + " | view-def" + ], + "name": "definition-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoint-def =", + " " + ], + "name": "viewpoint-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoint-def-name-compartment =", + " '«' DefinitionPrefix 'viewpoint' 'def' '»'", + " definition-name-with-alias" + ], + "name": "viewpoint-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-def =", + " " + ], + "name": "view-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-def-name-compartment =", + " '«' DefinitionPrefix 'view' 'def' '»'", + " definition-name-with-alias" + ], + "name": "view-def-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "usage-node |=", + " viewpoint", + " | view", + " | framed-view" + ], + "name": "usage-node |" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoint =", + " " + ], + "name": "viewpoint" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoint-name-compartment =", + " '«' OccurrenceUsagePrefix 'viewpoint' '»'", + " usage-name-with-alias" + ], + "name": "viewpoint-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view =", + " " + ], + "name": "view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-name-compartment =", + " '«' OccurrenceUsagePrefix 'view' '»'", + " usage-name-with-alias" + ], + "name": "view-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": true, + "lines": [ + "compartment =|", + " | views-compartment", + " | viewpoints-compartment", + " | exposes-compartment", + " | filters-compartment", + " | rendering-compartment" + ], + "name": "compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "views-compartment =", + " ", + " views-compartment-contents" + ], + "name": "views-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "views-compartment-contents = (views-compartment-element)* '…'" + ], + "name": "views-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "views-compartment-element =", + " el-prefix? OccurrenceUsagePrefix UsageDeclaration? ValueOrFlowPart? ViewBody" + ], + "name": "views-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoints-compartment =", + " ", + " viewpoints-compartment-contents" + ], + "name": "viewpoints-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoints-compartment-contents = (viewpoints-compartment-element)* '…'?" + ], + "name": "viewpoints-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "viewpoints-compartment-element =", + " el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration RequirementBody" + ], + "name": "viewpoints-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "exposes-compartment =", + " ", + " exposes-compartment-contents" + ], + "name": "exposes-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "exposes-compartment-contents = exposes-compartment-element* '…'?" + ], + "name": "exposes-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "exposes-compartment-element = MembershipExpose | NamespaceExpose" + ], + "name": "exposes-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "filters-compartment =", + " ", + " filters-compartment-contents" + ], + "name": "filters-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "filters-compartment-contents = (filters-compartment-element)* '…'?" + ], + "name": "filters-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "filters-compartment-element = el-prefix? MemberPrefix OwnedExpression" + ], + "name": "filters-compartment-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "rendering-compartment =", + " ", + " rendering-compartment-contents" + ], + "name": "rendering-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "rendering-compartment-contents = usage-cp* '…'?" + ], + "name": "rendering-compartment-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": true, + "lines": [ + "interconnection-element =|", + " viewpoint-def", + " | viewpoint", + " | view-def", + " | view" + ], + "name": "interconnection-element" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "framed-view =", + " " + ], + "name": "framed-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "frameless-view =", + " general-view", + " | interconnection-view", + " | action-flow-view", + " | state-transition-view", + " | sequence-view" + ], + "name": "frameless-view" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-frame-name-compartment = '«view»' QualifiedName (':' QualifiedName)?" + ], + "name": "view-frame-name-compartment" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-frame-info-contents = Expose? ElementFilterMember? AnnotatingElement*" + ], + "name": "view-frame-info-contents" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-frame-info-compartment-tr =", + " " + ], + "name": "view-frame-info-compartment-tr" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-frame-info-compartment-bl =", + " " + ], + "name": "view-frame-info-compartment-bl" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "view-frame-info-compartment-br =", + " " + ], + "name": "view-frame-info-compartment-br" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": true, + "lines": [ + "general-relationship =| expose-relationship" + ], + "name": "general-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "expose-relationship =", + " expose_r | toplevel-expose-r | recursive-expose-r" + ], + "name": "expose-relationship" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "expose_r =", + " " + ], + "name": "expose_r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "toplevel-expose-r =", + " " + ], + "name": "toplevel-expose-r" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.26", + "is_partial": false, + "lines": [ + "recursive-expose-r =", + " " + ], + "name": "recursive-expose-r" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.26", + "lines": [ + "Note. The view frame info compartments are optional elements. The AnnotatingElement* enables adding any relevant supporting information related to a view, possibly using a configurable rendering." + ] + }, + { + "@type": "NoteRef", + "clause_id": "8.2.3.26", + "lines": [ + "Note. A model library in Section 9.2.18 defines standard graphical view definitions for SysML. These may be supplemented by further, customized view definitions specific to a model." + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.3.27", + "lines": [ + "Clause 8.2.3.27 Metadata Graphical Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": true, + "lines": [ + "annotation-node =| metadata-feature-annotation-node" + ], + "name": "annotation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-feature-annotation-node =", + " " + ], + "name": "metadata-feature-annotation-node" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-feature-decl = Identifier" + ], + "name": "metadata-feature-decl" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-feature-name-value-list =", + " ( metadata-feature-name '=' expression-text )*" + ], + "name": "metadata-feature-name-value-list" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-feature-name = Identifier" + ], + "name": "metadata-feature-name" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "expression-text = text-block" + ], + "name": "expression-text" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-def =", + " " + ], + "name": "metadata-def" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.3.27", + "is_partial": false, + "lines": [ + "metadata-def-name-compartment =", + " basic-name-prefix", + " '«' keyword* 'metadata' 'def' '»'", + " definition-name-with-alias" + ], + "name": "metadata-def-name-compartment" + }, + { + "@type": "Comment", + "clause_id": "", + "lines": [ + "// End of BNF\n" + ] + } +] \ No newline at end of file diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-marked_up.kgbnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-marked_up.kgbnf new file mode 100644 index 000000000..ef01a23cf --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf-marked_up.kgbnf @@ -0,0 +1,2200 @@ +// Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html +// Generated by bnf_grammar_processor at: 2025-12-04T19:31:35Z + + +// Part 2 - Systems Modeling Language (SysML) + +// Clause 8.2.3 Graphical Notation + +// Clause 8.2.3.1 Graphical Notation Overview + +// Clause 8.2.3.2 Elements and Relationships Graphical Notation + +element = + dependencies-and-annotations-element + | general-element + | element-inside-textual-compartment + +compartment =| general-compartment + +general-compartment = + + general-view + +general-view = + (general-element)* + (dependencies-and-annotations-element)* + (ellipsis-at-lower-left-corner)? + +ellipsis-at-lower-left-corner = '...' + +general-element = + general-node + | general-relationship + +element-node = + usage-node | definition-node | annotation-node | namespace-node + + element-inside-textual-compartment = + + +rel-name = + Identification + | QualifiedName + +// Note. An element inside a textual compartment is selected by graying out a substring containing the element. The grayed-out section must cover a single element within the textual syntax inside the compartment. + +// Clause 8.2.3.3 Dependencies Graphical Notation + +dependencies-and-annotations-element =| dependencies-element + +dependencies-element =| + binary-dependency + | n-ary-dependency + +binary-dependency = + + +n-ary-dependency = + &n-ary-association-dot (n-ary-dependency-client-or-supplier-link &element-node)+ + +n-ary-dependency-client-or-supplier-link = + n-ary-dependency-client-link + | n-ary-dependency-supplier-link + +n-ary-association-dot = + + +n-ary-dependency-client-link = + + +n-ary-dependency-supplier-link = + + +element-node = + usage-node | definition-node | annotation-node | namespace-node + +// Note. An n-ary dependency must have two or more client elements or two or more supplier elements. + +// Clause 8.2.3.4 Annotations Graphical Notation + +dependencies-and-annotations-element =| + annotation-node + | annotation-link + +annotation-node = + comment-node + | documentation-node + | textual-representation-node + +text-block = (LINE_TEXT)* + +comment-node = + comment-without-keyword + | comment-with-keyword + +comment-without-keyword = + + +comment-with-keyword = + + +documentation-node = + + +documentation-compartment = + + Identification + text-block + +textual-representation-node = + + +language-string = 'language' '=' STRING_VALUE + +annotation-link = + + +annotated-element = + element + | element-inside-textual-compartment + +// Note. A comment node may be attached to zero, one, or more than one annotated elements. All other annotation nodes must be attached to one and only one annotated element. + +// Clause 8.2.3.5 Namespaces and Packages Graphical Notation + +general-node =| namespace-node + +namespace-node =| package-node + +package-node = + package-with-name-inside + | package-with-name-in-tab + | imported-package-with-name-inside + | imported-package-with-name-in-tab + +package-with-name-inside = + + +package-with-name-in-tab = + + +imported-package-with-name-inside = + + +imported-package-with-name-in-tab = + + +package-compartment = + general-compartment + | documentation-compartment + | packages-compartment + | members-compartment + | relationships-compartment + +compartment =| package-compartment + +packages-compartment = + + packages-compartment-contents + +packages-compartment-contents = packages-compartment-element* '…'? + +packages-compartment-element = el-prefix? Identification + +members-compartment = + + members-compartment-contents + +members-compartment-contents = members-compartment-element* '…'? + +members-compartment-element = el-prefix? (DefinitionElement | UsageElement) + +relationships-compartment = + + relationships-compartment-contents + +relationships-compartment-contents = (relationships-compartment-element)* '…'? + +relationships-compartment-element = el-prefix? relationship-name QualifiedName + +relationship-name = 'defines', 'defined by', 'specializes', 'specialized by', 'connect to', + 'subsets', 'subsetted by', 'performs', 'performed by', 'allocated', 'allocated to', + 'satisfy', 'satisfied by' + +general-relationship =| + import + | top-level-import + | recursive-import + | owned-membership + | unowned-membership + +import = + + +top-level-import = + + +recursive-import = + + +owned-membership = + + +unowned-membership = + + +// Clause 8.2.3.6 Definition and Usage Graphical Notation + +general-node =| type-node + +type-node = + definition-node + | usage-node + +general-node |= usage-node definition-node< + +namespace-node =| type-node + +definition-name-with-alias = + DefinitionDeclaration + ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )? + +usage-name-with-alias = + '^'? UsageDeclaration + ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )? + +compartment-stack = (compartment)* + +compartment =| + | features-compartment + | variants-compartment + | variant-elementusages-compartment + +features-compartment = + + features-compartment-contents + +features-compartment-contents = (features-compartment-element)* '…'? + +features-compartment-element = el-prefix? UsagePrefix usage-cp + +variants-compartment = + + variants-compartment-contents + +variants-compartment-contents = members-compartment-contents + +variant-elementusages-compartment = + + variants-compartment-contents + +general-relationship =| + type-relationship + +type-relationship = + subclassification + | subsetting + | definition + | redefinition + | composite-feature-membership + | noncomposite-feature-membership + +subclassification = + + +definition = + + +subsetting = + + +reference-subsetting = + + +redefinition = + + +composite-feature-membership = + + +noncomposite-feature-membership = + + +el-prefix = '^' | '/' + +usage-cp = usageDeclaration ValuePart? + +extended-def = + + +extended-def-name-compartment = + '«' BasicDefinitionPrefix? DefinitionExtensionKeyword+ 'def' '»' + definition-name-with-alias + +// Note. This production is only valid for cases where one or more + +DefinitionExtensionKeyword names a MetadataDefinition that is a direct + +or indirect specialization of KerML metaclass SemanticMetadata. + +definition-node |= extended-def + +extended-usage = + + +extended-usage-name-compartment = + '«' BasicUsagePrefix? UsageExtensionKeyword+ '»' + usage-name-with-alias + +// Note. This production is only valid for cases where one or more + +UsageExtensionKeyword names a MetadataDefinition that is a direct + +or indirect specialization of KerML metaclass SemanticMetadata. + +usage-node |= extended-usage + +// Clause 8.2.3.7 Attributes Graphical Notation + +definition-node =| attribute-def + +attribute-def = + + +attribute-def-name-compartment = + '«' DefinitionPrefix 'attribute' 'def' '»' + definition-name-with-alias + +usage-node =| attribute + +attribute = + + +attribute-name-compartment = + '«' UsagePrefix 'attribute' '»' + usage-name-with-alias + +compartment =| attributes-compartment + +attributes-compartment = + + attributes-compartment-contents + +attributes-compartment-contents = (attributes-compartment-element)* '…'? + +attributes-compartment-element = el-prefix? UsagePrefix usage-cp + +// Clause 8.2.3.8 Enumerations Graphical Notation + +definition-node =| enumeration-def + +enumeration-def = + + +enumeration-def-name-compartment = + '«' DefinitionPrefix 'enum' 'def' '»' + definition-name-with-alias + +usage-node =| enumeration + +enumeration = + + +enumeration-name-compartment = + '«' UsagePrefix 'enum' '»' + usage-name-with-alias + +compartment =| enums-compartment + +enums-compartment = + + enums-compartment-contents + +enums-compartment_contents = (enums-compartment-element)* '…'? + +enums-compartment-element = el-prefix? UsagePrefix usage-cp + +// Clause 8.2.3.9 Occurrences Graphical Notation + +definition-node =| occurrence-def + +general-relationship =| portion-relationship + +occurrence-def = + + +occurrence-def-name-compartment = + '«' DefinitionPrefix 'occurrence' 'def' '»' + definition-name-with-alias + +usage-node =| + occurrence + | occurrence-refxfx + | timeslice-or-snapshot-node + +occurrence = + + +occurrence-ref = + + +occurrence-name-compartment = + '«' OccurrenceUsagePrefix 'occurrence' '»' + usage-name-with-alias + +timeslice-or-snapshot-node = + timeslice + | snapshot + +timeslice = + + +timeslice-name-compartment = + '«timeslice»' + usage-name-with-alias + +snapshot = + + +snapshots-name-compartment + '«snapshot»' + usage-name-with-alias + +event-occurrence-def = + + +event-occurrence-def-name-compartment = + '«' DefinitionPrefix 'event' 'occurrence' 'def' '»' + definition-name-with-alias + +definition-node |= event-occurrence-def + +event-occurrence = + + +event-occurrence-name-compartment = + '«' OccurrenceUsagePrefix 'event' 'occurrence' '»' + usage-name-with-alias + +usage-node |= event-occurrence + +event-edge = + + +eventer = usage-node | definition-node< + +portion-relationship = + + +compartment =| + occurrences-compartment + | individuals-compartment + | timeslices-compartment + | snapshots-compartment + | sequence-compartment + +occurrences-compartment = + + occurrences-compartment-contents + +occurrences-compartment-contents = (occurrences-compartment-element)* '…'? + +occurrences-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +individuals-compartment = + + individuals-compartment-contents + +individuals-compartment-contents = (individuals-compartment-element)* '…'? + +individuals-compartment-element = occurrences-compartment-element + +timeslices-compartment = + + timeslices-compartment-contents + +timeslices-compartment-contents = (timeslices-compartment-element)* '…'? + +timeslices-compartment-element = occurrences-compartment-element + +snapshots-compartment = + + snapshots-compartment-contents + +snapshots-compartment-contents = (snapshots-compartment-element)* '…'? + +snapshots-compartment-element = occurrences-compartment-element + +sequence-compartment = + + sequence-view + +sequence-view = (sq-graphical-element)* + +sq-graphical-element = + sq-graphical-node + | sq-graphical-relationship + | dependencies-and-annotations-element + +sq-graphical-node = sq-head-node | lifeline + +sq-head-node = sq-part | sq-port + +sq-part = + + +sq-port = + + +sq-port-label = UsageDeclaration + +sq-l-node = + lifeline + | sq-proxy + +lifeline = + + +sq-proxy = + + | + + +proxy-label = '.'? FeatureChainMember + +sq-graphical-relationship = message | sq-succession + +succession-label = UsageDeclaration? + +sq-succession = + + +succession-label = Identification + +// Note: the proxy nodes attached to a succession must refer to an event + +// Clause 8.2.3.10 Items Graphical Notation + +definition-node =| item-def + +interconnection-element = | item| item-ref + +item-def = + + +item-def-name-compartment = + '«' DefinitionPrefix 'item' 'def' '»' + definition-name-with-alias + +usage-node =| item + +item = + + +item-name-compartment = + '«' OccurrenceUsagePrefix 'item' '»' + usage-name-with-alias + +item-ref = + + +compartment =| items-compartment + +items-compartment = + + items-compartment-contents + +items-compartment-contents = (items-compartment-element)* '…' + +items-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +// Clause 8.2.3.11 Parts Graphical Notation + +definition-node =| part-def + +interconnection-element = | part | part-ref + +part-def = + + +part-def-name-compartment = + '«' DefinitionPrefix 'part' 'def' '»' + definition-name-with-alias + +usage-node =| part + +part = + + +part-name-compartment = + '«' OccurrenceUsagePrefix 'part' '»' + usage-name-with-alias + +part-ref = + + +compartment =| + parts-compartment + | directed-features-compartment + | interconnection-compartment + +parts-compartment = + + parts-compartment-contents + +parts-compartment-contents = (parts-compartment-element)* '…'? + +parts-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +directed-features-compartment = + + directed-features-compartment-contents + +directed-features-compartment-contents = (directed-features-compartment-element)* '…'? + +directed-features-compartment-element = + el-prefix FeatureDirection Definition-Body-Item* + +interconnection-compartment = + + interconnection-view + +interconnection-view =| + (interconnection-element)* + (dependencies-and-annotations-element)* + (ellipsis-at-lower-left-corner)? + +general-view =| interconnection-view + +// Clause 8.2.3.12 Ports Graphical Notation + +definition-node =| port-def + +port-def = + + +port-def-name-compartment = + '«' DefinitionPrefix 'port' 'def' '»' + definition-name-with-alias + +usage-node =| port-usage + +port-usage = + + +port-name-compartment = + '«' OccurrenceUsagePrefix 'port' '»' + usage-name-with-alias + +compartment =| ports-compartment + +ports-compartment = + + ports-compartment-contents + +ports-compartment-contents = (ports-compartment-element)* '…'? + +ports-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +interconnection-element =| port-def | port + +pdh = + + | + + | + + +pdv = + + | + + | + + +port-l = + + | + + | + + | + proxy-v + +port-r = + + | + + + | + + | + proxy-v + +port-t = + + | + + | + + | + proxy-h + +port-b = + + | + + | + + | + proxy-h + +port-label = QualifiedName (':' QualifiedName)? + +proxy-v = + + | + + +proxy-h = + + | + + +// Note. Dotted line port productions (references) are only possible for nested ports + +// Note. The proxy option of a port production is valid only on a part usage contained within an interconnection view. + +// Clause 8.2.3.13 Connections Graphical Notation + +definition-node =| connection-def + +connection-def = + + +connection-def-name-compartment = + '«' DefinitionPrefix 'connection' 'def' '»' + definition-name-with-alias + +usage-node =| connection + +connection = + + +connection-name-compartment = + '«' OccurrenceUsagePrefix 'connection' '»' + usage-name-with-alias + +compartment =| connections-compartment + +connections-compartment = + + connections-compartment-contents + +connections-compartment-contents = (connections-compartment-element)* '…'? + +connections-compartment-element = + el-prefix? OccurrenceUsagePrefix UsageDeclaration + +interconnection-element =| + connection-def + | connection + | connection-relationship + | attribute + +connection-relationship = + binding-connection + | connection-graphical + | n-ary-connection + | n-ary-connection-def + | connection-definition-elaboration + | connection-usage-elaboration + | connection-def-graphical + +connection-graphical = + + | + + +c-adornment = + (a-property | a-direction | a-subsetting |a-redefinition)* + +a-property = + 'ordered' | 'nonunique' | 'abstract' | 'derived' | 'readonly' + +a-direction = + 'in' | 'out' | 'inout' + +a-subsetting = + 'subsets' OwnedSubsetting (',' OwnedSubsetting)* + +a-redefinition = + 'redefines' OwnedRedefinition (',' OwnedRedefinition)* + +connection-end = usage-node | usage-edge + +usage-edge =| connection-graphical | binding-connection + +connection-label = UsageDeclaration + +connection-def-graphical = + + | + general-relationship |= connection-def-graphical + +cdef-label = Identification + +n-ary-connection-def = + n-ary-def-connection-dot n-ary-def-segment+ + +n-ary-def-connection-dot = + + +n-ary-def-segment = + + +definition-node |= n-ary-def-connection-dot + +general-relationship |= n-ary-def-segment + +n-ary-connection = + n-ary-connection-dot n-ary-segment+ + +n-ary-connection-dot = + + +usage-node |= n-ary-connection-dot + +cdot-label = UsageDeclaration + +n-ary-segment = + + +binding-connection = + + +rolename = Identification? + +multiplicity = MultiplicityRange? + +connection-definition-elaboration = + + +connection-usage-elaboration = + + +// Note. The usage-nodes at the ends of a binding-connection must be of compatible types. + +// Clause 8.2.3.14 Interfaces Graphical Notation + +definition-node =| interface-def + +interconnection-element =| interface + +interface-def = + + +interface-def-name-compartment = + '«' DefinitionPrefix 'interface' 'def' '»' + definition-name-with-alias< + +usage-node =| interface + +interface = + + +interface-name-compartment = + '«' OccurrenceUsagePrefix 'interface' '»' + usage-name-with-alias + +compartment =| + interfaces-compartment + | ends-compartment + +interfaces-compartment = + + interfaces-compartment-contents + +interfaces-compartment-contents = (interfaces-compartment-element)* '…'? + +interfaces-compartment-element = + el-prefix? OccurenceUsagePrefix InterfaceUsageDeclaration + +ends-compartment = + + ends-compartment-contents + +ends-compartment-contents = (ends-compartment-element)* '…'? + +ends-compartment-element = QualifedName (':' QualifiedName)? + +connection-relationship = + | interface-connection + +interface-connection = + + +interface-label = UsageDeclaration? + +// Clause 8.2.3.15 Allocations Graphical Notation + +definition-node =| allocation-def + +allocation-def = + + +allocation-def-name-compartment = + '«' DefinitionPrefix 'allocation' 'def' '»' + definition-name-with-alias + +usage-node =| allocation + +allocation = + + +allocation-name-compartment = + '«' OccurrenceUsagePrefix 'allocation' '»' + usage-name-with-alias + +compartment =| allocations-compartment + +allocations-compartment = + + allocations-compartment-contents + +allocations-compartment-contents = (allocations-compartment-element)* '…'? + +allocations-compartment-element = + el-prefix? OccurrenceUsagePrefix AllocationUsageDeclaration UsageBody* + +general-relationship =| allocate-relationship + +allocate-relationship = + + +allocation-node = + general-node + | element-in-textual-compartment + +usage-edge = |allocate-relationship + +// Clause 8.2.3.16 Flows Graphical Notation + +definition-node =| flow-def + +flow-def = + + +flow-def-name-compartment = + '«' DefinitionPrefix 'succession'? 'flow' 'def' '»' + definition-name-with-alias + +usage-node =| flow-node + +flow-node = + + +flow-name-compartment = + '«' OccurrenceUsagePrefix ( 'message' | 'succession'? 'flow' ) '»' + usage-name-with-alias + +compartment =| flows-compartment + +flows-compartment = + ________________________________________ + 'flows' + flows-compartment-contents + +flows-compartment-contents = (flows-compartment-element)* '...'? + +flows-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( 'message' MessageDeclaration + | 'succession'? FlowDeclaration + ) + +interconnection-element =| + flow-def + | flow + +connection-relationship =| + message-connection + | flow + | succession-flow + | flow-on-connection + +usage-edge =| message | flow | succession-flow + +msg-end-node = + occurrence| sq-l-node| item | part | port | action | state + | use-case | verification-case | analysis-case | proxy + +message = + + +// Note: proxy nodes and ends of messages must refer to occurrences + +message-label = + UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember + +flow = + + +flow-label = + UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember + +flow-end-node = + parameter | proxy + +// Note: proxy nodes at ends of flows must refer to directed features + +succession-flow = + + +succession-flow-label = flow-label + +flow-on-connection = + + +flow-node = + flow-node-r + | flow-node-l + | sflow-node-r + | sflow-node-l + | message-node-r + | message-node-l + +flow-node-r = + + +flow-node-l = + + +sflow-node-r = + + +sflow-node-l = + + +message-node-r = + + +message-node-l = + + +flow-label = + Identification | FlowPayloadFeatureMember + +// Clause 8.2.3.17 Actions Graphical Notation + +definition-node =| action-def + +action-def = + + +action-def-name-compartment = + '«' DefinitionPrefix 'action' 'def' '»' + definition-name-with-alias< + +usage-node =| + action + | perform-action-usage + +action = + + +action-name-compartment = + '«' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias< + +perform-action-usage = + + +action-ref = + + +perform-action-name-compartment = + '«' OccurrenceUsagePrefix 'perform' 'action' '»' + usage-name-with-alias + +compartment =| + actions-compartment + | perform-actions-compartment + | parameters-compartment + | action-flow-compartment + +actions-compartment = + + actions-compartment-contents + +actions-compartment-contents = (actions-compartment-element)* '…'? + +actions-compartment-element = + el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration + +perform-actions-compartment = + + perform-actions-compartment-contents + +perform-actions-compartment-contents = (perform-actions-compartment-element)* '…'? + +perform-actions-compartment-element = + el-prefix? OccurrenceUsagePrefix PerformActionUsageDeclaration + +parameters-compartment = + + parameters-compartment-contents + +parameters-compartment-contents = (parameters-compartment-element)* '…'? + +parameters-compartment-element = + el-prefix? FeatureDirection UsageDeclaration ValueOrFlowPart? DefinitionBodyItem* + +performed-by-compartment = + + performed-by-compartment-contents + +performed-by-compartment-contents = QualifiedName* '…'? + +action-flow-compartment = + + action-flow-view + +action-flow-view = + (dependencies-and-annotations-element)* + (action-flow-element)* + (perform-action-swimlanes)? + +action-flow-element =| + action-ref + | action + | action-flow-node + | action-flow-relationship + +action-flow-node = + start-node + | done-node + | terminate-node + | fork-node + | join-node + | decision-node + | merge-node + | send-action-node + | accept-action-node + | while-loop-action-node + | for-loop-action-node + | if-else-action-node + | assign-action-node + +action-flow-relationship = + flow + | aflow-succession + | binding-connection + | else-branch + +param-l = + + | + + | + proxy-v + +param-r = + + | + + | + proxy-v + +param-t = + + | + + | + proxy-h + +param-b = + + | + + | + proxy-h + +param-label = QualifiedName (‘:’ QualifiedName)* + +start-node = + + +done-node = + + +terminate-node = + + +fork-node = + + +join-node = + + +decision-node = + + +merge-node = + + +send-action-node = + + +send-action-name-compartment = + '«' OccurrenceUsagePrefix 'send' 'action' '»' + usage-name-with-alias + +send-action-expression = NodeParameterMember 'to' NodeParameterMember + +accept-action-node = + + +accept-action-name-compartment = + '«' OccurrenceUsagePrefix 'accept' 'action' '»' + usage-name-with-alias + +accept-action-expression = AcceptParameterPart + +while-loop-action-node = + + +while-condition = + + condition-expression + +until-condition = + + condition-expression + +while-loop-action-name-compartment = + '«' OccurrenceUsagePrefix 'loop' '»' + usage-name-with-alias + +for-loop-action-node = + + +iteration = + + iteration-expression + +loop-body = + + action-body + +for-loop-action-name-compartment = + '«' OccurrenceUsagePrefix 'loop' '»' + usage-name-with-alias + +if-else-action-node = + + +if-condition = + + condition-expression + +then-body = + + action-body + +else-body = + + action-body + +ifelse-action-name-compartment = + '«' OccurrenceUsagePrefix 'if' '»' + usage-name-with-alias + +action-body = + action-body-textual | action-flow-view + +condition-expression = + ExpressionParameterMember + +iteration-expression = + ForVariableDeclarationMember 'in' NodeParameterMember + +action-body-textual = + ActionBodyParameterMember + +assign-action-node = + + +assign-action-name-compartment = + '«' OccurrenceUsagePrefix 'assign' '»' + usage-name-with-alias + +perform-actions-swimlanes = (swimlane)* + +swimlane = + + +parameter = + param-l | param-r | param-t | param-b + +aflow-succession = + + +else-branch = + + +perform-edge = + + +performer-node = part | action | part-def | action-def | distinguished-parameter + +usage-edge = |succession perform-edge + +guard-expression = '[' OwnedExpression ']' + +// Note. All swimlanes are attached to each other on vertical edges and aligned along the top and bottom horizontal edges. + +// Note. The proxy option of a parameter production is valid only on an action usage contained within an action flow view. + +// Clause 8.2.3.18 States Graphical Notation + +definition-node =| state-def + +state-def = + + +state-def-name-compartment = + '«' DefinitionPrefix 'state' 'def' '»' + definition-name-with-alias + ('«' 'parallel' '»')? + +usage-node =| + state-node + | exhibit-state-usage + +state = + + +state-ref = + + +state-name-compartment = + '«' OccurrenceUsagePrefix 'state' '»' + usage-name-with-alias + ('«' 'parallel' '»')? + +exhibit-state-usage = + + +state-subaction-body = state-subaction-body-textual | action-flow-view + +state-subaction-body-textual = state-subaction-declaration? ( '{' ActionBodyItem* '}' )? + +state-subaction-declaration = + PerformActionUsageDeclaration + | AcceptNodeDeclaration + | SendNodeDeclaration + | AssignmentNodeDeclaration + +state-do-action = + + state-subaction-body + +state-entry-action = + + state-subaction-body + +state-exit-action = + + state-subaction-body + +entry-action = + | + + +entry-action-name-comp = + +'«' 'entry' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +exit-action = + + +exit-action-name-comp = + +'«' 'exit' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +do-action = + + +do-action-name-comp = + +'«' 'do' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +exhibit-state-name-compartment = + '«exhibit-state»' + state-name-compartment + +compartment =| + states-compartment + | states-actions-compartment + | exhibit-states-compartment + | successions-compartment + | state-transition-compartment + +states-compartment = + + states-compartment-contents + +states-compartment-contents = (states-compartment-element)* '…'? + +states-compartment-element = + el-prefix? OccurrencePrefix ActionUsageDeclaration + +state-actions-compartment = + + state-actions-compartment-contents + +state-actions-compartment-contents = (state-actions-compartment-element)* '…'? + +state-actions-compartment-element = + el-prefix? EntryActionMember | DoActionMember | ExitActionMember + +exhibit-states-compartment = + + exhibit-states-compartment-contents + +exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'? + +exhibit-states-compartment-element-compartment = UsageDeclaration + +succession-compartment = + + succession-compartment-contents + +succession-compartment-contents = QualifiedName* '…'? + +state-transition-compartment = + + state-transition-view + +state-transition-view = + (state-transition-element)* + (dependencies-and-annotations-element)* + +state-transition-element = + state-transition-node + | transition + | st-succession + +state-transition-node = + state-node + | state-ref-node + | start-node + | entry-action + | do-action + | exit-action + | done-node + | fork-node + | join-node + | decision-node + | merge-node + | terminate-node + | action + | perform-action-usage + | action-ref + +transition = + + | + + +state-source = + state-node | state-ref-node + +transition-label = trigger-expression '/' ActionUsage + +trigger-expression = AcceptParameterPart (guard-expression)? + +st-succession = + + | + + +exhibit-edge = + + +exhibitor = part | part-def + +general-relationship |= exhibit-edge + +usage-edge = |transition | st-succession | exhibit-edge + +// Clause 8.2.3.19 Calculations Graphical Notation + +definition-node =| calc-def + +calc-def = + + +calc-def-name-compartment = + '«' DefinitionPrefix 'calc' 'def' '»' + definition-name-with-alias + +usage-node =| calc + +calc = + + +calc-name-compartment = + occurrence-name-prefix + '«' 'ref'? keyword* 'calc' '»' + definition-name-with-alias + +calc-name-compartment = + '«' OccurrenceUsagePrefix 'calc' '»' + usage-name-with-alias + +action-flow-element =| + calc-def + | calc + +compartment =| + calcs-compartment + | result-compartment + +calcs-compartment = + + calcs-compartment-contents + +calcs-compartment-contents = calcs-compartment-element* '…'? + +calcs-compartment-element = el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration + +results-compartment = + + result-compartment-contents + +result-compartment-contents = OwnedExpression + +// Clause 8.2.3.20 Constraints Graphical Notation + +definition-node =| constraint-def + +constraint-def = + + +constraint-def-name-compartment = + '«' DefinitionPrefix 'constraint' 'def' '»' + definition-name-with-alias + +usage-node = + constraint + | assert-constraint-usage + +constraint = + + +constraint-ref = + + +constraint-name-compartment = + '«' OccurrenceUsagePrefix 'constraint' '»' + usage-name-with-alias + +assert-constraint-node = + + +assert-constraint-name-compartment = + '«assert constraint»' + constraint-name-compartment + +assume-constraint-node = + + +assume-constraint-name-compartment = + '«' OccurrenceUsagePrefix 'assume' 'constraint' '»' + usage-name-with-alias + +usage-node =| assume-constraint-node assert-constraint-node< + +assume-edge = + + +assumer = requirement | requirement-def + +general-relationship |= assume-edge + +assert-edge = + + +assertor = usage-node | definition-node + +general-relationship |= assert-edge + +compartment =| + constraints-compartment + | assert-constraints-compartment + +constraints-compartment = + + constraints-compartment-contents + +constraints-compartment-contents = (constraints-usage-compartment-element)* '…'? + +constraints-usage-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CalculationBody* + +assert-constraints-compartment = + + assert-constraints-compartment-contents + +assert-constraints-compartment-contents = (assert-constraints-compartment-element)* '…'? + +assert-constraints-compartment-element = + el-prefix? OccurrenceUsagePrefix ( 'not' )? + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + CalculationUsageParameterPart CalculationBody + +interconnection-element =| + constraint-ref + | constraint + +// Clause 8.2.3.21 Requirements Graphical Notation + +definition-node =| + requirement-def + | concern-def + +requirement-def = + + +requirement-def-name-compartment = + '«' DefinitionPrefix 'requirement' 'def' '»' + definition-name-with-alias + +usage-node = + requirement + | satisfy-requirement-usage + | concern + +requirement = + + +requirement-ref = + + +requirement-name-compartment = + '«' OccurrenceUsagePrefix 'requirement' '»' + usage-name-with-alias + +satisfy-requirement-usage = + + +satisfy-requirement-name-compartment = + '«satisfy requirement»' + requirement-name-compartment + +concern-def = + + +concern-def-name-compartment = + '«' DefinitionPrefix 'concern' 'def' '»' + definition-name-with-alias + +concern = + + +concern-name-compartment = + '«' OccurrenceUsagePrefix 'concern' '»' + usage-name-with-alias + +compartment =| + constraints-compartment + | assert-constraints-compartment + +compartment =| + requirements-compartment + | require-constraints-compartment + | assume-constraints-compartment + | satisfy-requirements-compartment + | satisfies-compartment + | actors-compartment + | subject-compartment + | stakeholders-compartment + | frames-compartment + +requirements-compartment = + + requirements-compartment-contents + +requirements-compartment-contents = (requirements-compartment-element)* '…'? + +requirements-compartment-element = + OccurrenceUsagePrefix ConstraintUsageDeclaration + +require-constraints-compartment = + + require-constraints-compartment-contents + +require-constraints-compartment-contents = require-constraint-element* '…'? + +require-constraint-element = + el-prefix? requireMemberPrefix? RequirementConstraintUsage + +assume-constraints-compartment = + + assume-constraints-compartment-contents + +assume-constraints-compartment-contents = require-constraint-element* '…'? + +satisfy-requirements-compartment = + + satisfy-requirements-compartment-contents + +satisfy-requirements-compartment-contents = text-block + +satisfies-compartment = + + satisfies-compartment-contents + +satisfies-compartment-contents = UsageDeclaration* '…'? + +actors-compartment = + + actors-compartment-contents + +actors-compartment-contents = (actors-compartment-element)* '…'? + +actors-compartment-element = el-prefix? MemberPrefix usage-cp + +subject-compartment = + + subject-compartment-contents + +subject-compartment-contents = (subject-compartment-element)* '…'? + +subject-compartment-element = el-prefix? MemberPrefix usage-cp + +stakeholders-compartment = + + stakeholders-compartment-contents + +stakeholders-compartment-contents = (stakeholders-compartment-element)* '…'? + +stakeholders-compartment-element = el-prefix? MemberPrefix usage-cp + +frames-compartment = + + frames-compartment-contents + +frames-compartment-contents = (frames-compartment-element)* '…'? + +frames-compartment-element = el-prefix* MemberPrefix? FramedConcernUsage + +concerns-compartment = + + concerns-compartment-contents + +interconnection-element =| + requirement-ref + | requirement + | concern + | distinguished-parameter + | distinguished-parameter-link + | concern-stakeholder-link + +general-relationship =| frame-relationship + +subject-actors-stakeholders-node =| requirement + +distinguished-parameter = + subject + | actor + | stakeholder + +subject = + + +actor = + + | + + +stakeholder = + + +subject-name = UsageDeclaration + +actor-name = UsageDeclaration + +stakeholder-name = UsageDeclaration + +distinguished-parameter-link = + + +frame-relationship = + + +concern-stakeholder-link = + + +satisfy-edge = + + +satisfier = usage-node | definition-node + +general-relationship |= satisfy-edge + +require-edge = + + +requirer = usage-node | definition-node + +general-relationship |= require-edge + +require-constraint-node = + + +require-constraint-name-compartment = + '«' OccurrenceUsagePrefix 'require' 'constraint' '»' + usage-name-with-alias + +usage-node |= require-constraint-node + +frame-concern-node = + + +frame-concern-name-compartment = + '«' OccurrenceUsagePrefix 'frame' 'concern' '»' + usage-name-with-alias + +usage-node |= frame-concern-node + +frame-edge = + + +framer = requirement | requirement-def | viewpoint | viewpoint-def + +general-relationship |= frame-edge + +// Clause 8.2.3.22 Cases Graphical Notation + +compartment =| objective-compartment + +objective-compartment = + + objective-compartment-contents + +objective-compartment-contents = (objective-compartment-element)* '…'? + +objective-compartment-element = + comp-prefix? MemberPrefix ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.3.23 Analysis Cases Graphical Notation + +definition-node =| analysis-def + +analysis-def = + + +analysis-def-name-compartment = + '«' DefinitionPrefix 'analysis' 'def' '»' + definition-name-with-alias + +usage-node =| analysis + +analysis = + + +analysis-name-compartment = + '«' OccurrenceUsagePrefix 'analysis' '»' + usage-name-with-alias + +compartment =| analyses-compartment + +analyses-compartment = + + analyses-compartment-contents + +analyses-compartment-contents = analyses-compartment-element* '…'? + +analyses-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody + +action-flow-element =| + analysis-def + | analysis + +subject-actors-stakeholders-node =| analysis | analysis-def + +// Clause 8.2.3.24 Verification Cases Graphical Notation + +definition-node =| verification-def + +verification-def = + + +verification-def-name-compartment = + '«' DefinitionPrefix 'verification' 'def' '»' + definition-name-with-alias + +usage-node =| verification + +verification = + + +verification-name-compartment = + '«' OccurrenceUsagePrefix 'verification' '»' + usage-name-with-alias + +verify-requirement-node = + + +verify-requirement-name-compartment = + '«' OccurrenceUsagePrefix 'verify' 'requirement' '»' + usage-name-with-alias + +usage-node |= verify-requirement-node + +compartment =| + verifications-compartment + | verifies-compartment + | verification-methods-compartment + +verifications-compartment = + + verifications-compartment-contents + +verifications-compartment-contents = (verifications-compartment-element)* '…'? + +verifications-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody '…' + +verifies-compartment = + + verifies-compartment-contents + +verifies-compartment-contents = (verifies-compartment-element)* '…'? + +verifies-compartment-element = el-prefix? MemberPrefix RequirementVerificationUsage '…' + +verification-methods-compartment = + + verification-methods-compartment-contents + +verification-methods-compartment-contents = (verification-methods-compartment-element)* '…'? + +verification-methods-compartment-element = MetadataBody + +action-flow-element =| + verification-def + | verification + +general-relationship =| verify-relationship + +verify-relationship = + + +subject-actors-stakeholders-node =| verification | verification-def + +// Clause 8.2.3.25 Use Cases Graphical Notation + +definition-node =| use-case-def + +use-case-def = + + +use-case-def-name-compartment = + '«' DefinitionPrefix 'use' 'case' 'def' '»' + definition-name-with-alias + +usage-node =| + use-case + | include-use-case-usage + +use-case = + + +use-case-name-compartment = + '«' OccurrenceUsagePrefix 'use' 'case' '»' + usage-name-with-alias + +include-use-case-usage = + + +include-use-case-name-compartment = + '«include use case»' + requirement-name-compartment + +compartment =| + use-cases-compartment + | include-actions-compartment + | includes-compartment + +use-cases-compartment = + + use-cases-compartment-contents + +use-cases-compartment-contents = use-cases-compartment-element* '…'? + +use-cases-compartment-element = el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration + +include-use-cases-compartment = + + include-use-cases-compartment-contents + +include-use-cases-compartment-contents = (include-use-cases-compartment-element* '…'? + +include-use-cases-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + ( ValuePart | ActionUsageParameterList )? CaseBody + +includes-compartment = + + includes-compartment-contents + +includes-compartment-contents = (includes-compartment-element)* '…'? + +includes-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + +action-flow-element =| + use-case-def + | use-case + +general-relationship =| include-use-case-relationship + +include-use-case-relationship = + + +subject-actors-stakeholders-node =| use-case | use-case-def + +// Clause 8.2.3.26 Views and Viewpoints Graphical Notation + +root-view = + framed-view< + +definition-node =| + viewpoint-def + | view-def + +viewpoint-def = + + +viewpoint-def-name-compartment = + '«' DefinitionPrefix 'viewpoint' 'def' '»' + definition-name-with-alias + +view-def = + + +view-def-name-compartment = + '«' DefinitionPrefix 'view' 'def' '»' + definition-name-with-alias + +usage-node |= + viewpoint + | view + | framed-view + +viewpoint = + + +viewpoint-name-compartment = + '«' OccurrenceUsagePrefix 'viewpoint' '»' + usage-name-with-alias + +view = + + +view-name-compartment = + '«' OccurrenceUsagePrefix 'view' '»' + usage-name-with-alias + +compartment =| + | views-compartment + | viewpoints-compartment + | exposes-compartment + | filters-compartment + | rendering-compartment + +views-compartment = + + views-compartment-contents + +views-compartment-contents = (views-compartment-element)* '…' + +views-compartment-element = + el-prefix? OccurrenceUsagePrefix UsageDeclaration? ValueOrFlowPart? ViewBody + +viewpoints-compartment = + + viewpoints-compartment-contents + +viewpoints-compartment-contents = (viewpoints-compartment-element)* '…'? + +viewpoints-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration RequirementBody + +exposes-compartment = + + exposes-compartment-contents + +exposes-compartment-contents = exposes-compartment-element* '…'? + +exposes-compartment-element = MembershipExpose | NamespaceExpose + +filters-compartment = + + filters-compartment-contents + +filters-compartment-contents = (filters-compartment-element)* '…'? + +filters-compartment-element = el-prefix? MemberPrefix OwnedExpression + +rendering-compartment = + + rendering-compartment-contents + +rendering-compartment-contents = usage-cp* '…'? + +interconnection-element =| + viewpoint-def + | viewpoint + | view-def + | view + +framed-view = + + +frameless-view = + general-view + | interconnection-view + | action-flow-view + | state-transition-view + | sequence-view + +view-frame-name-compartment = '«view»' QualifiedName (':' QualifiedName)? + +view-frame-info-contents = Expose? ElementFilterMember? AnnotatingElement* + +view-frame-info-compartment-tr = + + +view-frame-info-compartment-bl = + + +view-frame-info-compartment-br = + + +general-relationship =| expose-relationship + +expose-relationship = + expose_r | toplevel-expose-r | recursive-expose-r + +expose_r = + + +toplevel-expose-r = + + +recursive-expose-r = + + +// Note. The view frame info compartments are optional elements. The AnnotatingElement* enables adding any relevant supporting information related to a view, possibly using a configurable rendering. + +// Note. A model library in Section 9.2.18 defines standard graphical view definitions for SysML. These may be supplemented by further, customized view definitions specific to a model. + +// Clause 8.2.3.27 Metadata Graphical Notation + +annotation-node =| metadata-feature-annotation-node + +metadata-feature-annotation-node = + + +metadata-feature-decl = Identifier + +metadata-feature-name-value-list = + ( metadata-feature-name '=' expression-text )* + +metadata-feature-name = Identifier + +expression-text = text-block + +metadata-def = + + +metadata-def-name-compartment = + basic-name-prefix + '«' keyword* 'metadata' 'def' '»' + definition-name-with-alias + +// End of BNF + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf.html b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf.html new file mode 100644 index 000000000..297c0cc60 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf.html @@ -0,0 +1,2823 @@ + + + + +SysML-graphical-bnf + + + +

        // Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html
        +// Generated by bnf_grammar_processor at: 2025-12-04T19:31:35Z +

        +

        // Part 2 - Systems Modeling Language (SysML)

        +

        // Clause 8.2.3 Graphical Notation

        +

        // Clause 8.2.3.1 Graphical Notation Overview

        +

        // Clause 8.2.3.2 Elements and Relationships Graphical Notation

        + +
        element =
        +     dependencies-and-annotations-element
        +   | general-element
        +   | element-inside-textual-compartment
        +
        +
        compartment =| general-compartment
        +
        + +
        general-compartment =
        +      
        +      general-view
        +
        + +
        general-view =
        +      (general-element)*
        +      (dependencies-and-annotations-element)*
        +      (ellipsis-at-lower-left-corner)?
        +
        + +
        ellipsis-at-lower-left-corner = '...'
        +
        + +
        general-element =
        +      general-node
        +    | general-relationship
        +
        + +
        element-node =
        +    usage-node | definition-node | annotation-node | namespace-node
        +
        + +
         element-inside-textual-compartment =
        +      
        +
        + +
        rel-name =
        +      Identification
        +    | QualifiedName
        +
        +

        // Note. An element inside a textual compartment is selected by graying out a substring containing the element. The grayed-out section must cover a single element within the textual syntax inside the compartment.

        +

        // Clause 8.2.3.3 Dependencies Graphical Notation

        +
        dependencies-and-annotations-element =| dependencies-element
        +
        +
        dependencies-element =|
        +      binary-dependency
        +    | n-ary-dependency
        +
        + +
        binary-dependency =
        +      
        +
        + +
        n-ary-dependency =
        +    &n-ary-association-dot (n-ary-dependency-client-or-supplier-link &element-node)+
        +
        + +
        n-ary-dependency-client-or-supplier-link =
        +      n-ary-dependency-client-link
        +    | n-ary-dependency-supplier-link
        +
        + +
        n-ary-association-dot =
        +      
        +
        + +
        n-ary-dependency-client-link =
        +      
        +
        + +
        n-ary-dependency-supplier-link =
        +      
        +
        + +
        element-node =
        +    usage-node | definition-node | annotation-node | namespace-node
        +
        +

        // Note. An n-ary dependency must have two or more client elements or two or more supplier elements.

        +

        // Clause 8.2.3.4 Annotations Graphical Notation

        +
        dependencies-and-annotations-element =|
        +      annotation-node
        +    | annotation-link
        +
        + +
        annotation-node =
        +       comment-node
        +     | documentation-node
        +     | textual-representation-node
        +
        + +
        text-block = (LINE_TEXT)*
        +
        + +
        comment-node =
        +       comment-without-keyword
        +     | comment-with-keyword
        +
        + +
        comment-without-keyword =
        +      
        +
        + +
        comment-with-keyword =
        +      
        +
        + +
        documentation-node =
        +      
        +
        + +
        documentation-compartment =
        +      
        +       Identification
        +       text-block
        +
        + +
        textual-representation-node =
        +      
        +
        + +
        language-string = 'language' '=' STRING_VALUE
        +
        + +
        annotation-link =
        +      
        +
        + +
        annotated-element =
        +      element
        +    | element-inside-textual-compartment
        +
        +

        // Note. A comment node may be attached to zero, one, or more than one annotated elements. All other annotation nodes must be attached to one and only one annotated element.

        +

        // Clause 8.2.3.5 Namespaces and Packages Graphical Notation

        +
        general-node =| namespace-node
        +
        +
        namespace-node =| package-node
        +
        + +
        package-node =
        +      package-with-name-inside
        +    | package-with-name-in-tab
        +    | imported-package-with-name-inside
        +    | imported-package-with-name-in-tab
        +
        + +
        package-with-name-inside =
        +      
        +
        + +
        package-with-name-in-tab =
        +      
        +
        + +
        imported-package-with-name-inside =
        +      
        +
        + +
        imported-package-with-name-in-tab =
        +      
        +
        + +
        package-compartment =
        +      general-compartment
        +    | documentation-compartment
        +    | packages-compartment
        +    | members-compartment
        +    | relationships-compartment
        +
        +
        compartment =| package-compartment
        +
        + +
        packages-compartment =
        +      
        +      packages-compartment-contents
        +
        + +
        packages-compartment-contents = packages-compartment-element* '…'?
        +
        + +
        packages-compartment-element = el-prefix? Identification
        +
        + +
        members-compartment =
        +      
        +      members-compartment-contents
        +
        + +
        members-compartment-contents = members-compartment-element* '…'?
        +
        + +
        members-compartment-element = el-prefix? (DefinitionElement | UsageElement)
        +
        + +
        relationships-compartment =
        +      
        +       relationships-compartment-contents
        +
        + +
        relationships-compartment-contents = (relationships-compartment-element)* '…'?
        +
        + +
        relationships-compartment-element = el-prefix? relationship-name QualifiedName
        +
        + +
        relationship-name = 'defines',  'defined by', 'specializes',  'specialized by',  'connect to',
        +      'subsets',  'subsetted by', 'performs',  'performed by', 'allocated',  'allocated to',
        +      'satisfy',  'satisfied by'
        +
        +
        general-relationship =|
        +      import
        +    | top-level-import
        +    | recursive-import
        +    | owned-membership
        +    | unowned-membership
        +
        + +
        import =
        +      
        +
        + +
        top-level-import =
        +      
        +
        + +
        recursive-import =
        +      
        +
        + +
        owned-membership =
        +      
        +
        + +
        unowned-membership =
        +      
        +
        +

        // Clause 8.2.3.6 Definition and Usage Graphical Notation

        +
        general-node =| type-node
        +
        + +
        type-node =
        +      definition-node
        +    | usage-node
        +
        + +
        general-node |= usage-node definition-node<
        +
        +
        namespace-node =| type-node
        +
        + +
        definition-name-with-alias =
        +    DefinitionDeclaration
        +    ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?
        +
        + +
        usage-name-with-alias =
        +    '^'? UsageDeclaration
        +    ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?
        +
        + +
        compartment-stack = (compartment)*
        +
        +
        compartment =|
        +    | features-compartment
        +    | variants-compartment
        +    | variant-elementusages-compartment
        +
        + +
        features-compartment =
        +      
        +      features-compartment-contents
        +
        + +
        features-compartment-contents = (features-compartment-element)* '…'?
        +
        + +
        features-compartment-element = el-prefix? UsagePrefix usage-cp
        +
        + +
        variants-compartment =
        +      
        +      variants-compartment-contents
        +
        + +
        variants-compartment-contents = members-compartment-contents
        +
        + +
        variant-elementusages-compartment =
        +      
        +      variants-compartment-contents
        +
        +
        general-relationship =|
        +      type-relationship
        +
        + +
        type-relationship =
        +      subclassification
        +    | subsetting
        +    | definition
        +    | redefinition
        +    | composite-feature-membership
        +    | noncomposite-feature-membership
        +
        + +
        subclassification =
        +      
        +
        + +
        definition =
        +      
        +
        + +
        subsetting =
        +      
        +
        + +
        reference-subsetting =
        +      
        +
        + +
        redefinition =
        +      
        +
        + +
        composite-feature-membership =
        +      
        +
        + +
        noncomposite-feature-membership =
        +      
        +
        + +
        el-prefix = '^' | '/'
        +
        + +
        usage-cp = usageDeclaration ValuePart?
        +
        + +
        extended-def =
        +      
        +
        + +
        extended-def-name-compartment =
        +     '«' BasicDefinitionPrefix? DefinitionExtensionKeyword+ 'def' '»'
        +     definition-name-with-alias
        +
        +

        // Note. This production is only valid for cases where one or more

        + +
        DefinitionExtensionKeyword names a MetadataDefinition that is a direct
        +
        + +
        or indirect specialization of KerML metaclass SemanticMetadata.
        +
        + +
        definition-node |= extended-def
        +
        + +
        extended-usage =
        +      
        +
        + +
        extended-usage-name-compartment =
        +     '«' BasicUsagePrefix? UsageExtensionKeyword+ '»'
        +     usage-name-with-alias
        +
        +

        // Note. This production is only valid for cases where one or more

        + +
        UsageExtensionKeyword names a MetadataDefinition that is a direct
        +
        + +
        or indirect specialization of KerML metaclass SemanticMetadata.
        +
        + +
        usage-node |= extended-usage
        +
        +

        // Clause 8.2.3.7 Attributes Graphical Notation

        +
        definition-node =| attribute-def
        +
        + +
        attribute-def =
        +      
        +
        + +
        attribute-def-name-compartment =
        +      '«' DefinitionPrefix 'attribute' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| attribute
        +
        + +
        attribute =
        +      
        +
        + +
        attribute-name-compartment =
        +      '«' UsagePrefix 'attribute' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| attributes-compartment
        +
        + +
        attributes-compartment =
        +      
        +      attributes-compartment-contents
        +
        + +
        attributes-compartment-contents = (attributes-compartment-element)* '…'?
        +
        + +
        attributes-compartment-element = el-prefix? UsagePrefix usage-cp
        +
        +

        // Clause 8.2.3.8 Enumerations Graphical Notation

        +
        definition-node =| enumeration-def
        +
        + +
        enumeration-def =
        +      
        +
        + +
        enumeration-def-name-compartment =
        +      '«' DefinitionPrefix 'enum' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| enumeration
        +
        + +
        enumeration =
        +      
        +
        + +
        enumeration-name-compartment =
        +      '«' UsagePrefix 'enum' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| enums-compartment
        +
        + +
        enums-compartment =
        +      
        +      enums-compartment-contents
        +
        + +
        enums-compartment_contents = (enums-compartment-element)* '…'?
        +
        + +
        enums-compartment-element = el-prefix? UsagePrefix usage-cp
        +
        +

        // Clause 8.2.3.9 Occurrences Graphical Notation

        +
        definition-node =| occurrence-def
        +
        +
        general-relationship =| portion-relationship
        +
        + +
        occurrence-def =
        +      
        +
        + +
        occurrence-def-name-compartment =
        +      '«' DefinitionPrefix 'occurrence' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =|
        +      occurrence
        +    | occurrence-refxfx
        +    | timeslice-or-snapshot-node
        +
        + +
        occurrence =
        +      
        +
        + +
        occurrence-ref =
        +      
        +
        + +
        occurrence-name-compartment =
        +      '«' OccurrenceUsagePrefix 'occurrence' '»'
        +      usage-name-with-alias
        +
        + +
        timeslice-or-snapshot-node =
        +      timeslice
        +    | snapshot
        +
        + +
        timeslice =
        +      
        +
        + +
        timeslice-name-compartment =
        +      '«timeslice»'
        +      usage-name-with-alias
        +
        + +
        snapshot =
        +      
        +
        + +
        snapshots-name-compartment
        +      '«snapshot»'
        +      usage-name-with-alias
        +
        + +
        event-occurrence-def =
        +      
        +
        + +
        event-occurrence-def-name-compartment =
        +      '«' DefinitionPrefix 'event'  'occurrence' 'def' '»'
        +      definition-name-with-alias
        +
        + +
        definition-node |= event-occurrence-def
        +
        + +
        event-occurrence =
        +      
        +
        + +
        event-occurrence-name-compartment =
        +      '«' OccurrenceUsagePrefix 'event'  'occurrence' '»'
        +      usage-name-with-alias
        +
        + +
        usage-node |= event-occurrence
        +
        + +
        event-edge =
        +      
        +
        + +
        eventer = usage-node | definition-node<
        +
        + +
        portion-relationship =
        +      
        +
        +
        compartment =|
        +      occurrences-compartment
        +    | individuals-compartment
        +    | timeslices-compartment
        +    | snapshots-compartment
        +    | sequence-compartment
        +
        + +
        occurrences-compartment =
        +      
        +      occurrences-compartment-contents
        +
        + +
        occurrences-compartment-contents = (occurrences-compartment-element)* '…'?
        +
        + +
        occurrences-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp
        +
        + +
        individuals-compartment =
        +      
        +      individuals-compartment-contents
        +
        + +
        individuals-compartment-contents = (individuals-compartment-element)* '…'?
        +
        + +
        individuals-compartment-element = occurrences-compartment-element
        +
        + +
        timeslices-compartment =
        +      
        +      timeslices-compartment-contents
        +
        + +
        timeslices-compartment-contents = (timeslices-compartment-element)* '…'?
        +
        + +
        timeslices-compartment-element = occurrences-compartment-element
        +
        + +
        snapshots-compartment =
        +      
        +      snapshots-compartment-contents
        +
        + +
        snapshots-compartment-contents = (snapshots-compartment-element)* '…'?
        +
        + +
        snapshots-compartment-element = occurrences-compartment-element
        +
        + +
        sequence-compartment =
        +      
        +      sequence-view
        +
        + +
        sequence-view = (sq-graphical-element)*
        +
        + +
        sq-graphical-element =
        +      sq-graphical-node
        +    | sq-graphical-relationship
        +    | dependencies-and-annotations-element
        +
        + +
        sq-graphical-node = sq-head-node | lifeline
        +
        + +
        sq-head-node = sq-part | sq-port
        +
        + +
        sq-part =
        +      
        +
        + +
        sq-port =
        +      
        +
        + +
        sq-port-label = UsageDeclaration
        +
        + +
        sq-l-node =
        +      lifeline
        +    | sq-proxy
        +
        + +
        lifeline =
        +      
        +
        + +
        sq-proxy =
        +      
        +    |
        +      
        +
        + +
        proxy-label = '.'? FeatureChainMember
        +
        + +
        sq-graphical-relationship = message | sq-succession
        +
        + +
        succession-label = UsageDeclaration?
        +
        + +
        sq-succession =
        +      
        +
        + +
        succession-label = Identification
        +
        +

        // Note: the proxy nodes attached to a succession must refer to an event

        +

        // Clause 8.2.3.10 Items Graphical Notation

        +
        definition-node =| item-def
        +
        + +
        interconnection-element = | item| item-ref
        +
        + +
        item-def =
        +      
        +
        + +
        item-def-name-compartment =
        +      '«' DefinitionPrefix 'item' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| item
        +
        + +
        item =
        +      
        +
        + +
        item-name-compartment =
        +    '«' OccurrenceUsagePrefix 'item' '»'
        +    usage-name-with-alias
        +
        + +
        item-ref =
        +      
        +
        +
        compartment =| items-compartment
        +
        + +
        items-compartment =
        +      
        +     items-compartment-contents
        +
        + +
        items-compartment-contents = (items-compartment-element)* '…'
        +
        + +
        items-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp
        +
        +

        // Clause 8.2.3.11 Parts Graphical Notation

        +
        definition-node =| part-def
        +
        + +
        interconnection-element = | part | part-ref
        +
        + +
        part-def =
        +      
        +
        + +
        part-def-name-compartment =
        +      '«' DefinitionPrefix 'part' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| part
        +
        + +
        part =
        +      
        +
        + +
        part-name-compartment =
        +      '«' OccurrenceUsagePrefix 'part' '»'
        +      usage-name-with-alias
        +
        + +
        part-ref =
        +      
        +
        +
        compartment =|
        +      parts-compartment
        +    | directed-features-compartment
        +    | interconnection-compartment
        +
        + +
        parts-compartment =
        +      
        +      parts-compartment-contents
        +
        + +
        parts-compartment-contents = (parts-compartment-element)* '…'?
        +
        + +
        parts-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp
        +
        + +
        directed-features-compartment =
        +      
        +      directed-features-compartment-contents
        +
        + +
        directed-features-compartment-contents = (directed-features-compartment-element)* '…'?
        +
        + +
        directed-features-compartment-element =
        +  el-prefix FeatureDirection Definition-Body-Item*
        +
        + +
        interconnection-compartment =
        +      
        +      interconnection-view
        +
        +
        interconnection-view =|
        +      (interconnection-element)*
        +      (dependencies-and-annotations-element)*
        +      (ellipsis-at-lower-left-corner)?
        +
        +
        general-view =| interconnection-view
        +
        +

        // Clause 8.2.3.12 Ports Graphical Notation

        +
        definition-node =| port-def
        +
        + +
        port-def =
        +      
        +
        + +
        port-def-name-compartment =
        +      '«' DefinitionPrefix 'port' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| port-usage
        +
        + +
        port-usage =
        +      
        +
        + +
        port-name-compartment =
        +      '«' OccurrenceUsagePrefix 'port' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| ports-compartment
        +
        + +
        ports-compartment =
        +      
        +      ports-compartment-contents
        +
        + +
        ports-compartment-contents = (ports-compartment-element)* '…'?
        +
        + +
        ports-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp
        +
        +
        interconnection-element =| port-def | port
        +
        + +
        pdh =
        +      
        +    |
        +      
        +    |
        +      
        +
        + +
        pdv =
        +      
        +    |
        +      
        +    |
        +      
        +
        + +
        port-l =
        +      
        +    |
        +      
        +    |
        +      
        +    |
        +      proxy-v
        +
        + +
        port-r =
        +      
        +    |
        +      
        +
        + +
            |
        +      
        +    |
        +      proxy-v
        +
        + +
        port-t =
        +      
        +    |
        +      
        +    |
        +      
        +    |
        +      proxy-h
        +
        + +
        port-b =
        +      
        +    |
        +      
        +    |
        +      
        +    |
        +      proxy-h
        +
        + +
        port-label = QualifiedName (':' QualifiedName)?
        +
        + +
        proxy-v =
        +      
        +    |
        +      
        +
        + +
        proxy-h =
        +      
        +    |
        +      
        +
        +

        // Note. Dotted line port productions (references) are only possible for nested ports

        +

        // Note. The proxy option of a port production is valid only on a part usage contained within an interconnection view.

        +

        // Clause 8.2.3.13 Connections Graphical Notation

        +
        definition-node =| connection-def
        +
        + +
        connection-def =
        +      
        +
        + +
        connection-def-name-compartment =
        +      '«' DefinitionPrefix 'connection' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| connection
        +
        + +
        connection =
        +      
        +
        + +
        connection-name-compartment =
        +      '«' OccurrenceUsagePrefix 'connection' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| connections-compartment
        +
        + +
        connections-compartment =
        +      
        +      connections-compartment-contents
        +
        + +
        connections-compartment-contents = (connections-compartment-element)* '…'?
        +
        + +
        connections-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix UsageDeclaration
        +
        +
        interconnection-element =|
        +      connection-def
        +    | connection
        +    | connection-relationship
        +    | attribute
        +
        + +
        connection-relationship =
        +      binding-connection
        +    | connection-graphical
        +    | n-ary-connection
        +    | n-ary-connection-def
        +    | connection-definition-elaboration
        +    | connection-usage-elaboration
        +    | connection-def-graphical
        +
        + +
        connection-graphical =
        +      
        +    |
        +      
        +
        + +
        c-adornment =
        +    (a-property | a-direction | a-subsetting |a-redefinition)*
        +
        + +
        a-property =
        +    'ordered' | 'nonunique' | 'abstract' | 'derived' | 'readonly'
        +
        + +
        a-direction =
        +    'in' | 'out' | 'inout'
        +
        + +
        a-subsetting =
        +    'subsets' OwnedSubsetting (',' OwnedSubsetting)*
        +
        + +
        a-redefinition =
        +    'redefines' OwnedRedefinition (',' OwnedRedefinition)*
        +
        + +
        connection-end = usage-node | usage-edge
        +
        +
        usage-edge =| connection-graphical | binding-connection
        +
        + +
        connection-label = UsageDeclaration
        +
        + +
        connection-def-graphical =
        +      
        +    |
        +      general-relationship |= connection-def-graphical
        +
        + +
        cdef-label = Identification
        +
        + +
        n-ary-connection-def =
        +    n-ary-def-connection-dot n-ary-def-segment+
        +
        + +
        n-ary-def-connection-dot =
        +      
        +
        + +
        n-ary-def-segment =
        +      
        +
        + +
        definition-node |= n-ary-def-connection-dot
        +
        + +
        general-relationship |= n-ary-def-segment
        +
        + +
        n-ary-connection =
        +    n-ary-connection-dot n-ary-segment+
        +
        + +
        n-ary-connection-dot =
        +      
        +
        + +
        usage-node |= n-ary-connection-dot
        +
        + +
        cdot-label = UsageDeclaration
        +
        + +
        n-ary-segment =
        +      
        +
        + +
        binding-connection =
        +      
        +
        + +
        rolename = Identification?
        +
        + +
        multiplicity = MultiplicityRange?
        +
        + +
        connection-definition-elaboration =
        +      
        +
        + +
        connection-usage-elaboration =
        +      
        +
        +

        // Note. The usage-nodes at the ends of a binding-connection must be of compatible types.

        +

        // Clause 8.2.3.14 Interfaces Graphical Notation

        +
        definition-node =| interface-def
        +
        +
        interconnection-element =| interface
        +
        + +
        interface-def =
        +      
        +
        + +
        interface-def-name-compartment =
        +      '«' DefinitionPrefix 'interface' 'def' '»'
        +      definition-name-with-alias<
        +
        +
        usage-node =| interface
        +
        + +
        interface =
        +      
        +
        + +
        interface-name-compartment =
        +      '«' OccurrenceUsagePrefix 'interface' '»'
        +      usage-name-with-alias
        +
        +
        compartment =|
        +      interfaces-compartment
        +    | ends-compartment
        +
        + +
        interfaces-compartment =
        +      
        +      interfaces-compartment-contents
        +
        + +
        interfaces-compartment-contents = (interfaces-compartment-element)* '…'?
        +
        + +
        interfaces-compartment-element =
        +      el-prefix? OccurenceUsagePrefix InterfaceUsageDeclaration
        +
        + +
        ends-compartment =
        +      
        +      ends-compartment-contents
        +
        + +
        ends-compartment-contents = (ends-compartment-element)* '…'?
        +
        + +
        ends-compartment-element = QualifedName (':' QualifiedName)?
        +
        + +
        connection-relationship =
        +    | interface-connection
        +
        + +
        interface-connection =
        +      
        +
        + +
        interface-label = UsageDeclaration?
        +
        +

        // Clause 8.2.3.15 Allocations Graphical Notation

        +
        definition-node =| allocation-def
        +
        + +
        allocation-def =
        +      
        +
        + +
        allocation-def-name-compartment =
        +      '«' DefinitionPrefix 'allocation' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| allocation
        +
        + +
        allocation =
        +      
        +
        + +
        allocation-name-compartment =
        +      '«' OccurrenceUsagePrefix 'allocation' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| allocations-compartment
        +
        + +
        allocations-compartment =
        +      
        +      allocations-compartment-contents
        +
        + +
        allocations-compartment-contents = (allocations-compartment-element)* '…'?
        +
        + +
        allocations-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix AllocationUsageDeclaration UsageBody*
        +
        +
        general-relationship =| allocate-relationship
        +
        + +
        allocate-relationship =
        +      
        +
        + +
        allocation-node =
        +      general-node
        +    | element-in-textual-compartment
        +
        + +
        usage-edge = |allocate-relationship
        +
        +

        // Clause 8.2.3.16 Flows Graphical Notation

        +
        definition-node =| flow-def
        +
        + +
        flow-def =
        +      
        +
        + +
        flow-def-name-compartment =
        +    '«' DefinitionPrefix 'succession'? 'flow' 'def' '»'
        +    definition-name-with-alias
        +
        +
        usage-node =| flow-node
        +
        + +
        flow-node =
        +      
        +
        + +
        flow-name-compartment =
        +      '«' OccurrenceUsagePrefix ( 'message' | 'succession'? 'flow' ) '»'
        +      usage-name-with-alias
        +
        +
        compartment =| flows-compartment
        +
        + +
        flows-compartment =
        +      
        +                      'flows'
        +      flows-compartment-contents
        +
        + +
        flows-compartment-contents = (flows-compartment-element)* '...'?
        +
        + +
        flows-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix
        +    ( 'message' MessageDeclaration
        +    | 'succession'? FlowDeclaration
        +    )
        +
        +
        interconnection-element =|
        +      flow-def
        +    | flow
        +
        +
        connection-relationship =|
        +      message-connection
        +    | flow
        +    | succession-flow
        +    | flow-on-connection
        +
        +
        usage-edge =| message | flow | succession-flow
        +
        + +
        msg-end-node =
        +      occurrence| sq-l-node| item | part | port | action | state
        +    | use-case | verification-case | analysis-case | proxy
        +
        + +
        message =
        +      
        +
        +

        // Note: proxy nodes and ends of messages must refer to occurrences

        + +
        message-label =
        +    UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember
        +
        + +
        flow =
        +      
        +
        + +
        flow-label =
        +    UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember
        +
        + +
        flow-end-node =
        +    parameter | proxy
        +
        +

        // Note: proxy nodes at ends of flows must refer to directed features

        + +
        succession-flow =
        +      
        +
        + +
        succession-flow-label = flow-label
        +
        + +
        flow-on-connection =
        +      
        +
        + +
        flow-node =
        +      flow-node-r
        +    | flow-node-l
        +    | sflow-node-r
        +    | sflow-node-l
        +    | message-node-r
        +    | message-node-l
        +
        + +
        flow-node-r =
        +      
        +
        + +
        flow-node-l =
        +      
        +
        + +
        sflow-node-r =
        +      
        +
        + +
        sflow-node-l =
        +      
        +
        + +
        message-node-r =
        +      
        +
        + +
        message-node-l =
        +      
        +
        + +
        flow-label =
        +    Identification | FlowPayloadFeatureMember
        +
        +

        // Clause 8.2.3.17 Actions Graphical Notation

        +
        definition-node =| action-def
        +
        + +
        action-def =
        +      
        +
        + +
        action-def-name-compartment =
        +      '«' DefinitionPrefix 'action' 'def' '»'
        +      definition-name-with-alias<
        +
        +
        usage-node =|
        +      action
        +    | perform-action-usage
        +
        + +
        action =
        +      
        +
        + +
        action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'action' '»'
        +      usage-name-with-alias<
        +
        + +
        perform-action-usage =
        +      
        +
        + +
        action-ref =
        +      
        +
        + +
        perform-action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'perform' 'action' '»'
        +      usage-name-with-alias
        +
        +
        compartment =|
        +      actions-compartment
        +    | perform-actions-compartment
        +    | parameters-compartment
        +    | action-flow-compartment
        +
        + +
        actions-compartment =
        +      
        +      actions-compartment-contents
        +
        + +
        actions-compartment-contents = (actions-compartment-element)* '…'?
        +
        + +
        actions-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration
        +
        + +
        perform-actions-compartment =
        +      
        +      perform-actions-compartment-contents
        +
        + +
        perform-actions-compartment-contents = (perform-actions-compartment-element)* '…'?
        +
        + +
        perform-actions-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix PerformActionUsageDeclaration
        +
        + +
        parameters-compartment =
        +      
        +      parameters-compartment-contents
        +
        + +
        parameters-compartment-contents = (parameters-compartment-element)* '…'?
        +
        + +
        parameters-compartment-element =
        +      el-prefix? FeatureDirection UsageDeclaration ValueOrFlowPart? DefinitionBodyItem*
        +
        + +
        performed-by-compartment =
        +      
        +      performed-by-compartment-contents
        +
        + +
        performed-by-compartment-contents = QualifiedName* '…'?
        +
        + +
        action-flow-compartment =
        +      
        +      action-flow-view
        +
        + +
        action-flow-view =
        +     (dependencies-and-annotations-element)*
        +     (action-flow-element)*
        +     (perform-action-swimlanes)?
        +
        +
        action-flow-element =|
        +      action-ref
        +    | action
        +    | action-flow-node
        +    | action-flow-relationship
        +
        + +
        action-flow-node =
        +      start-node
        +    | done-node
        +    | terminate-node
        +    | fork-node
        +    | join-node
        +    | decision-node
        +    | merge-node
        +    | send-action-node
        +    | accept-action-node
        +    | while-loop-action-node
        +    | for-loop-action-node
        +    | if-else-action-node
        +    | assign-action-node
        +
        + +
        action-flow-relationship =
        +      flow
        +    | aflow-succession
        +    | binding-connection
        +    | else-branch
        +
        + +
        param-l =
        +      
        +    |
        +      
        +    |
        +      proxy-v
        +
        + +
        param-r =
        +      
        +    |
        +      
        +    |
        +      proxy-v
        +
        + +
        param-t =
        +      
        +    |
        +      
        +    |
        +      proxy-h
        +
        + +
        param-b =
        +      
        +    |
        +      
        +    |
        +      proxy-h
        +
        + +
        param-label = QualifiedName (‘:’ QualifiedName)*
        +
        + +
        start-node =
        +      
        +
        + +
        done-node =
        +      
        +
        + +
        terminate-node =
        +      
        +
        + +
        fork-node =
        +      
        +
        + +
        join-node =
        +      
        +
        + +
        decision-node =
        +      
        +
        + +
        merge-node =
        +      
        +
        + +
        send-action-node =
        +      
        +
        + +
        send-action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'send' 'action' '»'
        +      usage-name-with-alias
        +
        + +
        send-action-expression = NodeParameterMember 'to' NodeParameterMember
        +
        + +
        accept-action-node =
        +      
        +
        + +
        accept-action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'accept' 'action' '»'
        +      usage-name-with-alias
        +
        + +
        accept-action-expression = AcceptParameterPart
        +
        + +
        while-loop-action-node =
        +      
        +
        + +
        while-condition =
        +      
        +  condition-expression
        +
        + +
        until-condition =
        +      
        +  condition-expression
        +
        + +
        while-loop-action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'loop' '»'
        +      usage-name-with-alias
        +
        + +
        for-loop-action-node =
        +      
        +
        + +
        iteration =
        +      
        +  iteration-expression
        +
        + +
        loop-body =
        +      
        +  action-body
        +
        + +
        for-loop-action-name-compartment =
        +    '«' OccurrenceUsagePrefix 'loop' '»'
        +    usage-name-with-alias
        +
        + +
        if-else-action-node =
        +      
        +
        + +
        if-condition =
        +      
        +  condition-expression
        +
        + +
        then-body =
        +      
        +  action-body
        +
        + +
        else-body =
        +      
        +  action-body
        +
        + +
        ifelse-action-name-compartment =
        +    '«' OccurrenceUsagePrefix 'if' '»'
        +    usage-name-with-alias
        +
        + +
        action-body =
        +    action-body-textual | action-flow-view
        +
        + +
        condition-expression =
        +    ExpressionParameterMember
        +
        + +
        iteration-expression =
        +    ForVariableDeclarationMember 'in' NodeParameterMember
        +
        + +
        action-body-textual =
        +    ActionBodyParameterMember
        +
        + +
        assign-action-node =
        +      
        +
        + +
        assign-action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'assign' '»'
        +      usage-name-with-alias
        +
        + +
        perform-actions-swimlanes = (swimlane)*
        +
        + +
        swimlane =
        +      
        +
        + +
        parameter =
        +  param-l | param-r | param-t | param-b
        +
        + +
        aflow-succession =
        +      
        +
        + +
        else-branch =
        +      
        +
        + +
        perform-edge =
        +      
        +
        + +
        performer-node = part | action | part-def | action-def | distinguished-parameter
        +
        + +
        usage-edge = |succession perform-edge
        +
        + +
        guard-expression = '[' OwnedExpression ']'
        +
        +

        // Note. All swimlanes are attached to each other on vertical edges and aligned along the top and bottom horizontal edges.

        +

        // Note. The proxy option of a parameter production is valid only on an action usage contained within an action flow view.

        +

        // Clause 8.2.3.18 States Graphical Notation

        +
        definition-node =| state-def
        +
        + +
        state-def =
        +      
        +
        + +
        state-def-name-compartment =
        +      '«' DefinitionPrefix 'state' 'def' '»'
        +      definition-name-with-alias
        +      ('«' 'parallel' '»')?
        +
        +
        usage-node =|
        +      state-node
        +    | exhibit-state-usage
        +
        + +
        state =
        +      
        +
        + +
        state-ref =
        +      
        +
        + +
        state-name-compartment =
        +      '«' OccurrenceUsagePrefix 'state' '»'
        +      usage-name-with-alias
        +      ('«' 'parallel' '»')?
        +
        + +
        exhibit-state-usage =
        +      
        +
        + +
        state-subaction-body = state-subaction-body-textual | action-flow-view
        +
        + +
        state-subaction-body-textual = state-subaction-declaration? ( '{' ActionBodyItem* '}' )?
        +
        + +
        state-subaction-declaration =
        +      PerformActionUsageDeclaration
        +    | AcceptNodeDeclaration
        +    | SendNodeDeclaration
        +    | AssignmentNodeDeclaration
        +
        + +
        state-do-action =
        +      
        +  state-subaction-body
        +
        + +
        state-entry-action =
        +      
        +  state-subaction-body
        +
        + +
        state-exit-action =
        +      
        +  state-subaction-body
        +
        + +
        entry-action =
        +         |
        +      
        +
        + +
        entry-action-name-comp =
        +
        + +
        '«' 'entry' OccurrenceUsagePrefix 'action' '»'
        +   usage-name-with-alias
        +
        + +
        exit-action =
        +      
        +
        + +
        exit-action-name-comp =
        +
        + +
        '«' 'exit' OccurrenceUsagePrefix 'action' '»'
        +   usage-name-with-alias
        +
        + +
        do-action =
        +      
        +
        + +
        do-action-name-comp =
        +
        + +
        '«' 'do' OccurrenceUsagePrefix 'action' '»'
        +   usage-name-with-alias
        +
        + +
        exhibit-state-name-compartment =
        +       '«exhibit-state»'
        +       state-name-compartment
        +
        +
        compartment =|
        +      states-compartment
        +    | states-actions-compartment
        +    | exhibit-states-compartment
        +    | successions-compartment
        +    | state-transition-compartment
        +
        + +
        states-compartment =
        +      
        +      states-compartment-contents
        +
        + +
        states-compartment-contents = (states-compartment-element)* '…'?
        +
        + +
        states-compartment-element =
        +    el-prefix? OccurrencePrefix ActionUsageDeclaration
        +
        + +
        state-actions-compartment =
        +      
        +      state-actions-compartment-contents
        +
        + +
        state-actions-compartment-contents = (state-actions-compartment-element)* '…'?
        +
        + +
        state-actions-compartment-element =
        +    el-prefix? EntryActionMember | DoActionMember | ExitActionMember
        +
        + +
        exhibit-states-compartment =
        +      
        +      exhibit-states-compartment-contents
        +
        + +
        exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'?
        +
        + +
        exhibit-states-compartment-element-compartment = UsageDeclaration
        +
        + +
        succession-compartment =
        +      
        +      succession-compartment-contents
        +
        + +
        succession-compartment-contents = QualifiedName* '…'?
        +
        + +
        state-transition-compartment =
        +      
        +      state-transition-view
        +
        + +
        state-transition-view =
        +      (state-transition-element)*
        +      (dependencies-and-annotations-element)*
        +
        + +
        state-transition-element =
        +    state-transition-node
        +  | transition
        +  | st-succession
        +
        + +
        state-transition-node =
        +    state-node
        +  | state-ref-node
        +  | start-node
        +  | entry-action
        +  | do-action
        +  | exit-action
        +  | done-node
        +  | fork-node
        +  | join-node
        +  | decision-node
        +  | merge-node
        +  | terminate-node
        +  | action
        +  | perform-action-usage
        +  | action-ref
        +
        + +
        transition =
        +      
        +    |
        +      
        +
        + +
        state-source =
        +   state-node | state-ref-node
        +
        + +
        transition-label = trigger-expression '/' ActionUsage
        +
        + +
        trigger-expression = AcceptParameterPart (guard-expression)?
        +
        + +
        st-succession =
        +      
        +   |
        +      
        +
        + +
        exhibit-edge =
        +      
        +
        + +
        exhibitor = part | part-def
        +
        + +
        general-relationship |= exhibit-edge
        +
        + +
        usage-edge = |transition | st-succession  | exhibit-edge
        +
        +

        // Clause 8.2.3.19 Calculations Graphical Notation

        +
        definition-node =| calc-def
        +
        + +
        calc-def =
        +      
        +
        + +
        calc-def-name-compartment =
        +      '«' DefinitionPrefix 'calc' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| calc
        +
        + +
        calc =
        +      
        +
        + +
        calc-name-compartment =
        +      occurrence-name-prefix
        +      '«' 'ref'? keyword* 'calc' '»'
        +      definition-name-with-alias
        +
        + +
        calc-name-compartment =
        +      '«' OccurrenceUsagePrefix 'calc' '»'
        +      usage-name-with-alias
        +
        +
        action-flow-element =|
        +      calc-def
        +    | calc
        +
        +
        compartment =|
        +      calcs-compartment
        +    | result-compartment
        +
        + +
        calcs-compartment =
        +      
        +      calcs-compartment-contents
        +
        + +
        calcs-compartment-contents = calcs-compartment-element* '…'?
        +
        + +
        calcs-compartment-element = el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration
        +
        + +
        results-compartment =
        +      
        +      result-compartment-contents
        +
        + +
        result-compartment-contents = OwnedExpression
        +
        +

        // Clause 8.2.3.20 Constraints Graphical Notation

        +
        definition-node =| constraint-def
        +
        + +
        constraint-def =
        +      
        +
        + +
        constraint-def-name-compartment =
        +      '«' DefinitionPrefix 'constraint' 'def' '»'
        +      definition-name-with-alias
        +
        + +
        usage-node =
        +      constraint
        +    | assert-constraint-usage
        +
        + +
        constraint =
        +      
        +
        + +
        constraint-ref =
        +      
        +
        + +
        constraint-name-compartment =
        +      '«' OccurrenceUsagePrefix 'constraint' '»'
        +      usage-name-with-alias
        +
        + +
        assert-constraint-node =
        +      
        +
        + +
        assert-constraint-name-compartment =
        +        '«assert constraint»'
        +       constraint-name-compartment
        +
        + +
        assume-constraint-node =
        +      
        +
        + +
        assume-constraint-name-compartment =
        +      '«' OccurrenceUsagePrefix 'assume' 'constraint' '»'
        +      usage-name-with-alias
        +
        +
        usage-node =| assume-constraint-node assert-constraint-node<
        +
        + +
        assume-edge =
        +      
        +
        + +
        assumer = requirement | requirement-def
        +
        + +
        general-relationship |= assume-edge
        +
        + +
        assert-edge =
        +      
        +
        + +
        assertor = usage-node | definition-node
        +
        + +
        general-relationship |= assert-edge
        +
        +
        compartment =|
        +      constraints-compartment
        +    | assert-constraints-compartment
        +
        + +
        constraints-compartment =
        +      
        +      constraints-compartment-contents
        +
        + +
        constraints-compartment-contents = (constraints-usage-compartment-element)* '…'?
        +
        + +
        constraints-usage-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CalculationBody*
        +
        + +
        assert-constraints-compartment =
        +      
        +      assert-constraints-compartment-contents
        +
        + +
        assert-constraints-compartment-contents = (assert-constraints-compartment-element)* '…'?
        +
        + +
        assert-constraints-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix ( 'not' )?
        +      ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )
        +      CalculationUsageParameterPart CalculationBody
        +
        +
        interconnection-element =|
        +      constraint-ref
        +    | constraint
        +
        +

        // Clause 8.2.3.21 Requirements Graphical Notation

        +
        definition-node =|
        +      requirement-def
        +    | concern-def
        +
        + +
        requirement-def =
        +      
        +
        + +
        requirement-def-name-compartment =
        +      '«' DefinitionPrefix 'requirement' 'def' '»'
        +      definition-name-with-alias
        +
        + +
        usage-node =
        +      requirement
        +    | satisfy-requirement-usage
        +    | concern
        +
        + +
        requirement =
        +      
        +
        + +
        requirement-ref =
        +      
        +
        + +
        requirement-name-compartment =
        +      '«' OccurrenceUsagePrefix 'requirement' '»'
        +      usage-name-with-alias
        +
        + +
        satisfy-requirement-usage =
        +      
        +
        + +
        satisfy-requirement-name-compartment =
        +        '«satisfy requirement»'
        +       requirement-name-compartment
        +
        + +
        concern-def =
        +      
        +
        + +
        concern-def-name-compartment =
        +      '«' DefinitionPrefix 'concern' 'def' '»'
        +      definition-name-with-alias
        +
        + +
        concern =
        +      
        +
        + +
        concern-name-compartment =
        +      '«' OccurrenceUsagePrefix 'concern' '»'
        +      usage-name-with-alias
        +
        +
        compartment =|
        +      constraints-compartment
        +    | assert-constraints-compartment
        +
        +
        compartment =|
        +      requirements-compartment
        +    | require-constraints-compartment
        +    | assume-constraints-compartment
        +    | satisfy-requirements-compartment
        +    | satisfies-compartment
        +    | actors-compartment
        +    | subject-compartment
        +    | stakeholders-compartment
        +    | frames-compartment
        +
        + +
        requirements-compartment =
        +      
        +      requirements-compartment-contents
        +
        + +
        requirements-compartment-contents = (requirements-compartment-element)* '…'?
        +
        + +
        requirements-compartment-element =
        +    OccurrenceUsagePrefix ConstraintUsageDeclaration
        +
        + +
        require-constraints-compartment =
        +      
        +      require-constraints-compartment-contents
        +
        + +
        require-constraints-compartment-contents = require-constraint-element* '…'?
        +
        + +
        require-constraint-element =
        +    el-prefix? requireMemberPrefix? RequirementConstraintUsage
        +
        + +
        assume-constraints-compartment =
        +      
        +      assume-constraints-compartment-contents
        +
        + +
        assume-constraints-compartment-contents = require-constraint-element* '…'?
        +
        + +
        satisfy-requirements-compartment =
        +      
        +      satisfy-requirements-compartment-contents
        +
        + +
        satisfy-requirements-compartment-contents = text-block
        +
        + +
        satisfies-compartment =
        +      
        +      satisfies-compartment-contents
        +
        + +
        satisfies-compartment-contents = UsageDeclaration* '…'?
        +
        + +
        actors-compartment =
        +      
        +      actors-compartment-contents
        +
        + +
        actors-compartment-contents = (actors-compartment-element)* '…'?
        +
        + +
        actors-compartment-element = el-prefix? MemberPrefix usage-cp
        +
        + +
        subject-compartment =
        +      
        +      subject-compartment-contents
        +
        + +
        subject-compartment-contents = (subject-compartment-element)* '…'?
        +
        + +
        subject-compartment-element = el-prefix? MemberPrefix usage-cp
        +
        + +
        stakeholders-compartment =
        +      
        +      stakeholders-compartment-contents
        +
        + +
        stakeholders-compartment-contents = (stakeholders-compartment-element)* '…'?
        +
        + +
        stakeholders-compartment-element = el-prefix? MemberPrefix usage-cp
        +
        + +
        frames-compartment =
        +      
        +      frames-compartment-contents
        +
        + +
        frames-compartment-contents = (frames-compartment-element)* '…'?
        +
        + +
        frames-compartment-element = el-prefix* MemberPrefix? FramedConcernUsage
        +
        + +
        concerns-compartment =
        +      
        +      concerns-compartment-contents
        +
        +
        interconnection-element =|
        +      requirement-ref
        +    | requirement
        +    | concern
        +    | distinguished-parameter
        +    | distinguished-parameter-link
        +    | concern-stakeholder-link
        +
        +
        general-relationship =| frame-relationship
        +
        +
        subject-actors-stakeholders-node =| requirement
        +
        + +
        distinguished-parameter =
        +      subject
        +    | actor
        +    | stakeholder
        +
        + +
        subject =
        +      
        +
        + +
        actor =
        +      
        +    |
        +      
        +
        + +
        stakeholder =
        +      
        +
        + +
        subject-name = UsageDeclaration
        +
        + +
        actor-name = UsageDeclaration
        +
        + +
        stakeholder-name = UsageDeclaration
        +
        + +
        distinguished-parameter-link =
        +      
        +
        + +
        frame-relationship =
        +      
        +
        + +
        concern-stakeholder-link =
        +      
        +
        + +
        satisfy-edge =
        +      
        +
        + +
        satisfier = usage-node | definition-node
        +
        + +
        general-relationship |= satisfy-edge
        +
        + +
        require-edge =
        +      
        +
        + +
        requirer = usage-node | definition-node
        +
        + +
        general-relationship |= require-edge
        +
        + +
        require-constraint-node =
        +      
        +
        + +
        require-constraint-name-compartment =
        +      '«' OccurrenceUsagePrefix 'require' 'constraint' '»'
        +      usage-name-with-alias
        +
        + +
        usage-node |= require-constraint-node
        +
        + +
        frame-concern-node =
        +      
        +
        + +
        frame-concern-name-compartment =
        +      '«' OccurrenceUsagePrefix 'frame' 'concern' '»'
        +      usage-name-with-alias
        +
        + +
        usage-node |= frame-concern-node
        +
        + +
        frame-edge =
        +      
        +
        + +
        framer = requirement | requirement-def | viewpoint | viewpoint-def
        +
        + +
        general-relationship |= frame-edge
        +
        +

        // Clause 8.2.3.22 Cases Graphical Notation

        +
        compartment =| objective-compartment
        +
        + +
        objective-compartment =
        +      
        +      objective-compartment-contents
        +
        + +
        objective-compartment-contents = (objective-compartment-element)* '…'?
        +
        + +
        objective-compartment-element =
        +      comp-prefix? MemberPrefix ConstraintUsageDeclaration RequirementBody
        +
        +

        // Clause 8.2.3.23 Analysis Cases Graphical Notation

        +
        definition-node =| analysis-def
        +
        + +
        analysis-def =
        +      
        +
        + +
        analysis-def-name-compartment =
        +      '«' DefinitionPrefix 'analysis' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| analysis
        +
        + +
        analysis =
        +      
        +
        + +
        analysis-name-compartment =
        +      '«' OccurrenceUsagePrefix 'analysis' '»'
        +      usage-name-with-alias
        +
        +
        compartment =| analyses-compartment
        +
        + +
        analyses-compartment =
        +      
        +      analyses-compartment-contents
        +
        + +
        analyses-compartment-contents = analyses-compartment-element* '…'?
        +
        + +
        analyses-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody
        +
        +
        action-flow-element =|
        +      analysis-def
        +    | analysis
        +
        +
        subject-actors-stakeholders-node =| analysis  | analysis-def
        +
        +

        // Clause 8.2.3.24 Verification Cases Graphical Notation

        +
        definition-node =| verification-def
        +
        + +
        verification-def =
        +      
        +
        + +
        verification-def-name-compartment =
        +      '«' DefinitionPrefix 'verification' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =| verification
        +
        + +
        verification =
        +      
        +
        + +
        verification-name-compartment =
        +      '«' OccurrenceUsagePrefix 'verification' '»'
        +      usage-name-with-alias
        +
        + +
        verify-requirement-node =
        +      
        +
        + +
        verify-requirement-name-compartment =
        +      '«' OccurrenceUsagePrefix 'verify' 'requirement' '»'
        +      usage-name-with-alias
        +
        + +
        usage-node |= verify-requirement-node
        +
        +
        compartment =|
        +      verifications-compartment
        +    | verifies-compartment
        +    | verification-methods-compartment
        +
        + +
        verifications-compartment =
        +      
        +      verifications-compartment-contents
        +
        + +
        verifications-compartment-contents = (verifications-compartment-element)* '…'?
        +
        + +
        verifications-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody '…'
        +
        + +
        verifies-compartment =
        +      
        +      verifies-compartment-contents
        +
        + +
        verifies-compartment-contents = (verifies-compartment-element)* '…'?
        +
        + +
        verifies-compartment-element = el-prefix? MemberPrefix RequirementVerificationUsage '…'
        +
        + +
        verification-methods-compartment =
        +      
        +      verification-methods-compartment-contents
        +
        + +
        verification-methods-compartment-contents = (verification-methods-compartment-element)* '…'?
        +
        + +
        verification-methods-compartment-element = MetadataBody
        +
        +
        action-flow-element =|
        +      verification-def
        +    | verification
        +
        +
        general-relationship =| verify-relationship
        +
        + +
        verify-relationship =
        +      
        +
        +
        subject-actors-stakeholders-node =| verification | verification-def
        +
        +

        // Clause 8.2.3.25 Use Cases Graphical Notation

        +
        definition-node =| use-case-def
        +
        + +
        use-case-def =
        +      
        +
        + +
        use-case-def-name-compartment =
        +      '«' DefinitionPrefix 'use' 'case' 'def' '»'
        +      definition-name-with-alias
        +
        +
        usage-node =|
        +      use-case
        +    | include-use-case-usage
        +
        + +
        use-case =
        +      
        +
        + +
        use-case-name-compartment =
        +      '«' OccurrenceUsagePrefix 'use' 'case' '»'
        +      usage-name-with-alias
        +
        + +
        include-use-case-usage =
        +      
        +
        + +
        include-use-case-name-compartment =
        +         '«include use case»'
        +       requirement-name-compartment
        +
        +
        compartment =|
        +      use-cases-compartment
        +    | include-actions-compartment
        +    | includes-compartment
        +
        + +
        use-cases-compartment =
        +      
        +      use-cases-compartment-contents
        +
        + +
        use-cases-compartment-contents = use-cases-compartment-element* '…'?
        +
        + +
        use-cases-compartment-element = el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration
        +
        + +
        include-use-cases-compartment =
        +      
        +      include-use-cases-compartment-contents
        +
        + +
        include-use-cases-compartment-contents = (include-use-cases-compartment-element* '…'?
        +
        + +
        include-use-cases-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix
        +      ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )
        +      ( ValuePart | ActionUsageParameterList )? CaseBody
        +
        + +
        includes-compartment =
        +      
        +      includes-compartment-contents
        +
        + +
        includes-compartment-contents = (includes-compartment-element)* '…'?
        +
        + +
        includes-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix
        +    ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )
        +
        +
        action-flow-element =|
        +       use-case-def
        +     | use-case
        +
        +
        general-relationship =| include-use-case-relationship
        +
        + +
        include-use-case-relationship =
        +      
        +
        +
        subject-actors-stakeholders-node =| use-case | use-case-def
        +
        +

        // Clause 8.2.3.26 Views and Viewpoints Graphical Notation

        + +
        root-view =
        +	framed-view<
        +
        +
        definition-node =|
        +      viewpoint-def
        +    | view-def
        +
        + +
        viewpoint-def =
        +      
        +
        + +
        viewpoint-def-name-compartment =
        +      '«' DefinitionPrefix 'viewpoint' 'def' '»'
        +      definition-name-with-alias
        +
        + +
        view-def =
        +      
        +
        + +
        view-def-name-compartment =
        +      '«' DefinitionPrefix 'view' 'def' '»'
        +      definition-name-with-alias
        +
        + +
        usage-node |=
        +      viewpoint
        +    | view
        +    | framed-view
        +
        + +
        viewpoint =
        +      
        +
        + +
        viewpoint-name-compartment =
        +      '«' OccurrenceUsagePrefix 'viewpoint' '»'
        +      usage-name-with-alias
        +
        + +
        view =
        +      
        +
        + +
        view-name-compartment =
        +      '«' OccurrenceUsagePrefix 'view' '»'
        +      usage-name-with-alias
        +
        +
        compartment =|
        +    | views-compartment
        +    | viewpoints-compartment
        +    | exposes-compartment
        +    | filters-compartment
        +    | rendering-compartment
        +
        + +
        views-compartment =
        +      
        +      views-compartment-contents
        +
        + +
        views-compartment-contents = (views-compartment-element)* '…'
        +
        + +
        views-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix UsageDeclaration? ValueOrFlowPart? ViewBody
        +
        + +
        viewpoints-compartment =
        +      
        +      viewpoints-compartment-contents
        +
        + +
        viewpoints-compartment-contents = (viewpoints-compartment-element)* '…'?
        +
        + +
        viewpoints-compartment-element =
        +    el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration RequirementBody
        +
        + +
        exposes-compartment =
        +      
        +      exposes-compartment-contents
        +
        + +
        exposes-compartment-contents = exposes-compartment-element* '…'?
        +
        + +
        exposes-compartment-element = MembershipExpose | NamespaceExpose
        +
        + +
        filters-compartment =
        +      
        +      filters-compartment-contents
        +
        + +
        filters-compartment-contents = (filters-compartment-element)* '…'?
        +
        + +
        filters-compartment-element = el-prefix? MemberPrefix OwnedExpression
        +
        + +
        rendering-compartment =
        +      
        +      rendering-compartment-contents
        +
        + +
        rendering-compartment-contents = usage-cp* '…'?
        +
        +
        interconnection-element =|
        +      viewpoint-def
        +    | viewpoint
        +    | view-def
        +    | view
        +
        + +
        framed-view =
        +      
        +
        + +
        frameless-view =
        +      general-view
        +    | interconnection-view
        +    | action-flow-view
        +    | state-transition-view
        +    | sequence-view
        +
        + +
        view-frame-name-compartment = '«view»' QualifiedName (':' QualifiedName)?
        +
        + +
        view-frame-info-contents = Expose? ElementFilterMember? AnnotatingElement*
        +
        + +
        view-frame-info-compartment-tr =
        +      
        +
        + +
        view-frame-info-compartment-bl =
        +      
        +
        + +
        view-frame-info-compartment-br =
        +      
        +
        +
        general-relationship =| expose-relationship
        +
        + +
        expose-relationship =
        +     expose_r | toplevel-expose-r | recursive-expose-r
        +
        + +
        expose_r =
        +      
        +
        + +
        toplevel-expose-r =
        +      
        +
        + +
        recursive-expose-r =
        +      
        +
        +

        // Note. The view frame info compartments are optional elements. The AnnotatingElement* enables adding any relevant supporting information related to a view, possibly using a configurable rendering.

        +

        // Note. A model library in Section 9.2.18 defines standard graphical view definitions for SysML. These may be supplemented by further, customized view definitions specific to a model.

        +

        // Clause 8.2.3.27 Metadata Graphical Notation

        +
        annotation-node =| metadata-feature-annotation-node
        +
        + +
        metadata-feature-annotation-node =
        +      
        +
        + +
        metadata-feature-decl = Identifier
        +
        + +
        metadata-feature-name-value-list =
        +    ( metadata-feature-name '=' expression-text )*
        +
        + +
        metadata-feature-name = Identifier
        +
        + +
        expression-text = text-block
        +
        + +
        metadata-def =
        +      
        +
        + +
        metadata-def-name-compartment =
        +    basic-name-prefix
        +    '«' keyword* 'metadata' 'def' '»'
        +    definition-name-with-alias
        +
        +

        // End of BNF + +

        +

        // Consolidated partial productions: +

        
        +// action-flow-element =
        +//     action | action-flow-node | action-flow-relationship | action-ref | analysis | analysis-def | calc
        +//     | calc-def | use-case | use-case-def | verification | verification-def
        +
        +
        +
        
        +// annotation-node =
        +//     metadata-feature-annotation-node
        +
        +
        +
        
        +// compartment =
        +//     action-flow-compartment | actions-compartment | actors-compartment | allocations-compartment
        +//     | analyses-compartment | assert-constraints-compartment | assert-constraints-compartment | assume-constraints-compartment
        +//     | attributes-compartment | calcs-compartment | connections-compartment | constraints-compartment
        +//     | constraints-compartment | directed-features-compartment | ends-compartment | enums-compartment
        +//     | exhibit-states-compartment | exposes-compartment | features-compartment | filters-compartment | flows-compartment
        +//     | frames-compartment | general-compartment | include-actions-compartment | includes-compartment
        +//     | individuals-compartment | interconnection-compartment | interfaces-compartment | items-compartment
        +//     | objective-compartment | occurrences-compartment | package-compartment | parameters-compartment | parts-compartment
        +//     | perform-actions-compartment | ports-compartment | rendering-compartment | require-constraints-compartment
        +//     | requirements-compartment | result-compartment | satisfies-compartment | satisfy-requirements-compartment
        +//     | sequence-compartment | snapshots-compartment | stakeholders-compartment | state-transition-compartment
        +//     | states-actions-compartment | states-compartment | subject-compartment | successions-compartment
        +//     | timeslices-compartment | use-cases-compartment | variant-elementusages-compartment | variants-compartment
        +//     | verification-methods-compartment | verifications-compartment | verifies-compartment | viewpoints-compartment
        +//     | views-compartment
        +
        +
        +
        
        +// connection-relationship =
        +//     flow | flow-on-connection | message-connection | succession-flow
        +
        +
        +
        
        +// definition-node =
        +//     action-def | allocation-def | analysis-def | attribute-def | calc-def | concern-def | connection-def
        +//     | constraint-def | enumeration-def | flow-def | interface-def | item-def | occurrence-def | part-def
        +//     | port-def | requirement-def | state-def | use-case-def | verification-def | view-def | viewpoint-def
        +
        +
        +
        
        +// dependencies-and-annotations-element =
        +//     annotation-link | annotation-node | dependencies-element
        +
        +
        +
        
        +// dependencies-element =
        +//     binary-dependency | n-ary-dependency
        +
        +
        +
        
        +// general-node =
        +//     namespace-node | type-node
        +
        +
        +
        
        +// general-relationship =
        +//     allocate-relationship | expose-relationship | frame-relationship | import | include-use-case-relationship
        +//     | owned-membership | portion-relationship | recursive-import | top-level-import | type-relationship
        +//     | unowned-membership | verify-relationship
        +
        +
        +
        
        +// general-view =
        +//     interconnection-view
        +
        +
        +
        
        +// interconnection-element =
        +//     attribute | concern | concern-stakeholder-link | connection | connection-def | connection-relationship
        +//     | constraint | constraint-ref | distinguished-parameter | distinguished-parameter-link | flow | flow-def
        +//     | interface | port | port-def | requirement | requirement-ref | view | view-def | viewpoint
        +//     | viewpoint-def
        +
        +
        +
        
        +// interconnection-view =
        +//     (dependencies-and-annotations-element)* | (ellipsis-at-lower-left-corner)? | (interconnection-element)*
        +
        +
        +
        
        +// namespace-node =
        +//     package-node | type-node
        +
        +
        +
        
        +// subject-actors-stakeholders-node =
        +//     analysis | analysis-def | requirement | use-case | use-case-def | verification | verification-def
        +
        +
        +
        
        +// usage-edge =
        +//     binding-connection | connection-graphical | flow | message | succession-flow
        +
        +
        +
        
        +// usage-node =
        +//     action | allocation | analysis | assert-constraint-usage | assume-constraint-node assert-constraint-node<
        +//     | attribute | calc | concern | connection | constraint | enumeration | exhibit-state-usage
        +//     | flow-node | include-use-case-usage | interface | item | occurrence | occurrence-refxfx | part
        +//     | perform-action-usage | port-usage | requirement | satisfy-requirement-usage | state-node
        +//     | timeslice-or-snapshot-node | use-case | verification
        +
        +
        + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf.kgbnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf.kgbnf new file mode 100644 index 000000000..507b171a6 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-graphical-bnf.kgbnf @@ -0,0 +1,2276 @@ +// Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html +// Generated by bnf_grammar_processor at: 2025-12-04T19:31:35Z + + +// Part 2 - Systems Modeling Language (SysML) + +// Clause 8.2.3 Graphical Notation + +// Clause 8.2.3.1 Graphical Notation Overview + +// Clause 8.2.3.2 Elements and Relationships Graphical Notation + +element = + dependencies-and-annotations-element + | general-element + | element-inside-textual-compartment + +compartment =| general-compartment + +general-compartment = + + general-view + +general-view = + (general-element)* + (dependencies-and-annotations-element)* + (ellipsis-at-lower-left-corner)? + +ellipsis-at-lower-left-corner = '...' + +general-element = + general-node + | general-relationship + +element-node = + usage-node | definition-node | annotation-node | namespace-node + + element-inside-textual-compartment = + + +rel-name = + Identification + | QualifiedName + +// Note. An element inside a textual compartment is selected by graying out a substring containing the element. The grayed-out section must cover a single element within the textual syntax inside the compartment. + +// Clause 8.2.3.3 Dependencies Graphical Notation + +dependencies-and-annotations-element =| dependencies-element + +dependencies-element =| + binary-dependency + | n-ary-dependency + +binary-dependency = + + +n-ary-dependency = + &n-ary-association-dot (n-ary-dependency-client-or-supplier-link &element-node)+ + +n-ary-dependency-client-or-supplier-link = + n-ary-dependency-client-link + | n-ary-dependency-supplier-link + +n-ary-association-dot = + + +n-ary-dependency-client-link = + + +n-ary-dependency-supplier-link = + + +element-node = + usage-node | definition-node | annotation-node | namespace-node + +// Note. An n-ary dependency must have two or more client elements or two or more supplier elements. + +// Clause 8.2.3.4 Annotations Graphical Notation + +dependencies-and-annotations-element =| + annotation-node + | annotation-link + +annotation-node = + comment-node + | documentation-node + | textual-representation-node + +text-block = (LINE_TEXT)* + +comment-node = + comment-without-keyword + | comment-with-keyword + +comment-without-keyword = + + +comment-with-keyword = + + +documentation-node = + + +documentation-compartment = + + Identification + text-block + +textual-representation-node = + + +language-string = 'language' '=' STRING_VALUE + +annotation-link = + + +annotated-element = + element + | element-inside-textual-compartment + +// Note. A comment node may be attached to zero, one, or more than one annotated elements. All other annotation nodes must be attached to one and only one annotated element. + +// Clause 8.2.3.5 Namespaces and Packages Graphical Notation + +general-node =| namespace-node + +namespace-node =| package-node + +package-node = + package-with-name-inside + | package-with-name-in-tab + | imported-package-with-name-inside + | imported-package-with-name-in-tab + +package-with-name-inside = + + +package-with-name-in-tab = + + +imported-package-with-name-inside = + + +imported-package-with-name-in-tab = + + +package-compartment = + general-compartment + | documentation-compartment + | packages-compartment + | members-compartment + | relationships-compartment + +compartment =| package-compartment + +packages-compartment = + + packages-compartment-contents + +packages-compartment-contents = packages-compartment-element* '…'? + +packages-compartment-element = el-prefix? Identification + +members-compartment = + + members-compartment-contents + +members-compartment-contents = members-compartment-element* '…'? + +members-compartment-element = el-prefix? (DefinitionElement | UsageElement) + +relationships-compartment = + + relationships-compartment-contents + +relationships-compartment-contents = (relationships-compartment-element)* '…'? + +relationships-compartment-element = el-prefix? relationship-name QualifiedName + +relationship-name = 'defines', 'defined by', 'specializes', 'specialized by', 'connect to', + 'subsets', 'subsetted by', 'performs', 'performed by', 'allocated', 'allocated to', + 'satisfy', 'satisfied by' + +general-relationship =| + import + | top-level-import + | recursive-import + | owned-membership + | unowned-membership + +import = + + +top-level-import = + + +recursive-import = + + +owned-membership = + + +unowned-membership = + + +// Clause 8.2.3.6 Definition and Usage Graphical Notation + +general-node =| type-node + +type-node = + definition-node + | usage-node + +general-node |= usage-node definition-node< + +namespace-node =| type-node + +definition-name-with-alias = + DefinitionDeclaration + ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )? + +usage-name-with-alias = + '^'? UsageDeclaration + ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )? + +compartment-stack = (compartment)* + +compartment =| + | features-compartment + | variants-compartment + | variant-elementusages-compartment + +features-compartment = + + features-compartment-contents + +features-compartment-contents = (features-compartment-element)* '…'? + +features-compartment-element = el-prefix? UsagePrefix usage-cp + +variants-compartment = + + variants-compartment-contents + +variants-compartment-contents = members-compartment-contents + +variant-elementusages-compartment = + + variants-compartment-contents + +general-relationship =| + type-relationship + +type-relationship = + subclassification + | subsetting + | definition + | redefinition + | composite-feature-membership + | noncomposite-feature-membership + +subclassification = + + +definition = + + +subsetting = + + +reference-subsetting = + + +redefinition = + + +composite-feature-membership = + + +noncomposite-feature-membership = + + +el-prefix = '^' | '/' + +usage-cp = usageDeclaration ValuePart? + +extended-def = + + +extended-def-name-compartment = + '«' BasicDefinitionPrefix? DefinitionExtensionKeyword+ 'def' '»' + definition-name-with-alias + +// Note. This production is only valid for cases where one or more + +DefinitionExtensionKeyword names a MetadataDefinition that is a direct + +or indirect specialization of KerML metaclass SemanticMetadata. + +definition-node |= extended-def + +extended-usage = + + +extended-usage-name-compartment = + '«' BasicUsagePrefix? UsageExtensionKeyword+ '»' + usage-name-with-alias + +// Note. This production is only valid for cases where one or more + +UsageExtensionKeyword names a MetadataDefinition that is a direct + +or indirect specialization of KerML metaclass SemanticMetadata. + +usage-node |= extended-usage + +// Clause 8.2.3.7 Attributes Graphical Notation + +definition-node =| attribute-def + +attribute-def = + + +attribute-def-name-compartment = + '«' DefinitionPrefix 'attribute' 'def' '»' + definition-name-with-alias + +usage-node =| attribute + +attribute = + + +attribute-name-compartment = + '«' UsagePrefix 'attribute' '»' + usage-name-with-alias + +compartment =| attributes-compartment + +attributes-compartment = + + attributes-compartment-contents + +attributes-compartment-contents = (attributes-compartment-element)* '…'? + +attributes-compartment-element = el-prefix? UsagePrefix usage-cp + +// Clause 8.2.3.8 Enumerations Graphical Notation + +definition-node =| enumeration-def + +enumeration-def = + + +enumeration-def-name-compartment = + '«' DefinitionPrefix 'enum' 'def' '»' + definition-name-with-alias + +usage-node =| enumeration + +enumeration = + + +enumeration-name-compartment = + '«' UsagePrefix 'enum' '»' + usage-name-with-alias + +compartment =| enums-compartment + +enums-compartment = + + enums-compartment-contents + +enums-compartment_contents = (enums-compartment-element)* '…'? + +enums-compartment-element = el-prefix? UsagePrefix usage-cp + +// Clause 8.2.3.9 Occurrences Graphical Notation + +definition-node =| occurrence-def + +general-relationship =| portion-relationship + +occurrence-def = + + +occurrence-def-name-compartment = + '«' DefinitionPrefix 'occurrence' 'def' '»' + definition-name-with-alias + +usage-node =| + occurrence + | occurrence-refxfx + | timeslice-or-snapshot-node + +occurrence = + + +occurrence-ref = + + +occurrence-name-compartment = + '«' OccurrenceUsagePrefix 'occurrence' '»' + usage-name-with-alias + +timeslice-or-snapshot-node = + timeslice + | snapshot + +timeslice = + + +timeslice-name-compartment = + '«timeslice»' + usage-name-with-alias + +snapshot = + + +snapshots-name-compartment + '«snapshot»' + usage-name-with-alias + +event-occurrence-def = + + +event-occurrence-def-name-compartment = + '«' DefinitionPrefix 'event' 'occurrence' 'def' '»' + definition-name-with-alias + +definition-node |= event-occurrence-def + +event-occurrence = + + +event-occurrence-name-compartment = + '«' OccurrenceUsagePrefix 'event' 'occurrence' '»' + usage-name-with-alias + +usage-node |= event-occurrence + +event-edge = + + +eventer = usage-node | definition-node< + +portion-relationship = + + +compartment =| + occurrences-compartment + | individuals-compartment + | timeslices-compartment + | snapshots-compartment + | sequence-compartment + +occurrences-compartment = + + occurrences-compartment-contents + +occurrences-compartment-contents = (occurrences-compartment-element)* '…'? + +occurrences-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +individuals-compartment = + + individuals-compartment-contents + +individuals-compartment-contents = (individuals-compartment-element)* '…'? + +individuals-compartment-element = occurrences-compartment-element + +timeslices-compartment = + + timeslices-compartment-contents + +timeslices-compartment-contents = (timeslices-compartment-element)* '…'? + +timeslices-compartment-element = occurrences-compartment-element + +snapshots-compartment = + + snapshots-compartment-contents + +snapshots-compartment-contents = (snapshots-compartment-element)* '…'? + +snapshots-compartment-element = occurrences-compartment-element + +sequence-compartment = + + sequence-view + +sequence-view = (sq-graphical-element)* + +sq-graphical-element = + sq-graphical-node + | sq-graphical-relationship + | dependencies-and-annotations-element + +sq-graphical-node = sq-head-node | lifeline + +sq-head-node = sq-part | sq-port + +sq-part = + + +sq-port = + + +sq-port-label = UsageDeclaration + +sq-l-node = + lifeline + | sq-proxy + +lifeline = + + +sq-proxy = + + | + + +proxy-label = '.'? FeatureChainMember + +sq-graphical-relationship = message | sq-succession + +succession-label = UsageDeclaration? + +sq-succession = + + +succession-label = Identification + +// Note: the proxy nodes attached to a succession must refer to an event + +// Clause 8.2.3.10 Items Graphical Notation + +definition-node =| item-def + +interconnection-element = | item| item-ref + +item-def = + + +item-def-name-compartment = + '«' DefinitionPrefix 'item' 'def' '»' + definition-name-with-alias + +usage-node =| item + +item = + + +item-name-compartment = + '«' OccurrenceUsagePrefix 'item' '»' + usage-name-with-alias + +item-ref = + + +compartment =| items-compartment + +items-compartment = + + items-compartment-contents + +items-compartment-contents = (items-compartment-element)* '…' + +items-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +// Clause 8.2.3.11 Parts Graphical Notation + +definition-node =| part-def + +interconnection-element = | part | part-ref + +part-def = + + +part-def-name-compartment = + '«' DefinitionPrefix 'part' 'def' '»' + definition-name-with-alias + +usage-node =| part + +part = + + +part-name-compartment = + '«' OccurrenceUsagePrefix 'part' '»' + usage-name-with-alias + +part-ref = + + +compartment =| + parts-compartment + | directed-features-compartment + | interconnection-compartment + +parts-compartment = + + parts-compartment-contents + +parts-compartment-contents = (parts-compartment-element)* '…'? + +parts-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +directed-features-compartment = + + directed-features-compartment-contents + +directed-features-compartment-contents = (directed-features-compartment-element)* '…'? + +directed-features-compartment-element = + el-prefix FeatureDirection Definition-Body-Item* + +interconnection-compartment = + + interconnection-view + +interconnection-view =| + (interconnection-element)* + (dependencies-and-annotations-element)* + (ellipsis-at-lower-left-corner)? + +general-view =| interconnection-view + +// Clause 8.2.3.12 Ports Graphical Notation + +definition-node =| port-def + +port-def = + + +port-def-name-compartment = + '«' DefinitionPrefix 'port' 'def' '»' + definition-name-with-alias + +usage-node =| port-usage + +port-usage = + + +port-name-compartment = + '«' OccurrenceUsagePrefix 'port' '»' + usage-name-with-alias + +compartment =| ports-compartment + +ports-compartment = + + ports-compartment-contents + +ports-compartment-contents = (ports-compartment-element)* '…'? + +ports-compartment-element = el-prefix? OccurrenceUsagePrefix usage-cp + +interconnection-element =| port-def | port + +pdh = + + | + + | + + +pdv = + + | + + | + + +port-l = + + | + + | + + | + proxy-v + +port-r = + + | + + + | + + | + proxy-v + +port-t = + + | + + | + + | + proxy-h + +port-b = + + | + + | + + | + proxy-h + +port-label = QualifiedName (':' QualifiedName)? + +proxy-v = + + | + + +proxy-h = + + | + + +// Note. Dotted line port productions (references) are only possible for nested ports + +// Note. The proxy option of a port production is valid only on a part usage contained within an interconnection view. + +// Clause 8.2.3.13 Connections Graphical Notation + +definition-node =| connection-def + +connection-def = + + +connection-def-name-compartment = + '«' DefinitionPrefix 'connection' 'def' '»' + definition-name-with-alias + +usage-node =| connection + +connection = + + +connection-name-compartment = + '«' OccurrenceUsagePrefix 'connection' '»' + usage-name-with-alias + +compartment =| connections-compartment + +connections-compartment = + + connections-compartment-contents + +connections-compartment-contents = (connections-compartment-element)* '…'? + +connections-compartment-element = + el-prefix? OccurrenceUsagePrefix UsageDeclaration + +interconnection-element =| + connection-def + | connection + | connection-relationship + | attribute + +connection-relationship = + binding-connection + | connection-graphical + | n-ary-connection + | n-ary-connection-def + | connection-definition-elaboration + | connection-usage-elaboration + | connection-def-graphical + +connection-graphical = + + | + + +c-adornment = + (a-property | a-direction | a-subsetting |a-redefinition)* + +a-property = + 'ordered' | 'nonunique' | 'abstract' | 'derived' | 'readonly' + +a-direction = + 'in' | 'out' | 'inout' + +a-subsetting = + 'subsets' OwnedSubsetting (',' OwnedSubsetting)* + +a-redefinition = + 'redefines' OwnedRedefinition (',' OwnedRedefinition)* + +connection-end = usage-node | usage-edge + +usage-edge =| connection-graphical | binding-connection + +connection-label = UsageDeclaration + +connection-def-graphical = + + | + general-relationship |= connection-def-graphical + +cdef-label = Identification + +n-ary-connection-def = + n-ary-def-connection-dot n-ary-def-segment+ + +n-ary-def-connection-dot = + + +n-ary-def-segment = + + +definition-node |= n-ary-def-connection-dot + +general-relationship |= n-ary-def-segment + +n-ary-connection = + n-ary-connection-dot n-ary-segment+ + +n-ary-connection-dot = + + +usage-node |= n-ary-connection-dot + +cdot-label = UsageDeclaration + +n-ary-segment = + + +binding-connection = + + +rolename = Identification? + +multiplicity = MultiplicityRange? + +connection-definition-elaboration = + + +connection-usage-elaboration = + + +// Note. The usage-nodes at the ends of a binding-connection must be of compatible types. + +// Clause 8.2.3.14 Interfaces Graphical Notation + +definition-node =| interface-def + +interconnection-element =| interface + +interface-def = + + +interface-def-name-compartment = + '«' DefinitionPrefix 'interface' 'def' '»' + definition-name-with-alias< + +usage-node =| interface + +interface = + + +interface-name-compartment = + '«' OccurrenceUsagePrefix 'interface' '»' + usage-name-with-alias + +compartment =| + interfaces-compartment + | ends-compartment + +interfaces-compartment = + + interfaces-compartment-contents + +interfaces-compartment-contents = (interfaces-compartment-element)* '…'? + +interfaces-compartment-element = + el-prefix? OccurenceUsagePrefix InterfaceUsageDeclaration + +ends-compartment = + + ends-compartment-contents + +ends-compartment-contents = (ends-compartment-element)* '…'? + +ends-compartment-element = QualifedName (':' QualifiedName)? + +connection-relationship = + | interface-connection + +interface-connection = + + +interface-label = UsageDeclaration? + +// Clause 8.2.3.15 Allocations Graphical Notation + +definition-node =| allocation-def + +allocation-def = + + +allocation-def-name-compartment = + '«' DefinitionPrefix 'allocation' 'def' '»' + definition-name-with-alias + +usage-node =| allocation + +allocation = + + +allocation-name-compartment = + '«' OccurrenceUsagePrefix 'allocation' '»' + usage-name-with-alias + +compartment =| allocations-compartment + +allocations-compartment = + + allocations-compartment-contents + +allocations-compartment-contents = (allocations-compartment-element)* '…'? + +allocations-compartment-element = + el-prefix? OccurrenceUsagePrefix AllocationUsageDeclaration UsageBody* + +general-relationship =| allocate-relationship + +allocate-relationship = + + +allocation-node = + general-node + | element-in-textual-compartment + +usage-edge = |allocate-relationship + +// Clause 8.2.3.16 Flows Graphical Notation + +definition-node =| flow-def + +flow-def = + + +flow-def-name-compartment = + '«' DefinitionPrefix 'succession'? 'flow' 'def' '»' + definition-name-with-alias + +usage-node =| flow-node + +flow-node = + + +flow-name-compartment = + '«' OccurrenceUsagePrefix ( 'message' | 'succession'? 'flow' ) '»' + usage-name-with-alias + +compartment =| flows-compartment + +flows-compartment = + ________________________________________ + 'flows' + flows-compartment-contents + +flows-compartment-contents = (flows-compartment-element)* '...'? + +flows-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( 'message' MessageDeclaration + | 'succession'? FlowDeclaration + ) + +interconnection-element =| + flow-def + | flow + +connection-relationship =| + message-connection + | flow + | succession-flow + | flow-on-connection + +usage-edge =| message | flow | succession-flow + +msg-end-node = + occurrence| sq-l-node| item | part | port | action | state + | use-case | verification-case | analysis-case | proxy + +message = + + +// Note: proxy nodes and ends of messages must refer to occurrences + +message-label = + UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember + +flow = + + +flow-label = + UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember + +flow-end-node = + parameter | proxy + +// Note: proxy nodes at ends of flows must refer to directed features + +succession-flow = + + +succession-flow-label = flow-label + +flow-on-connection = + + +flow-node = + flow-node-r + | flow-node-l + | sflow-node-r + | sflow-node-l + | message-node-r + | message-node-l + +flow-node-r = + + +flow-node-l = + + +sflow-node-r = + + +sflow-node-l = + + +message-node-r = + + +message-node-l = + + +flow-label = + Identification | FlowPayloadFeatureMember + +// Clause 8.2.3.17 Actions Graphical Notation + +definition-node =| action-def + +action-def = + + +action-def-name-compartment = + '«' DefinitionPrefix 'action' 'def' '»' + definition-name-with-alias< + +usage-node =| + action + | perform-action-usage + +action = + + +action-name-compartment = + '«' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias< + +perform-action-usage = + + +action-ref = + + +perform-action-name-compartment = + '«' OccurrenceUsagePrefix 'perform' 'action' '»' + usage-name-with-alias + +compartment =| + actions-compartment + | perform-actions-compartment + | parameters-compartment + | action-flow-compartment + +actions-compartment = + + actions-compartment-contents + +actions-compartment-contents = (actions-compartment-element)* '…'? + +actions-compartment-element = + el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration + +perform-actions-compartment = + + perform-actions-compartment-contents + +perform-actions-compartment-contents = (perform-actions-compartment-element)* '…'? + +perform-actions-compartment-element = + el-prefix? OccurrenceUsagePrefix PerformActionUsageDeclaration + +parameters-compartment = + + parameters-compartment-contents + +parameters-compartment-contents = (parameters-compartment-element)* '…'? + +parameters-compartment-element = + el-prefix? FeatureDirection UsageDeclaration ValueOrFlowPart? DefinitionBodyItem* + +performed-by-compartment = + + performed-by-compartment-contents + +performed-by-compartment-contents = QualifiedName* '…'? + +action-flow-compartment = + + action-flow-view + +action-flow-view = + (dependencies-and-annotations-element)* + (action-flow-element)* + (perform-action-swimlanes)? + +action-flow-element =| + action-ref + | action + | action-flow-node + | action-flow-relationship + +action-flow-node = + start-node + | done-node + | terminate-node + | fork-node + | join-node + | decision-node + | merge-node + | send-action-node + | accept-action-node + | while-loop-action-node + | for-loop-action-node + | if-else-action-node + | assign-action-node + +action-flow-relationship = + flow + | aflow-succession + | binding-connection + | else-branch + +param-l = + + | + + | + proxy-v + +param-r = + + | + + | + proxy-v + +param-t = + + | + + | + proxy-h + +param-b = + + | + + | + proxy-h + +param-label = QualifiedName (‘:’ QualifiedName)* + +start-node = + + +done-node = + + +terminate-node = + + +fork-node = + + +join-node = + + +decision-node = + + +merge-node = + + +send-action-node = + + +send-action-name-compartment = + '«' OccurrenceUsagePrefix 'send' 'action' '»' + usage-name-with-alias + +send-action-expression = NodeParameterMember 'to' NodeParameterMember + +accept-action-node = + + +accept-action-name-compartment = + '«' OccurrenceUsagePrefix 'accept' 'action' '»' + usage-name-with-alias + +accept-action-expression = AcceptParameterPart + +while-loop-action-node = + + +while-condition = + + condition-expression + +until-condition = + + condition-expression + +while-loop-action-name-compartment = + '«' OccurrenceUsagePrefix 'loop' '»' + usage-name-with-alias + +for-loop-action-node = + + +iteration = + + iteration-expression + +loop-body = + + action-body + +for-loop-action-name-compartment = + '«' OccurrenceUsagePrefix 'loop' '»' + usage-name-with-alias + +if-else-action-node = + + +if-condition = + + condition-expression + +then-body = + + action-body + +else-body = + + action-body + +ifelse-action-name-compartment = + '«' OccurrenceUsagePrefix 'if' '»' + usage-name-with-alias + +action-body = + action-body-textual | action-flow-view + +condition-expression = + ExpressionParameterMember + +iteration-expression = + ForVariableDeclarationMember 'in' NodeParameterMember + +action-body-textual = + ActionBodyParameterMember + +assign-action-node = + + +assign-action-name-compartment = + '«' OccurrenceUsagePrefix 'assign' '»' + usage-name-with-alias + +perform-actions-swimlanes = (swimlane)* + +swimlane = + + +parameter = + param-l | param-r | param-t | param-b + +aflow-succession = + + +else-branch = + + +perform-edge = + + +performer-node = part | action | part-def | action-def | distinguished-parameter + +usage-edge = |succession perform-edge + +guard-expression = '[' OwnedExpression ']' + +// Note. All swimlanes are attached to each other on vertical edges and aligned along the top and bottom horizontal edges. + +// Note. The proxy option of a parameter production is valid only on an action usage contained within an action flow view. + +// Clause 8.2.3.18 States Graphical Notation + +definition-node =| state-def + +state-def = + + +state-def-name-compartment = + '«' DefinitionPrefix 'state' 'def' '»' + definition-name-with-alias + ('«' 'parallel' '»')? + +usage-node =| + state-node + | exhibit-state-usage + +state = + + +state-ref = + + +state-name-compartment = + '«' OccurrenceUsagePrefix 'state' '»' + usage-name-with-alias + ('«' 'parallel' '»')? + +exhibit-state-usage = + + +state-subaction-body = state-subaction-body-textual | action-flow-view + +state-subaction-body-textual = state-subaction-declaration? ( '{' ActionBodyItem* '}' )? + +state-subaction-declaration = + PerformActionUsageDeclaration + | AcceptNodeDeclaration + | SendNodeDeclaration + | AssignmentNodeDeclaration + +state-do-action = + + state-subaction-body + +state-entry-action = + + state-subaction-body + +state-exit-action = + + state-subaction-body + +entry-action = + | + + +entry-action-name-comp = + +'«' 'entry' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +exit-action = + + +exit-action-name-comp = + +'«' 'exit' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +do-action = + + +do-action-name-comp = + +'«' 'do' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +exhibit-state-name-compartment = + '«exhibit-state»' + state-name-compartment + +compartment =| + states-compartment + | states-actions-compartment + | exhibit-states-compartment + | successions-compartment + | state-transition-compartment + +states-compartment = + + states-compartment-contents + +states-compartment-contents = (states-compartment-element)* '…'? + +states-compartment-element = + el-prefix? OccurrencePrefix ActionUsageDeclaration + +state-actions-compartment = + + state-actions-compartment-contents + +state-actions-compartment-contents = (state-actions-compartment-element)* '…'? + +state-actions-compartment-element = + el-prefix? EntryActionMember | DoActionMember | ExitActionMember + +exhibit-states-compartment = + + exhibit-states-compartment-contents + +exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'? + +exhibit-states-compartment-element-compartment = UsageDeclaration + +succession-compartment = + + succession-compartment-contents + +succession-compartment-contents = QualifiedName* '…'? + +state-transition-compartment = + + state-transition-view + +state-transition-view = + (state-transition-element)* + (dependencies-and-annotations-element)* + +state-transition-element = + state-transition-node + | transition + | st-succession + +state-transition-node = + state-node + | state-ref-node + | start-node + | entry-action + | do-action + | exit-action + | done-node + | fork-node + | join-node + | decision-node + | merge-node + | terminate-node + | action + | perform-action-usage + | action-ref + +transition = + + | + + +state-source = + state-node | state-ref-node + +transition-label = trigger-expression '/' ActionUsage + +trigger-expression = AcceptParameterPart (guard-expression)? + +st-succession = + + | + + +exhibit-edge = + + +exhibitor = part | part-def + +general-relationship |= exhibit-edge + +usage-edge = |transition | st-succession | exhibit-edge + +// Clause 8.2.3.19 Calculations Graphical Notation + +definition-node =| calc-def + +calc-def = + + +calc-def-name-compartment = + '«' DefinitionPrefix 'calc' 'def' '»' + definition-name-with-alias + +usage-node =| calc + +calc = + + +calc-name-compartment = + occurrence-name-prefix + '«' 'ref'? keyword* 'calc' '»' + definition-name-with-alias + +calc-name-compartment = + '«' OccurrenceUsagePrefix 'calc' '»' + usage-name-with-alias + +action-flow-element =| + calc-def + | calc + +compartment =| + calcs-compartment + | result-compartment + +calcs-compartment = + + calcs-compartment-contents + +calcs-compartment-contents = calcs-compartment-element* '…'? + +calcs-compartment-element = el-prefix? OccurrenceUsagePrefix ActionUsageDeclaration + +results-compartment = + + result-compartment-contents + +result-compartment-contents = OwnedExpression + +// Clause 8.2.3.20 Constraints Graphical Notation + +definition-node =| constraint-def + +constraint-def = + + +constraint-def-name-compartment = + '«' DefinitionPrefix 'constraint' 'def' '»' + definition-name-with-alias + +usage-node = + constraint + | assert-constraint-usage + +constraint = + + +constraint-ref = + + +constraint-name-compartment = + '«' OccurrenceUsagePrefix 'constraint' '»' + usage-name-with-alias + +assert-constraint-node = + + +assert-constraint-name-compartment = + '«assert constraint»' + constraint-name-compartment + +assume-constraint-node = + + +assume-constraint-name-compartment = + '«' OccurrenceUsagePrefix 'assume' 'constraint' '»' + usage-name-with-alias + +usage-node =| assume-constraint-node assert-constraint-node< + +assume-edge = + + +assumer = requirement | requirement-def + +general-relationship |= assume-edge + +assert-edge = + + +assertor = usage-node | definition-node + +general-relationship |= assert-edge + +compartment =| + constraints-compartment + | assert-constraints-compartment + +constraints-compartment = + + constraints-compartment-contents + +constraints-compartment-contents = (constraints-usage-compartment-element)* '…'? + +constraints-usage-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CalculationBody* + +assert-constraints-compartment = + + assert-constraints-compartment-contents + +assert-constraints-compartment-contents = (assert-constraints-compartment-element)* '…'? + +assert-constraints-compartment-element = + el-prefix? OccurrenceUsagePrefix ( 'not' )? + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + CalculationUsageParameterPart CalculationBody + +interconnection-element =| + constraint-ref + | constraint + +// Clause 8.2.3.21 Requirements Graphical Notation + +definition-node =| + requirement-def + | concern-def + +requirement-def = + + +requirement-def-name-compartment = + '«' DefinitionPrefix 'requirement' 'def' '»' + definition-name-with-alias + +usage-node = + requirement + | satisfy-requirement-usage + | concern + +requirement = + + +requirement-ref = + + +requirement-name-compartment = + '«' OccurrenceUsagePrefix 'requirement' '»' + usage-name-with-alias + +satisfy-requirement-usage = + + +satisfy-requirement-name-compartment = + '«satisfy requirement»' + requirement-name-compartment + +concern-def = + + +concern-def-name-compartment = + '«' DefinitionPrefix 'concern' 'def' '»' + definition-name-with-alias + +concern = + + +concern-name-compartment = + '«' OccurrenceUsagePrefix 'concern' '»' + usage-name-with-alias + +compartment =| + constraints-compartment + | assert-constraints-compartment + +compartment =| + requirements-compartment + | require-constraints-compartment + | assume-constraints-compartment + | satisfy-requirements-compartment + | satisfies-compartment + | actors-compartment + | subject-compartment + | stakeholders-compartment + | frames-compartment + +requirements-compartment = + + requirements-compartment-contents + +requirements-compartment-contents = (requirements-compartment-element)* '…'? + +requirements-compartment-element = + OccurrenceUsagePrefix ConstraintUsageDeclaration + +require-constraints-compartment = + + require-constraints-compartment-contents + +require-constraints-compartment-contents = require-constraint-element* '…'? + +require-constraint-element = + el-prefix? requireMemberPrefix? RequirementConstraintUsage + +assume-constraints-compartment = + + assume-constraints-compartment-contents + +assume-constraints-compartment-contents = require-constraint-element* '…'? + +satisfy-requirements-compartment = + + satisfy-requirements-compartment-contents + +satisfy-requirements-compartment-contents = text-block + +satisfies-compartment = + + satisfies-compartment-contents + +satisfies-compartment-contents = UsageDeclaration* '…'? + +actors-compartment = + + actors-compartment-contents + +actors-compartment-contents = (actors-compartment-element)* '…'? + +actors-compartment-element = el-prefix? MemberPrefix usage-cp + +subject-compartment = + + subject-compartment-contents + +subject-compartment-contents = (subject-compartment-element)* '…'? + +subject-compartment-element = el-prefix? MemberPrefix usage-cp + +stakeholders-compartment = + + stakeholders-compartment-contents + +stakeholders-compartment-contents = (stakeholders-compartment-element)* '…'? + +stakeholders-compartment-element = el-prefix? MemberPrefix usage-cp + +frames-compartment = + + frames-compartment-contents + +frames-compartment-contents = (frames-compartment-element)* '…'? + +frames-compartment-element = el-prefix* MemberPrefix? FramedConcernUsage + +concerns-compartment = + + concerns-compartment-contents + +interconnection-element =| + requirement-ref + | requirement + | concern + | distinguished-parameter + | distinguished-parameter-link + | concern-stakeholder-link + +general-relationship =| frame-relationship + +subject-actors-stakeholders-node =| requirement + +distinguished-parameter = + subject + | actor + | stakeholder + +subject = + + +actor = + + | + + +stakeholder = + + +subject-name = UsageDeclaration + +actor-name = UsageDeclaration + +stakeholder-name = UsageDeclaration + +distinguished-parameter-link = + + +frame-relationship = + + +concern-stakeholder-link = + + +satisfy-edge = + + +satisfier = usage-node | definition-node + +general-relationship |= satisfy-edge + +require-edge = + + +requirer = usage-node | definition-node + +general-relationship |= require-edge + +require-constraint-node = + + +require-constraint-name-compartment = + '«' OccurrenceUsagePrefix 'require' 'constraint' '»' + usage-name-with-alias + +usage-node |= require-constraint-node + +frame-concern-node = + + +frame-concern-name-compartment = + '«' OccurrenceUsagePrefix 'frame' 'concern' '»' + usage-name-with-alias + +usage-node |= frame-concern-node + +frame-edge = + + +framer = requirement | requirement-def | viewpoint | viewpoint-def + +general-relationship |= frame-edge + +// Clause 8.2.3.22 Cases Graphical Notation + +compartment =| objective-compartment + +objective-compartment = + + objective-compartment-contents + +objective-compartment-contents = (objective-compartment-element)* '…'? + +objective-compartment-element = + comp-prefix? MemberPrefix ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.3.23 Analysis Cases Graphical Notation + +definition-node =| analysis-def + +analysis-def = + + +analysis-def-name-compartment = + '«' DefinitionPrefix 'analysis' 'def' '»' + definition-name-with-alias + +usage-node =| analysis + +analysis = + + +analysis-name-compartment = + '«' OccurrenceUsagePrefix 'analysis' '»' + usage-name-with-alias + +compartment =| analyses-compartment + +analyses-compartment = + + analyses-compartment-contents + +analyses-compartment-contents = analyses-compartment-element* '…'? + +analyses-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody + +action-flow-element =| + analysis-def + | analysis + +subject-actors-stakeholders-node =| analysis | analysis-def + +// Clause 8.2.3.24 Verification Cases Graphical Notation + +definition-node =| verification-def + +verification-def = + + +verification-def-name-compartment = + '«' DefinitionPrefix 'verification' 'def' '»' + definition-name-with-alias + +usage-node =| verification + +verification = + + +verification-name-compartment = + '«' OccurrenceUsagePrefix 'verification' '»' + usage-name-with-alias + +verify-requirement-node = + + +verify-requirement-name-compartment = + '«' OccurrenceUsagePrefix 'verify' 'requirement' '»' + usage-name-with-alias + +usage-node |= verify-requirement-node + +compartment =| + verifications-compartment + | verifies-compartment + | verification-methods-compartment + +verifications-compartment = + + verifications-compartment-contents + +verifications-compartment-contents = (verifications-compartment-element)* '…'? + +verifications-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CaseBody '…' + +verifies-compartment = + + verifies-compartment-contents + +verifies-compartment-contents = (verifies-compartment-element)* '…'? + +verifies-compartment-element = el-prefix? MemberPrefix RequirementVerificationUsage '…' + +verification-methods-compartment = + + verification-methods-compartment-contents + +verification-methods-compartment-contents = (verification-methods-compartment-element)* '…'? + +verification-methods-compartment-element = MetadataBody + +action-flow-element =| + verification-def + | verification + +general-relationship =| verify-relationship + +verify-relationship = + + +subject-actors-stakeholders-node =| verification | verification-def + +// Clause 8.2.3.25 Use Cases Graphical Notation + +definition-node =| use-case-def + +use-case-def = + + +use-case-def-name-compartment = + '«' DefinitionPrefix 'use' 'case' 'def' '»' + definition-name-with-alias + +usage-node =| + use-case + | include-use-case-usage + +use-case = + + +use-case-name-compartment = + '«' OccurrenceUsagePrefix 'use' 'case' '»' + usage-name-with-alias + +include-use-case-usage = + + +include-use-case-name-compartment = + '«include use case»' + requirement-name-compartment + +compartment =| + use-cases-compartment + | include-actions-compartment + | includes-compartment + +use-cases-compartment = + + use-cases-compartment-contents + +use-cases-compartment-contents = use-cases-compartment-element* '…'? + +use-cases-compartment-element = el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration + +include-use-cases-compartment = + + include-use-cases-compartment-contents + +include-use-cases-compartment-contents = (include-use-cases-compartment-element* '…'? + +include-use-cases-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + ( ValuePart | ActionUsageParameterList )? CaseBody + +includes-compartment = + + includes-compartment-contents + +includes-compartment-contents = (includes-compartment-element)* '…'? + +includes-compartment-element = + el-prefix? OccurrenceUsagePrefix + ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration ) + +action-flow-element =| + use-case-def + | use-case + +general-relationship =| include-use-case-relationship + +include-use-case-relationship = + + +subject-actors-stakeholders-node =| use-case | use-case-def + +// Clause 8.2.3.26 Views and Viewpoints Graphical Notation + +root-view = + framed-view< + +definition-node =| + viewpoint-def + | view-def + +viewpoint-def = + + +viewpoint-def-name-compartment = + '«' DefinitionPrefix 'viewpoint' 'def' '»' + definition-name-with-alias + +view-def = + + +view-def-name-compartment = + '«' DefinitionPrefix 'view' 'def' '»' + definition-name-with-alias + +usage-node |= + viewpoint + | view + | framed-view + +viewpoint = + + +viewpoint-name-compartment = + '«' OccurrenceUsagePrefix 'viewpoint' '»' + usage-name-with-alias + +view = + + +view-name-compartment = + '«' OccurrenceUsagePrefix 'view' '»' + usage-name-with-alias + +compartment =| + | views-compartment + | viewpoints-compartment + | exposes-compartment + | filters-compartment + | rendering-compartment + +views-compartment = + + views-compartment-contents + +views-compartment-contents = (views-compartment-element)* '…' + +views-compartment-element = + el-prefix? OccurrenceUsagePrefix UsageDeclaration? ValueOrFlowPart? ViewBody + +viewpoints-compartment = + + viewpoints-compartment-contents + +viewpoints-compartment-contents = (viewpoints-compartment-element)* '…'? + +viewpoints-compartment-element = + el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration RequirementBody + +exposes-compartment = + + exposes-compartment-contents + +exposes-compartment-contents = exposes-compartment-element* '…'? + +exposes-compartment-element = MembershipExpose | NamespaceExpose + +filters-compartment = + + filters-compartment-contents + +filters-compartment-contents = (filters-compartment-element)* '…'? + +filters-compartment-element = el-prefix? MemberPrefix OwnedExpression + +rendering-compartment = + + rendering-compartment-contents + +rendering-compartment-contents = usage-cp* '…'? + +interconnection-element =| + viewpoint-def + | viewpoint + | view-def + | view + +framed-view = + + +frameless-view = + general-view + | interconnection-view + | action-flow-view + | state-transition-view + | sequence-view + +view-frame-name-compartment = '«view»' QualifiedName (':' QualifiedName)? + +view-frame-info-contents = Expose? ElementFilterMember? AnnotatingElement* + +view-frame-info-compartment-tr = + + +view-frame-info-compartment-bl = + + +view-frame-info-compartment-br = + + +general-relationship =| expose-relationship + +expose-relationship = + expose_r | toplevel-expose-r | recursive-expose-r + +expose_r = + + +toplevel-expose-r = + + +recursive-expose-r = + + +// Note. The view frame info compartments are optional elements. The AnnotatingElement* enables adding any relevant supporting information related to a view, possibly using a configurable rendering. + +// Note. A model library in Section 9.2.18 defines standard graphical view definitions for SysML. These may be supplemented by further, customized view definitions specific to a model. + +// Clause 8.2.3.27 Metadata Graphical Notation + +annotation-node =| metadata-feature-annotation-node + +metadata-feature-annotation-node = + + +metadata-feature-decl = Identifier + +metadata-feature-name-value-list = + ( metadata-feature-name '=' expression-text )* + +metadata-feature-name = Identifier + +expression-text = text-block + +metadata-def = + + +metadata-def-name-compartment = + basic-name-prefix + '«' keyword* 'metadata' 'def' '»' + definition-name-with-alias + +// End of BNF + + + +// Consolidated partial productions: + +// action-flow-element = +// action | action-flow-node | action-flow-relationship | action-ref | analysis | analysis-def | calc | calc-def +// | use-case | use-case-def | verification | verification-def + +// annotation-node = +// metadata-feature-annotation-node + +// compartment = +// action-flow-compartment | actions-compartment | actors-compartment | allocations-compartment | analyses-compartment +// | assert-constraints-compartment | assert-constraints-compartment | assume-constraints-compartment +// | attributes-compartment | calcs-compartment | connections-compartment | constraints-compartment +// | constraints-compartment | directed-features-compartment | ends-compartment | enums-compartment +// | exhibit-states-compartment | exposes-compartment | features-compartment | filters-compartment | flows-compartment +// | frames-compartment | general-compartment | include-actions-compartment | includes-compartment +// | individuals-compartment | interconnection-compartment | interfaces-compartment | items-compartment +// | objective-compartment | occurrences-compartment | package-compartment | parameters-compartment | parts-compartment +// | perform-actions-compartment | ports-compartment | rendering-compartment | require-constraints-compartment +// | requirements-compartment | result-compartment | satisfies-compartment | satisfy-requirements-compartment +// | sequence-compartment | snapshots-compartment | stakeholders-compartment | state-transition-compartment +// | states-actions-compartment | states-compartment | subject-compartment | successions-compartment +// | timeslices-compartment | use-cases-compartment | variant-elementusages-compartment | variants-compartment +// | verification-methods-compartment | verifications-compartment | verifies-compartment | viewpoints-compartment +// | views-compartment + +// connection-relationship = +// flow | flow-on-connection | message-connection | succession-flow + +// definition-node = +// action-def | allocation-def | analysis-def | attribute-def | calc-def | concern-def | connection-def +// | constraint-def | enumeration-def | flow-def | interface-def | item-def | occurrence-def | part-def | port-def +// | requirement-def | state-def | use-case-def | verification-def | view-def | viewpoint-def + +// dependencies-and-annotations-element = +// annotation-link | annotation-node | dependencies-element + +// dependencies-element = +// binary-dependency | n-ary-dependency + +// general-node = +// namespace-node | type-node + +// general-relationship = +// allocate-relationship | expose-relationship | frame-relationship | import | include-use-case-relationship +// | owned-membership | portion-relationship | recursive-import | top-level-import | type-relationship +// | unowned-membership | verify-relationship + +// general-view = +// interconnection-view + +// interconnection-element = +// attribute | concern | concern-stakeholder-link | connection | connection-def | connection-relationship | constraint +// | constraint-ref | distinguished-parameter | distinguished-parameter-link | flow | flow-def | interface | port +// | port-def | requirement | requirement-ref | view | view-def | viewpoint | viewpoint-def + +// interconnection-view = +// (dependencies-and-annotations-element)* | (ellipsis-at-lower-left-corner)? | (interconnection-element)* + +// namespace-node = +// package-node | type-node + +// subject-actors-stakeholders-node = +// analysis | analysis-def | requirement | use-case | use-case-def | verification | verification-def + +// usage-edge = +// binding-connection | connection-graphical | flow | message | succession-flow + +// usage-node = +// action | allocation | analysis | assert-constraint-usage | assume-constraint-node assert-constraint-node< +// | attribute | calc | concern | connection | constraint | enumeration | exhibit-state-usage | flow-node +// | include-use-case-usage | interface | item | occurrence | occurrence-refxfx | part | perform-action-usage +// | port-usage | requirement | satisfy-requirement-usage | state-node | timeslice-or-snapshot-node | use-case +// | verification + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected-elements.json b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected-elements.json new file mode 100644 index 000000000..39975b1e8 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected-elements.json @@ -0,0 +1,4900 @@ +[ + { + "@type": "Info", + "clause_id": "", + "lines": [], + "source": "tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected-marked_up.kebnf", + "timestamp": "2025-12-04T19:29:18Z" + }, + { + "@type": "Comment", + "clause_id": "", + "lines": [ + "// Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html", + "// Generated by bnf_grammar_processor at: 2025-11-28T15:06:37Z" + ] + }, + { + "@type": "Comment", + "clause_id": "", + "lines": [ + "// Manual corrections by HP de Koning" + ] + }, + { + "@type": "Heading", + "clause_id": "", + "lines": [ + "Part 2 - Systems Modeling Language (SysML)" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2", + "lines": [ + "Clause 8.2.2 Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.1", + "lines": [ + "Clause 8.2.2.1 Textual Notation Overview" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.1.1", + "lines": [ + "Clause 8.2.2.1.1 EBNF Conventions" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.1.2", + "lines": [ + "Clause 8.2.2.1.2 Lexical Structure" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "RESERVED_KEYWORD =", + " 'about' | 'abstract' | 'accept' | 'action' | 'actor' | 'after' | 'alias' | 'all' | 'allocate' | 'allocation'", + " | 'analysis' | 'and' | 'as' | 'assert' | 'assign' | 'assume' | 'at' | 'attribute' | 'bind' | 'binding' | 'by' | 'calc'", + " | 'case' | 'comment' | 'concern' | 'connect' | 'connection' | 'constant' | 'constraint' | 'crosses' | 'decide'", + " | 'def' | 'default' | 'defined' | 'dependency' | 'derived' | 'do' | 'doc' | 'else' | 'end' | 'entry' | 'enum'", + " | 'event' | 'exhibit' | 'exit' | 'expose' | 'false' | 'filter' | 'first' | 'flow' | 'for' | 'fork' | 'frame' | 'from'", + " | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'include' | 'individual' | 'inout' | 'interface' | 'istype'", + " | 'item' | 'join' | 'language' | 'library' | 'locale' | 'loop' | 'merge' | 'message' | 'meta' | 'metadata'", + " | 'nonunique' | 'not' | 'null' | 'objective' | 'occurrence' | 'of' | 'or' | 'ordered' | 'out' | 'package' | 'parallel'", + " | 'part' | 'perform' | 'port' | 'private' | 'protected' | 'public' | 'redefines' | 'ref' | 'references' | 'render'", + " | 'rendering' | 'rep' | 'require' | 'requirement' | 'return' | 'satisfy' | 'send' | 'snapshot' | 'specializes'", + " | 'stakeholder' | 'standard' | 'state' | 'subject' | 'subsets' | 'succession' | 'terminate' | 'then' | 'timeslice'", + " | 'to' | 'transition' | 'true' | 'until' | 'use' | 'variant' | 'variation' | 'verification' | 'verify' | 'via'", + " | 'view' | 'viewpoint' | 'when' | 'while' | 'xor'" + ], + "name": "RESERVED_KEYWORD" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "DEFINED_BY = ':' | 'defined' 'by'" + ], + "name": "DEFINED_BY" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "SPECIALIZES = ':>' | 'specializes'" + ], + "name": "SPECIALIZES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "SUBSETS = ':>' | 'subsets'" + ], + "name": "SUBSETS" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "REFERENCES = '::>' | 'references'" + ], + "name": "REFERENCES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "CROSSES = '=>' | 'crosses'" + ], + "name": "CROSSES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "REDEFINES = ':>>' | 'redefines'" + ], + "name": "REDEFINES" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.2", + "lines": [ + "Clause 8.2.2.2 Elements and Relationships Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "Identification : Element =", + " ( '<' declaredShortName = NAME '>' )?", + " ( declaredName = NAME )?" + ], + "name": "Identification" + }, + { + "@type": "Production", + "abstract_syntax_type": "Relationship", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "RelationshipBody : Relationship =", + " ';' | '{' ( ownedRelationship += OwnedAnnotation )* '}'" + ], + "name": "RelationshipBody" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.3", + "lines": [ + "Clause 8.2.2.3 Dependencies Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Dependency", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "Dependency =", + " ( ownedRelationship += PrefixMetadataAnnotation )*", + " 'dependency' DependencyDeclaration", + " RelationshipBody" + ], + "name": "Dependency" + }, + { + "@type": "Production", + "abstract_syntax_type": "DependencyDeclaration", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "DependencyDeclaration =", + " ( Identification 'from' )?", + " client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to'", + " supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )*" + ], + "name": "DependencyDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.4", + "lines": [ + "Clause 8.2.2.4 Annotations Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.4.1", + "lines": [ + "Clause 8.2.2.4.1 Annotations" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.2.4.1", + "is_partial": false, + "lines": [ + "Annotation =", + " annotatedElement = [QualifiedName]" + ], + "name": "Annotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.2.4.1", + "is_partial": false, + "lines": [ + "OwnedAnnotation : Annotation =", + " ownedRelatedElement += AnnotatingElement" + ], + "name": "OwnedAnnotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.4.1", + "is_partial": false, + "lines": [ + "AnnotatingMember : OwningMembership =", + " ownedRelatedElement += AnnotatingElement" + ], + "name": "AnnotatingMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "AnnotatingElement", + "clause_id": "8.2.2.4.1", + "is_partial": false, + "lines": [ + "AnnotatingElement =", + " Comment", + " | Documentation", + " | TextualRepresentation", + " | MetadataFeature" + ], + "name": "AnnotatingElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.4.2", + "lines": [ + "Clause 8.2.2.4.2 Comments and Documentation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Comment", + "clause_id": "8.2.2.4.2", + "is_partial": false, + "lines": [ + "Comment =", + " ( 'comment' Identification", + " ( 'about' ownedRelationship += Annotation", + " ( ',' ownedRelationship += Annotation )*", + " )?", + " )?", + " ( 'locale' locale = STRING_VALUE )?", + " body = REGULAR_COMMENT" + ], + "name": "Comment" + }, + { + "@type": "Production", + "abstract_syntax_type": "Documentation", + "clause_id": "8.2.2.4.2", + "is_partial": false, + "lines": [ + "Documentation =", + " 'doc' Identification", + " ( 'locale' locale = STRING_VALUE )?", + " body = REGULAR_COMMENT" + ], + "name": "Documentation" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.4.3", + "lines": [ + "Clause 8.2.2.4.3 Textual Representation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "TextualRepresentation", + "clause_id": "8.2.2.4.3", + "is_partial": false, + "lines": [ + "TextualRepresentation =", + " ( 'rep' Identification )?", + " 'language' language = STRING_VALUE body = REGULAR_COMMENT" + ], + "name": "TextualRepresentation" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.5", + "lines": [ + "Clause 8.2.2.5 Namespaces and Packages Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.5.1", + "lines": [ + "Clause 8.2.2.5.1 Packages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "RootNamespace : Namespace =", + " PackageBodyElement*" + ], + "name": "RootNamespace" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "Package =", + " ( ownedRelationship += PrefixMetadataMember )*", + " PackageDeclaration PackageBody" + ], + "name": "Package" + }, + { + "@type": "Production", + "abstract_syntax_type": "LibraryPackage", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "LibraryPackage =", + " ( isStandard ?= 'standard' ) 'library'", + " ( ownedRelationship += PrefixMetadataMember )*", + " PackageDeclaration PackageBody" + ], + "name": "LibraryPackage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "PackageDeclaration : Package =", + " 'package' Identification" + ], + "name": "PackageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "PackageBody : Package =", + " ';' | '{' PackageBodyElement* '}'" + ], + "name": "PackageBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "PackageBodyElement : Package =", + " ownedRelationship += PackageMember", + " | ownedRelationship += ElementFilterMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import" + ], + "name": "PackageBodyElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "MemberPrefix : Membership =", + " ( visibility = VisibilityIndicator )?" + ], + "name": "MemberPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "PackageMember : OwningMembership =", + " MemberPrefix", + " ( ownedRelatedElement += DefinitionElement", + " | ownedRelatedElement = UsageElement )" + ], + "name": "PackageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ElementFilterMembership", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "ElementFilterMember : ElementFilterMembership =", + " MemberPrefix", + " 'filter' ownedRelatedElement += OwnedExpression ';'" + ], + "name": "ElementFilterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "AliasMember : Membership =", + " MemberPrefix", + " 'alias' ( '<' memberShortName = NAME '>' )?", + " ( memberName = NAME )?", + " 'for' memberElement = [QualifiedName]", + " RelationshipBody" + ], + "name": "AliasMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Import", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "Import =", + " visibility = VisibilityIndicator", + " 'import' ( isImportAll ?= 'all' )?", + " ImportDeclaration", + " RelationshipBody" + ], + "name": "Import" + }, + { + "@type": "Production", + "abstract_syntax_type": "Import", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "ImportDeclaration : Import =", + " MembershipImport | NamespaceImport" + ], + "name": "ImportDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "MembershipImport", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "MembershipImport =", + " importedMembership = [QualifiedName]", + " ( '::' isRecursive ?= '**' )?" + ], + "name": "MembershipImport" + }, + { + "@type": "Production", + "abstract_syntax_type": "NamespaceImport", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "NamespaceImport =", + " importedNamespace = [QualifiedName] '::' '*'", + " ( '::' isRecursive ?= '**' )?", + " | importedNamespace = FilterPackage", + " { ownedRelatedElement += importedNamespace }" + ], + "name": "NamespaceImport" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "FilterPackage : Package =", + " ownedRelationship += FilterPackageImport", + " ( ownedRelationship += FilterPackageMember )+" + ], + "name": "FilterPackage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ElementFilterMembership", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "FilterPackageMember : ElementFilterMembership =", + " '[' ownedRelatedElement += OwnedExpression ']'" + ], + "name": "FilterPackageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "VisibilityKind", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "VisibilityIndicator : VisibilityKind =", + " 'public' | 'private' | 'protected'" + ], + "name": "VisibilityIndicator" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.5.2", + "lines": [ + "Clause 8.2.2.5.2 Package Elements" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.2.5.2", + "is_partial": false, + "lines": [ + "DefinitionElement : Element =", + " Package", + " | LibraryPackage", + " | AnnotatingElement", + " | Dependency", + " | AttributeDefinition", + " | EnumerationDefinition", + " | OccurrenceDefinition", + " | IndividualDefinition", + " | ItemDefinition", + " | PartDefinition", + " | ConnectionDefinition", + " | FlowDefinition", + " | InterfaceDefinition", + " | PortDefinition", + " | ActionDefinition", + " | CalculationDefinition", + " | StateDefinition", + " | ConstraintDefinition", + " | RequirementDefinition", + " | ConcernDefinition", + " | CaseDefinition", + " | AnalysisCaseDefinition", + " | VerificationCaseDefinition", + " | UseCaseDefinition", + " | ViewDefinition", + " | ViewpointDefinition", + " | RenderingDefinition", + " | MetadataDefinition", + " | ExtendedDefinition" + ], + "name": "DefinitionElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.5.2", + "is_partial": false, + "lines": [ + "UsageElement : Usage =", + " NonOccurrenceUsageElement", + " | OccurrenceUsageElement" + ], + "name": "UsageElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6", + "lines": [ + "Clause 8.2.2.6 Definition and Usage Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.1", + "lines": [ + "Clause 8.2.2.6.1 Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "BasicDefinitionPrefix", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "BasicDefinitionPrefix =", + " isAbstract ?= 'abstract' | isVariation ?= 'variation'" + ], + "name": "BasicDefinitionPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Definition", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionExtensionKeyword : Definition =", + " ownedRelationship += PrefixMetadataMember" + ], + "name": "DefinitionExtensionKeyword" + }, + { + "@type": "Production", + "abstract_syntax_type": "Definition", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionPrefix : Definition =", + " BasicDefinitionPrefix? DefinitionExtensionKeyword*" + ], + "name": "DefinitionPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Definition", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "Definition =", + " DefinitionDeclaration DefinitionBody" + ], + "name": "Definition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Definition", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionDeclaration : Definition =", + " Identification SubclassificationPart?" + ], + "name": "DefinitionDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionBody : Type =", + " ';' | '{' DefinitionBodyItem* '}'" + ], + "name": "DefinitionBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionBodyItem : Type =", + " ownedRelationship += DefinitionMember", + " | ownedRelationship += VariantUsageMember", + " | ownedRelationship += NonOccurrenceUsageMember", + " | ( ownedRelationship += SourceSuccessionMember )?", + " ownedRelationship += OccurrenceUsageMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import" + ], + "name": "DefinitionBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionMember : OwningMembership =", + " MemberPrefix", + " ownedRelatedElement += DefinitionElement" + ], + "name": "DefinitionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "VariantMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "VariantUsageMember : VariantMembership =", + " MemberPrefix 'variant'", + " ownedVariantUsage = VariantUsageElement" + ], + "name": "VariantUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "NonOccurrenceUsageMember : FeatureMembership =", + " MemberPrefix", + " ownedRelatedElement += NonOccurrenceUsageElement" + ], + "name": "NonOccurrenceUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "OccurrenceUsageMember : FeatureMembership =", + " MemberPrefix", + " ownedRelatedElement += OccurrenceUsageElement" + ], + "name": "OccurrenceUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "StructureUsageMember : FeatureMembership =", + " MemberPrefix", + " ownedRelatedElement += StructureUsageElement" + ], + "name": "StructureUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "BehaviorUsageMember : FeatureMembership =", + " MemberPrefix", + " ownedRelatedElement += BehaviorUsageElement" + ], + "name": "BehaviorUsageMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.2", + "lines": [ + "Clause 8.2.2.6.2 Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureDirectionKind", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "FeatureDirection : FeatureDirectionKind =", + " 'in' | 'out' | 'inout'" + ], + "name": "FeatureDirection" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "RefPrefix : Usage =", + " ( direction = FeatureDirection )?", + " ( isDerived ?= 'derived' )?", + " ( isAbstract ?= 'abstract' | isVariation ?= 'variation' )?", + " ( isConstant ?= 'constant' )?" + ], + "name": "RefPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "BasicUsagePrefix : Usage =", + " RefPrefix", + " ( isReference ?= 'ref' )?" + ], + "name": "BasicUsagePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "EndUsagePrefix : Usage =", + " isEnd ?= 'end' ( ownedRelationship += OwnedCrossFeatureMember )?" + ], + "name": "EndUsagePrefix" + }, + { + "@type": "Comment", + "clause_id": "8.2.2.6.2", + "lines": [ + "// (See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "OwnedCrossFeatureMember : OwningMembership =", + " ownedRelatedElement += OwnedCrossFeature" + ], + "name": "OwnedCrossFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "OwnedCrossFeature : ReferenceUsage =", + " BasicUsagePrefix UsageDeclaration" + ], + "name": "OwnedCrossFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UsageExtensionKeyword : Usage =", + " ownedRelationship += PrefixMetadataMember" + ], + "name": "UsageExtensionKeyword" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UnextendedUsagePrefix : Usage =", + " EndUsagePrefix | BasicUsagePrefix" + ], + "name": "UnextendedUsagePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UsagePrefix : Usage =", + " UnextendedUsagePrefix UsageExtensionKeyword*" + ], + "name": "UsagePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "Usage =", + " UsageDeclaration UsageCompletion" + ], + "name": "Usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UsageDeclaration : Usage =", + " Identification FeatureSpecializationPart?" + ], + "name": "UsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UsageCompletion : Usage =", + " ValuePart? UsageBody" + ], + "name": "UsageCompletion" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UsageBody : Usage =", + " DefinitionBody" + ], + "name": "UsageBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "ValuePart : Feature =", + " ownedRelationship += FeatureValue" + ], + "name": "ValuePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "FeatureValue =", + " ( '='", + " | isInitial ?= ':='", + " | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )?", + " )", + " ownedRelatedElement += OwnedExpression" + ], + "name": "FeatureValue" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.6.2", + "html_snippet": "
        1. A Usage parsed with isEnd = true for which mayTimeVary = true must also have isConstant set to true, even though this is not explicitly notated in the textual notation, in order to satisfy the KerML constraint checkFeatureEndIsConstant.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.3", + "lines": [ + "Clause 8.2.2.6.3 Reference Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.6.3", + "is_partial": false, + "lines": [ + "DefaultReferenceUsage : ReferenceUsage =", + " RefPrefix Usage" + ], + "name": "DefaultReferenceUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.6.3", + "is_partial": false, + "lines": [ + "ReferenceUsage =", + " ( EndUsagePrefix | RefPrefix )", + " 'ref' Usage" + ], + "name": "ReferenceUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.6.3", + "is_partial": false, + "lines": [ + "VariantReference : ReferenceUsage =", + " ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecialization* UsageBody" + ], + "name": "VariantReference" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.4", + "lines": [ + "Clause 8.2.2.6.4 Body Elements" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.4", + "is_partial": false, + "lines": [ + "NonOccurrenceUsageElement : Usage =", + " DefaultReferenceUsage", + " | ReferenceUsage", + " | AttributeUsage", + " | EnumerationUsage", + " | BindingConnectorAsUsage", + " | SuccessionAsUsage", + " | ExtendedUsage" + ], + "name": "NonOccurrenceUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.4", + "is_partial": false, + "lines": [ + "OccurrenceUsageElement : Usage =", + " StructureUsageElement | BehaviorUsageElement" + ], + "name": "OccurrenceUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.4", + "is_partial": false, + "lines": [ + "StructureUsageElement : Usage =", + " OccurrenceUsage", + " | IndividualUsage", + " | PortionUsage", + " | EventOccurrenceUsage", + " | ItemUsage", + " | PartUsage", + " | ViewUsage", + " | RenderingUsage", + " | PortUsage", + " | ConnectionUsage", + " | InterfaceUsage", + " | AllocationUsage", + " | Message", + " | FlowUsage", + " | SuccessionFlowUsage" + ], + "name": "StructureUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.4", + "is_partial": false, + "lines": [ + "BehaviorUsageElement : Usage =", + " ActionUsage", + " | CalculationUsage", + " | StateUsage", + " | ConstraintUsage", + " | RequirementUsage", + " | ConcernUsage", + " | CaseUsage", + " | AnalysisCaseUsage", + " | VerificationCaseUsage", + " | UseCaseUsage", + " | ViewpointUsage", + " | PerformActionUsage", + " | ExhibitStateUsage", + " | IncludeUseCaseUsage", + " | AssertConstraintUsage", + " | SatisfyRequirementUsage" + ], + "name": "BehaviorUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.4", + "is_partial": false, + "lines": [ + "VariantUsageElement : Usage =", + " VariantReference", + " | ReferenceUsage", + " | AttributeUsage", + " | BindingConnectorAsUsage", + " | SuccessionAsUsage", + " | OccurrenceUsage", + " | IndividualUsage", + " | PortionUsage", + " | EventOccurrenceUsage", + " | ItemUsage", + " | PartUsage", + " | ViewUsage", + " | RenderingUsage", + " | PortUsage", + " | ConnectionUsage", + " | InterfaceUsage", + " | AllocationUsage", + " | Message", + " | FlowUsage", + " | SuccessionFlowUsage", + " | BehaviorUsageElement" + ], + "name": "VariantUsageElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.5", + "lines": [ + "Clause 8.2.2.6.5 Specialization" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Classifier", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "SubclassificationPart : Classifier =", + " SPECIALIZES ownedRelationship += OwnedSubclassification", + " ( ',' ownedRelationship += OwnedSubclassification )*" + ], + "name": "SubclassificationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Subclassification", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedSubclassification : Subclassification =", + " superClassifier = [QualifiedName]" + ], + "name": "OwnedSubclassification" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "FeatureSpecializationPart : Feature =", + " FeatureSpecialization+ MultiplicityPart? FeatureSpecialization*", + " | MultiplicityPart FeatureSpecialization*" + ], + "name": "FeatureSpecializationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "FeatureSpecialization : Feature =", + " Typings | Subsettings | References | Crosses | Redefinitions" + ], + "name": "FeatureSpecialization" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Typings : Feature =", + " TypedBy ( ',' ownedRelationship += FeatureTyping )*" + ], + "name": "Typings" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "TypedBy : Feature =", + " DEFINED_BY ownedRelationship += FeatureTyping" + ], + "name": "TypedBy" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureTyping", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "FeatureTyping =", + " OwnedFeatureTyping | ConjugatedPortTyping" + ], + "name": "FeatureTyping" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureTyping", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedFeatureTyping : FeatureTyping =", + " type = [QualifiedName]", + " | type = OwnedFeatureChain", + " { ownedRelatedElement += type }" + ], + "name": "OwnedFeatureTyping" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Subsettings : Feature =", + " Subsets ( ',' ownedRelationship += OwnedSubsetting )*" + ], + "name": "Subsettings" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Subsets : Feature =", + " SUBSETS ownedRelationship += OwnedSubsetting" + ], + "name": "Subsets" + }, + { + "@type": "Production", + "abstract_syntax_type": "Subsetting", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedSubsetting : Subsetting =", + " subsettedFeature = [QualifiedName]", + " | subsettedFeature = OwnedFeatureChain", + " { ownedRelatedElement += subsettedFeature }" + ], + "name": "OwnedSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "References : Feature =", + " REFERENCES ownedRelationship += OwnedReferenceSubsetting" + ], + "name": "References" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceSubsetting", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedReferenceSubsetting : ReferenceSubsetting =", + " referencedFeature = [QualifiedName]", + " | referencedFeature = OwnedFeatureChain", + " { ownedRelatedElement += referenceFeature }" + ], + "name": "OwnedReferenceSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Crosses : Feature =", + " CROSSES ownedRelationship += OwnedCrossSubsetting" + ], + "name": "Crosses" + }, + { + "@type": "Production", + "abstract_syntax_type": "CrossSubsetting", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedCrossSubsetting : CrossSubsetting =", + " crossedFeature = [QualifiedName]", + " | crossedFeature = OwnedFeatureChain", + " { ownedRelatedElement += crossedFeature }" + ], + "name": "OwnedCrossSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Redefinitions : Feature =", + " Redefines ( ',' ownedRelationship += OwnedRedefinition )*" + ], + "name": "Redefinitions" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Redefines : Feature =", + " REDEFINES ownedRelationship += OwnedRedefinition" + ], + "name": "Redefines" + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedRedefinition : Redefinition =", + " redefinedFeature = [QualifiedName]", + " | redefinedFeature = OwnedFeatureChain", + " { ownedRelatedElement += redefinedFeature }" + ], + "name": "OwnedRedefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedFeatureChain : Feature =", + " ownedRelationship += OwnedFeatureChaining", + " ( '.' ownedRelationship += OwnedFeatureChaining )+" + ], + "name": "OwnedFeatureChain" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureChaining", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedFeatureChaining : FeatureChaining =", + " chainingFeature = [QualifiedName]" + ], + "name": "OwnedFeatureChaining" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.6", + "lines": [ + "Clause 8.2.2.6.6 Multiplicity" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.6", + "is_partial": false, + "lines": [ + "MultiplicityPart : Feature =", + " ownedRelationship += OwnedMultiplicity", + " | ( ownedRelationship += OwnedMultiplicity )?", + " ( isOrdered ?= 'ordered' ( { isUnique = false } 'nonunique' )?", + " | { isUnique = false } 'nonunique' ( isOrdered ?= 'ordered' )? )" + ], + "name": "MultiplicityPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.6.6", + "is_partial": false, + "lines": [ + "OwnedMultiplicity : OwningMembership =", + " ownedRelatedElement += MultiplicityRange" + ], + "name": "OwnedMultiplicity" + }, + { + "@type": "Production", + "abstract_syntax_type": "MultiplicityRange", + "clause_id": "8.2.2.6.6", + "is_partial": false, + "lines": [ + "MultiplicityRange =", + " '[' ( ownedRelationship += MultiplicityExpressionMember '..' )?", + " ownedRelationship += MultiplicityExpressionMember ']'" + ], + "name": "MultiplicityRange" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.6.6", + "is_partial": false, + "lines": [ + "MultiplicityExpressionMember : OwningMembership =", + " ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression )" + ], + "name": "MultiplicityExpressionMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.7", + "lines": [ + "Clause 8.2.2.7 Attributes Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "AttributeDefinition", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "AttributeDefinition : AttributeDefinition =", + " DefinitionPrefix 'attribute' 'def' Definition" + ], + "name": "AttributeDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "AttributeUsage", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "AttributeUsage : AttributeUsage =", + " UsagePrefix 'attribute' Usage" + ], + "name": "AttributeUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.8", + "lines": [ + "Clause 8.2.2.8 Enumerations Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "EnumerationDefinition", + "clause_id": "8.2.2.8", + "is_partial": false, + "lines": [ + "EnumerationDefinition =", + " DefinitionExtensionKeyword*", + " 'enum' 'def' DefinitionDeclaration EnumerationBody" + ], + "name": "EnumerationDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "EnumerationDefinition", + "clause_id": "8.2.2.8", + "is_partial": false, + "lines": [ + "EnumerationBody : EnumerationDefinition =", + " ';'", + " | '{' ( ownedRelationship += AnnotatingMember", + " | ownedRelationship += EnumerationUsageMember )*", + " '}'" + ], + "name": "EnumerationBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "VariantMembership", + "clause_id": "8.2.2.8", + "is_partial": false, + "lines": [ + "EnumerationUsageMember : VariantMembership =", + " MemberPrefix ownedRelatedElement += EnumeratedValue" + ], + "name": "EnumerationUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "EnumerationUsage", + "clause_id": "8.2.2.8", + "is_partial": false, + "lines": [ + "EnumeratedValue : EnumerationUsage =", + " 'enum'? Usage" + ], + "name": "EnumeratedValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "EnumerationUsage", + "clause_id": "8.2.2.8", + "is_partial": false, + "lines": [ + "EnumerationUsage : EnumerationUsage =", + " UsagePrefix 'enum' Usage" + ], + "name": "EnumerationUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.9", + "lines": [ + "Clause 8.2.2.9 Occurrences Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.9.1", + "lines": [ + "Clause 8.2.2.9.1 Occurrence Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceDefinition", + "clause_id": "8.2.2.9.1", + "is_partial": false, + "lines": [ + "OccurrenceDefinitionPrefix : OccurrenceDefinition =", + " BasicDefinitionPrefix?", + " ( isIndividual ?= 'individual'", + " ownedRelationship += EmptyMultiplicityMember", + " )?", + " DefinitionExtensionKeyword*" + ], + "name": "OccurrenceDefinitionPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceDefinition", + "clause_id": "8.2.2.9.1", + "is_partial": false, + "lines": [ + "OccurrenceDefinition =", + " OccurrenceDefinitionPrefix 'occurrence' 'def' Definition" + ], + "name": "OccurrenceDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceDefinition", + "clause_id": "8.2.2.9.1", + "is_partial": false, + "lines": [ + "IndividualDefinition : OccurrenceDefinition =", + " BasicDefinitionPrefix? isIndividual ?= 'individual'", + " DefinitionExtensionKeyword* 'def' Definition", + " ownedRelationship += EmptyMultiplicityMember" + ], + "name": "IndividualDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.9.1", + "is_partial": false, + "lines": [ + "EmptyMultiplicityMember : OwningMembership =", + " ownedRelatedElement += EmptyMultiplicity" + ], + "name": "EmptyMultiplicityMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Multiplicity", + "clause_id": "8.2.2.9.1", + "is_partial": false, + "lines": [ + "EmptyMultiplicity : Multiplicity =", + " { }" + ], + "name": "EmptyMultiplicity" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.9.2", + "lines": [ + "Clause 8.2.2.9.2 Occurrence Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceUsage", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "OccurrenceUsagePrefix : OccurrenceUsage =", + " BasicUsagePrefix", + " ( isIndividual ?= 'individual' )?", + " ( portionKind = PortionKind", + " { isPortion = true }", + " )?", + " UsageExtensionKeyword*" + ], + "name": "OccurrenceUsagePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceUsage", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "OccurrenceUsage =", + " OccurrenceUsagePrefix 'occurrence' Usage" + ], + "name": "OccurrenceUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceUsage", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "IndividualUsage : OccurrenceUsage =", + " BasicUsagePrefix isIndividual ?= 'individual'", + " UsageExtensionKeyword* Usage" + ], + "name": "IndividualUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceUsage", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "PortionUsage : OccurrenceUsage =", + " BasicUsagePrefix ( isIndividual ?= 'individual' )?", + " portionKind = PortionKind", + " UsageExtensionKeyword* Usage", + " { isPortion = true }" + ], + "name": "PortionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "PortionKind", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "PortionKind =", + " 'snapshot' | 'timeslice'" + ], + "name": "PortionKind" + }, + { + "@type": "Production", + "abstract_syntax_type": "EventOccurrenceUsage", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "EventOccurrenceUsage =", + " OccurrenceUsagePrefix 'event'", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'occurrence' UsageDeclaration? )", + " UsageCompletion" + ], + "name": "EventOccurrenceUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.9.3", + "lines": [ + "Clause 8.2.2.9.3 Occurrence Successions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.9.3", + "is_partial": false, + "lines": [ + "SourceSuccessionMember : FeatureMembership =", + " 'then' ownedRelatedElement += SourceSuccession" + ], + "name": "SourceSuccessionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "SuccessionAsUsage", + "clause_id": "8.2.2.9.3", + "is_partial": false, + "lines": [ + "SourceSuccession : SuccessionAsUsage =", + " ownedRelationship += SourceEndMember" + ], + "name": "SourceSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.2.9.3", + "is_partial": false, + "lines": [ + "SourceEndMember : EndFeatureMembership =", + " ownedRelatedElement += SourceEnd" + ], + "name": "SourceEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.9.3", + "is_partial": false, + "lines": [ + "SourceEnd : ReferenceUsage =", + " ( ownedRelationship += OwnedMultiplicity )?" + ], + "name": "SourceEnd" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.10", + "lines": [ + "Clause 8.2.2.10 Items Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ItemDefinition", + "clause_id": "8.2.2.10", + "is_partial": false, + "lines": [ + "ItemDefinition =", + " OccurrenceDefinitionPrefix", + " 'item' 'def' Definition" + ], + "name": "ItemDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ItemUsage", + "clause_id": "8.2.2.10", + "is_partial": false, + "lines": [ + "ItemUsage =", + " OccurrenceUsagePrefix 'item' Usage" + ], + "name": "ItemUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.11", + "lines": [ + "Clause 8.2.2.11 Parts Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "PartDefinition", + "clause_id": "8.2.2.11", + "is_partial": false, + "lines": [ + "PartDefinition =", + " OccurrenceDefinitionPrefix 'part' 'def' Definition" + ], + "name": "PartDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "PartUsage", + "clause_id": "8.2.2.11", + "is_partial": false, + "lines": [ + "PartUsage =", + " OccurrenceUsagePrefix 'part' Usage" + ], + "name": "PartUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.12", + "lines": [ + "Clause 8.2.2.12 Ports Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "PortDefinition", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "PortDefinition =", + " DefinitionPrefix 'port' 'def' Definition", + " ownedRelationship += ConjugatedPortDefinitionMember", + " { conjugatedPortDefinition.ownedPortConjugator.", + " originalPortDefinition = this }" + ], + "name": "PortDefinition" + }, + { + "@type": "Comment", + "clause_id": "8.2.2.12", + "lines": [ + "// (See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "ConjugatedPortDefinitionMember : OwningMembership =", + " ownedRelatedElement += ConjugatedPortDefinition" + ], + "name": "ConjugatedPortDefinitionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConjugatedPortDefinition", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "ConjugatedPortDefinition =", + " ownedRelationship += PortConjugation" + ], + "name": "ConjugatedPortDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "PortConjugation", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "PortConjugation =", + " {}" + ], + "name": "PortConjugation" + }, + { + "@type": "Production", + "abstract_syntax_type": "PortUsage", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "PortUsage =", + " OccurrenceUsagePrefix 'port' Usage" + ], + "name": "PortUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConjugatedPortTyping", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "ConjugatedPortTyping : ConjugatedPortTyping =", + " '~' originalPortDefinition = ~[QualifiedName]" + ], + "name": "ConjugatedPortTyping" + }, + { + "@type": "Comment", + "clause_id": "8.2.2.12", + "lines": [ + "// (See Note 2)" + ] + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.12", + "html_snippet": "
        1. Even though it is not explicitly represented in the text, a PortDefinition is always parsed as containing a nested ConjugatedPortDefinition with a PortDefinition Relationship pointing back to the containing PortDefinition. The abstract syntax for ConjugatedPortDefinition sets its effectiveName to the name of its originalPortDefinition with the symbol ~ prepended to it (see 8.3.12.2). (See also 8.4.8.1.)
        2. The notation ~[QualifiedName] indicates that a QualifiedName shall be parsed from the input text, but that it shall be resolved as if it was the qualified name constructed as follows:
          • Extract the last segment name of the given QualifiedName and prepend the symbol ~ to it.
          • Append the name so constructed to the end of the entire original QualifiedName.
          For example, if the ConjugatedPortTyping is ~A::B::C, then the given QualifiedName is A::B::C, and ~[QualifiedName] is resolved as A::B::C::'~C'. Alternatively, a conforming tool may first resolve the given QualifiedName as usual to a PortDefinition and then use the conjugatedPortDefinition of this PortDefinition as the resolution of ~[QualifiedName].
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.13", + "lines": [ + "Clause 8.2.2.13 Connections Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.13.1", + "lines": [ + "Clause 8.2.2.13.1 Connection Definition and Usage" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ConnectionDefinition", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "ConnectionDefinition =", + " OccurrenceDefinitionPrefix 'connection' 'def' Definition" + ], + "name": "ConnectionDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConnectionUsage", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "ConnectionUsage =", + " OccurrenceUsagePrefix", + " ( 'connection' UsageDeclaration ValuePart?", + " ( 'connect' ConnectorPart )?", + " | 'connect' ConnectorPart )", + " UsageBody" + ], + "name": "ConnectionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConnectionUsage", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "ConnectorPart : ConnectionUsage =", + " BinaryConnectorPart | NaryConnectorPart" + ], + "name": "ConnectorPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConnectionUsage", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "BinaryConnectorPart : ConnectionUsage =", + " ownedRelationship += ConnectorEndMember 'to'", + " ownedRelationship += ConnectorEndMember" + ], + "name": "BinaryConnectorPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConnectionUsage", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "NaryConnectorPart : ConnectionUsage =", + " '(' ownedRelationship += ConnectorEndMember ','", + " ownedRelationship += ConnectorEndMember", + " ( ',' ownedRelationship += ConnectorEndMember )* ')'" + ], + "name": "NaryConnectorPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "ConnectorEndMember : EndFeatureMembership =", + " ownedRelatedElement += ConnectorEnd" + ], + "name": "ConnectorEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "ConnectorEnd : ReferenceUsage =", + "\t( ownedRelationship += OwnedCrossMultiplicityMember )?", + "\t( declaredName = NAME REFERENCES )?", + "\townedRelationship += OwnedReferenceSubsetting" + ], + "name": "ConnectorEnd" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "OwnedCrossMultiplicityMember : OwningMembership =", + "\townedRelatedElement += OwnedCrossMultiplicity" + ], + "name": "OwnedCrossMultiplicityMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "OwnedCrossMultiplicity : Feature =", + "\townedRelationship += OwnedMultiplicity" + ], + "name": "OwnedCrossMultiplicity" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.13.2", + "lines": [ + "Clause 8.2.2.13.2 Binding Connectors" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "BindingConnectorAsUsage", + "clause_id": "8.2.2.13.2", + "is_partial": false, + "lines": [ + "BindingConnectorAsUsage =", + " UsagePrefix ( 'binding' UsageDeclaration )?", + " 'bind' ownedRelationship += ConnectorEndMember", + " '=' ownedRelationship += ConnectorEndMember", + " UsageBody" + ], + "name": "BindingConnectorAsUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.13.3", + "lines": [ + "Clause 8.2.2.13.3 Successions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "SuccessionAsUsage", + "clause_id": "8.2.2.13.3", + "is_partial": false, + "lines": [ + "SuccessionAsUsage =", + " UsagePrefix ( 'succession' UsageDeclaration )?", + " 'first' s.ownedRelationship += ConnectorEndMember", + " 'then' s.ownedRelationship += ConnectorEndMember", + " UsageBody" + ], + "name": "SuccessionAsUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.14", + "lines": [ + "Clause 8.2.2.14 Interfaces Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.14.1", + "lines": [ + "Clause 8.2.2.14.1 Interface Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceDefinition", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceDefinition =", + " OccurrenceDefinitionPrefix 'interface' 'def'", + " DefinitionDeclaration InterfaceBody" + ], + "name": "InterfaceDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceBody : Type =", + " ';' | '{' InterfaceBodyItem* '}'" + ], + "name": "InterfaceBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceBodyItem : Type =", + " ownedRelationship += DefinitionMember", + " | ownedRelationship += VariantUsageMember", + " | ownedRelationship += InterfaceNonOccurrenceUsageMember", + " | ( ownedRelationship += SourceSuccessionMember )?", + " ownedRelationship += InterfaceOccurrenceUsageMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import" + ], + "name": "InterfaceBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceNonOccurrenceUsageMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += InterfaceNonOccurrenceUsageElement" + ], + "name": "InterfaceNonOccurrenceUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceNonOccurrenceUsageElement : Usage =", + " ReferenceUsage", + " | AttributeUsage", + " | EnumerationUsage", + " | BindingConnectorAsUsage", + " | SuccessionAsUsage" + ], + "name": "InterfaceNonOccurrenceUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceOccurrenceUsageMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += InterfaceOccurrenceUsageElement" + ], + "name": "InterfaceOccurrenceUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceOccurrenceUsageElement : Usage =", + " DefaultInterfaceEnd | StructureUsageElement | BehaviorUsageElement" + ], + "name": "InterfaceOccurrenceUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "PortUsage", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "DefaultInterfaceEnd : PortUsage =", + " isEnd ?= 'end' Usage" + ], + "name": "DefaultInterfaceEnd" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.14.2", + "lines": [ + "Clause 8.2.2.14.2 Interface Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "InterfaceUsage =", + " OccurrenceUsagePrefix 'interface'", + " InterfaceUsageDeclaration InterfaceBody" + ], + "name": "InterfaceUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "InterfaceUsageDeclaration : InterfaceUsage =", + " UsageDeclaration ValuePart?", + " ( 'connect' InterfacePart )?", + " | InterfacePart" + ], + "name": "InterfaceUsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "InterfacePart : InterfaceUsage =", + " BinaryInterfacePart | NaryInterfacePart" + ], + "name": "InterfacePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "BinaryInterfacePart : InterfaceUsage =", + " ownedRelationship += InterfaceEndMember 'to'", + " ownedRelationship += InterfaceEndMember" + ], + "name": "BinaryInterfacePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "NaryInterfacePart : InterfaceUsage =", + " '(' ownedRelationship += InterfaceEndMember ','", + " ownedRelationship += InterfaceEndMember", + " ( ',' ownedRelationship += InterfaceEndMember )* ')'" + ], + "name": "NaryInterfacePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "InterfaceEndMember : EndFeatureMembership =", + " ownedRelatedElement += InterfaceEnd" + ], + "name": "InterfaceEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "PortUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "InterfaceEnd : PortUsage =", + " ( ownedRelationship += OwnedCrossMultiplicityMember )?", + " ( declaredName = NAME REFERENCES )?", + " ownedRelationship += OwnedReferenceSubsetting" + ], + "name": "InterfaceEnd" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.15", + "lines": [ + "Clause 8.2.2.15 Allocations Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "AllocationDefinition", + "clause_id": "8.2.2.15", + "is_partial": false, + "lines": [ + "AllocationDefinition =", + " OccurrenceDefinitionPrefix 'allocation' 'def' Definition" + ], + "name": "AllocationDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "AllocationUsage", + "clause_id": "8.2.2.15", + "is_partial": false, + "lines": [ + "AllocationUsage =", + " OccurrenceUsagePrefix", + " AllocationUsageDeclaration UsageBody" + ], + "name": "AllocationUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AllocationUsage", + "clause_id": "8.2.2.15", + "is_partial": false, + "lines": [ + "AllocationUsageDeclaration : AllocationUsage =", + " 'allocation' UsageDeclaration", + " ( 'allocate' ConnectorPart )?", + " | 'allocate' ConnectorPart" + ], + "name": "AllocationUsageDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.16", + "lines": [ + "Clause 8.2.2.16 Flows Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowDefinition", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowDefinition =", + " OccurrenceDefinitionPrefix 'flow' 'def' Definition" + ], + "name": "FlowDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "Message : FlowUsage =", + " OccurrenceUsagePrefix 'message'", + " MessageDeclaration DefinitionBody", + " { isAbstract = true }" + ], + "name": "Message" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "MessageDeclaration : FlowUsage =", + " UsageDeclaration ValuePart?", + " ( 'of' ownedRelationship += FlowPayloadFeatureMember )?", + " ( 'from' ownedRelationship += MessageEventMember", + " 'to' ownedRelationship += MessageEventMember", + " )?", + " | ownedRelationship += MessageEventMember 'to'", + " ownedRelationship += MessageEventMember" + ], + "name": "MessageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "MessageEventMember : ParameterMembership =", + " ownedRelatedElement += MessageEvent" + ], + "name": "MessageEventMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "EventOccurrenceUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "MessageEvent : EventOccurrenceUsage =", + " ownedRelationship += OwnedReferenceSubsetting" + ], + "name": "MessageEvent" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowUsage =", + " OccurrenceUsagePrefix 'flow'", + " FlowDeclaration DefinitionBody" + ], + "name": "FlowUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "SuccessionFlowUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "SuccessionFlowUsage =", + " OccurrenceUsagePrefix 'succession' 'flow'", + " FlowDeclaration DefinitionBody" + ], + "name": "SuccessionFlowUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowDeclaration : FlowUsage =", + " UsageDeclaration ValuePart?", + " ( 'of' ownedRelationship += FlowPayloadFeatureMember )?", + " ( 'from' ownedRelationship += FlowEndMember", + " 'to' ownedRelationship += FlowEndMember )?", + " | ownedRelationship += FlowEndMember 'to'", + " ownedRelationship += FlowEndMember" + ], + "name": "FlowDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowPayloadFeatureMember : FeatureMembership =", + " ownedRelatedElement += FlowPayloadFeature" + ], + "name": "FlowPayloadFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "PayloadFeature", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowPayloadFeature : PayloadFeature =", + " PayloadFeature" + ], + "name": "FlowPayloadFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "PayloadFeature : Feature =", + " Identification? PayloadFeatureSpecializationPart", + " ValuePart?", + " | ownedRelationship += OwnedFeatureTyping", + " ( ownedRelationship += OwnedMultiplicity )?", + " | ownedRelationship += OwnedMultiplicity", + " ownedRelationship += OwnedFeatureTyping" + ], + "name": "PayloadFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "PayloadFeatureSpecializationPart : Feature =", + " ( FeatureSpecialization )+ MultiplicityPart?", + " FeatureSpecialization*", + " | MultiplicityPart FeatureSpecialization+" + ], + "name": "PayloadFeatureSpecializationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowEndMember : EndFeatureMembership =", + " ownedRelatedElement += FlowEnd" + ], + "name": "FlowEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowEnd", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowEnd =", + " ( ownedRelationship += FlowEndSubsetting )?", + " ownedRelationship += FlowFeatureMember" + ], + "name": "FlowEnd" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceSubsetting", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowEndSubsetting : ReferenceSubsetting =", + " referencedFeature = [QualifiedName]", + " | referencedFeature = FeatureChainPrefix", + " { ownedRelatedElement += referencedFeature }" + ], + "name": "FlowEndSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FeatureChainPrefix : Feature =", + " ( ownedRelationship += OwnedFeatureChaining '.' )+", + " ownedRelationship += OwnedFeatureChaining '.'" + ], + "name": "FeatureChainPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowFeatureMember : FeatureMembership =", + " ownedRelatedElement += FlowFeature" + ], + "name": "FlowFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowFeature : ReferenceUsage =", + " ownedRelationship += FlowFeatureRedefinition" + ], + "name": "FlowFeature" + }, + { + "@type": "Comment", + "clause_id": "8.2.2.16", + "lines": [ + "// (See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowFeatureRedefinition : Redefinition =", + " redefinedFeature = [QualifiedName]" + ], + "name": "FlowFeatureRedefinition" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.16", + "html_snippet": "
        1. To ensure that a FlowFeature passes the validateRedefinitionDirectionConformance constraint (see [KerML, 8.3.3.3.8]), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature)
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17", + "lines": [ + "Clause 8.2.2.17 Actions Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.1", + "lines": [ + "Clause 8.2.2.17.1 Action Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionDefinition", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionDefinition =", + " OccurrenceDefinitionPrefix 'action' 'def'", + " DefinitionDeclaration ActionBody" + ], + "name": "ActionDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionBody : Type =", + " ';' | '{' ActionBodyItem* '}'" + ], + "name": "ActionBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionBodyItem : Type =", + " NonBehaviorBodyItem", + " | ownedRelationship += InitialNodeMember", + " ( ownedRelationship += ActionTargetSuccessionMember )*", + " | ( ownedRelationship += SourceSuccessionMember )?", + " ownedRelationship += ActionBehaviorMember", + " ( ownedRelationship += ActionTargetSuccessionMember )*", + " | ownedRelationship += GuardedSuccessionMember" + ], + "name": "ActionBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "NonBehaviorBodyItem", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "NonBehaviorBodyItem =", + " ownedRelationship += Import", + " | ownedRelationship += AliasMember", + " | ownedRelationship += DefinitionMember", + " | ownedRelationship += VariantUsageMember", + " | ownedRelationship += NonOccurrenceUsageMember", + " | ( ownedRelationship += SourceSuccessionMember )?", + " ownedRelationship += StructureUsageMember" + ], + "name": "NonBehaviorBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionBehaviorMember : FeatureMembership =", + " BehaviorUsageMember | ActionNodeMember" + ], + "name": "ActionBehaviorMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "InitialNodeMember : FeatureMembership =", + " MemberPrefix 'first' memberFeature = [QualifiedName]", + " RelationshipBody" + ], + "name": "InitialNodeMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionNodeMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += ActionNode" + ], + "name": "ActionNodeMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionTargetSuccessionMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += ActionTargetSuccession" + ], + "name": "ActionTargetSuccessionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "GuardedSuccessionMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += GuardedSuccession" + ], + "name": "GuardedSuccessionMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.2", + "lines": [ + "Clause 8.2.2.17.2 Action Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "ActionUsage =", + " OccurrenceUsagePrefix 'action'", + " ActionUsageDeclaration ActionBody" + ], + "name": "ActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "ActionUsageDeclaration : ActionUsage =", + " UsageDeclaration ValuePart?" + ], + "name": "ActionUsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "PerformActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "PerformActionUsage =", + " OccurrenceUsagePrefix 'perform'", + " PerformActionUsageDeclaration ActionBody" + ], + "name": "PerformActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "PerformActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "PerformActionUsageDeclaration : PerformActionUsage =", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'action' UsageDeclaration )", + " ValuePart?" + ], + "name": "PerformActionUsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "ActionNode : ActionUsage =", + " ControlNode", + " | SendNode | AcceptNode", + " | AssignmentNode", + " | TerminateNode", + " | IfNode | WhileLoopNode | ForLoopNode" + ], + "name": "ActionNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "ActionNodeUsageDeclaration : ActionUsage =", + " 'action' UsageDeclaration?" + ], + "name": "ActionNodeUsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "ActionNodePrefix : ActionUsage =", + " OccurrenceUsagePrefix ActionNodeUsageDeclaration?" + ], + "name": "ActionNodePrefix" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.3", + "lines": [ + "Clause 8.2.2.17.3 Control Nodes" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ControlNode", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "ControlNode =", + " MergeNode | DecisionNode | JoinNode| ForkNode" + ], + "name": "ControlNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceUsage", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "ControlNodePrefix : OccurrenceUsage =", + " RefPrefix", + " ( isIndividual ?= 'individual' )?", + " ( portionKind = PortionKind", + " { isPortion = true }", + " )?", + " UsageExtensionKeyword*" + ], + "name": "ControlNodePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "MergeNode", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "MergeNode =", + " ControlNodePrefix", + " isComposite ?= 'merge' UsageDeclaration", + " ActionBody" + ], + "name": "MergeNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "DecisionNode", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "DecisionNode =", + " ControlNodePrefix", + " isComposite ?= 'decide' UsageDeclaration", + " ActionBody" + ], + "name": "DecisionNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "JoinNode", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "JoinNode =", + " ControlNodePrefix", + " isComposite ?= 'join' UsageDeclaration", + " ActionBody" + ], + "name": "JoinNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "ForkNode", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "ForkNode =", + " ControlNodePrefix", + " isComposite ?= 'fork' UsageDeclaration", + " ActionBody" + ], + "name": "ForkNode" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.4", + "lines": [ + "Clause 8.2.2.17.4 Send and Accept Action Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "AcceptNode : AcceptActionUsage =", + " OccurrenceUsagePrefix", + " AcceptNodeDeclaration ActionBody" + ], + "name": "AcceptNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "AcceptNodeDeclaration : AcceptActionUsage =", + " ActionNodeUsageDeclaration?", + " 'accept' AcceptParameterPart" + ], + "name": "AcceptNodeDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "AcceptParameterPart : AcceptActionUsage =", + " ownedRelationship += PayloadParameterMember", + " ( 'via' ownedRelationship += NodeParameterMember )?" + ], + "name": "AcceptParameterPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "PayloadParameterMember : ParameterMembership =", + " ownedRelatedElement += PayloadParameter" + ], + "name": "PayloadParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "PayloadParameter : ReferenceUsage =", + " PayloadFeature", + " | Identification PayloadFeatureSpecializationPart?", + " TriggerValuePart" + ], + "name": "PayloadParameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "TriggerValuePart : Feature =", + " ownedRelationship += TriggerFeatureValue" + ], + "name": "TriggerValuePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "TriggerFeatureValue : FeatureValue =", + " ownedRelatedElement += TriggerExpression" + ], + "name": "TriggerFeatureValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "TriggerInvocationExpression", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "TriggerExpression : TriggerInvocationExpression =", + " kind = ( 'at' | 'after' )", + " ownedRelationship += ArgumentMember", + " | kind = 'when'", + " ownedRelationship += ArgumentExpressionMember" + ], + "name": "TriggerExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "ArgumentMember : ParameterMembership =", + " ownedMemberParameter = Argument" + ], + "name": "ArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "Argument : Feature =", + " ownedRelationship += ArgumentValue" + ], + "name": "Argument" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "ArgumentValue : FeatureValue =", + " value = OwnedExpression" + ], + "name": "ArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "ArgumentExpressionMember : ParameterMembership =", + " ownedRelatedElement += ArgumentExpression" + ], + "name": "ArgumentExpressionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "ArgumentExpression : Feature =", + " ownedRelationship += ArgumentExpressionValue" + ], + "name": "ArgumentExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "ArgumentExpressionValue : FeatureValue =", + " ownedRelatedElement += OwnedExpressionReference" + ], + "name": "ArgumentExpressionValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "SendActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "SendNode : SendActionUsage =", + " OccurrenceUsagePrefix ActionUsageDeclaration? 'send'", + " ( ownedRelationship += NodeParameterMember SenderReceiverPart?", + " | ownedRelationship += EmptyParameterMember SenderReceiverPart )?", + " ActionBody" + ], + "name": "SendNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "SendActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "SendNodeDeclaration : SendActionUsage =", + " ActionNodeUsageDeclaration? 'send'", + " ownedRelationship += NodeParameterMember SenderReceiverPart?" + ], + "name": "SendNodeDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "SendActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "SenderReceiverPart : SendActionUsage =", + " 'via' ownedRelationship += NodeParameterMember", + " ( 'to' ownedRelationship += NodeParameterMember )?", + " | ownedRelationship += EmptyParameterMember", + " 'to' ownedRelationship += NodeParameterMember" + ], + "name": "SenderReceiverPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "NodeParameterMember : ParameterMembership =", + " ownedRelatedElement += NodeParameter" + ], + "name": "NodeParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "NodeParameter : ReferenceUsage =", + " ownedRelationship += FeatureBinding" + ], + "name": "NodeParameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "FeatureBinding : FeatureValue =", + " ownedRelatedElement += OwnedExpression" + ], + "name": "FeatureBinding" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "EmptyParameterMember : ParameterMembership =", + " ownedRelatedElement += EmptyUsage" + ], + "name": "EmptyParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "EmptyUsage : ReferenceUsage =", + " {}" + ], + "name": "EmptyUsage" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.17.4", + "html_snippet": "
        1. The productions for ArgumentMember, Argument, ArgumentValue, ArgumentExpressionMember, ArgumentExpression and ArgumentExpressionValue are the same as given in [KerML, 8.2.5.8.1].
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.5", + "lines": [ + "Clause 8.2.2.17.5 Assignment Action Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "AssignmentActionUsage", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "AssignmentNode : AssignmentActionUsage =", + " OccurrenceUsagePrefix", + " AssignmentNodeDeclaration ActionBody" + ], + "name": "AssignmentNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "AssignmentNodeDeclaration: ActionUsage =", + " ( ActionNodeUsageDeclaration )? 'assign'", + " ownedRelationship += AssignmentTargetMember", + " ownedRelationship += FeatureChainMember ':='", + " ownedRelationship += NodeParameterMember" + ], + "name": "AssignmentNodeDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "AssignmentTargetMember : ParameterMembership =", + " ownedRelatedElement += AssignmentTargetParameter" + ], + "name": "AssignmentTargetMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "AssignmentTargetParameter : ReferenceUsage =", + " ( ownedRelationship += AssignmentTargetBinding '.' )?" + ], + "name": "AssignmentTargetParameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "AssignmentTargetBinding : FeatureValue =", + " ownedRelatedElement += NonFeatureChainPrimaryExpression" + ], + "name": "AssignmentTargetBinding" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "FeatureChainMember : Membership =", + " memberElement = [QualifiedName]", + " | OwnedFeatureChainMember" + ], + "name": "FeatureChainMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "OwnedFeatureChainMember : OwningMembership =", + " ownedRelatedElement += OwnedFeatureChain" + ], + "name": "OwnedFeatureChainMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.6", + "lines": [ + "Clause 8.2.2.17.6 Terminate Action Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "TerminateActionUsage", + "clause_id": "8.2.2.17.6", + "is_partial": false, + "lines": [ + "TerminateNode : TerminateActionUsage =", + " OccurrenceUsagePrefix ActionNodeUsageDeclaration?", + " 'terminate' ( ownedRelationship += NodeParameterMember )?", + " ActionBody" + ], + "name": "TerminateNode" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.7", + "lines": [ + "Clause 8.2.2.17.7 Structured Control Action Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "IfActionUsage", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "IfNode : IfActionUsage =", + " ActionNodePrefix", + " 'if' ownedRelationship += ExpressionParameterMember", + " ownedRelationship += ActionBodyParameterMember", + " ( 'else' ownedRelationship +=", + " ( ActionBodyParameterMember | IfNodeParameterMember ) )?" + ], + "name": "IfNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ExpressionParameterMember : ParameterMembership =", + " ownedRelatedElement += OwnedExpression" + ], + "name": "ExpressionParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ActionBodyParameterMember : ParameterMembership =", + " ownedRelatedElement += ActionBodyParameter" + ], + "name": "ActionBodyParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ActionBodyParameter : ActionUsage =", + " ( 'action' UsageDeclaration? )?", + " '{' ActionBodyItem* '}'" + ], + "name": "ActionBodyParameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "IfNodeParameterMember : ParameterMembership =", + " ownedRelatedElement += IfNode" + ], + "name": "IfNodeParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "WhileLoopActionUsage", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "WhileLoopNode : WhileLoopActionUsage =", + " ActionNodePrefix", + " ( 'while' ownedRelationship += ExpressionParameterMember", + " | 'loop' ownedRelationship += EmptyParameterMember", + " )", + " ownedRelationship += ActionBodyParameterMember", + " ( 'until' ownedRelationship += ExpressionParameterMember ';' )?" + ], + "name": "WhileLoopNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "ForLoopActionUsage", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ForLoopNode : ForLoopActionUsage =", + " ActionNodePrefix", + " 'for' ownedRelationship += ForVariableDeclarationMember", + " 'in' ownedRelationship += NodeParameterMember", + " ownedRelationship += ActionBodyParameterMember" + ], + "name": "ForLoopNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ForVariableDeclarationMember : FeatureMembership =", + " ownedRelatedElement += UsageDeclaration" + ], + "name": "ForVariableDeclarationMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ForVariableDeclaration : ReferenceUsage =", + " UsageDeclaration" + ], + "name": "ForVariableDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.8", + "lines": [ + "Clause 8.2.2.17.8 Action Successions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.17.8", + "is_partial": false, + "lines": [ + "ActionTargetSuccession : Usage =", + " ( TargetSuccession | GuardedTargetSuccession | DefaultTargetSuccession )", + " UsageBody" + ], + "name": "ActionTargetSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "SuccessionAsUsage", + "clause_id": "8.2.2.17.8", + "is_partial": false, + "lines": [ + "TargetSuccession : SuccessionAsUsage =", + " ownedRelationship += SourceEndMember", + " 'then' ownedRelationship += ConnectorEndMember" + ], + "name": "TargetSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionUsage", + "clause_id": "8.2.2.17.8", + "is_partial": false, + "lines": [ + "GuardedTargetSuccession : TransitionUsage =", + " ownedRelationship += GuardExpressionMember", + " 'then' ownedRelationship += TransitionSuccessionMember" + ], + "name": "GuardedTargetSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionUsage", + "clause_id": "8.2.2.17.8", + "is_partial": false, + "lines": [ + "DefaultTargetSuccession : TransitionUsage =", + " 'else' ownedRelationship += TransitionSuccessionMember" + ], + "name": "DefaultTargetSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionUsage", + "clause_id": "8.2.2.17.8", + "is_partial": false, + "lines": [ + "GuardedSuccession : TransitionUsage =", + " ( 'succession' UsageDeclaration )?", + " 'first' ownedRelationship += FeatureChainMember", + " ownedRelationship += GuardExpressionMember", + " 'then' ownedRelationship += TransitionSuccessionMember", + " UsageBody" + ], + "name": "GuardedSuccession" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.18", + "lines": [ + "Clause 8.2.2.18 States Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.18.1", + "lines": [ + "Clause 8.2.2.18.1 State Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "StateDefinition", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateDefinition =", + " OccurrenceDefinitionPrefix 'state' 'def'", + " DefinitionDeclaration StateDefBody" + ], + "name": "StateDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "StateDefinition", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateDefBody : StateDefinition =", + " ';'", + " | ( isParallel ?= 'parallel' )?", + " '{' StateBodyItem* '}'" + ], + "name": "StateDefBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateBodyItem : Type =", + " NonBehaviorBodyItem", + " | ( ownedRelationship += SourceSuccessionMember )?", + " ownedRelationship += BehaviorUsageMember", + " ( ownedRelationship += TargetTransitionUsageMember )*", + " | ownedRelationship += TransitionUsageMember", + " | ownedRelationship += EntryActionMember", + " ( ownedRelationship += EntryTransitionMember )*", + " | ownedRelationship += DoActionMember", + " | ownedRelationship += ExitActionMember" + ], + "name": "StateBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "StateSubactionMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "EntryActionMember : StateSubactionMembership =", + " MemberPrefix kind = 'entry'", + " ownedRelatedElement += StateActionUsage" + ], + "name": "EntryActionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "StateSubactionMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "DoActionMember : StateSubactionMembership =", + " MemberPrefix kind = 'do'", + " ownedRelatedElement += StateActionUsage" + ], + "name": "DoActionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "StateSubactionMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "ExitActionMember : StateSubactionMembership =", + " MemberPrefix kind = 'exit'", + " ownedRelatedElement += StateActionUsage" + ], + "name": "ExitActionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "EntryTransitionMember : FeatureMembership =", + " MemberPrefix", + " ( ownedRelatedElement += GuardedTargetSuccession", + " | 'then' ownedRelatedElement += TargetSuccession", + " ) ';'" + ], + "name": "EntryTransitionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateActionUsage : ActionUsage =", + " EmptyActionUsage ';'", + " | StatePerformActionUsage", + " | StateAcceptActionUsage", + " | StateSendActionUsage", + " | StateAssignmentActionUsage" + ], + "name": "StateActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "EmptyActionUsage : ActionUsage =", + " {}" + ], + "name": "EmptyActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "PerformActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StatePerformActionUsage : PerformActionUsage =", + " PerformActionUsageDeclaration ActionBody" + ], + "name": "StatePerformActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateAcceptActionUsage : AcceptActionUsage =", + " AcceptNodeDeclaration ActionBody" + ], + "name": "StateAcceptActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "SendActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateSendActionUsage : SendActionUsage =", + " SendNodeDeclaration ActionBody" + ], + "name": "StateSendActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AssignmentActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateAssignmentActionUsage : AssignmentActionUsage =", + " AssignmentNodeDeclaration ActionBody" + ], + "name": "StateAssignmentActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "TransitionUsageMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += TransitionUsage" + ], + "name": "TransitionUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "TargetTransitionUsageMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += TargetTransitionUsage" + ], + "name": "TargetTransitionUsageMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.18.2", + "lines": [ + "Clause 8.2.2.18.2 State Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "StateUsage", + "clause_id": "8.2.2.18.2", + "is_partial": false, + "lines": [ + "StateUsage =", + " OccurrenceUsagePrefix 'state'", + " ActionUsageDeclaration StateUsageBody" + ], + "name": "StateUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "StateUsage", + "clause_id": "8.2.2.18.2", + "is_partial": false, + "lines": [ + "StateUsageBody : StateUsage =", + " ';'", + " | ( isParallel ?= 'parallel' )?", + " '{' StateBodyItem* '}'" + ], + "name": "StateUsageBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "ExhibitStateUsage", + "clause_id": "8.2.2.18.2", + "is_partial": false, + "lines": [ + "ExhibitStateUsage =", + " OccurrenceUsagePrefix 'exhibit'", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'state' UsageDeclaration )", + " ValuePart? StateUsageBody" + ], + "name": "ExhibitStateUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.18.3", + "lines": [ + "Clause 8.2.2.18.3 Transition Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionUsage =", + " 'transition' ( UsageDeclaration 'first' )?", + " ownedRelationship += FeatureChainMember", + " ownedRelationship += EmptyParameterMember", + " ( ownedRelationship += EmptyParameterMember", + " ownedRelationship += TriggerActionMember )?", + " ( ownedRelationship += GuardExpressionMember )?", + " ( ownedRelationship += EffectBehaviorMember )?", + " 'then' ownedRelationship += TransitionSuccessionMember", + " ActionBody" + ], + "name": "TransitionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TargetTransitionUsage : TransitionUsage =", + " ownedRelationship += EmptyParameterMember", + " ( 'transition'", + " ( ownedRelationship += EmptyParameterMember", + " ownedRelationship += TriggerActionMember )?", + " ( ownedRelationship += GuardExpressionMember )?", + " ( ownedRelationship += EffectBehaviorMember )?", + " | ownedRelationship += EmptyParameterMember", + " ownedRelationship += TriggerActionMember", + " ( ownedRelationship += GuardExpressionMember )?", + " ( ownedRelationship += EffectBehaviorMember )?", + " | ownedRelationship += GuardExpressionMember", + " ( ownedRelationship += EffectBehaviorMember )?", + " )?", + " 'then' ownedRelationship += TransitionSuccessionMember", + " ActionBody" + ], + "name": "TargetTransitionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionFeatureMembership", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TriggerActionMember : TransitionFeatureMembership =", + " 'accept' { kind = 'trigger' } ownedRelatedElement += TriggerAction" + ], + "name": "TriggerActionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TriggerAction : AcceptActionUsage =", + " AcceptParameterPart" + ], + "name": "TriggerAction" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionFeatureMembership", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "GuardExpressionMember : TransitionFeatureMembership =", + " 'if' { kind = 'guard' } ownedRelatedElement += OwnedExpression" + ], + "name": "GuardExpressionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionFeatureMembership", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "EffectBehaviorMember : TransitionFeatureMembership =", + " 'do' { kind = 'effect' } ownedRelatedElement += EffectBehaviorUsage" + ], + "name": "EffectBehaviorMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "EffectBehaviorUsage : ActionUsage =", + " EmptyActionUsage", + " | TransitionPerformActionUsage", + " | TransitionAcceptActionUsage", + " | TransitionSendActionUsage", + " | TransitionAssignmentActionUsage" + ], + "name": "EffectBehaviorUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "PerformActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionPerformActionUsage : PerformActionUsage =", + " PerformActionUsageDeclaration ( '{' ActionBodyItem* '}' )?" + ], + "name": "TransitionPerformActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionAcceptActionUsage : AcceptActionUsage =", + " AcceptNodeDeclaration ( '{' ActionBodyItem* '}' )?" + ], + "name": "TransitionAcceptActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "SendActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionSendActionUsage : SendActionUsage =", + " SendNodeDeclaration ( '{' ActionBodyItem* '}' )?" + ], + "name": "TransitionSendActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AssignmentActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionAssignmentActionUsage : AssignmentActionUsage =", + " AssignmentNodeDeclaration ( '{' ActionBodyItem* '}' )?" + ], + "name": "TransitionAssignmentActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionSuccessionMember : OwningMembership =", + " ownedRelatedElement += TransitionSuccession" + ], + "name": "TransitionSuccessionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Succession", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionSuccession : Succession =", + " ownedRelationship += EmptyEndMember", + " ownedRelationship += ConnectorEndMember" + ], + "name": "TransitionSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "EmptyEndMember : EndFeatureMembership =", + " ownedRelatedElement += EmptyFeature" + ], + "name": "EmptyEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "EmptyFeature : ReferenceUsage =", + " {}" + ], + "name": "EmptyFeature" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.19", + "lines": [ + "Clause 8.2.2.19 Calculations Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "CalculationDefinition", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "CalculationDefinition =", + " OccurrenceDefinitionPrefix 'calc' 'def'", + " DefinitionDeclaration CalculationBody" + ], + "name": "CalculationDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "CalculationUsage", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "CalculationUsage : CalculationUsage =", + " OccurrenceUsagePrefix 'calc'", + " ActionUsageDeclaration CalculationBody" + ], + "name": "CalculationUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "CalculationBody : Type =", + " ';' | '{' CalculationBodyPart '}'" + ], + "name": "CalculationBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "CalculationBodyPart : Type =", + " CalculationBodyItem*", + " ( ownedRelationship += ResultExpressionMember )?" + ], + "name": "CalculationBodyPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "CalculationBodyItem : Type =", + " ActionBodyItem", + " | ownedRelationship += ReturnParameterMember" + ], + "name": "CalculationBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReturnParameterMembership", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "ReturnParameterMember : ReturnParameterMembership =", + " MemberPrefix? 'return' ownedRelatedElement += UsageElement" + ], + "name": "ReturnParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ResultExpressionMembership", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "ResultExpressionMember : ResultExpressionMembership =", + " MemberPrefix? ownedRelatedElement += OwnedExpression" + ], + "name": "ResultExpressionMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.20", + "lines": [ + "Clause 8.2.2.20 Constraints Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ConstraintDefinition", + "clause_id": "8.2.2.20", + "is_partial": false, + "lines": [ + "ConstraintDefinition =", + " OccurrenceDefinitionPrefix 'constraint' 'def'", + " DefinitionDeclaration CalculationBody" + ], + "name": "ConstraintDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConstraintUsage", + "clause_id": "8.2.2.20", + "is_partial": false, + "lines": [ + "ConstraintUsage =", + " OccurrenceUsagePrefix 'constraint'", + " ConstraintUsageDeclaration CalculationBody" + ], + "name": "ConstraintUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AssertConstraintUsage", + "clause_id": "8.2.2.20", + "is_partial": false, + "lines": [ + "AssertConstraintUsage =", + " OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' )?", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'constraint' ConstraintUsageDeclaration )", + " CalculationBody" + ], + "name": "AssertConstraintUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConstraintUsage", + "clause_id": "8.2.2.20", + "is_partial": false, + "lines": [ + "ConstraintUsageDeclaration : ConstraintUsage =", + " UsageDeclaration ValuePart?" + ], + "name": "ConstraintUsageDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.21", + "lines": [ + "Clause 8.2.2.21 Requirements Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.21.1", + "lines": [ + "Clause 8.2.2.21.1 Requirement Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementDefinition", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementDefinition =", + " OccurrenceDefinitionPrefix 'requirement' 'def'", + " DefinitionDeclaration RequirementBody" + ], + "name": "RequirementDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementBody : Type =", + " ';' | '{' RequirementBodyItem* '}'" + ], + "name": "RequirementBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementBodyItem : Type =", + " DefinitionBodyItem", + " | ownedRelationship += SubjectMember", + " | ownedRelationship += RequirementConstraintMember", + " | ownedRelationship += FramedConcernMember", + " | ownedRelationship += RequirementVerificationMember", + " | ownedRelationship += ActorMember", + " | ownedRelationship += StakeholderMember" + ], + "name": "RequirementBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "SubjectMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "SubjectMember : SubjectMembership =", + " MemberPrefix ownedRelatedElement += SubjectUsage" + ], + "name": "SubjectMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "SubjectUsage : ReferenceUsage =", + " 'subject' UsageExtensionKeyword* Usage" + ], + "name": "SubjectUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementConstraintMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementConstraintMember : RequirementConstraintMembership =", + " MemberPrefix? RequirementKind", + " ownedRelatedElement += RequirementConstraintUsage" + ], + "name": "RequirementConstraintMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementConstraintMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementKind : RequirementConstraintMembership =", + " 'assume' { kind = 'assumption' }", + " | 'require' { kind = 'requirement' }" + ], + "name": "RequirementKind" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConstraintUsage", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementConstraintUsage : ConstraintUsage =", + " ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart? RequirementBody", + " | ( UsageExtensionKeyword* 'constraint'", + " | UsageExtensionKeyword+ )", + " ConstraintUsageDeclaration CalculationBody" + ], + "name": "RequirementConstraintUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "FramedConcernMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "FramedConcernMember : FramedConcernMembership =", + " MemberPrefix? 'frame'", + " ownedRelatedElement += FramedConcernUsage" + ], + "name": "FramedConcernMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConcernUsage", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "FramedConcernUsage : ConcernUsage =", + " ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart? CalculationBody", + " | ( UsageExtensionKeyword* 'concern'", + " | UsageExtensionKeyword+ )", + " CalculationUsageDeclaration CalculationBody" + ], + "name": "FramedConcernUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActorMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "ActorMember : ActorMembership =", + " MemberPrefix ownedRelatedElement += ActorUsage" + ], + "name": "ActorMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "PartUsage", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "ActorUsage : PartUsage =", + " 'actor' UsageExtensionKeyword* Usage" + ], + "name": "ActorUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "StakeholderMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "StakeholderMember : StakeholderMembership =", + " MemberPrefix ownedRelatedElement += StakeholderUsage" + ], + "name": "StakeholderMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "PartUsage", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "StakeholderUsage : PartUsage =", + " 'stakeholder' UsageExtensionKeyword* Usage" + ], + "name": "StakeholderUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.21.2", + "lines": [ + "Clause 8.2.2.21.2 Requirement Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementUsage", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "RequirementUsage =", + " OccurrenceUsagePrefix 'requirement'", + " ConstraintUsageDeclaration RequirementBody" + ], + "name": "RequirementUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "SatisfyRequirementUsage", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "SatisfyRequirementUsage =", + " OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' ) 'satisfy'", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'requirement' UsageDeclaration )", + " ValuePart?", + " ( 'by' ownedRelationship += SatisfactionSubjectMember )?", + " RequirementBody" + ], + "name": "SatisfyRequirementUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "SubjectMembership", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "SatisfactionSubjectMember : SubjectMembership =", + " ownedRelatedElement += SatisfactionParameter" + ], + "name": "SatisfactionSubjectMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "SatisfactionParameter : ReferenceUsage =", + " ownedRelationship += SatisfactionFeatureValue" + ], + "name": "SatisfactionParameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "SatisfactionFeatureValue : FeatureValue =", + " ownedRelatedElement += SatisfactionReferenceExpression" + ], + "name": "SatisfactionFeatureValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureReferenceExpression", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "SatisfactionReferenceExpression : FeatureReferenceExpression =", + " ownedRelationship += FeatureChainMember" + ], + "name": "SatisfactionReferenceExpression" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.21.3", + "lines": [ + "Clause 8.2.2.21.3 Concerns" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ConcernDefinition", + "clause_id": "8.2.2.21.3", + "is_partial": false, + "lines": [ + "ConcernDefinition =", + " OccurrenceDefinitionPrefix 'concern' 'def'", + " DefinitionDeclaration RequirementBody" + ], + "name": "ConcernDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConcernUsage", + "clause_id": "8.2.2.21.3", + "is_partial": false, + "lines": [ + "ConcernUsage =", + " OccurrenceUsagePrefix 'concern'", + " ConstraintUsageDeclaration RequirementBody" + ], + "name": "ConcernUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.22", + "lines": [ + "Clause 8.2.2.22 Cases Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "CaseDefinition", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "CaseDefinition =", + " OccurrenceDefinitionPrefix 'case' 'def'", + " DefinitionDeclaration CaseBody" + ], + "name": "CaseDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "CaseUsage", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "CaseUsage =", + " OccurrenceUsagePrefix 'case'", + " ConstraintUsageDeclaration CaseBody" + ], + "name": "CaseUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "CaseBody : Type =", + " ';'", + " | '{' CaseBodyItem*", + " ( ownedRelationship += ResultExpressionMember )?", + " '}'" + ], + "name": "CaseBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "CaseBodyItem : Type =", + " ActionBodyItem", + " | ownedRelationship += SubjectMember", + " | ownedRelationship += ActorMember", + " | ownedRelationship += ObjectiveMember" + ], + "name": "CaseBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "ObjectiveMembership", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "ObjectiveMember : ObjectiveMembership =", + " MemberPrefix 'objective'", + " ownedRelatedElement += ObjectiveRequirementUsage" + ], + "name": "ObjectiveMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementUsage", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "ObjectiveRequirementUsage : RequirementUsage =", + " UsageExtensionKeyword* ConstraintUsageDeclaration", + " RequirementBody" + ], + "name": "ObjectiveRequirementUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.23", + "lines": [ + "Clause 8.2.2.23 Analysis Cases Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "AnalysisCaseDefinition", + "clause_id": "8.2.2.23", + "is_partial": false, + "lines": [ + "AnalysisCaseDefinition =", + " OccurrenceDefinitionPrefix 'analysis' 'def'", + " DefinitionDeclaration CaseBody" + ], + "name": "AnalysisCaseDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "AnalysisCaseUsage", + "clause_id": "8.2.2.23", + "is_partial": false, + "lines": [ + "AnalysisCaseUsage =", + " OccurrenceUsagePrefix 'analysis'", + " ConstraintUsageDeclaration CaseBody" + ], + "name": "AnalysisCaseUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.24", + "lines": [ + "Clause 8.2.2.24 Verification Cases Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "VerificationCaseDefinition", + "clause_id": "8.2.2.24", + "is_partial": false, + "lines": [ + "VerificationCaseDefinition =", + " OccurrenceDefinitionPrefix 'verification' 'def'", + " DefinitionDeclaration CaseBody" + ], + "name": "VerificationCaseDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "VerificationCaseUsage", + "clause_id": "8.2.2.24", + "is_partial": false, + "lines": [ + "VerificationCaseUsage =", + " OccurrenceUsagePrefix 'verification'", + " ConstraintUsageDeclaration CaseBody" + ], + "name": "VerificationCaseUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementVerificationMembership", + "clause_id": "8.2.2.24", + "is_partial": false, + "lines": [ + "RequirementVerificationMember : RequirementVerificationMembership =", + " MemberPrefix 'verify' { kind = 'requirement' }", + " ownedRelatedElement += RequirementVerificationUsage" + ], + "name": "RequirementVerificationMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementUsage", + "clause_id": "8.2.2.24", + "is_partial": false, + "lines": [ + "RequirementVerificationUsage : RequirementUsage =", + " ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecialization* RequirementBody", + " | ( UsageExtensionKeyword* 'requirement'", + " | UsageExtensionKeyword+ )", + " ConstraintUsageDeclaration RequirementBody" + ], + "name": "RequirementVerificationUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.25", + "lines": [ + "Clause 8.2.2.25 Use Cases Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "UseCaseDefinition", + "clause_id": "8.2.2.25", + "is_partial": false, + "lines": [ + "UseCaseDefinition =", + " OccurrenceDefinitionPrefix 'use' 'case' 'def'", + " DefinitionDeclaration CaseBody" + ], + "name": "UseCaseDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "UseCaseUsage", + "clause_id": "8.2.2.25", + "is_partial": false, + "lines": [ + "UseCaseUsage =", + " OccurrenceUsagePrefix 'use' 'case'", + " ConstraintUsageDeclaration CaseBody" + ], + "name": "UseCaseUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "IncludeUseCaseUsage", + "clause_id": "8.2.2.25", + "is_partial": false, + "lines": [ + "IncludeUseCaseUsage =", + " OccurrenceUsagePrefix 'include'", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'use' 'case' UsageDeclaration )", + " ValuePart?", + " CaseBody" + ], + "name": "IncludeUseCaseUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.26", + "lines": [ + "Clause 8.2.2.26 Views and Viewpoints Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.26.1", + "lines": [ + "Clause 8.2.2.26.1 View Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewDefinition", + "clause_id": "8.2.2.26.1", + "is_partial": false, + "lines": [ + "ViewDefinition =", + " OccurrenceDefinitionPrefix 'view' 'def'", + " DefinitionDeclaration ViewDefinitionBody" + ], + "name": "ViewDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewDefinition", + "clause_id": "8.2.2.26.1", + "is_partial": false, + "lines": [ + "ViewDefinitionBody : ViewDefinition =", + " ';' | '{' ViewDefinitionBodyItem* '}'" + ], + "name": "ViewDefinitionBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewDefinition", + "clause_id": "8.2.2.26.1", + "is_partial": false, + "lines": [ + "ViewDefinitionBodyItem : ViewDefinition =", + " DefinitionBodyItem", + " | ownedRelationship += ElementFilterMember", + " | ownedRelationship += ViewRenderingMember" + ], + "name": "ViewDefinitionBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewRenderingMembership", + "clause_id": "8.2.2.26.1", + "is_partial": false, + "lines": [ + "ViewRenderingMember : ViewRenderingMembership =", + " MemberPrefix 'render'", + " ownedRelatedElement += ViewRenderingUsage" + ], + "name": "ViewRenderingMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "RenderingUsage", + "clause_id": "8.2.2.26.1", + "is_partial": false, + "lines": [ + "ViewRenderingUsage : RenderingUsage =", + " ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " UsageBody", + " | ( UsageExtensionKeyword* 'rendering'", + " | UsageExtensionKeyword+ )", + " Usage" + ], + "name": "ViewRenderingUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.26.2", + "lines": [ + "Clause 8.2.2.26.2 View Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewUsage", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "ViewUsage =", + " OccurrenceUsagePrefix 'view'", + " UsageDeclaration? ValuePart?", + " ViewBody" + ], + "name": "ViewUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewUsage", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "ViewBody : ViewUsage =", + " ';' | '{' ViewBodyItem* '}'" + ], + "name": "ViewBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewUsage", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "ViewBodyItem : ViewUsage =", + " DefinitionBodyItem", + " | ownedRelationship += ElementFilterMember", + " | ownedRelationship += ViewRenderingMember", + " | ownedRelationship += Expose" + ], + "name": "ViewBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expose", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "Expose =", + " 'expose' ( MembershipExpose | NamespaceExpose )", + " RelationshipBody" + ], + "name": "Expose" + }, + { + "@type": "Production", + "abstract_syntax_type": "MembershipExpose", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "MembershipExpose =", + " MembershipImport" + ], + "name": "MembershipExpose" + }, + { + "@type": "Production", + "abstract_syntax_type": "NamespaceExpose", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "NamespaceExpose =", + " NamespaceImport" + ], + "name": "NamespaceExpose" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.26.3", + "lines": [ + "Clause 8.2.2.26.3 Viewpoints" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewpointDefinition", + "clause_id": "8.2.2.26.3", + "is_partial": false, + "lines": [ + "ViewpointDefinition =", + " OccurrenceDefinitionPrefix 'viewpoint' 'def'", + " DefinitionDeclaration RequirementBody" + ], + "name": "ViewpointDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewpointUsage", + "clause_id": "8.2.2.26.3", + "is_partial": false, + "lines": [ + "ViewpointUsage =", + " OccurrenceUsagePrefix 'viewpoint'", + " ConstraintUsageDeclaration RequirementBody" + ], + "name": "ViewpointUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.26.4", + "lines": [ + "Clause 8.2.2.26.4 Renderings" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "RenderingDefinition", + "clause_id": "8.2.2.26.4", + "is_partial": false, + "lines": [ + "RenderingDefinition =", + " OccurrenceDefinitionPrefix 'rendering' 'def'", + " Definition" + ], + "name": "RenderingDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "RenderingUsage", + "clause_id": "8.2.2.26.4", + "is_partial": false, + "lines": [ + "RenderingUsage =", + " OccurrenceUsagePrefix 'rendering'", + " Usage" + ], + "name": "RenderingUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.27", + "lines": [ + "Clause 8.2.2.27 Metadata Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataDefinition", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataDefinition =", + " ( isAbstract ?= 'abstract')? DefinitionExtensionKeyword*", + " 'metadata' 'def' Definition" + ], + "name": "MetadataDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "PrefixMetadataAnnotation : Annotation =", + " '#' annotatingElement = PrefixMetadataUsage", + " { ownedRelatedElement += annotatingElement }" + ], + "name": "PrefixMetadataAnnotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "PrefixMetadataMember : OwningMembership =", + " '#' ownedRelatedElement = PrefixMetadataUsage" + ], + "name": "PrefixMetadataMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataUsage", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "PrefixMetadataUsage : MetadataUsage =", + " ownedRelationship += OwnedFeatureTyping" + ], + "name": "PrefixMetadataUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataUsage", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataUsage =", + " UsageExtensionKeyword* ( '@' | 'metadata' )", + " MetadataUsageDeclaration", + " ( 'about' ownedRelationship += Annotation", + " ( ',' ownedRelationship += Annotation )*", + " )?", + " MetadataBody" + ], + "name": "MetadataUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataUsage", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataUsageDeclaration : MetadataUsage =", + " ( Identification ( ':' | 'typed' 'by' ) )?", + " ownedRelationship += OwnedFeatureTyping" + ], + "name": "MetadataUsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataBody : Type =", + " ';' |", + " '{' ( ownedRelationship += DefinitionMember", + " | ownedRelationship += MetadataBodyUsageMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import", + " )*", + " '}'" + ], + "name": "MetadataBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataBodyUsageMember : FeatureMembership =", + " ownedMemberFeature = MetadataBodyUsage" + ], + "name": "MetadataBodyUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataBodyUsage : ReferenceUsage =", + " 'ref'? ( ':>>' | 'redefines' )? ownedRelationship += OwnedRedefinition", + " FeatureSpecializationPart? ValuePart?", + " MetadataBody" + ], + "name": "MetadataBodyUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Definition", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "ExtendedDefinition : Definition =", + " BasicDefinitionPrefix? DefinitionExtensionKeyword+", + " 'def' Definition" + ], + "name": "ExtendedDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "ExtendedUsage : Usage =", + " UnextendedUsagePrefix UsageExtensionKeyword+", + " Usage" + ], + "name": "ExtendedUsage" + }, + { + "@type": "Comment", + "clause_id": "8.2.2.27", + "lines": [ + "// End of BNF", + "" + ] + } +] \ No newline at end of file diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected-marked_up.kebnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected-marked_up.kebnf new file mode 100644 index 000000000..4f1d4ac2a --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected-marked_up.kebnf @@ -0,0 +1,1711 @@ +// Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html +// Generated by bnf_grammar_processor at: 2025-11-28T15:06:37Z + +// Manual corrections by HP de Koning + +// Part 2 - Systems Modeling Language (SysML) + +// Clause 8.2.2 Textual Notation + +// Clause 8.2.2.1 Textual Notation Overview + +// Clause 8.2.2.1.1 EBNF Conventions + +// Clause 8.2.2.1.2 Lexical Structure + +RESERVED_KEYWORD = + 'about' | 'abstract' | 'accept' | 'action' | 'actor' | 'after' | 'alias' | 'all' | 'allocate' | 'allocation' + | 'analysis' | 'and' | 'as' | 'assert' | 'assign' | 'assume' | 'at' | 'attribute' | 'bind' | 'binding' | 'by' | 'calc' + | 'case' | 'comment' | 'concern' | 'connect' | 'connection' | 'constant' | 'constraint' | 'crosses' | 'decide' + | 'def' | 'default' | 'defined' | 'dependency' | 'derived' | 'do' | 'doc' | 'else' | 'end' | 'entry' | 'enum' + | 'event' | 'exhibit' | 'exit' | 'expose' | 'false' | 'filter' | 'first' | 'flow' | 'for' | 'fork' | 'frame' | 'from' + | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'include' | 'individual' | 'inout' | 'interface' | 'istype' + | 'item' | 'join' | 'language' | 'library' | 'locale' | 'loop' | 'merge' | 'message' | 'meta' | 'metadata' + | 'nonunique' | 'not' | 'null' | 'objective' | 'occurrence' | 'of' | 'or' | 'ordered' | 'out' | 'package' | 'parallel' + | 'part' | 'perform' | 'port' | 'private' | 'protected' | 'public' | 'redefines' | 'ref' | 'references' | 'render' + | 'rendering' | 'rep' | 'require' | 'requirement' | 'return' | 'satisfy' | 'send' | 'snapshot' | 'specializes' + | 'stakeholder' | 'standard' | 'state' | 'subject' | 'subsets' | 'succession' | 'terminate' | 'then' | 'timeslice' + | 'to' | 'transition' | 'true' | 'until' | 'use' | 'variant' | 'variation' | 'verification' | 'verify' | 'via' + | 'view' | 'viewpoint' | 'when' | 'while' | 'xor' + +DEFINED_BY = ':' | 'defined' 'by' + +SPECIALIZES = ':>' | 'specializes' + +SUBSETS = ':>' | 'subsets' + +REFERENCES = '::>' | 'references' + +CROSSES = '=>' | 'crosses' + +REDEFINES = ':>>' | 'redefines' + +// Clause 8.2.2.2 Elements and Relationships Textual Notation + +Identification : Element = + ( '<' declaredShortName = NAME '>' )? + ( declaredName = NAME )? + +RelationshipBody : Relationship = + ';' | '{' ( ownedRelationship += OwnedAnnotation )* '}' + +// Clause 8.2.2.3 Dependencies Textual Notation + +Dependency = + ( ownedRelationship += PrefixMetadataAnnotation )* + 'dependency' DependencyDeclaration + RelationshipBody + +DependencyDeclaration = + ( Identification 'from' )? + client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to' + supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )* + +// Clause 8.2.2.4 Annotations Textual Notation + +// Clause 8.2.2.4.1 Annotations + +Annotation = + annotatedElement = [QualifiedName] + +OwnedAnnotation : Annotation = + ownedRelatedElement += AnnotatingElement + +AnnotatingMember : OwningMembership = + ownedRelatedElement += AnnotatingElement + +AnnotatingElement = + Comment + | Documentation + | TextualRepresentation + | MetadataFeature + +// Clause 8.2.2.4.2 Comments and Documentation + +Comment = + ( 'comment' Identification + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + )? + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +Documentation = + 'doc' Identification + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +// Clause 8.2.2.4.3 Textual Representation + +TextualRepresentation = + ( 'rep' Identification )? + 'language' language = STRING_VALUE body = REGULAR_COMMENT + +// Clause 8.2.2.5 Namespaces and Packages Textual Notation + +// Clause 8.2.2.5.1 Packages + +RootNamespace : Namespace = + PackageBodyElement* + +Package = + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +LibraryPackage = + ( isStandard ?= 'standard' ) 'library' + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +PackageDeclaration : Package = + 'package' Identification + +PackageBody : Package = + ';' | '{' PackageBodyElement* '}' + +PackageBodyElement : Package = + ownedRelationship += PackageMember + | ownedRelationship += ElementFilterMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +MemberPrefix : Membership = + ( visibility = VisibilityIndicator )? + +PackageMember : OwningMembership = + MemberPrefix + ( ownedRelatedElement += DefinitionElement + | ownedRelatedElement = UsageElement ) + +ElementFilterMember : ElementFilterMembership = + MemberPrefix + 'filter' ownedRelatedElement += OwnedExpression ';' + +AliasMember : Membership = + MemberPrefix + 'alias' ( '<' memberShortName = NAME '>' )? + ( memberName = NAME )? + 'for' memberElement = [QualifiedName] + RelationshipBody + +Import = + visibility = VisibilityIndicator + 'import' ( isImportAll ?= 'all' )? + ImportDeclaration + RelationshipBody + +ImportDeclaration : Import = + MembershipImport | NamespaceImport + +MembershipImport = + importedMembership = [QualifiedName] + ( '::' isRecursive ?= '**' )? + +NamespaceImport = + importedNamespace = [QualifiedName] '::' '*' + ( '::' isRecursive ?= '**' )? + | importedNamespace = FilterPackage + { ownedRelatedElement += importedNamespace } + +FilterPackage : Package = + ownedRelationship += FilterPackageImport + ( ownedRelationship += FilterPackageMember )+ + +FilterPackageMember : ElementFilterMembership = + '[' ownedRelatedElement += OwnedExpression ']' + +VisibilityIndicator : VisibilityKind = + 'public' | 'private' | 'protected' + +// Clause 8.2.2.5.2 Package Elements + +DefinitionElement : Element = + Package + | LibraryPackage + | AnnotatingElement + | Dependency + | AttributeDefinition + | EnumerationDefinition + | OccurrenceDefinition + | IndividualDefinition + | ItemDefinition + | PartDefinition + | ConnectionDefinition + | FlowDefinition + | InterfaceDefinition + | PortDefinition + | ActionDefinition + | CalculationDefinition + | StateDefinition + | ConstraintDefinition + | RequirementDefinition + | ConcernDefinition + | CaseDefinition + | AnalysisCaseDefinition + | VerificationCaseDefinition + | UseCaseDefinition + | ViewDefinition + | ViewpointDefinition + | RenderingDefinition + | MetadataDefinition + | ExtendedDefinition + +UsageElement : Usage = + NonOccurrenceUsageElement + | OccurrenceUsageElement + +// Clause 8.2.2.6 Definition and Usage Textual Notation + +// Clause 8.2.2.6.1 Definitions + +BasicDefinitionPrefix = + isAbstract ?= 'abstract' | isVariation ?= 'variation' + +DefinitionExtensionKeyword : Definition = + ownedRelationship += PrefixMetadataMember + +DefinitionPrefix : Definition = + BasicDefinitionPrefix? DefinitionExtensionKeyword* + +Definition = + DefinitionDeclaration DefinitionBody + +DefinitionDeclaration : Definition = + Identification SubclassificationPart? + +DefinitionBody : Type = + ';' | '{' DefinitionBodyItem* '}' + +DefinitionBodyItem : Type = + ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += NonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += OccurrenceUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +DefinitionMember : OwningMembership = + MemberPrefix + ownedRelatedElement += DefinitionElement + +VariantUsageMember : VariantMembership = + MemberPrefix 'variant' + ownedVariantUsage = VariantUsageElement + +NonOccurrenceUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += NonOccurrenceUsageElement + +OccurrenceUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += OccurrenceUsageElement + +StructureUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += StructureUsageElement + +BehaviorUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += BehaviorUsageElement + +// Clause 8.2.2.6.2 Usages + +FeatureDirection : FeatureDirectionKind = + 'in' | 'out' | 'inout' + +RefPrefix : Usage = + ( direction = FeatureDirection )? + ( isDerived ?= 'derived' )? + ( isAbstract ?= 'abstract' | isVariation ?= 'variation' )? + ( isConstant ?= 'constant' )? + +BasicUsagePrefix : Usage = + RefPrefix + ( isReference ?= 'ref' )? + +EndUsagePrefix : Usage = + isEnd ?= 'end' ( ownedRelationship += OwnedCrossFeatureMember )? + +// (See Note 1) + +OwnedCrossFeatureMember : OwningMembership = + ownedRelatedElement += OwnedCrossFeature + +OwnedCrossFeature : ReferenceUsage = + BasicUsagePrefix UsageDeclaration + +UsageExtensionKeyword : Usage = + ownedRelationship += PrefixMetadataMember + +UnextendedUsagePrefix : Usage = + EndUsagePrefix | BasicUsagePrefix + +UsagePrefix : Usage = + UnextendedUsagePrefix UsageExtensionKeyword* + +Usage = + UsageDeclaration UsageCompletion + +UsageDeclaration : Usage = + Identification FeatureSpecializationPart? + +UsageCompletion : Usage = + ValuePart? UsageBody + +UsageBody : Usage = + DefinitionBody + +ValuePart : Feature = + ownedRelationship += FeatureValue + +FeatureValue = + ( '=' + | isInitial ?= ':=' + | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )? + ) + ownedRelatedElement += OwnedExpression + +// Notes: +//
          +//
        1. A Usage parsed with isEnd = true for which mayTimeVary = true must also have isConstant set to true, even though this is not explicitly notated in the textual notation, in order to satisfy the KerML constraint checkFeatureEndIsConstant.
        + +// Clause 8.2.2.6.3 Reference Usages + +DefaultReferenceUsage : ReferenceUsage = + RefPrefix Usage + +ReferenceUsage = + ( EndUsagePrefix | RefPrefix ) + 'ref' Usage + +VariantReference : ReferenceUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecialization* UsageBody + +// Clause 8.2.2.6.4 Body Elements + +NonOccurrenceUsageElement : Usage = + DefaultReferenceUsage + | ReferenceUsage + | AttributeUsage + | EnumerationUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + | ExtendedUsage + +OccurrenceUsageElement : Usage = + StructureUsageElement | BehaviorUsageElement + +StructureUsageElement : Usage = + OccurrenceUsage + | IndividualUsage + | PortionUsage + | EventOccurrenceUsage + | ItemUsage + | PartUsage + | ViewUsage + | RenderingUsage + | PortUsage + | ConnectionUsage + | InterfaceUsage + | AllocationUsage + | Message + | FlowUsage + | SuccessionFlowUsage + +BehaviorUsageElement : Usage = + ActionUsage + | CalculationUsage + | StateUsage + | ConstraintUsage + | RequirementUsage + | ConcernUsage + | CaseUsage + | AnalysisCaseUsage + | VerificationCaseUsage + | UseCaseUsage + | ViewpointUsage + | PerformActionUsage + | ExhibitStateUsage + | IncludeUseCaseUsage + | AssertConstraintUsage + | SatisfyRequirementUsage + +VariantUsageElement : Usage = + VariantReference + | ReferenceUsage + | AttributeUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + | OccurrenceUsage + | IndividualUsage + | PortionUsage + | EventOccurrenceUsage + | ItemUsage + | PartUsage + | ViewUsage + | RenderingUsage + | PortUsage + | ConnectionUsage + | InterfaceUsage + | AllocationUsage + | Message + | FlowUsage + | SuccessionFlowUsage + | BehaviorUsageElement + +// Clause 8.2.2.6.5 Specialization + +SubclassificationPart : Classifier = + SPECIALIZES ownedRelationship += OwnedSubclassification + ( ',' ownedRelationship += OwnedSubclassification )* + +OwnedSubclassification : Subclassification = + superClassifier = [QualifiedName] + +FeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? FeatureSpecialization* + | MultiplicityPart FeatureSpecialization* + +FeatureSpecialization : Feature = + Typings | Subsettings | References | Crosses | Redefinitions + +Typings : Feature = + TypedBy ( ',' ownedRelationship += FeatureTyping )* + +TypedBy : Feature = + DEFINED_BY ownedRelationship += FeatureTyping + +FeatureTyping = + OwnedFeatureTyping | ConjugatedPortTyping + +OwnedFeatureTyping : FeatureTyping = + type = [QualifiedName] + | type = OwnedFeatureChain + { ownedRelatedElement += type } + +Subsettings : Feature = + Subsets ( ',' ownedRelationship += OwnedSubsetting )* + +Subsets : Feature = + SUBSETS ownedRelationship += OwnedSubsetting + +OwnedSubsetting : Subsetting = + subsettedFeature = [QualifiedName] + | subsettedFeature = OwnedFeatureChain + { ownedRelatedElement += subsettedFeature } + +References : Feature = + REFERENCES ownedRelationship += OwnedReferenceSubsetting + +OwnedReferenceSubsetting : ReferenceSubsetting = + referencedFeature = [QualifiedName] + | referencedFeature = OwnedFeatureChain + { ownedRelatedElement += referenceFeature } + +Crosses : Feature = + CROSSES ownedRelationship += OwnedCrossSubsetting + +OwnedCrossSubsetting : CrossSubsetting = + crossedFeature = [QualifiedName] + | crossedFeature = OwnedFeatureChain + { ownedRelatedElement += crossedFeature } + +Redefinitions : Feature = + Redefines ( ',' ownedRelationship += OwnedRedefinition )* + +Redefines : Feature = + REDEFINES ownedRelationship += OwnedRedefinition + +OwnedRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + | redefinedFeature = OwnedFeatureChain + { ownedRelatedElement += redefinedFeature } + +OwnedFeatureChain : Feature = + ownedRelationship += OwnedFeatureChaining + ( '.' ownedRelationship += OwnedFeatureChaining )+ + +OwnedFeatureChaining : FeatureChaining = + chainingFeature = [QualifiedName] + +// Clause 8.2.2.6.6 Multiplicity + +MultiplicityPart : Feature = + ownedRelationship += OwnedMultiplicity + | ( ownedRelationship += OwnedMultiplicity )? + ( isOrdered ?= 'ordered' ( { isUnique = false } 'nonunique' )? + | { isUnique = false } 'nonunique' ( isOrdered ?= 'ordered' )? ) + +OwnedMultiplicity : OwningMembership = + ownedRelatedElement += MultiplicityRange + +MultiplicityRange = + '[' ( ownedRelationship += MultiplicityExpressionMember '..' )? + ownedRelationship += MultiplicityExpressionMember ']' + +MultiplicityExpressionMember : OwningMembership = + ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression ) + +// Clause 8.2.2.7 Attributes Textual Notation + +AttributeDefinition : AttributeDefinition = + DefinitionPrefix 'attribute' 'def' Definition + +AttributeUsage : AttributeUsage = + UsagePrefix 'attribute' Usage + +// Clause 8.2.2.8 Enumerations Textual Notation + +EnumerationDefinition = + DefinitionExtensionKeyword* + 'enum' 'def' DefinitionDeclaration EnumerationBody + +EnumerationBody : EnumerationDefinition = + ';' + | '{' ( ownedRelationship += AnnotatingMember + | ownedRelationship += EnumerationUsageMember )* + '}' + +EnumerationUsageMember : VariantMembership = + MemberPrefix ownedRelatedElement += EnumeratedValue + +EnumeratedValue : EnumerationUsage = + 'enum'? Usage + +EnumerationUsage : EnumerationUsage = + UsagePrefix 'enum' Usage + +// Clause 8.2.2.9 Occurrences Textual Notation + +// Clause 8.2.2.9.1 Occurrence Definitions + +OccurrenceDefinitionPrefix : OccurrenceDefinition = + BasicDefinitionPrefix? + ( isIndividual ?= 'individual' + ownedRelationship += EmptyMultiplicityMember + )? + DefinitionExtensionKeyword* + +OccurrenceDefinition = + OccurrenceDefinitionPrefix 'occurrence' 'def' Definition + +IndividualDefinition : OccurrenceDefinition = + BasicDefinitionPrefix? isIndividual ?= 'individual' + DefinitionExtensionKeyword* 'def' Definition + ownedRelationship += EmptyMultiplicityMember + +EmptyMultiplicityMember : OwningMembership = + ownedRelatedElement += EmptyMultiplicity + +EmptyMultiplicity : Multiplicity = + { } + +// Clause 8.2.2.9.2 Occurrence Usages + +OccurrenceUsagePrefix : OccurrenceUsage = + BasicUsagePrefix + ( isIndividual ?= 'individual' )? + ( portionKind = PortionKind + { isPortion = true } + )? + UsageExtensionKeyword* + +OccurrenceUsage = + OccurrenceUsagePrefix 'occurrence' Usage + +IndividualUsage : OccurrenceUsage = + BasicUsagePrefix isIndividual ?= 'individual' + UsageExtensionKeyword* Usage + +PortionUsage : OccurrenceUsage = + BasicUsagePrefix ( isIndividual ?= 'individual' )? + portionKind = PortionKind + UsageExtensionKeyword* Usage + { isPortion = true } + +PortionKind = + 'snapshot' | 'timeslice' + +EventOccurrenceUsage = + OccurrenceUsagePrefix 'event' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'occurrence' UsageDeclaration? ) + UsageCompletion + +// Clause 8.2.2.9.3 Occurrence Successions + +SourceSuccessionMember : FeatureMembership = + 'then' ownedRelatedElement += SourceSuccession + +SourceSuccession : SuccessionAsUsage = + ownedRelationship += SourceEndMember + +SourceEndMember : EndFeatureMembership = + ownedRelatedElement += SourceEnd + +SourceEnd : ReferenceUsage = + ( ownedRelationship += OwnedMultiplicity )? + +// Clause 8.2.2.10 Items Textual Notation + +ItemDefinition = + OccurrenceDefinitionPrefix + 'item' 'def' Definition + +ItemUsage = + OccurrenceUsagePrefix 'item' Usage + +// Clause 8.2.2.11 Parts Textual Notation + +PartDefinition = + OccurrenceDefinitionPrefix 'part' 'def' Definition + +PartUsage = + OccurrenceUsagePrefix 'part' Usage + +// Clause 8.2.2.12 Ports Textual Notation + +PortDefinition = + DefinitionPrefix 'port' 'def' Definition + ownedRelationship += ConjugatedPortDefinitionMember + { conjugatedPortDefinition.ownedPortConjugator. + originalPortDefinition = this } + +// (See Note 1) + +ConjugatedPortDefinitionMember : OwningMembership = + ownedRelatedElement += ConjugatedPortDefinition + +ConjugatedPortDefinition = + ownedRelationship += PortConjugation + +PortConjugation = + {} + +PortUsage = + OccurrenceUsagePrefix 'port' Usage + +ConjugatedPortTyping : ConjugatedPortTyping = + '~' originalPortDefinition = ~[QualifiedName] + +// (See Note 2) + +// Notes: +//
          +//
        1. Even though it is not explicitly represented in the text, a PortDefinition is always parsed as containing a nested ConjugatedPortDefinition with a PortDefinition Relationship pointing back to the containing PortDefinition. The abstract syntax for ConjugatedPortDefinition sets its effectiveName to the name of its originalPortDefinition with the symbol ~ prepended to it (see 8.3.12.2). (See also 8.4.8.1.)
        2. +//
        3. The notation ~[QualifiedName] indicates that a QualifiedName shall be parsed from the input text, but that it shall be resolved as if it was the qualified name constructed as follows: +//
            +//
          • Extract the last segment name of the given QualifiedName and prepend the symbol ~ to it.
          • +//
          • Append the name so constructed to the end of the entire original QualifiedName.
          For example, if the ConjugatedPortTyping is ~A::B::C, then the given QualifiedName is A::B::C, and ~[QualifiedName] is resolved as A::B::C::'~C'. Alternatively, a conforming tool may first resolve the given QualifiedName as usual to a PortDefinition and then use the conjugatedPortDefinition of this PortDefinition as the resolution of ~[QualifiedName].
        + +// Clause 8.2.2.13 Connections Textual Notation + +// Clause 8.2.2.13.1 Connection Definition and Usage + +ConnectionDefinition = + OccurrenceDefinitionPrefix 'connection' 'def' Definition + +ConnectionUsage = + OccurrenceUsagePrefix + ( 'connection' UsageDeclaration ValuePart? + ( 'connect' ConnectorPart )? + | 'connect' ConnectorPart ) + UsageBody + +ConnectorPart : ConnectionUsage = + BinaryConnectorPart | NaryConnectorPart + +BinaryConnectorPart : ConnectionUsage = + ownedRelationship += ConnectorEndMember 'to' + ownedRelationship += ConnectorEndMember + +NaryConnectorPart : ConnectionUsage = + '(' ownedRelationship += ConnectorEndMember ',' + ownedRelationship += ConnectorEndMember + ( ',' ownedRelationship += ConnectorEndMember )* ')' + +ConnectorEndMember : EndFeatureMembership = + ownedRelatedElement += ConnectorEnd + +ConnectorEnd : ReferenceUsage = + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +OwnedCrossMultiplicityMember : OwningMembership = + ownedRelatedElement += OwnedCrossMultiplicity + +OwnedCrossMultiplicity : Feature = + ownedRelationship += OwnedMultiplicity + +// Clause 8.2.2.13.2 Binding Connectors + +BindingConnectorAsUsage = + UsagePrefix ( 'binding' UsageDeclaration )? + 'bind' ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember + UsageBody + +// Clause 8.2.2.13.3 Successions + +SuccessionAsUsage = + UsagePrefix ( 'succession' UsageDeclaration )? + 'first' s.ownedRelationship += ConnectorEndMember + 'then' s.ownedRelationship += ConnectorEndMember + UsageBody + +// Clause 8.2.2.14 Interfaces Textual Notation + +// Clause 8.2.2.14.1 Interface Definitions + +InterfaceDefinition = + OccurrenceDefinitionPrefix 'interface' 'def' + DefinitionDeclaration InterfaceBody + +InterfaceBody : Type = + ';' | '{' InterfaceBodyItem* '}' + +InterfaceBodyItem : Type = + ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += InterfaceNonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += InterfaceOccurrenceUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +InterfaceNonOccurrenceUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += InterfaceNonOccurrenceUsageElement + +InterfaceNonOccurrenceUsageElement : Usage = + ReferenceUsage + | AttributeUsage + | EnumerationUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + +InterfaceOccurrenceUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += InterfaceOccurrenceUsageElement + +InterfaceOccurrenceUsageElement : Usage = + DefaultInterfaceEnd | StructureUsageElement | BehaviorUsageElement + +DefaultInterfaceEnd : PortUsage = + isEnd ?= 'end' Usage + +// Clause 8.2.2.14.2 Interface Usages + +InterfaceUsage = + OccurrenceUsagePrefix 'interface' + InterfaceUsageDeclaration InterfaceBody + +InterfaceUsageDeclaration : InterfaceUsage = + UsageDeclaration ValuePart? + ( 'connect' InterfacePart )? + | InterfacePart + +InterfacePart : InterfaceUsage = + BinaryInterfacePart | NaryInterfacePart + +BinaryInterfacePart : InterfaceUsage = + ownedRelationship += InterfaceEndMember 'to' + ownedRelationship += InterfaceEndMember + +NaryInterfacePart : InterfaceUsage = + '(' ownedRelationship += InterfaceEndMember ',' + ownedRelationship += InterfaceEndMember + ( ',' ownedRelationship += InterfaceEndMember )* ')' + +InterfaceEndMember : EndFeatureMembership = + ownedRelatedElement += InterfaceEnd + +InterfaceEnd : PortUsage = + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +// Clause 8.2.2.15 Allocations Textual Notation + +AllocationDefinition = + OccurrenceDefinitionPrefix 'allocation' 'def' Definition + +AllocationUsage = + OccurrenceUsagePrefix + AllocationUsageDeclaration UsageBody + +AllocationUsageDeclaration : AllocationUsage = + 'allocation' UsageDeclaration + ( 'allocate' ConnectorPart )? + | 'allocate' ConnectorPart + +// Clause 8.2.2.16 Flows Textual Notation + +FlowDefinition = + OccurrenceDefinitionPrefix 'flow' 'def' Definition + +Message : FlowUsage = + OccurrenceUsagePrefix 'message' + MessageDeclaration DefinitionBody + { isAbstract = true } + +MessageDeclaration : FlowUsage = + UsageDeclaration ValuePart? + ( 'of' ownedRelationship += FlowPayloadFeatureMember )? + ( 'from' ownedRelationship += MessageEventMember + 'to' ownedRelationship += MessageEventMember + )? + | ownedRelationship += MessageEventMember 'to' + ownedRelationship += MessageEventMember + +MessageEventMember : ParameterMembership = + ownedRelatedElement += MessageEvent + +MessageEvent : EventOccurrenceUsage = + ownedRelationship += OwnedReferenceSubsetting + +FlowUsage = + OccurrenceUsagePrefix 'flow' + FlowDeclaration DefinitionBody + +SuccessionFlowUsage = + OccurrenceUsagePrefix 'succession' 'flow' + FlowDeclaration DefinitionBody + +FlowDeclaration : FlowUsage = + UsageDeclaration ValuePart? + ( 'of' ownedRelationship += FlowPayloadFeatureMember )? + ( 'from' ownedRelationship += FlowEndMember + 'to' ownedRelationship += FlowEndMember )? + | ownedRelationship += FlowEndMember 'to' + ownedRelationship += FlowEndMember + +FlowPayloadFeatureMember : FeatureMembership = + ownedRelatedElement += FlowPayloadFeature + +FlowPayloadFeature : PayloadFeature = + PayloadFeature + +PayloadFeature : Feature = + Identification? PayloadFeatureSpecializationPart + ValuePart? + | ownedRelationship += OwnedFeatureTyping + ( ownedRelationship += OwnedMultiplicity )? + | ownedRelationship += OwnedMultiplicity + ownedRelationship += OwnedFeatureTyping + +PayloadFeatureSpecializationPart : Feature = + ( FeatureSpecialization )+ MultiplicityPart? + FeatureSpecialization* + | MultiplicityPart FeatureSpecialization+ + +FlowEndMember : EndFeatureMembership = + ownedRelatedElement += FlowEnd + +FlowEnd = + ( ownedRelationship += FlowEndSubsetting )? + ownedRelationship += FlowFeatureMember + +FlowEndSubsetting : ReferenceSubsetting = + referencedFeature = [QualifiedName] + | referencedFeature = FeatureChainPrefix + { ownedRelatedElement += referencedFeature } + +FeatureChainPrefix : Feature = + ( ownedRelationship += OwnedFeatureChaining '.' )+ + ownedRelationship += OwnedFeatureChaining '.' + +FlowFeatureMember : FeatureMembership = + ownedRelatedElement += FlowFeature + +FlowFeature : ReferenceUsage = + ownedRelationship += FlowFeatureRedefinition + +// (See Note 1) + +FlowFeatureRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + +// Notes: +//
          +//
        1. To ensure that a FlowFeature passes the validateRedefinitionDirectionConformance constraint (see [KerML, 8.3.3.3.8]), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature) +//
        + +// Clause 8.2.2.17 Actions Textual Notation + +// Clause 8.2.2.17.1 Action Definitions + +ActionDefinition = + OccurrenceDefinitionPrefix 'action' 'def' + DefinitionDeclaration ActionBody + +ActionBody : Type = + ';' | '{' ActionBodyItem* '}' + +ActionBodyItem : Type = + NonBehaviorBodyItem + | ownedRelationship += InitialNodeMember + ( ownedRelationship += ActionTargetSuccessionMember )* + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += ActionBehaviorMember + ( ownedRelationship += ActionTargetSuccessionMember )* + | ownedRelationship += GuardedSuccessionMember + +NonBehaviorBodyItem = + ownedRelationship += Import + | ownedRelationship += AliasMember + | ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += NonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += StructureUsageMember + +ActionBehaviorMember : FeatureMembership = + BehaviorUsageMember | ActionNodeMember + +InitialNodeMember : FeatureMembership = + MemberPrefix 'first' memberFeature = [QualifiedName] + RelationshipBody + +ActionNodeMember : FeatureMembership = + MemberPrefix ownedRelatedElement += ActionNode + +ActionTargetSuccessionMember : FeatureMembership = + MemberPrefix ownedRelatedElement += ActionTargetSuccession + +GuardedSuccessionMember : FeatureMembership = + MemberPrefix ownedRelatedElement += GuardedSuccession + +// Clause 8.2.2.17.2 Action Usages + +ActionUsage = + OccurrenceUsagePrefix 'action' + ActionUsageDeclaration ActionBody + +ActionUsageDeclaration : ActionUsage = + UsageDeclaration ValuePart? + +PerformActionUsage = + OccurrenceUsagePrefix 'perform' + PerformActionUsageDeclaration ActionBody + +PerformActionUsageDeclaration : PerformActionUsage = + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'action' UsageDeclaration ) + ValuePart? + +ActionNode : ActionUsage = + ControlNode + | SendNode | AcceptNode + | AssignmentNode + | TerminateNode + | IfNode | WhileLoopNode | ForLoopNode + +ActionNodeUsageDeclaration : ActionUsage = + 'action' UsageDeclaration? + +ActionNodePrefix : ActionUsage = + OccurrenceUsagePrefix ActionNodeUsageDeclaration? + +// Clause 8.2.2.17.3 Control Nodes + +ControlNode = + MergeNode | DecisionNode | JoinNode| ForkNode + +ControlNodePrefix : OccurrenceUsage = + RefPrefix + ( isIndividual ?= 'individual' )? + ( portionKind = PortionKind + { isPortion = true } + )? + UsageExtensionKeyword* + +MergeNode = + ControlNodePrefix + isComposite ?= 'merge' UsageDeclaration + ActionBody + +DecisionNode = + ControlNodePrefix + isComposite ?= 'decide' UsageDeclaration + ActionBody + +JoinNode = + ControlNodePrefix + isComposite ?= 'join' UsageDeclaration + ActionBody + +ForkNode = + ControlNodePrefix + isComposite ?= 'fork' UsageDeclaration + ActionBody + +// Clause 8.2.2.17.4 Send and Accept Action Usages + +AcceptNode : AcceptActionUsage = + OccurrenceUsagePrefix + AcceptNodeDeclaration ActionBody + +AcceptNodeDeclaration : AcceptActionUsage = + ActionNodeUsageDeclaration? + 'accept' AcceptParameterPart + +AcceptParameterPart : AcceptActionUsage = + ownedRelationship += PayloadParameterMember + ( 'via' ownedRelationship += NodeParameterMember )? + +PayloadParameterMember : ParameterMembership = + ownedRelatedElement += PayloadParameter + +PayloadParameter : ReferenceUsage = + PayloadFeature + | Identification PayloadFeatureSpecializationPart? + TriggerValuePart + +TriggerValuePart : Feature = + ownedRelationship += TriggerFeatureValue + +TriggerFeatureValue : FeatureValue = + ownedRelatedElement += TriggerExpression + +TriggerExpression : TriggerInvocationExpression = + kind = ( 'at' | 'after' ) + ownedRelationship += ArgumentMember + | kind = 'when' + ownedRelationship += ArgumentExpressionMember + +ArgumentMember : ParameterMembership = + ownedMemberParameter = Argument + +Argument : Feature = + ownedRelationship += ArgumentValue + +ArgumentValue : FeatureValue = + value = OwnedExpression + +ArgumentExpressionMember : ParameterMembership = + ownedRelatedElement += ArgumentExpression + +ArgumentExpression : Feature = + ownedRelationship += ArgumentExpressionValue + +ArgumentExpressionValue : FeatureValue = + ownedRelatedElement += OwnedExpressionReference + +SendNode : SendActionUsage = + OccurrenceUsagePrefix ActionUsageDeclaration? 'send' + ( ownedRelationship += NodeParameterMember SenderReceiverPart? + | ownedRelationship += EmptyParameterMember SenderReceiverPart )? + ActionBody + +SendNodeDeclaration : SendActionUsage = + ActionNodeUsageDeclaration? 'send' + ownedRelationship += NodeParameterMember SenderReceiverPart? + +SenderReceiverPart : SendActionUsage = + 'via' ownedRelationship += NodeParameterMember + ( 'to' ownedRelationship += NodeParameterMember )? + | ownedRelationship += EmptyParameterMember + 'to' ownedRelationship += NodeParameterMember + +NodeParameterMember : ParameterMembership = + ownedRelatedElement += NodeParameter + +NodeParameter : ReferenceUsage = + ownedRelationship += FeatureBinding + +FeatureBinding : FeatureValue = + ownedRelatedElement += OwnedExpression + +EmptyParameterMember : ParameterMembership = + ownedRelatedElement += EmptyUsage + +EmptyUsage : ReferenceUsage = + {} + +// Notes: +//
          +//
        1. The productions for ArgumentMember, Argument, ArgumentValue, ArgumentExpressionMember, ArgumentExpression and ArgumentExpressionValue are the same as given in [KerML, 8.2.5.8.1].
        + +// Clause 8.2.2.17.5 Assignment Action Usages + +AssignmentNode : AssignmentActionUsage = + OccurrenceUsagePrefix + AssignmentNodeDeclaration ActionBody + +AssignmentNodeDeclaration: ActionUsage = + ( ActionNodeUsageDeclaration )? 'assign' + ownedRelationship += AssignmentTargetMember + ownedRelationship += FeatureChainMember ':=' + ownedRelationship += NodeParameterMember + +AssignmentTargetMember : ParameterMembership = + ownedRelatedElement += AssignmentTargetParameter + +AssignmentTargetParameter : ReferenceUsage = + ( ownedRelationship += AssignmentTargetBinding '.' )? + +AssignmentTargetBinding : FeatureValue = + ownedRelatedElement += NonFeatureChainPrimaryExpression + +FeatureChainMember : Membership = + memberElement = [QualifiedName] + | OwnedFeatureChainMember + +OwnedFeatureChainMember : OwningMembership = + ownedRelatedElement += OwnedFeatureChain + +// Clause 8.2.2.17.6 Terminate Action Usages + +TerminateNode : TerminateActionUsage = + OccurrenceUsagePrefix ActionNodeUsageDeclaration? + 'terminate' ( ownedRelationship += NodeParameterMember )? + ActionBody + +// Clause 8.2.2.17.7 Structured Control Action Usages + +IfNode : IfActionUsage = + ActionNodePrefix + 'if' ownedRelationship += ExpressionParameterMember + ownedRelationship += ActionBodyParameterMember + ( 'else' ownedRelationship += + ( ActionBodyParameterMember | IfNodeParameterMember ) )? + +ExpressionParameterMember : ParameterMembership = + ownedRelatedElement += OwnedExpression + +ActionBodyParameterMember : ParameterMembership = + ownedRelatedElement += ActionBodyParameter + +ActionBodyParameter : ActionUsage = + ( 'action' UsageDeclaration? )? + '{' ActionBodyItem* '}' + +IfNodeParameterMember : ParameterMembership = + ownedRelatedElement += IfNode + +WhileLoopNode : WhileLoopActionUsage = + ActionNodePrefix + ( 'while' ownedRelationship += ExpressionParameterMember + | 'loop' ownedRelationship += EmptyParameterMember + ) + ownedRelationship += ActionBodyParameterMember + ( 'until' ownedRelationship += ExpressionParameterMember ';' )? + +ForLoopNode : ForLoopActionUsage = + ActionNodePrefix + 'for' ownedRelationship += ForVariableDeclarationMember + 'in' ownedRelationship += NodeParameterMember + ownedRelationship += ActionBodyParameterMember + +ForVariableDeclarationMember : FeatureMembership = + ownedRelatedElement += UsageDeclaration + +ForVariableDeclaration : ReferenceUsage = + UsageDeclaration + +// Clause 8.2.2.17.8 Action Successions + +ActionTargetSuccession : Usage = + ( TargetSuccession | GuardedTargetSuccession | DefaultTargetSuccession ) + UsageBody + +TargetSuccession : SuccessionAsUsage = + ownedRelationship += SourceEndMember + 'then' ownedRelationship += ConnectorEndMember + +GuardedTargetSuccession : TransitionUsage = + ownedRelationship += GuardExpressionMember + 'then' ownedRelationship += TransitionSuccessionMember + +DefaultTargetSuccession : TransitionUsage = + 'else' ownedRelationship += TransitionSuccessionMember + +GuardedSuccession : TransitionUsage = + ( 'succession' UsageDeclaration )? + 'first' ownedRelationship += FeatureChainMember + ownedRelationship += GuardExpressionMember + 'then' ownedRelationship += TransitionSuccessionMember + UsageBody + +// Clause 8.2.2.18 States Textual Notation + +// Clause 8.2.2.18.1 State Definitions + +StateDefinition = + OccurrenceDefinitionPrefix 'state' 'def' + DefinitionDeclaration StateDefBody + +StateDefBody : StateDefinition = + ';' + | ( isParallel ?= 'parallel' )? + '{' StateBodyItem* '}' + +StateBodyItem : Type = + NonBehaviorBodyItem + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += BehaviorUsageMember + ( ownedRelationship += TargetTransitionUsageMember )* + | ownedRelationship += TransitionUsageMember + | ownedRelationship += EntryActionMember + ( ownedRelationship += EntryTransitionMember )* + | ownedRelationship += DoActionMember + | ownedRelationship += ExitActionMember + +EntryActionMember : StateSubactionMembership = + MemberPrefix kind = 'entry' + ownedRelatedElement += StateActionUsage + +DoActionMember : StateSubactionMembership = + MemberPrefix kind = 'do' + ownedRelatedElement += StateActionUsage + +ExitActionMember : StateSubactionMembership = + MemberPrefix kind = 'exit' + ownedRelatedElement += StateActionUsage + +EntryTransitionMember : FeatureMembership = + MemberPrefix + ( ownedRelatedElement += GuardedTargetSuccession + | 'then' ownedRelatedElement += TargetSuccession + ) ';' + +StateActionUsage : ActionUsage = + EmptyActionUsage ';' + | StatePerformActionUsage + | StateAcceptActionUsage + | StateSendActionUsage + | StateAssignmentActionUsage + +EmptyActionUsage : ActionUsage = + {} + +StatePerformActionUsage : PerformActionUsage = + PerformActionUsageDeclaration ActionBody + +StateAcceptActionUsage : AcceptActionUsage = + AcceptNodeDeclaration ActionBody + +StateSendActionUsage : SendActionUsage = + SendNodeDeclaration ActionBody + +StateAssignmentActionUsage : AssignmentActionUsage = + AssignmentNodeDeclaration ActionBody + +TransitionUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += TransitionUsage + +TargetTransitionUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += TargetTransitionUsage + +// Clause 8.2.2.18.2 State Usages + +StateUsage = + OccurrenceUsagePrefix 'state' + ActionUsageDeclaration StateUsageBody + +StateUsageBody : StateUsage = + ';' + | ( isParallel ?= 'parallel' )? + '{' StateBodyItem* '}' + +ExhibitStateUsage = + OccurrenceUsagePrefix 'exhibit' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'state' UsageDeclaration ) + ValuePart? StateUsageBody + +// Clause 8.2.2.18.3 Transition Usages + +TransitionUsage = + 'transition' ( UsageDeclaration 'first' )? + ownedRelationship += FeatureChainMember + ownedRelationship += EmptyParameterMember + ( ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember )? + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + 'then' ownedRelationship += TransitionSuccessionMember + ActionBody + +TargetTransitionUsage : TransitionUsage = + ownedRelationship += EmptyParameterMember + ( 'transition' + ( ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember )? + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + | ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + | ownedRelationship += GuardExpressionMember + ( ownedRelationship += EffectBehaviorMember )? + )? + 'then' ownedRelationship += TransitionSuccessionMember + ActionBody + +TriggerActionMember : TransitionFeatureMembership = + 'accept' { kind = 'trigger' } ownedRelatedElement += TriggerAction + +TriggerAction : AcceptActionUsage = + AcceptParameterPart + +GuardExpressionMember : TransitionFeatureMembership = + 'if' { kind = 'guard' } ownedRelatedElement += OwnedExpression + +EffectBehaviorMember : TransitionFeatureMembership = + 'do' { kind = 'effect' } ownedRelatedElement += EffectBehaviorUsage + +EffectBehaviorUsage : ActionUsage = + EmptyActionUsage + | TransitionPerformActionUsage + | TransitionAcceptActionUsage + | TransitionSendActionUsage + | TransitionAssignmentActionUsage + +TransitionPerformActionUsage : PerformActionUsage = + PerformActionUsageDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionAcceptActionUsage : AcceptActionUsage = + AcceptNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionSendActionUsage : SendActionUsage = + SendNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionAssignmentActionUsage : AssignmentActionUsage = + AssignmentNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionSuccessionMember : OwningMembership = + ownedRelatedElement += TransitionSuccession + +TransitionSuccession : Succession = + ownedRelationship += EmptyEndMember + ownedRelationship += ConnectorEndMember + +EmptyEndMember : EndFeatureMembership = + ownedRelatedElement += EmptyFeature + +EmptyFeature : ReferenceUsage = + {} + +// Clause 8.2.2.19 Calculations Textual Notation + +CalculationDefinition = + OccurrenceDefinitionPrefix 'calc' 'def' + DefinitionDeclaration CalculationBody + +CalculationUsage : CalculationUsage = + OccurrenceUsagePrefix 'calc' + ActionUsageDeclaration CalculationBody + +CalculationBody : Type = + ';' | '{' CalculationBodyPart '}' + +CalculationBodyPart : Type = + CalculationBodyItem* + ( ownedRelationship += ResultExpressionMember )? + +CalculationBodyItem : Type = + ActionBodyItem + | ownedRelationship += ReturnParameterMember + +ReturnParameterMember : ReturnParameterMembership = + MemberPrefix? 'return' ownedRelatedElement += UsageElement + +ResultExpressionMember : ResultExpressionMembership = + MemberPrefix? ownedRelatedElement += OwnedExpression + +// Clause 8.2.2.20 Constraints Textual Notation + +ConstraintDefinition = + OccurrenceDefinitionPrefix 'constraint' 'def' + DefinitionDeclaration CalculationBody + +ConstraintUsage = + OccurrenceUsagePrefix 'constraint' + ConstraintUsageDeclaration CalculationBody + +AssertConstraintUsage = + OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' )? + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'constraint' ConstraintUsageDeclaration ) + CalculationBody + +ConstraintUsageDeclaration : ConstraintUsage = + UsageDeclaration ValuePart? + +// Clause 8.2.2.21 Requirements Textual Notation + +// Clause 8.2.2.21.1 Requirement Definitions + +RequirementDefinition = + OccurrenceDefinitionPrefix 'requirement' 'def' + DefinitionDeclaration RequirementBody + +RequirementBody : Type = + ';' | '{' RequirementBodyItem* '}' + +RequirementBodyItem : Type = + DefinitionBodyItem + | ownedRelationship += SubjectMember + | ownedRelationship += RequirementConstraintMember + | ownedRelationship += FramedConcernMember + | ownedRelationship += RequirementVerificationMember + | ownedRelationship += ActorMember + | ownedRelationship += StakeholderMember + +SubjectMember : SubjectMembership = + MemberPrefix ownedRelatedElement += SubjectUsage + +SubjectUsage : ReferenceUsage = + 'subject' UsageExtensionKeyword* Usage + +RequirementConstraintMember : RequirementConstraintMembership = + MemberPrefix? RequirementKind + ownedRelatedElement += RequirementConstraintUsage + +RequirementKind : RequirementConstraintMembership = + 'assume' { kind = 'assumption' } + | 'require' { kind = 'requirement' } + +RequirementConstraintUsage : ConstraintUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? RequirementBody + | ( UsageExtensionKeyword* 'constraint' + | UsageExtensionKeyword+ ) + ConstraintUsageDeclaration CalculationBody + +FramedConcernMember : FramedConcernMembership = + MemberPrefix? 'frame' + ownedRelatedElement += FramedConcernUsage + +FramedConcernUsage : ConcernUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? CalculationBody + | ( UsageExtensionKeyword* 'concern' + | UsageExtensionKeyword+ ) + CalculationUsageDeclaration CalculationBody + +ActorMember : ActorMembership = + MemberPrefix ownedRelatedElement += ActorUsage + +ActorUsage : PartUsage = + 'actor' UsageExtensionKeyword* Usage + +StakeholderMember : StakeholderMembership = + MemberPrefix ownedRelatedElement += StakeholderUsage + +StakeholderUsage : PartUsage = + 'stakeholder' UsageExtensionKeyword* Usage + +// Clause 8.2.2.21.2 Requirement Usages + +RequirementUsage = + OccurrenceUsagePrefix 'requirement' + ConstraintUsageDeclaration RequirementBody + +SatisfyRequirementUsage = + OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' ) 'satisfy' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'requirement' UsageDeclaration ) + ValuePart? + ( 'by' ownedRelationship += SatisfactionSubjectMember )? + RequirementBody + +SatisfactionSubjectMember : SubjectMembership = + ownedRelatedElement += SatisfactionParameter + +SatisfactionParameter : ReferenceUsage = + ownedRelationship += SatisfactionFeatureValue + +SatisfactionFeatureValue : FeatureValue = + ownedRelatedElement += SatisfactionReferenceExpression + +SatisfactionReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FeatureChainMember + +// Clause 8.2.2.21.3 Concerns + +ConcernDefinition = + OccurrenceDefinitionPrefix 'concern' 'def' + DefinitionDeclaration RequirementBody + +ConcernUsage = + OccurrenceUsagePrefix 'concern' + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.22 Cases Textual Notation + +CaseDefinition = + OccurrenceDefinitionPrefix 'case' 'def' + DefinitionDeclaration CaseBody + +CaseUsage = + OccurrenceUsagePrefix 'case' + ConstraintUsageDeclaration CaseBody + +CaseBody : Type = + ';' + | '{' CaseBodyItem* + ( ownedRelationship += ResultExpressionMember )? + '}' + +CaseBodyItem : Type = + ActionBodyItem + | ownedRelationship += SubjectMember + | ownedRelationship += ActorMember + | ownedRelationship += ObjectiveMember + +ObjectiveMember : ObjectiveMembership = + MemberPrefix 'objective' + ownedRelatedElement += ObjectiveRequirementUsage + +ObjectiveRequirementUsage : RequirementUsage = + UsageExtensionKeyword* ConstraintUsageDeclaration + RequirementBody + +// Clause 8.2.2.23 Analysis Cases Textual Notation + +AnalysisCaseDefinition = + OccurrenceDefinitionPrefix 'analysis' 'def' + DefinitionDeclaration CaseBody + +AnalysisCaseUsage = + OccurrenceUsagePrefix 'analysis' + ConstraintUsageDeclaration CaseBody + +// Clause 8.2.2.24 Verification Cases Textual Notation + +VerificationCaseDefinition = + OccurrenceDefinitionPrefix 'verification' 'def' + DefinitionDeclaration CaseBody + +VerificationCaseUsage = + OccurrenceUsagePrefix 'verification' + ConstraintUsageDeclaration CaseBody + +RequirementVerificationMember : RequirementVerificationMembership = + MemberPrefix 'verify' { kind = 'requirement' } + ownedRelatedElement += RequirementVerificationUsage + +RequirementVerificationUsage : RequirementUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecialization* RequirementBody + | ( UsageExtensionKeyword* 'requirement' + | UsageExtensionKeyword+ ) + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.25 Use Cases Textual Notation + +UseCaseDefinition = + OccurrenceDefinitionPrefix 'use' 'case' 'def' + DefinitionDeclaration CaseBody + +UseCaseUsage = + OccurrenceUsagePrefix 'use' 'case' + ConstraintUsageDeclaration CaseBody + +IncludeUseCaseUsage = + OccurrenceUsagePrefix 'include' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'use' 'case' UsageDeclaration ) + ValuePart? + CaseBody + +// Clause 8.2.2.26 Views and Viewpoints Textual Notation + +// Clause 8.2.2.26.1 View Definitions + +ViewDefinition = + OccurrenceDefinitionPrefix 'view' 'def' + DefinitionDeclaration ViewDefinitionBody + +ViewDefinitionBody : ViewDefinition = + ';' | '{' ViewDefinitionBodyItem* '}' + +ViewDefinitionBodyItem : ViewDefinition = + DefinitionBodyItem + | ownedRelationship += ElementFilterMember + | ownedRelationship += ViewRenderingMember + +ViewRenderingMember : ViewRenderingMembership = + MemberPrefix 'render' + ownedRelatedElement += ViewRenderingUsage + +ViewRenderingUsage : RenderingUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + UsageBody + | ( UsageExtensionKeyword* 'rendering' + | UsageExtensionKeyword+ ) + Usage + +// Clause 8.2.2.26.2 View Usages + +ViewUsage = + OccurrenceUsagePrefix 'view' + UsageDeclaration? ValuePart? + ViewBody + +ViewBody : ViewUsage = + ';' | '{' ViewBodyItem* '}' + +ViewBodyItem : ViewUsage = + DefinitionBodyItem + | ownedRelationship += ElementFilterMember + | ownedRelationship += ViewRenderingMember + | ownedRelationship += Expose + +Expose = + 'expose' ( MembershipExpose | NamespaceExpose ) + RelationshipBody + +MembershipExpose = + MembershipImport + +NamespaceExpose = + NamespaceImport + +// Clause 8.2.2.26.3 Viewpoints + +ViewpointDefinition = + OccurrenceDefinitionPrefix 'viewpoint' 'def' + DefinitionDeclaration RequirementBody + +ViewpointUsage = + OccurrenceUsagePrefix 'viewpoint' + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.26.4 Renderings + +RenderingDefinition = + OccurrenceDefinitionPrefix 'rendering' 'def' + Definition + +RenderingUsage = + OccurrenceUsagePrefix 'rendering' + Usage + +// Clause 8.2.2.27 Metadata Textual Notation + +MetadataDefinition = + ( isAbstract ?= 'abstract')? DefinitionExtensionKeyword* + 'metadata' 'def' Definition + +PrefixMetadataAnnotation : Annotation = + '#' annotatingElement = PrefixMetadataUsage + { ownedRelatedElement += annotatingElement } + +PrefixMetadataMember : OwningMembership = + '#' ownedRelatedElement = PrefixMetadataUsage + +PrefixMetadataUsage : MetadataUsage = + ownedRelationship += OwnedFeatureTyping + +MetadataUsage = + UsageExtensionKeyword* ( '@' | 'metadata' ) + MetadataUsageDeclaration + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + MetadataBody + +MetadataUsageDeclaration : MetadataUsage = + ( Identification ( ':' | 'typed' 'by' ) )? + ownedRelationship += OwnedFeatureTyping + +MetadataBody : Type = + ';' | + '{' ( ownedRelationship += DefinitionMember + | ownedRelationship += MetadataBodyUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + )* + '}' + +MetadataBodyUsageMember : FeatureMembership = + ownedMemberFeature = MetadataBodyUsage + +MetadataBodyUsage : ReferenceUsage = + 'ref'? ( ':>>' | 'redefines' )? ownedRelationship += OwnedRedefinition + FeatureSpecializationPart? ValuePart? + MetadataBody + +ExtendedDefinition : Definition = + BasicDefinitionPrefix? DefinitionExtensionKeyword+ + 'def' Definition + +ExtendedUsage : Usage = + UnextendedUsagePrefix UsageExtensionKeyword+ + Usage + +// End of BNF diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected.html b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected.html new file mode 100644 index 000000000..3a1d0b13c --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected.html @@ -0,0 +1,2009 @@ + + + + +SysML-textual-bnf-corrected + + + +

        // Source document: tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected-marked_up.kebnf
        +// Generated by bnf_grammar_processor at: 2025-12-04T19:29:18Z +

        +

        // Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html
        +// Generated by bnf_grammar_processor at: 2025-11-28T15:06:37Z +

        +

        // Manual corrections by HP de Koning +

        +

        // Part 2 - Systems Modeling Language (SysML)

        +

        // Clause 8.2.2 Textual Notation

        +

        // Clause 8.2.2.1 Textual Notation Overview

        +
        // Clause 8.2.2.1.1 EBNF Conventions
        +
        // Clause 8.2.2.1.2 Lexical Structure
        + +
        RESERVED_KEYWORD =
        +    'about' | 'abstract' | 'accept' | 'action' | 'actor' | 'after' | 'alias' | 'all' | 'allocate' | 'allocation'
        +    | 'analysis' | 'and' | 'as' | 'assert' | 'assign' | 'assume' | 'at' | 'attribute' | 'bind' | 'binding' | 'by' | 'calc'
        +    | 'case' | 'comment' | 'concern' | 'connect' | 'connection' | 'constant' | 'constraint' | 'crosses' | 'decide'
        +    | 'def' | 'default' | 'defined' | 'dependency' | 'derived' | 'do' | 'doc' | 'else' | 'end' | 'entry' | 'enum'
        +    | 'event' | 'exhibit' | 'exit' | 'expose' | 'false' | 'filter' | 'first' | 'flow' | 'for' | 'fork' | 'frame' | 'from'
        +    | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'include' | 'individual' | 'inout' | 'interface' | 'istype'
        +    | 'item' | 'join' | 'language' | 'library' | 'locale' | 'loop' | 'merge' | 'message' | 'meta' | 'metadata'
        +    | 'nonunique' | 'not' | 'null' | 'objective' | 'occurrence' | 'of' | 'or' | 'ordered' | 'out' | 'package' | 'parallel'
        +    | 'part' | 'perform' | 'port' | 'private' | 'protected' | 'public' | 'redefines' | 'ref' | 'references' | 'render'
        +    | 'rendering' | 'rep' | 'require' | 'requirement' | 'return' | 'satisfy' | 'send' | 'snapshot' | 'specializes'
        +    | 'stakeholder' | 'standard' | 'state' | 'subject' | 'subsets' | 'succession' | 'terminate' | 'then' | 'timeslice'
        +    | 'to' | 'transition' | 'true' | 'until' | 'use' | 'variant' | 'variation' | 'verification' | 'verify' | 'via'
        +    | 'view' | 'viewpoint' | 'when' | 'while' | 'xor'
        +
        + +
        DEFINED_BY  = ':'   | 'defined' 'by'
        +
        + +
        SPECIALIZES = ':>'  | 'specializes'
        +
        + +
        SUBSETS     = ':>'  | 'subsets'
        +
        + +
        REFERENCES  = '::>' | 'references'
        +
        + +
        CROSSES     = '=>'  | 'crosses'
        +
        + +
        REDEFINES   = ':>>' | 'redefines'
        +
        +

        // Clause 8.2.2.2 Elements and Relationships Textual Notation

        + +
        Identification : Element =
        +    ( '<' declaredShortName = NAME '>' )?
        +    ( declaredName = NAME )?
        +
        + +
        RelationshipBody : Relationship =
        +    ';' | '{' ( ownedRelationship += OwnedAnnotation )* '}'
        +
        +

        // Clause 8.2.2.3 Dependencies Textual Notation

        + +
        Dependency =
        +    ( ownedRelationship += PrefixMetadataAnnotation )*
        +    'dependency' DependencyDeclaration
        +    RelationshipBody
        +
        + +
        DependencyDeclaration =
        +    ( Identification 'from' )?
        +    client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to'
        +    supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )*
        +
        +

        // Clause 8.2.2.4 Annotations Textual Notation

        +
        // Clause 8.2.2.4.1 Annotations
        + +
        Annotation =
        +    annotatedElement = [QualifiedName]
        +
        + +
        OwnedAnnotation : Annotation =
        +    ownedRelatedElement += AnnotatingElement
        +
        + +
        AnnotatingMember : OwningMembership =
        +    ownedRelatedElement += AnnotatingElement
        +
        + +
        AnnotatingElement =
        +      Comment
        +    | Documentation
        +    | TextualRepresentation
        +    | MetadataFeature
        +
        +
        // Clause 8.2.2.4.2 Comments and Documentation
        + +
        Comment =
        +    ( 'comment' Identification
        +      ( 'about' ownedRelationship += Annotation
        +        ( ',' ownedRelationship += Annotation )*
        +      )?
        +    )?
        +    ( 'locale' locale = STRING_VALUE )?
        +    body = REGULAR_COMMENT
        +
        + +
        Documentation =
        +    'doc' Identification
        +    ( 'locale' locale = STRING_VALUE )?
        +    body = REGULAR_COMMENT
        +
        +
        // Clause 8.2.2.4.3 Textual Representation
        + +
        TextualRepresentation =
        +    ( 'rep' Identification )?
        +    'language' language = STRING_VALUE body = REGULAR_COMMENT
        +
        +

        // Clause 8.2.2.5 Namespaces and Packages Textual Notation

        +
        // Clause 8.2.2.5.1 Packages
        + +
        RootNamespace : Namespace =
        +    PackageBodyElement*
        +
        + +
        Package =
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    PackageDeclaration PackageBody
        +
        + +
        LibraryPackage =
        +    ( isStandard ?= 'standard' ) 'library'
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    PackageDeclaration PackageBody
        +
        + +
        PackageDeclaration : Package =
        +    'package' Identification
        +
        + +
        PackageBody : Package =
        +    ';' | '{' PackageBodyElement* '}'
        +
        + +
        PackageBodyElement : Package =
        +      ownedRelationship += PackageMember
        +    | ownedRelationship += ElementFilterMember
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += Import
        +
        + +
        MemberPrefix : Membership =
        +    ( visibility = VisibilityIndicator )?
        +
        + +
        PackageMember : OwningMembership =
        +    MemberPrefix
        +    ( ownedRelatedElement += DefinitionElement
        +    | ownedRelatedElement = UsageElement )
        +
        + +
        ElementFilterMember : ElementFilterMembership =
        +    MemberPrefix
        +    'filter' ownedRelatedElement += OwnedExpression ';'
        +
        + +
        AliasMember : Membership =
        +    MemberPrefix
        +    'alias' ( '<' memberShortName = NAME '>' )?
        +    ( memberName = NAME )?
        +     'for' memberElement = [QualifiedName]
        +    RelationshipBody
        +
        + +
        Import =
        +    visibility = VisibilityIndicator
        +    'import' ( isImportAll ?= 'all' )?
        +    ImportDeclaration
        +    RelationshipBody
        +
        + +
        ImportDeclaration : Import =
        +    MembershipImport | NamespaceImport
        +
        + +
        MembershipImport =
        +    importedMembership = [QualifiedName]
        +    ( '::' isRecursive ?= '**' )?
        +
        + +
        NamespaceImport =
        +      importedNamespace = [QualifiedName] '::' '*'
        +      ( '::' isRecursive ?= '**' )?
        +    | importedNamespace = FilterPackage
        +      { ownedRelatedElement += importedNamespace }
        +
        + +
        FilterPackage : Package =
        +    ownedRelationship += FilterPackageImport
        +    ( ownedRelationship += FilterPackageMember )+
        +
        + +
        FilterPackageMember : ElementFilterMembership =
        +    '[' ownedRelatedElement += OwnedExpression ']'
        +
        + +
        VisibilityIndicator : VisibilityKind =
        +    'public' | 'private' | 'protected'
        +
        +
        // Clause 8.2.2.5.2 Package Elements
        + +
        DefinitionElement : Element =
        +      Package
        +    | LibraryPackage
        +    | AnnotatingElement
        +    | Dependency
        +    | AttributeDefinition
        +    | EnumerationDefinition
        +    | OccurrenceDefinition
        +    | IndividualDefinition
        +    | ItemDefinition
        +    | PartDefinition
        +    | ConnectionDefinition
        +    | FlowDefinition
        +    | InterfaceDefinition
        +    | PortDefinition
        +    | ActionDefinition
        +    | CalculationDefinition
        +    | StateDefinition
        +    | ConstraintDefinition
        +    | RequirementDefinition
        +    | ConcernDefinition
        +    | CaseDefinition
        +    | AnalysisCaseDefinition
        +    | VerificationCaseDefinition
        +    | UseCaseDefinition
        +    | ViewDefinition
        +    | ViewpointDefinition
        +    | RenderingDefinition
        +    | MetadataDefinition
        +    | ExtendedDefinition
        +
        + +
        UsageElement : Usage =
        +      NonOccurrenceUsageElement
        +    | OccurrenceUsageElement
        +
        +

        // Clause 8.2.2.6 Definition and Usage Textual Notation

        +
        // Clause 8.2.2.6.1 Definitions
        + +
        BasicDefinitionPrefix =
        +    isAbstract ?= 'abstract' | isVariation ?= 'variation'
        +
        + +
        DefinitionExtensionKeyword : Definition =
        +    ownedRelationship += PrefixMetadataMember
        +
        + +
        DefinitionPrefix : Definition =
        +    BasicDefinitionPrefix? DefinitionExtensionKeyword*
        +
        + +
        Definition =
        +    DefinitionDeclaration DefinitionBody
        +
        + +
        DefinitionDeclaration : Definition =
        +    Identification SubclassificationPart?
        +
        + +
        DefinitionBody : Type =
        +      ';' | '{' DefinitionBodyItem* '}'
        +
        + +
        DefinitionBodyItem : Type =
        +      ownedRelationship += DefinitionMember
        +    | ownedRelationship += VariantUsageMember
        +    | ownedRelationship += NonOccurrenceUsageMember
        +    | ( ownedRelationship += SourceSuccessionMember )?
        +      ownedRelationship += OccurrenceUsageMember
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += Import
        +
        + +
        DefinitionMember : OwningMembership =
        +    MemberPrefix
        +    ownedRelatedElement += DefinitionElement
        +
        + +
        VariantUsageMember : VariantMembership =
        +    MemberPrefix 'variant'
        +    ownedVariantUsage = VariantUsageElement
        +
        + +
        NonOccurrenceUsageMember : FeatureMembership =
        +    MemberPrefix
        +    ownedRelatedElement += NonOccurrenceUsageElement
        +
        + +
        OccurrenceUsageMember : FeatureMembership =
        +    MemberPrefix
        +    ownedRelatedElement += OccurrenceUsageElement
        +
        + +
        StructureUsageMember : FeatureMembership =
        +    MemberPrefix
        +    ownedRelatedElement += StructureUsageElement
        +
        + +
        BehaviorUsageMember : FeatureMembership =
        +    MemberPrefix
        +    ownedRelatedElement += BehaviorUsageElement
        +
        +
        // Clause 8.2.2.6.2 Usages
        + +
        FeatureDirection : FeatureDirectionKind =
        +    'in' | 'out' | 'inout'
        +
        + +
        RefPrefix : Usage =
        +    ( direction = FeatureDirection )?
        +    ( isDerived ?= 'derived' )?
        +    ( isAbstract ?= 'abstract' | isVariation ?= 'variation' )?
        +    ( isConstant ?= 'constant' )?
        +
        + +
        BasicUsagePrefix : Usage =
        +    RefPrefix
        +    ( isReference ?= 'ref' )?
        +
        + +
        EndUsagePrefix : Usage =
        +    isEnd ?= 'end' ( ownedRelationship += OwnedCrossFeatureMember )?
        +
        +

        // (See Note 1) +

        + +
        OwnedCrossFeatureMember : OwningMembership =
        +    ownedRelatedElement += OwnedCrossFeature
        +
        + +
        OwnedCrossFeature : ReferenceUsage =
        +    BasicUsagePrefix UsageDeclaration
        +
        + +
        UsageExtensionKeyword : Usage =
        +    ownedRelationship += PrefixMetadataMember
        +
        + +
        UnextendedUsagePrefix : Usage =
        +    EndUsagePrefix | BasicUsagePrefix
        +
        + +
        UsagePrefix : Usage =
        +    UnextendedUsagePrefix UsageExtensionKeyword*
        +
        + +
        Usage =
        +    UsageDeclaration UsageCompletion
        +
        + +
        UsageDeclaration : Usage =
        +    Identification FeatureSpecializationPart?
        +
        + +
        UsageCompletion : Usage =
        +    ValuePart? UsageBody
        +
        + +
        UsageBody : Usage =
        +    DefinitionBody
        +
        + +
        ValuePart : Feature =
        +    ownedRelationship += FeatureValue
        +
        + +
        FeatureValue =
        +    ( '='
        +    | isInitial ?= ':='
        +    | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )?
        +    )
        +    ownedRelatedElement += OwnedExpression
        +
        +

        // Notes:

        +
          +
        1. // 1. A Usage parsed with isEnd = true for which mayTimeVary = true must also have isConstant set to true, even though this is not explicitly notated in the textual notation, in order to satisfy the KerML constraint checkFeatureEndIsConstant.
        2. +
        +
        // Clause 8.2.2.6.3 Reference Usages
        + +
        DefaultReferenceUsage : ReferenceUsage =
        +    RefPrefix Usage
        +
        + +
        ReferenceUsage =
        +    ( EndUsagePrefix | RefPrefix )
        +    'ref' Usage
        +
        + +
        VariantReference : ReferenceUsage =
        +    ownedRelationship += OwnedReferenceSubsetting
        +    FeatureSpecialization* UsageBody
        +
        +
        // Clause 8.2.2.6.4 Body Elements
        + +
        NonOccurrenceUsageElement : Usage =
        +      DefaultReferenceUsage
        +    | ReferenceUsage
        +    | AttributeUsage
        +    | EnumerationUsage
        +    | BindingConnectorAsUsage
        +    | SuccessionAsUsage
        +    | ExtendedUsage
        +
        + +
        OccurrenceUsageElement : Usage =
        +    StructureUsageElement | BehaviorUsageElement
        +
        + +
        StructureUsageElement : Usage =
        +      OccurrenceUsage
        +    | IndividualUsage
        +    | PortionUsage
        +    | EventOccurrenceUsage
        +    | ItemUsage
        +    | PartUsage
        +    | ViewUsage
        +    | RenderingUsage
        +    | PortUsage
        +    | ConnectionUsage
        +    | InterfaceUsage
        +    | AllocationUsage
        +    | Message
        +    | FlowUsage
        +    | SuccessionFlowUsage
        +
        + +
        BehaviorUsageElement : Usage =
        +      ActionUsage
        +    | CalculationUsage
        +    | StateUsage
        +    | ConstraintUsage
        +    | RequirementUsage
        +    | ConcernUsage
        +    | CaseUsage
        +    | AnalysisCaseUsage
        +    | VerificationCaseUsage
        +    | UseCaseUsage
        +    | ViewpointUsage
        +    | PerformActionUsage
        +    | ExhibitStateUsage
        +    | IncludeUseCaseUsage
        +    | AssertConstraintUsage
        +    | SatisfyRequirementUsage
        +
        + +
        VariantUsageElement : Usage =
        +      VariantReference
        +    | ReferenceUsage
        +    | AttributeUsage
        +    | BindingConnectorAsUsage
        +    | SuccessionAsUsage
        +    | OccurrenceUsage
        +    | IndividualUsage
        +    | PortionUsage
        +    | EventOccurrenceUsage
        +    | ItemUsage
        +    | PartUsage
        +    | ViewUsage
        +    | RenderingUsage
        +    | PortUsage
        +    | ConnectionUsage
        +    | InterfaceUsage
        +    | AllocationUsage
        +    | Message
        +    | FlowUsage
        +    | SuccessionFlowUsage
        +    | BehaviorUsageElement
        +
        +
        // Clause 8.2.2.6.5 Specialization
        + +
        SubclassificationPart : Classifier =
        +      SPECIALIZES ownedRelationship += OwnedSubclassification
        +      ( ',' ownedRelationship += OwnedSubclassification )*
        +
        + +
        OwnedSubclassification : Subclassification =
        +    superClassifier = [QualifiedName]
        +
        + +
        FeatureSpecializationPart : Feature =
        +      FeatureSpecialization+ MultiplicityPart? FeatureSpecialization*
        +    | MultiplicityPart FeatureSpecialization*
        +
        + +
        FeatureSpecialization : Feature =
        +    Typings | Subsettings | References | Crosses | Redefinitions
        +
        + +
        Typings : Feature =
        +      TypedBy ( ',' ownedRelationship += FeatureTyping )*
        +
        + +
        TypedBy : Feature =
        +    DEFINED_BY ownedRelationship += FeatureTyping
        +
        + +
        FeatureTyping =
        +    OwnedFeatureTyping | ConjugatedPortTyping
        +
        + +
        OwnedFeatureTyping : FeatureTyping =
        +      type = [QualifiedName]
        +    | type = OwnedFeatureChain
        +      { ownedRelatedElement += type }
        +
        + +
        Subsettings : Feature =
        +    Subsets ( ',' ownedRelationship += OwnedSubsetting )*
        +
        + +
        Subsets : Feature =
        +    SUBSETS ownedRelationship += OwnedSubsetting
        +
        + +
        OwnedSubsetting : Subsetting =
        +      subsettedFeature = [QualifiedName]
        +    | subsettedFeature = OwnedFeatureChain
        +      { ownedRelatedElement += subsettedFeature }
        +
        + +
        References : Feature =
        +    REFERENCES ownedRelationship += OwnedReferenceSubsetting
        +
        + +
        OwnedReferenceSubsetting : ReferenceSubsetting =
        +      referencedFeature = [QualifiedName]
        +    | referencedFeature = OwnedFeatureChain
        +      { ownedRelatedElement += referenceFeature }
        +
        + +
        Crosses : Feature =
        +    CROSSES ownedRelationship += OwnedCrossSubsetting
        +
        + +
        OwnedCrossSubsetting : CrossSubsetting =
        +      crossedFeature = [QualifiedName]
        +    | crossedFeature = OwnedFeatureChain
        +      { ownedRelatedElement += crossedFeature }
        +
        + +
        Redefinitions : Feature =
        +    Redefines ( ',' ownedRelationship += OwnedRedefinition )*
        +
        + +
        Redefines : Feature =
        +    REDEFINES ownedRelationship += OwnedRedefinition
        +
        + +
        OwnedRedefinition : Redefinition =
        +      redefinedFeature = [QualifiedName]
        +    | redefinedFeature = OwnedFeatureChain
        +      { ownedRelatedElement += redefinedFeature }
        +
        + +
        OwnedFeatureChain : Feature =
        +    ownedRelationship += OwnedFeatureChaining
        +    ( '.' ownedRelationship += OwnedFeatureChaining )+
        +
        + +
        OwnedFeatureChaining : FeatureChaining =
        +    chainingFeature = [QualifiedName]
        +
        +
        // Clause 8.2.2.6.6 Multiplicity
        + +
        MultiplicityPart : Feature =
        +      ownedRelationship += OwnedMultiplicity
        +    | ( ownedRelationship += OwnedMultiplicity )?
        +      ( isOrdered ?= 'ordered' ( { isUnique = false } 'nonunique' )?
        +      | { isUnique = false } 'nonunique' ( isOrdered ?= 'ordered' )? )
        +
        + +
        OwnedMultiplicity : OwningMembership =
        +    ownedRelatedElement += MultiplicityRange
        +
        + +
        MultiplicityRange =
        +    '[' ( ownedRelationship += MultiplicityExpressionMember '..' )?
        +          ownedRelationship += MultiplicityExpressionMember ']'
        +
        + +
        MultiplicityExpressionMember : OwningMembership =
        +    ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression )
        +
        +

        // Clause 8.2.2.7 Attributes Textual Notation

        + +
        AttributeDefinition : AttributeDefinition =
        +    DefinitionPrefix 'attribute' 'def' Definition
        +
        + +
        AttributeUsage : AttributeUsage =
        +    UsagePrefix 'attribute' Usage
        +
        +

        // Clause 8.2.2.8 Enumerations Textual Notation

        + +
        EnumerationDefinition =
        +    DefinitionExtensionKeyword*
        +    'enum' 'def' DefinitionDeclaration EnumerationBody
        +
        + +
        EnumerationBody : EnumerationDefinition =
        +      ';'
        +    | '{' ( ownedRelationship += AnnotatingMember
        +          | ownedRelationship += EnumerationUsageMember )*
        +      '}'
        +
        + +
        EnumerationUsageMember : VariantMembership =
        +    MemberPrefix ownedRelatedElement += EnumeratedValue
        +
        + +
        EnumeratedValue : EnumerationUsage =
        +    'enum'? Usage
        +
        + +
        EnumerationUsage : EnumerationUsage =
        +    UsagePrefix 'enum' Usage
        +
        +

        // Clause 8.2.2.9 Occurrences Textual Notation

        +
        // Clause 8.2.2.9.1 Occurrence Definitions
        + +
        OccurrenceDefinitionPrefix : OccurrenceDefinition =
        +    BasicDefinitionPrefix?
        +    ( isIndividual ?= 'individual'
        +      ownedRelationship += EmptyMultiplicityMember
        +    )?
        +    DefinitionExtensionKeyword*
        +
        + +
        OccurrenceDefinition =
        +    OccurrenceDefinitionPrefix 'occurrence' 'def' Definition
        +
        + +
        IndividualDefinition : OccurrenceDefinition =
        +    BasicDefinitionPrefix? isIndividual ?= 'individual'
        +    DefinitionExtensionKeyword* 'def' Definition
        +    ownedRelationship += EmptyMultiplicityMember
        +
        + +
        EmptyMultiplicityMember : OwningMembership =
        +    ownedRelatedElement += EmptyMultiplicity
        +
        + +
        EmptyMultiplicity : Multiplicity =
        +    { }
        +
        +
        // Clause 8.2.2.9.2 Occurrence Usages
        + +
        OccurrenceUsagePrefix : OccurrenceUsage =
        +    BasicUsagePrefix
        +    ( isIndividual ?= 'individual' )?
        +    ( portionKind = PortionKind
        +      { isPortion = true }
        +    )?
        +    UsageExtensionKeyword*
        +
        + +
        OccurrenceUsage =
        +    OccurrenceUsagePrefix 'occurrence' Usage
        +
        + +
        IndividualUsage : OccurrenceUsage =
        +    BasicUsagePrefix isIndividual ?= 'individual'
        +    UsageExtensionKeyword* Usage
        +
        + +
        PortionUsage : OccurrenceUsage  =
        +    BasicUsagePrefix ( isIndividual ?= 'individual' )?
        +    portionKind = PortionKind
        +    UsageExtensionKeyword* Usage
        +    { isPortion = true }
        +
        + +
        PortionKind =
        +    'snapshot' | 'timeslice'
        +
        + +
        EventOccurrenceUsage =
        +    OccurrenceUsagePrefix 'event'
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'occurrence' UsageDeclaration? )
        +    UsageCompletion
        +
        +
        // Clause 8.2.2.9.3 Occurrence Successions
        + +
        SourceSuccessionMember  : FeatureMembership =
        +    'then' ownedRelatedElement += SourceSuccession
        +
        + +
        SourceSuccession : SuccessionAsUsage =
        +    ownedRelationship += SourceEndMember
        +
        + +
        SourceEndMember : EndFeatureMembership =
        +    ownedRelatedElement += SourceEnd
        +
        + +
        SourceEnd : ReferenceUsage =
        +    ( ownedRelationship += OwnedMultiplicity )?
        +
        +

        // Clause 8.2.2.10 Items Textual Notation

        + +
        ItemDefinition =
        +    OccurrenceDefinitionPrefix
        +    'item' 'def' Definition
        +
        + +
        ItemUsage =
        +    OccurrenceUsagePrefix 'item' Usage
        +
        +

        // Clause 8.2.2.11 Parts Textual Notation

        + +
        PartDefinition =
        +    OccurrenceDefinitionPrefix 'part' 'def' Definition
        +
        + +
        PartUsage =
        +    OccurrenceUsagePrefix 'part' Usage
        +
        +

        // Clause 8.2.2.12 Ports Textual Notation

        + +
        PortDefinition =
        +    DefinitionPrefix 'port' 'def' Definition
        +    ownedRelationship += ConjugatedPortDefinitionMember
        +    { conjugatedPortDefinition.ownedPortConjugator.
        +        originalPortDefinition = this }
        +
        +

        // (See Note 1) +

        + +
        ConjugatedPortDefinitionMember : OwningMembership =
        +    ownedRelatedElement += ConjugatedPortDefinition
        +
        + +
        ConjugatedPortDefinition =
        +    ownedRelationship += PortConjugation
        +
        + +
        PortConjugation =
        +    {}
        +
        + +
        PortUsage =
        +    OccurrenceUsagePrefix 'port' Usage
        +
        + +
        ConjugatedPortTyping : ConjugatedPortTyping =
        +    '~' originalPortDefinition = ~[QualifiedName]
        +
        +

        // (See Note 2) +

        +

        // Notes:

        +
          +
        1. // 1. Even though it is not explicitly represented in the text, a PortDefinition is always parsed as containing a nested ConjugatedPortDefinition with a PortDefinition Relationship pointing back to the containing PortDefinition. The abstract syntax for ConjugatedPortDefinition sets its effectiveName to the name of its originalPortDefinition with the symbol ~ prepended to it (see 8.3.12.2). (See also 8.4.8.1.)
        2. +
        3. // 2. The notation ~[QualifiedName] indicates that a QualifiedName shall be parsed from the input text, but that it shall be resolved as if it was the qualified name constructed as follows: +
            +
          • // • Extract the last segment name of the given QualifiedName and prepend the symbol ~ to it.
          • +
          • // • Append the name so constructed to the end of the entire original QualifiedName.
          • +
          +// For example, if the ConjugatedPortTyping is ~A::B::C, then the given QualifiedName is A::B::C, and ~[QualifiedName] is resolved as A::B::C::'~C'. Alternatively, a conforming tool may first resolve the given QualifiedName as usual to a PortDefinition and then use the conjugatedPortDefinition of this PortDefinition as the resolution of ~[QualifiedName].
        4. +
        +

        // Clause 8.2.2.13 Connections Textual Notation

        +
        // Clause 8.2.2.13.1 Connection Definition and Usage
        + +
        ConnectionDefinition =
        +    OccurrenceDefinitionPrefix 'connection' 'def' Definition
        +
        + +
        ConnectionUsage =
        +    OccurrenceUsagePrefix
        +    ( 'connection' UsageDeclaration ValuePart?
        +      ( 'connect' ConnectorPart )?
        +    | 'connect' ConnectorPart )
        +    UsageBody
        +
        + +
        ConnectorPart : ConnectionUsage =
        +    BinaryConnectorPart | NaryConnectorPart
        +
        + +
        BinaryConnectorPart : ConnectionUsage =
        +    ownedRelationship += ConnectorEndMember 'to'
        +    ownedRelationship += ConnectorEndMember
        +
        + +
        NaryConnectorPart : ConnectionUsage =
        +    '(' ownedRelationship += ConnectorEndMember ','
        +        ownedRelationship += ConnectorEndMember
        +        ( ',' ownedRelationship += ConnectorEndMember )* ')'
        +
        + +
        ConnectorEndMember : EndFeatureMembership =
        +    ownedRelatedElement += ConnectorEnd
        +
        + +
        ConnectorEnd : ReferenceUsage =
        +	( ownedRelationship += OwnedCrossMultiplicityMember )?
        +	( declaredName = NAME REFERENCES )?
        +	ownedRelationship += OwnedReferenceSubsetting
        +
        + +
        OwnedCrossMultiplicityMember : OwningMembership =
        +	ownedRelatedElement += OwnedCrossMultiplicity
        +
        + +
        OwnedCrossMultiplicity : Feature =
        +	ownedRelationship += OwnedMultiplicity
        +
        +
        // Clause 8.2.2.13.2 Binding Connectors
        + +
        BindingConnectorAsUsage =
        +    UsagePrefix ( 'binding' UsageDeclaration )?
        +    'bind' ownedRelationship += ConnectorEndMember
        +    '=' ownedRelationship += ConnectorEndMember
        +    UsageBody
        +
        +
        // Clause 8.2.2.13.3 Successions
        + +
        SuccessionAsUsage =
        +    UsagePrefix ( 'succession' UsageDeclaration )?
        +    'first' s.ownedRelationship += ConnectorEndMember
        +    'then' s.ownedRelationship += ConnectorEndMember
        +    UsageBody
        +
        +

        // Clause 8.2.2.14 Interfaces Textual Notation

        +
        // Clause 8.2.2.14.1 Interface Definitions
        + +
        InterfaceDefinition =
        +    OccurrenceDefinitionPrefix 'interface' 'def'
        +    DefinitionDeclaration InterfaceBody
        +
        + +
        InterfaceBody : Type =
        +    ';' | '{' InterfaceBodyItem* '}'
        +
        + +
        InterfaceBodyItem : Type =
        +      ownedRelationship += DefinitionMember
        +    | ownedRelationship += VariantUsageMember
        +    | ownedRelationship += InterfaceNonOccurrenceUsageMember
        +    | ( ownedRelationship += SourceSuccessionMember )?
        +      ownedRelationship += InterfaceOccurrenceUsageMember
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += Import
        +
        + +
        InterfaceNonOccurrenceUsageMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += InterfaceNonOccurrenceUsageElement
        +
        + +
        InterfaceNonOccurrenceUsageElement : Usage =
        +      ReferenceUsage
        +    | AttributeUsage
        +    | EnumerationUsage
        +    | BindingConnectorAsUsage
        +    | SuccessionAsUsage
        +
        + +
        InterfaceOccurrenceUsageMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += InterfaceOccurrenceUsageElement
        +
        + +
        InterfaceOccurrenceUsageElement : Usage =
        +    DefaultInterfaceEnd | StructureUsageElement | BehaviorUsageElement
        +
        + +
        DefaultInterfaceEnd : PortUsage =
        +    isEnd ?= 'end' Usage
        +
        +
        // Clause 8.2.2.14.2 Interface Usages
        + +
        InterfaceUsage =
        +    OccurrenceUsagePrefix 'interface'
        +    InterfaceUsageDeclaration InterfaceBody
        +
        + +
        InterfaceUsageDeclaration : InterfaceUsage =
        +      UsageDeclaration ValuePart?
        +      ( 'connect' InterfacePart )?
        +    | InterfacePart
        +
        + +
        InterfacePart : InterfaceUsage =
        +    BinaryInterfacePart | NaryInterfacePart
        +
        + +
        BinaryInterfacePart : InterfaceUsage =
        +    ownedRelationship += InterfaceEndMember 'to'
        +    ownedRelationship += InterfaceEndMember
        +
        + +
        NaryInterfacePart : InterfaceUsage =
        +    '(' ownedRelationship += InterfaceEndMember ','
        +        ownedRelationship += InterfaceEndMember
        +        ( ',' ownedRelationship += InterfaceEndMember )* ')'
        +
        + +
        InterfaceEndMember : EndFeatureMembership =
        +    ownedRelatedElement += InterfaceEnd
        +
        + +
        InterfaceEnd : PortUsage =
        +    ( ownedRelationship += OwnedCrossMultiplicityMember )?
        +    ( declaredName = NAME REFERENCES )?
        +    ownedRelationship += OwnedReferenceSubsetting
        +
        +

        // Clause 8.2.2.15 Allocations Textual Notation

        + +
        AllocationDefinition =
        +    OccurrenceDefinitionPrefix 'allocation' 'def' Definition
        +
        + +
        AllocationUsage =
        +    OccurrenceUsagePrefix
        +    AllocationUsageDeclaration UsageBody
        +
        + +
        AllocationUsageDeclaration : AllocationUsage =
        +      'allocation' UsageDeclaration
        +      ( 'allocate' ConnectorPart )?
        +    | 'allocate' ConnectorPart
        +
        +

        // Clause 8.2.2.16 Flows Textual Notation

        + +
        FlowDefinition =
        +    OccurrenceDefinitionPrefix 'flow' 'def' Definition
        +
        + +
        Message : FlowUsage =
        +    OccurrenceUsagePrefix 'message'
        +    MessageDeclaration DefinitionBody
        +    { isAbstract = true }
        +
        + +
        MessageDeclaration : FlowUsage =
        +      UsageDeclaration ValuePart?
        +      ( 'of' ownedRelationship += FlowPayloadFeatureMember )?
        +      ( 'from' ownedRelationship += MessageEventMember
        +        'to' ownedRelationship += MessageEventMember
        +      )?
        +    | ownedRelationship += MessageEventMember 'to'
        +      ownedRelationship += MessageEventMember
        +
        + +
        MessageEventMember : ParameterMembership =
        +    ownedRelatedElement += MessageEvent
        +
        + +
        MessageEvent : EventOccurrenceUsage =
        +    ownedRelationship += OwnedReferenceSubsetting
        +
        + +
        FlowUsage =
        +    OccurrenceUsagePrefix 'flow'
        +    FlowDeclaration DefinitionBody
        +
        + +
        SuccessionFlowUsage =
        +    OccurrenceUsagePrefix 'succession' 'flow'
        +    FlowDeclaration DefinitionBody
        +
        + +
        FlowDeclaration : FlowUsage =
        +      UsageDeclaration ValuePart?
        +      ( 'of'  ownedRelationship += FlowPayloadFeatureMember )?
        +      ( 'from' ownedRelationship += FlowEndMember
        +        'to'   ownedRelationship += FlowEndMember )?
        +    | ownedRelationship += FlowEndMember 'to'
        +      ownedRelationship += FlowEndMember
        +
        + +
        FlowPayloadFeatureMember : FeatureMembership =
        +    ownedRelatedElement += FlowPayloadFeature
        +
        + +
        FlowPayloadFeature : PayloadFeature =
        +    PayloadFeature
        +
        + +
        PayloadFeature : Feature =
        +      Identification? PayloadFeatureSpecializationPart
        +      ValuePart?
        +    | ownedRelationship += OwnedFeatureTyping
        +      ( ownedRelationship += OwnedMultiplicity )?
        +    | ownedRelationship += OwnedMultiplicity
        +      ownedRelationship += OwnedFeatureTyping
        +
        + +
        PayloadFeatureSpecializationPart : Feature =
        +      ( FeatureSpecialization )+ MultiplicityPart?
        +      FeatureSpecialization*
        +    | MultiplicityPart FeatureSpecialization+
        +
        + +
        FlowEndMember : EndFeatureMembership =
        +    ownedRelatedElement += FlowEnd
        +
        + +
        FlowEnd =
        +    ( ownedRelationship += FlowEndSubsetting )?
        +    ownedRelationship += FlowFeatureMember
        +
        + +
        FlowEndSubsetting : ReferenceSubsetting =
        +      referencedFeature = [QualifiedName]
        +    | referencedFeature = FeatureChainPrefix
        +      { ownedRelatedElement += referencedFeature }
        +
        + +
        FeatureChainPrefix : Feature =
        +    ( ownedRelationship += OwnedFeatureChaining '.' )+
        +    ownedRelationship += OwnedFeatureChaining '.'
        +
        + +
        FlowFeatureMember : FeatureMembership =
        +    ownedRelatedElement += FlowFeature
        +
        + +
        FlowFeature : ReferenceUsage =
        +    ownedRelationship += FlowFeatureRedefinition
        +
        +

        // (See Note 1) +

        + +
        FlowFeatureRedefinition : Redefinition =
        +    redefinedFeature = [QualifiedName]
        +
        +

        // Notes:

        +
          +
        1. // 1. To ensure that a FlowFeature passes the validateRedefinitionDirectionConformance constraint (see [KerML, 8.3.3.3.8]), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature)
        2. +
        +

        // Clause 8.2.2.17 Actions Textual Notation

        +
        // Clause 8.2.2.17.1 Action Definitions
        + +
        ActionDefinition =
        +    OccurrenceDefinitionPrefix 'action' 'def'
        +    DefinitionDeclaration ActionBody
        +
        + +
        ActionBody : Type =
        +    ';' | '{' ActionBodyItem* '}'
        +
        + +
        ActionBodyItem : Type =
        +      NonBehaviorBodyItem
        +    | ownedRelationship += InitialNodeMember
        +      ( ownedRelationship += ActionTargetSuccessionMember )*
        +    | ( ownedRelationship += SourceSuccessionMember )?
        +      ownedRelationship += ActionBehaviorMember
        +      ( ownedRelationship += ActionTargetSuccessionMember )*
        +    | ownedRelationship += GuardedSuccessionMember
        +
        + +
        NonBehaviorBodyItem =
        +      ownedRelationship += Import
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += DefinitionMember
        +    | ownedRelationship += VariantUsageMember
        +    | ownedRelationship += NonOccurrenceUsageMember
        +    | ( ownedRelationship += SourceSuccessionMember )?
        +      ownedRelationship += StructureUsageMember
        +
        + +
        ActionBehaviorMember : FeatureMembership =
        +    BehaviorUsageMember | ActionNodeMember
        +
        + +
        InitialNodeMember : FeatureMembership =
        +    MemberPrefix 'first' memberFeature = [QualifiedName]
        +    RelationshipBody
        +
        + +
        ActionNodeMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += ActionNode
        +
        + +
        ActionTargetSuccessionMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += ActionTargetSuccession
        +
        + +
        GuardedSuccessionMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += GuardedSuccession
        +
        +
        // Clause 8.2.2.17.2 Action Usages
        + +
        ActionUsage =
        +    OccurrenceUsagePrefix 'action'
        +    ActionUsageDeclaration ActionBody
        +
        + +
        ActionUsageDeclaration : ActionUsage =
        +    UsageDeclaration ValuePart?
        +
        + +
        PerformActionUsage =
        +    OccurrenceUsagePrefix 'perform'
        +    PerformActionUsageDeclaration ActionBody
        +
        + +
        PerformActionUsageDeclaration : PerformActionUsage =
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'action' UsageDeclaration )
        +    ValuePart?
        +
        + +
        ActionNode : ActionUsage =
        +      ControlNode
        +    | SendNode | AcceptNode
        +    | AssignmentNode
        +    | TerminateNode
        +    | IfNode | WhileLoopNode | ForLoopNode
        +
        + +
        ActionNodeUsageDeclaration : ActionUsage =
        +    'action' UsageDeclaration?
        +
        + +
        ActionNodePrefix : ActionUsage =
        +    OccurrenceUsagePrefix ActionNodeUsageDeclaration?
        +
        +
        // Clause 8.2.2.17.3 Control Nodes
        + +
        ControlNode =
        +    MergeNode | DecisionNode | JoinNode| ForkNode
        +
        + +
        ControlNodePrefix : OccurrenceUsage =
        +    RefPrefix
        +    ( isIndividual ?= 'individual' )?
        +    ( portionKind = PortionKind
        +      { isPortion = true }
        +    )?
        +    UsageExtensionKeyword*
        +
        + +
        MergeNode =
        +    ControlNodePrefix
        +    isComposite ?= 'merge' UsageDeclaration
        +    ActionBody
        +
        + +
        DecisionNode =
        +    ControlNodePrefix
        +    isComposite ?= 'decide' UsageDeclaration
        +    ActionBody
        +
        + +
        JoinNode =
        +    ControlNodePrefix
        +    isComposite ?= 'join' UsageDeclaration
        +    ActionBody
        +
        + +
        ForkNode =
        +    ControlNodePrefix
        +    isComposite ?= 'fork' UsageDeclaration
        +    ActionBody
        +
        +
        // Clause 8.2.2.17.4 Send and Accept Action Usages
        + +
        AcceptNode : AcceptActionUsage =
        +    OccurrenceUsagePrefix
        +    AcceptNodeDeclaration ActionBody
        +
        + +
        AcceptNodeDeclaration : AcceptActionUsage =
        +    ActionNodeUsageDeclaration?
        +    'accept' AcceptParameterPart
        +
        + +
        AcceptParameterPart : AcceptActionUsage =
        +    ownedRelationship += PayloadParameterMember
        +    ( 'via' ownedRelationship += NodeParameterMember )?
        +
        + +
        PayloadParameterMember : ParameterMembership =
        +    ownedRelatedElement += PayloadParameter
        +
        + +
        PayloadParameter : ReferenceUsage =
        +      PayloadFeature
        +    | Identification PayloadFeatureSpecializationPart?
        +      TriggerValuePart
        +
        + +
        TriggerValuePart : Feature =
        +    ownedRelationship += TriggerFeatureValue
        +
        + +
        TriggerFeatureValue : FeatureValue =
        +    ownedRelatedElement += TriggerExpression
        +
        + +
        TriggerExpression : TriggerInvocationExpression =
        +      kind = ( 'at' | 'after' )
        +      ownedRelationship += ArgumentMember
        +    | kind = 'when'
        +      ownedRelationship += ArgumentExpressionMember
        +
        + +
        ArgumentMember : ParameterMembership =
        +    ownedMemberParameter = Argument
        +
        + +
        Argument : Feature =
        +    ownedRelationship += ArgumentValue
        +
        + +
        ArgumentValue : FeatureValue =
        +    value = OwnedExpression
        +
        + +
        ArgumentExpressionMember : ParameterMembership =
        +    ownedRelatedElement += ArgumentExpression
        +
        + +
        ArgumentExpression : Feature =
        +    ownedRelationship += ArgumentExpressionValue
        +
        + +
        ArgumentExpressionValue : FeatureValue =
        +    ownedRelatedElement += OwnedExpressionReference
        +
        + +
        SendNode : SendActionUsage =
        +    OccurrenceUsagePrefix ActionUsageDeclaration? 'send'
        +    ( ownedRelationship += NodeParameterMember SenderReceiverPart?
        +    | ownedRelationship += EmptyParameterMember SenderReceiverPart )?
        +    ActionBody
        +
        + +
        SendNodeDeclaration : SendActionUsage =
        +    ActionNodeUsageDeclaration?  'send'
        +    ownedRelationship += NodeParameterMember SenderReceiverPart?
        +
        + +
        SenderReceiverPart : SendActionUsage =
        +      'via' ownedRelationship += NodeParameterMember
        +      ( 'to' ownedRelationship += NodeParameterMember )?
        +    | ownedRelationship += EmptyParameterMember
        +      'to' ownedRelationship += NodeParameterMember
        +
        + +
        NodeParameterMember : ParameterMembership =
        +    ownedRelatedElement += NodeParameter
        +
        + +
        NodeParameter : ReferenceUsage =
        +    ownedRelationship += FeatureBinding
        +
        + +
        FeatureBinding : FeatureValue =
        +    ownedRelatedElement += OwnedExpression
        +
        + +
        EmptyParameterMember : ParameterMembership =
        +    ownedRelatedElement += EmptyUsage
        +
        + +
        EmptyUsage : ReferenceUsage =
        +    {}
        +
        +

        // Notes:

        +
          +
        1. // 1. The productions for ArgumentMember, Argument, ArgumentValue, ArgumentExpressionMember, ArgumentExpression and ArgumentExpressionValue are the same as given in [KerML, 8.2.5.8.1].
        2. +
        +
        // Clause 8.2.2.17.5 Assignment Action Usages
        + +
        AssignmentNode : AssignmentActionUsage =
        +    OccurrenceUsagePrefix
        +    AssignmentNodeDeclaration ActionBody
        +
        + +
        AssignmentNodeDeclaration: ActionUsage =
        +    ( ActionNodeUsageDeclaration )? 'assign'
        +    ownedRelationship += AssignmentTargetMember
        +    ownedRelationship += FeatureChainMember ':='
        +    ownedRelationship += NodeParameterMember
        +
        + +
        AssignmentTargetMember : ParameterMembership =
        +    ownedRelatedElement += AssignmentTargetParameter
        +
        + +
        AssignmentTargetParameter : ReferenceUsage =
        +    ( ownedRelationship += AssignmentTargetBinding '.' )?
        +
        + +
        AssignmentTargetBinding : FeatureValue =
        +    ownedRelatedElement += NonFeatureChainPrimaryExpression
        +
        + +
        FeatureChainMember : Membership =
        +      memberElement = [QualifiedName]
        +    | OwnedFeatureChainMember
        +
        + +
        OwnedFeatureChainMember : OwningMembership =
        +    ownedRelatedElement += OwnedFeatureChain
        +
        +
        // Clause 8.2.2.17.6 Terminate Action Usages
        + +
        TerminateNode : TerminateActionUsage =
        +    OccurrenceUsagePrefix ActionNodeUsageDeclaration?
        +    'terminate' ( ownedRelationship += NodeParameterMember )?
        +    ActionBody
        +
        +
        // Clause 8.2.2.17.7 Structured Control Action Usages
        + +
        IfNode : IfActionUsage =
        +    ActionNodePrefix
        +    'if' ownedRelationship += ExpressionParameterMember
        +    ownedRelationship += ActionBodyParameterMember
        +    ( 'else' ownedRelationship +=
        +      ( ActionBodyParameterMember | IfNodeParameterMember ) )?
        +
        + +
        ExpressionParameterMember : ParameterMembership =
        +    ownedRelatedElement += OwnedExpression
        +
        + +
        ActionBodyParameterMember : ParameterMembership =
        +    ownedRelatedElement += ActionBodyParameter
        +
        + +
        ActionBodyParameter : ActionUsage =
        +    ( 'action' UsageDeclaration? )?
        +    '{' ActionBodyItem* '}'
        +
        + +
        IfNodeParameterMember : ParameterMembership =
        +    ownedRelatedElement += IfNode
        +
        + +
        WhileLoopNode : WhileLoopActionUsage =
        +    ActionNodePrefix
        +    ( 'while' ownedRelationship += ExpressionParameterMember
        +    | 'loop' ownedRelationship += EmptyParameterMember
        +    )
        +    ownedRelationship += ActionBodyParameterMember
        +    ( 'until' ownedRelationship += ExpressionParameterMember ';' )?
        +
        + +
        ForLoopNode : ForLoopActionUsage =
        +    ActionNodePrefix
        +    'for' ownedRelationship += ForVariableDeclarationMember
        +    'in' ownedRelationship += NodeParameterMember
        +    ownedRelationship += ActionBodyParameterMember
        +
        + +
        ForVariableDeclarationMember : FeatureMembership =
        +    ownedRelatedElement += UsageDeclaration
        +
        + +
        ForVariableDeclaration : ReferenceUsage =
        +    UsageDeclaration
        +
        +
        // Clause 8.2.2.17.8 Action Successions
        + +
        ActionTargetSuccession : Usage =
        +    ( TargetSuccession | GuardedTargetSuccession | DefaultTargetSuccession )
        +    UsageBody
        +
        + +
        TargetSuccession : SuccessionAsUsage =
        +    ownedRelationship += SourceEndMember
        +    'then' ownedRelationship += ConnectorEndMember
        +
        + +
        GuardedTargetSuccession : TransitionUsage =
        +    ownedRelationship += GuardExpressionMember
        +    'then' ownedRelationship += TransitionSuccessionMember
        +
        + +
        DefaultTargetSuccession : TransitionUsage =
        +    'else' ownedRelationship += TransitionSuccessionMember
        +
        + +
        GuardedSuccession : TransitionUsage =
        +    ( 'succession' UsageDeclaration )?
        +    'first' ownedRelationship += FeatureChainMember
        +    ownedRelationship += GuardExpressionMember
        +    'then' ownedRelationship += TransitionSuccessionMember
        +    UsageBody
        +
        +

        // Clause 8.2.2.18 States Textual Notation

        +
        // Clause 8.2.2.18.1 State Definitions
        + +
        StateDefinition =
        +    OccurrenceDefinitionPrefix 'state' 'def'
        +    DefinitionDeclaration StateDefBody
        +
        + +
        StateDefBody : StateDefinition =
        +      ';'
        +    | ( isParallel ?= 'parallel' )?
        +      '{' StateBodyItem* '}'
        +
        + +
        StateBodyItem : Type =
        +      NonBehaviorBodyItem
        +    | ( ownedRelationship += SourceSuccessionMember )?
        +      ownedRelationship += BehaviorUsageMember
        +      ( ownedRelationship += TargetTransitionUsageMember )*
        +    | ownedRelationship += TransitionUsageMember
        +    | ownedRelationship += EntryActionMember
        +      ( ownedRelationship += EntryTransitionMember )*
        +    | ownedRelationship += DoActionMember
        +    | ownedRelationship += ExitActionMember
        +
        + +
        EntryActionMember : StateSubactionMembership =
        +    MemberPrefix kind = 'entry'
        +    ownedRelatedElement += StateActionUsage
        +
        + +
        DoActionMember : StateSubactionMembership =
        +    MemberPrefix kind = 'do'
        +    ownedRelatedElement += StateActionUsage
        +
        + +
        ExitActionMember : StateSubactionMembership =
        +    MemberPrefix kind = 'exit'
        +    ownedRelatedElement += StateActionUsage
        +
        + +
        EntryTransitionMember : FeatureMembership =
        +    MemberPrefix
        +    ( ownedRelatedElement += GuardedTargetSuccession
        +    | 'then' ownedRelatedElement += TargetSuccession
        +    ) ';'
        +
        + +
        StateActionUsage : ActionUsage =
        +    EmptyActionUsage ';'
        +    | StatePerformActionUsage
        +    | StateAcceptActionUsage
        +    | StateSendActionUsage
        +    | StateAssignmentActionUsage
        +
        + +
        EmptyActionUsage : ActionUsage =
        +    {}
        +
        + +
        StatePerformActionUsage : PerformActionUsage =
        +    PerformActionUsageDeclaration ActionBody
        +
        + +
        StateAcceptActionUsage : AcceptActionUsage =
        +    AcceptNodeDeclaration ActionBody
        +
        + +
        StateSendActionUsage : SendActionUsage =
        +    SendNodeDeclaration ActionBody
        +
        + +
        StateAssignmentActionUsage : AssignmentActionUsage =
        +    AssignmentNodeDeclaration ActionBody
        +
        + +
        TransitionUsageMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += TransitionUsage
        +
        + +
        TargetTransitionUsageMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += TargetTransitionUsage
        +
        +
        // Clause 8.2.2.18.2 State Usages
        + +
        StateUsage =
        +    OccurrenceUsagePrefix 'state'
        +    ActionUsageDeclaration StateUsageBody
        +
        + +
        StateUsageBody : StateUsage =
        +       ';'
        +     | ( isParallel ?= 'parallel' )?
        +       '{' StateBodyItem* '}'
        +
        + +
        ExhibitStateUsage =
        +    OccurrenceUsagePrefix 'exhibit'
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'state' UsageDeclaration )
        +    ValuePart? StateUsageBody
        +
        +
        // Clause 8.2.2.18.3 Transition Usages
        + +
        TransitionUsage =
        +    'transition' ( UsageDeclaration 'first' )?
        +    ownedRelationship += FeatureChainMember
        +    ownedRelationship += EmptyParameterMember
        +    ( ownedRelationship += EmptyParameterMember
        +      ownedRelationship += TriggerActionMember )?
        +    ( ownedRelationship += GuardExpressionMember )?
        +    ( ownedRelationship += EffectBehaviorMember )?
        +    'then' ownedRelationship += TransitionSuccessionMember
        +    ActionBody
        +
        + +
        TargetTransitionUsage : TransitionUsage =
        +    ownedRelationship += EmptyParameterMember
        +    ( 'transition'
        +      ( ownedRelationship += EmptyParameterMember
        +        ownedRelationship += TriggerActionMember )?
        +      ( ownedRelationship += GuardExpressionMember )?
        +      ( ownedRelationship += EffectBehaviorMember )?
        +    | ownedRelationship += EmptyParameterMember
        +      ownedRelationship += TriggerActionMember
        +      ( ownedRelationship += GuardExpressionMember )?
        +      ( ownedRelationship += EffectBehaviorMember )?
        +    | ownedRelationship += GuardExpressionMember
        +      ( ownedRelationship += EffectBehaviorMember )?
        +    )?
        +    'then' ownedRelationship += TransitionSuccessionMember
        +    ActionBody
        +
        + +
        TriggerActionMember : TransitionFeatureMembership =
        +    'accept' { kind = 'trigger' } ownedRelatedElement += TriggerAction
        +
        + +
        TriggerAction : AcceptActionUsage =
        +    AcceptParameterPart
        +
        + +
        GuardExpressionMember : TransitionFeatureMembership =
        +    'if' { kind = 'guard' } ownedRelatedElement += OwnedExpression
        +
        + +
        EffectBehaviorMember : TransitionFeatureMembership =
        +    'do' { kind = 'effect' } ownedRelatedElement += EffectBehaviorUsage
        +
        + +
        EffectBehaviorUsage : ActionUsage =
        +      EmptyActionUsage
        +    | TransitionPerformActionUsage
        +    | TransitionAcceptActionUsage
        +    | TransitionSendActionUsage
        +    | TransitionAssignmentActionUsage
        +
        + +
        TransitionPerformActionUsage : PerformActionUsage =
        +    PerformActionUsageDeclaration ( '{' ActionBodyItem* '}' )?
        +
        + +
        TransitionAcceptActionUsage : AcceptActionUsage =
        +    AcceptNodeDeclaration ( '{' ActionBodyItem* '}' )?
        +
        + +
        TransitionSendActionUsage : SendActionUsage =
        +    SendNodeDeclaration ( '{' ActionBodyItem* '}' )?
        +
        + +
        TransitionAssignmentActionUsage : AssignmentActionUsage =
        +    AssignmentNodeDeclaration ( '{' ActionBodyItem* '}' )?
        +
        + +
        TransitionSuccessionMember : OwningMembership =
        +    ownedRelatedElement += TransitionSuccession
        +
        + +
        TransitionSuccession : Succession =
        +    ownedRelationship += EmptyEndMember
        +    ownedRelationship += ConnectorEndMember
        +
        + +
        EmptyEndMember : EndFeatureMembership =
        +    ownedRelatedElement += EmptyFeature
        +
        + +
        EmptyFeature : ReferenceUsage =
        +    {}
        +
        +

        // Clause 8.2.2.19 Calculations Textual Notation

        + +
        CalculationDefinition =
        +    OccurrenceDefinitionPrefix 'calc' 'def'
        +    DefinitionDeclaration CalculationBody
        +
        + +
        CalculationUsage : CalculationUsage =
        +    OccurrenceUsagePrefix 'calc'
        +    ActionUsageDeclaration CalculationBody
        +
        + +
        CalculationBody : Type =
        +      ';' | '{' CalculationBodyPart '}'
        +
        + +
        CalculationBodyPart : Type =
        +      CalculationBodyItem*
        +      ( ownedRelationship += ResultExpressionMember )?
        +
        + +
        CalculationBodyItem : Type =
        +      ActionBodyItem
        +    | ownedRelationship += ReturnParameterMember
        +
        + +
        ReturnParameterMember : ReturnParameterMembership =
        +    MemberPrefix? 'return' ownedRelatedElement += UsageElement
        +
        + +
        ResultExpressionMember : ResultExpressionMembership =
        +    MemberPrefix? ownedRelatedElement += OwnedExpression
        +
        +

        // Clause 8.2.2.20 Constraints Textual Notation

        + +
        ConstraintDefinition =
        +    OccurrenceDefinitionPrefix 'constraint' 'def'
        +    DefinitionDeclaration CalculationBody
        +
        + +
        ConstraintUsage =
        +    OccurrenceUsagePrefix 'constraint'
        +    ConstraintUsageDeclaration CalculationBody
        +
        + +
        AssertConstraintUsage =
        +    OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' )?
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'constraint' ConstraintUsageDeclaration )
        +    CalculationBody
        +
        + +
        ConstraintUsageDeclaration : ConstraintUsage =
        +    UsageDeclaration ValuePart?
        +
        +

        // Clause 8.2.2.21 Requirements Textual Notation

        +
        // Clause 8.2.2.21.1 Requirement Definitions
        + +
        RequirementDefinition =
        +    OccurrenceDefinitionPrefix 'requirement' 'def'
        +    DefinitionDeclaration RequirementBody
        +
        + +
        RequirementBody : Type =
        +      ';' | '{' RequirementBodyItem* '}'
        +
        + +
        RequirementBodyItem : Type =
        +      DefinitionBodyItem
        +    | ownedRelationship += SubjectMember
        +    | ownedRelationship += RequirementConstraintMember
        +    | ownedRelationship += FramedConcernMember
        +    | ownedRelationship += RequirementVerificationMember
        +    | ownedRelationship += ActorMember
        +    | ownedRelationship += StakeholderMember
        +
        + +
        SubjectMember : SubjectMembership =
        +    MemberPrefix ownedRelatedElement += SubjectUsage
        +
        + +
        SubjectUsage : ReferenceUsage =
        +    'subject' UsageExtensionKeyword* Usage
        +
        + +
        RequirementConstraintMember : RequirementConstraintMembership =
        +    MemberPrefix? RequirementKind
        +    ownedRelatedElement += RequirementConstraintUsage
        +
        + +
        RequirementKind : RequirementConstraintMembership =
        +      'assume' { kind = 'assumption' }
        +    | 'require' { kind = 'requirement' }
        +
        + +
        RequirementConstraintUsage : ConstraintUsage =
        +      ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart? RequirementBody
        +    | ( UsageExtensionKeyword* 'constraint'
        +      | UsageExtensionKeyword+ )
        +      ConstraintUsageDeclaration CalculationBody
        +
        + +
        FramedConcernMember : FramedConcernMembership =
        +    MemberPrefix? 'frame'
        +    ownedRelatedElement += FramedConcernUsage
        +
        + +
        FramedConcernUsage : ConcernUsage =
        +      ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart? CalculationBody
        +    | ( UsageExtensionKeyword* 'concern'
        +      | UsageExtensionKeyword+ )
        +      CalculationUsageDeclaration CalculationBody
        +
        + +
        ActorMember : ActorMembership =
        +    MemberPrefix ownedRelatedElement += ActorUsage
        +
        + +
        ActorUsage : PartUsage =
        +    'actor' UsageExtensionKeyword* Usage
        +
        + +
        StakeholderMember : StakeholderMembership =
        +    MemberPrefix ownedRelatedElement += StakeholderUsage
        +
        + +
        StakeholderUsage : PartUsage =
        +    'stakeholder' UsageExtensionKeyword* Usage
        +
        +
        // Clause 8.2.2.21.2 Requirement Usages
        + +
        RequirementUsage =
        +    OccurrenceUsagePrefix 'requirement'
        +    ConstraintUsageDeclaration RequirementBody
        +
        + +
        SatisfyRequirementUsage =
        +    OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' ) 'satisfy'
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'requirement' UsageDeclaration )
        +    ValuePart?
        +    ( 'by' ownedRelationship += SatisfactionSubjectMember )?
        +    RequirementBody
        +
        + +
        SatisfactionSubjectMember : SubjectMembership =
        +    ownedRelatedElement += SatisfactionParameter
        +
        + +
        SatisfactionParameter : ReferenceUsage =
        +    ownedRelationship += SatisfactionFeatureValue
        +
        + +
        SatisfactionFeatureValue : FeatureValue =
        +    ownedRelatedElement += SatisfactionReferenceExpression
        +
        + +
        SatisfactionReferenceExpression : FeatureReferenceExpression =
        +    ownedRelationship += FeatureChainMember
        +
        +
        // Clause 8.2.2.21.3 Concerns
        + +
        ConcernDefinition =
        +    OccurrenceDefinitionPrefix 'concern' 'def'
        +    DefinitionDeclaration RequirementBody
        +
        + +
        ConcernUsage =
        +    OccurrenceUsagePrefix 'concern'
        +    ConstraintUsageDeclaration RequirementBody
        +
        +

        // Clause 8.2.2.22 Cases Textual Notation

        + +
        CaseDefinition =
        +    OccurrenceDefinitionPrefix 'case' 'def'
        +    DefinitionDeclaration CaseBody
        +
        + +
        CaseUsage =
        +    OccurrenceUsagePrefix 'case'
        +    ConstraintUsageDeclaration CaseBody
        +
        + +
        CaseBody : Type =
        +      ';'
        +    | '{' CaseBodyItem*
        +          ( ownedRelationship += ResultExpressionMember )?
        +      '}'
        +
        + +
        CaseBodyItem : Type =
        +      ActionBodyItem
        +    | ownedRelationship += SubjectMember
        +    | ownedRelationship += ActorMember
        +    | ownedRelationship += ObjectiveMember
        +
        + +
        ObjectiveMember : ObjectiveMembership =
        +    MemberPrefix 'objective'
        +    ownedRelatedElement += ObjectiveRequirementUsage
        +
        + +
        ObjectiveRequirementUsage : RequirementUsage =
        +    UsageExtensionKeyword* ConstraintUsageDeclaration
        +    RequirementBody
        +
        +

        // Clause 8.2.2.23 Analysis Cases Textual Notation

        + +
        AnalysisCaseDefinition =
        +    OccurrenceDefinitionPrefix 'analysis' 'def'
        +    DefinitionDeclaration CaseBody
        +
        + +
        AnalysisCaseUsage =
        +    OccurrenceUsagePrefix 'analysis'
        +    ConstraintUsageDeclaration CaseBody
        +
        +

        // Clause 8.2.2.24 Verification Cases Textual Notation

        + +
        VerificationCaseDefinition =
        +    OccurrenceDefinitionPrefix 'verification' 'def'
        +    DefinitionDeclaration CaseBody
        +
        + +
        VerificationCaseUsage =
        +    OccurrenceUsagePrefix 'verification'
        +    ConstraintUsageDeclaration CaseBody
        +
        + +
        RequirementVerificationMember : RequirementVerificationMembership =
        +    MemberPrefix 'verify' { kind = 'requirement' }
        +    ownedRelatedElement += RequirementVerificationUsage
        +
        + +
        RequirementVerificationUsage : RequirementUsage =
        +      ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecialization* RequirementBody
        +    | ( UsageExtensionKeyword* 'requirement'
        +      | UsageExtensionKeyword+ )
        +      ConstraintUsageDeclaration RequirementBody
        +
        +

        // Clause 8.2.2.25 Use Cases Textual Notation

        + +
        UseCaseDefinition =
        +    OccurrenceDefinitionPrefix 'use' 'case' 'def'
        +    DefinitionDeclaration CaseBody
        +
        + +
        UseCaseUsage =
        +    OccurrenceUsagePrefix 'use' 'case'
        +    ConstraintUsageDeclaration CaseBody
        +
        + +
        IncludeUseCaseUsage =
        +    OccurrenceUsagePrefix 'include'
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'use' 'case' UsageDeclaration )
        +    ValuePart?
        +    CaseBody
        +
        +

        // Clause 8.2.2.26 Views and Viewpoints Textual Notation

        +
        // Clause 8.2.2.26.1 View Definitions
        + +
        ViewDefinition =
        +    OccurrenceDefinitionPrefix 'view' 'def'
        +    DefinitionDeclaration ViewDefinitionBody
        +
        + +
        ViewDefinitionBody : ViewDefinition =
        +    ';' | '{' ViewDefinitionBodyItem* '}'
        +
        + +
        ViewDefinitionBodyItem : ViewDefinition =
        +      DefinitionBodyItem
        +    | ownedRelationship += ElementFilterMember
        +    | ownedRelationship += ViewRenderingMember
        +
        + +
        ViewRenderingMember : ViewRenderingMembership =
        +    MemberPrefix 'render'
        +    ownedRelatedElement += ViewRenderingUsage
        +
        + +
        ViewRenderingUsage : RenderingUsage =
        +      ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +      UsageBody
        +    | ( UsageExtensionKeyword* 'rendering'
        +      | UsageExtensionKeyword+ )
        +      Usage
        +
        +
        // Clause 8.2.2.26.2 View Usages
        + +
        ViewUsage =
        +    OccurrenceUsagePrefix 'view'
        +    UsageDeclaration? ValuePart?
        +    ViewBody
        +
        + +
        ViewBody : ViewUsage =
        +    ';' | '{' ViewBodyItem* '}'
        +
        + +
        ViewBodyItem : ViewUsage =
        +      DefinitionBodyItem
        +    | ownedRelationship += ElementFilterMember
        +    | ownedRelationship += ViewRenderingMember
        +    | ownedRelationship += Expose
        +
        + +
        Expose =
        +    'expose' ( MembershipExpose | NamespaceExpose )
        +    RelationshipBody
        +
        + +
        MembershipExpose =
        +    MembershipImport
        +
        + +
        NamespaceExpose =
        +    NamespaceImport
        +
        +
        // Clause 8.2.2.26.3 Viewpoints
        + +
        ViewpointDefinition =
        +    OccurrenceDefinitionPrefix 'viewpoint' 'def'
        +    DefinitionDeclaration RequirementBody
        +
        + +
        ViewpointUsage =
        +    OccurrenceUsagePrefix 'viewpoint'
        +    ConstraintUsageDeclaration RequirementBody
        +
        +
        // Clause 8.2.2.26.4 Renderings
        + +
        RenderingDefinition =
        +    OccurrenceDefinitionPrefix 'rendering' 'def'
        +    Definition
        +
        + +
        RenderingUsage =
        +    OccurrenceUsagePrefix 'rendering'
        +    Usage
        +
        +

        // Clause 8.2.2.27 Metadata Textual Notation

        + +
        MetadataDefinition =
        +    ( isAbstract ?= 'abstract')? DefinitionExtensionKeyword*
        +    'metadata' 'def' Definition
        +
        + +
        PrefixMetadataAnnotation : Annotation =
        +    '#' annotatingElement = PrefixMetadataUsage
        +    { ownedRelatedElement += annotatingElement }
        +
        + +
        PrefixMetadataMember : OwningMembership =
        +    '#' ownedRelatedElement = PrefixMetadataUsage
        +
        + +
        PrefixMetadataUsage : MetadataUsage =
        +    ownedRelationship += OwnedFeatureTyping
        +
        + +
        MetadataUsage =
        +    UsageExtensionKeyword* ( '@' | 'metadata' )
        +    MetadataUsageDeclaration
        +    ( 'about' ownedRelationship += Annotation
        +      ( ',' ownedRelationship += Annotation )*
        +    )?
        +    MetadataBody
        +
        + +
        MetadataUsageDeclaration : MetadataUsage =
        +    ( Identification ( ':' | 'typed' 'by' ) )?
        +    ownedRelationship += OwnedFeatureTyping
        +
        + +
        MetadataBody : Type =
        +    ';' |
        +    '{' ( ownedRelationship += DefinitionMember
        +        | ownedRelationship += MetadataBodyUsageMember
        +        | ownedRelationship += AliasMember
        +        | ownedRelationship += Import
        +        )*
        +    '}'
        +
        + +
        MetadataBodyUsageMember : FeatureMembership =
        +    ownedMemberFeature = MetadataBodyUsage
        +
        + +
        MetadataBodyUsage : ReferenceUsage =
        +    'ref'? ( ':>>' | 'redefines' )? ownedRelationship += OwnedRedefinition
        +    FeatureSpecializationPart? ValuePart?
        +    MetadataBody
        +
        + +
        ExtendedDefinition : Definition =
        +    BasicDefinitionPrefix? DefinitionExtensionKeyword+
        +    'def' Definition
        +
        + +
        ExtendedUsage : Usage =
        +    UnextendedUsagePrefix UsageExtensionKeyword+
        +    Usage
        +
        +

        // End of BNF
        + +

        + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected.kebnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected.kebnf new file mode 100644 index 000000000..dcf9ed73b --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected.kebnf @@ -0,0 +1,1712 @@ +// Source document: tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected-marked_up.kebnf +// Generated by bnf_grammar_processor at: 2025-12-04T19:29:18Z + + +// Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html +// Generated by bnf_grammar_processor at: 2025-11-28T15:06:37Z + +// Manual corrections by HP de Koning + +// Part 2 - Systems Modeling Language (SysML) + +// Clause 8.2.2 Textual Notation + +// Clause 8.2.2.1 Textual Notation Overview + +// Clause 8.2.2.1.1 EBNF Conventions + +// Clause 8.2.2.1.2 Lexical Structure + +RESERVED_KEYWORD = + 'about' | 'abstract' | 'accept' | 'action' | 'actor' | 'after' | 'alias' | 'all' | 'allocate' | 'allocation' + | 'analysis' | 'and' | 'as' | 'assert' | 'assign' | 'assume' | 'at' | 'attribute' | 'bind' | 'binding' | 'by' | 'calc' + | 'case' | 'comment' | 'concern' | 'connect' | 'connection' | 'constant' | 'constraint' | 'crosses' | 'decide' + | 'def' | 'default' | 'defined' | 'dependency' | 'derived' | 'do' | 'doc' | 'else' | 'end' | 'entry' | 'enum' + | 'event' | 'exhibit' | 'exit' | 'expose' | 'false' | 'filter' | 'first' | 'flow' | 'for' | 'fork' | 'frame' | 'from' + | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'include' | 'individual' | 'inout' | 'interface' | 'istype' + | 'item' | 'join' | 'language' | 'library' | 'locale' | 'loop' | 'merge' | 'message' | 'meta' | 'metadata' + | 'nonunique' | 'not' | 'null' | 'objective' | 'occurrence' | 'of' | 'or' | 'ordered' | 'out' | 'package' | 'parallel' + | 'part' | 'perform' | 'port' | 'private' | 'protected' | 'public' | 'redefines' | 'ref' | 'references' | 'render' + | 'rendering' | 'rep' | 'require' | 'requirement' | 'return' | 'satisfy' | 'send' | 'snapshot' | 'specializes' + | 'stakeholder' | 'standard' | 'state' | 'subject' | 'subsets' | 'succession' | 'terminate' | 'then' | 'timeslice' + | 'to' | 'transition' | 'true' | 'until' | 'use' | 'variant' | 'variation' | 'verification' | 'verify' | 'via' + | 'view' | 'viewpoint' | 'when' | 'while' | 'xor' + +DEFINED_BY = ':' | 'defined' 'by' + +SPECIALIZES = ':>' | 'specializes' + +SUBSETS = ':>' | 'subsets' + +REFERENCES = '::>' | 'references' + +CROSSES = '=>' | 'crosses' + +REDEFINES = ':>>' | 'redefines' + +// Clause 8.2.2.2 Elements and Relationships Textual Notation + +Identification : Element = + ( '<' declaredShortName = NAME '>' )? + ( declaredName = NAME )? + +RelationshipBody : Relationship = + ';' | '{' ( ownedRelationship += OwnedAnnotation )* '}' + +// Clause 8.2.2.3 Dependencies Textual Notation + +Dependency = + ( ownedRelationship += PrefixMetadataAnnotation )* + 'dependency' DependencyDeclaration + RelationshipBody + +DependencyDeclaration = + ( Identification 'from' )? + client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to' + supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )* + +// Clause 8.2.2.4 Annotations Textual Notation + +// Clause 8.2.2.4.1 Annotations + +Annotation = + annotatedElement = [QualifiedName] + +OwnedAnnotation : Annotation = + ownedRelatedElement += AnnotatingElement + +AnnotatingMember : OwningMembership = + ownedRelatedElement += AnnotatingElement + +AnnotatingElement = + Comment + | Documentation + | TextualRepresentation + | MetadataFeature + +// Clause 8.2.2.4.2 Comments and Documentation + +Comment = + ( 'comment' Identification + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + )? + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +Documentation = + 'doc' Identification + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +// Clause 8.2.2.4.3 Textual Representation + +TextualRepresentation = + ( 'rep' Identification )? + 'language' language = STRING_VALUE body = REGULAR_COMMENT + +// Clause 8.2.2.5 Namespaces and Packages Textual Notation + +// Clause 8.2.2.5.1 Packages + +RootNamespace : Namespace = + PackageBodyElement* + +Package = + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +LibraryPackage = + ( isStandard ?= 'standard' ) 'library' + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +PackageDeclaration : Package = + 'package' Identification + +PackageBody : Package = + ';' | '{' PackageBodyElement* '}' + +PackageBodyElement : Package = + ownedRelationship += PackageMember + | ownedRelationship += ElementFilterMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +MemberPrefix : Membership = + ( visibility = VisibilityIndicator )? + +PackageMember : OwningMembership = + MemberPrefix + ( ownedRelatedElement += DefinitionElement + | ownedRelatedElement = UsageElement ) + +ElementFilterMember : ElementFilterMembership = + MemberPrefix + 'filter' ownedRelatedElement += OwnedExpression ';' + +AliasMember : Membership = + MemberPrefix + 'alias' ( '<' memberShortName = NAME '>' )? + ( memberName = NAME )? + 'for' memberElement = [QualifiedName] + RelationshipBody + +Import = + visibility = VisibilityIndicator + 'import' ( isImportAll ?= 'all' )? + ImportDeclaration + RelationshipBody + +ImportDeclaration : Import = + MembershipImport | NamespaceImport + +MembershipImport = + importedMembership = [QualifiedName] + ( '::' isRecursive ?= '**' )? + +NamespaceImport = + importedNamespace = [QualifiedName] '::' '*' + ( '::' isRecursive ?= '**' )? + | importedNamespace = FilterPackage + { ownedRelatedElement += importedNamespace } + +FilterPackage : Package = + ownedRelationship += FilterPackageImport + ( ownedRelationship += FilterPackageMember )+ + +FilterPackageMember : ElementFilterMembership = + '[' ownedRelatedElement += OwnedExpression ']' + +VisibilityIndicator : VisibilityKind = + 'public' | 'private' | 'protected' + +// Clause 8.2.2.5.2 Package Elements + +DefinitionElement : Element = + Package + | LibraryPackage + | AnnotatingElement + | Dependency + | AttributeDefinition + | EnumerationDefinition + | OccurrenceDefinition + | IndividualDefinition + | ItemDefinition + | PartDefinition + | ConnectionDefinition + | FlowDefinition + | InterfaceDefinition + | PortDefinition + | ActionDefinition + | CalculationDefinition + | StateDefinition + | ConstraintDefinition + | RequirementDefinition + | ConcernDefinition + | CaseDefinition + | AnalysisCaseDefinition + | VerificationCaseDefinition + | UseCaseDefinition + | ViewDefinition + | ViewpointDefinition + | RenderingDefinition + | MetadataDefinition + | ExtendedDefinition + +UsageElement : Usage = + NonOccurrenceUsageElement + | OccurrenceUsageElement + +// Clause 8.2.2.6 Definition and Usage Textual Notation + +// Clause 8.2.2.6.1 Definitions + +BasicDefinitionPrefix = + isAbstract ?= 'abstract' | isVariation ?= 'variation' + +DefinitionExtensionKeyword : Definition = + ownedRelationship += PrefixMetadataMember + +DefinitionPrefix : Definition = + BasicDefinitionPrefix? DefinitionExtensionKeyword* + +Definition = + DefinitionDeclaration DefinitionBody + +DefinitionDeclaration : Definition = + Identification SubclassificationPart? + +DefinitionBody : Type = + ';' | '{' DefinitionBodyItem* '}' + +DefinitionBodyItem : Type = + ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += NonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += OccurrenceUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +DefinitionMember : OwningMembership = + MemberPrefix + ownedRelatedElement += DefinitionElement + +VariantUsageMember : VariantMembership = + MemberPrefix 'variant' + ownedVariantUsage = VariantUsageElement + +NonOccurrenceUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += NonOccurrenceUsageElement + +OccurrenceUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += OccurrenceUsageElement + +StructureUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += StructureUsageElement + +BehaviorUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += BehaviorUsageElement + +// Clause 8.2.2.6.2 Usages + +FeatureDirection : FeatureDirectionKind = + 'in' | 'out' | 'inout' + +RefPrefix : Usage = + ( direction = FeatureDirection )? + ( isDerived ?= 'derived' )? + ( isAbstract ?= 'abstract' | isVariation ?= 'variation' )? + ( isConstant ?= 'constant' )? + +BasicUsagePrefix : Usage = + RefPrefix + ( isReference ?= 'ref' )? + +EndUsagePrefix : Usage = + isEnd ?= 'end' ( ownedRelationship += OwnedCrossFeatureMember )? + +// (See Note 1) + +OwnedCrossFeatureMember : OwningMembership = + ownedRelatedElement += OwnedCrossFeature + +OwnedCrossFeature : ReferenceUsage = + BasicUsagePrefix UsageDeclaration + +UsageExtensionKeyword : Usage = + ownedRelationship += PrefixMetadataMember + +UnextendedUsagePrefix : Usage = + EndUsagePrefix | BasicUsagePrefix + +UsagePrefix : Usage = + UnextendedUsagePrefix UsageExtensionKeyword* + +Usage = + UsageDeclaration UsageCompletion + +UsageDeclaration : Usage = + Identification FeatureSpecializationPart? + +UsageCompletion : Usage = + ValuePart? UsageBody + +UsageBody : Usage = + DefinitionBody + +ValuePart : Feature = + ownedRelationship += FeatureValue + +FeatureValue = + ( '=' + | isInitial ?= ':=' + | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )? + ) + ownedRelatedElement += OwnedExpression + +// Notes: +// 1. A Usage parsed with isEnd = true for which mayTimeVary = true must also have isConstant set to true, even though this is not explicitly notated in the textual notation, in order to satisfy the KerML constraint checkFeatureEndIsConstant. + +// Clause 8.2.2.6.3 Reference Usages + +DefaultReferenceUsage : ReferenceUsage = + RefPrefix Usage + +ReferenceUsage = + ( EndUsagePrefix | RefPrefix ) + 'ref' Usage + +VariantReference : ReferenceUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecialization* UsageBody + +// Clause 8.2.2.6.4 Body Elements + +NonOccurrenceUsageElement : Usage = + DefaultReferenceUsage + | ReferenceUsage + | AttributeUsage + | EnumerationUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + | ExtendedUsage + +OccurrenceUsageElement : Usage = + StructureUsageElement | BehaviorUsageElement + +StructureUsageElement : Usage = + OccurrenceUsage + | IndividualUsage + | PortionUsage + | EventOccurrenceUsage + | ItemUsage + | PartUsage + | ViewUsage + | RenderingUsage + | PortUsage + | ConnectionUsage + | InterfaceUsage + | AllocationUsage + | Message + | FlowUsage + | SuccessionFlowUsage + +BehaviorUsageElement : Usage = + ActionUsage + | CalculationUsage + | StateUsage + | ConstraintUsage + | RequirementUsage + | ConcernUsage + | CaseUsage + | AnalysisCaseUsage + | VerificationCaseUsage + | UseCaseUsage + | ViewpointUsage + | PerformActionUsage + | ExhibitStateUsage + | IncludeUseCaseUsage + | AssertConstraintUsage + | SatisfyRequirementUsage + +VariantUsageElement : Usage = + VariantReference + | ReferenceUsage + | AttributeUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + | OccurrenceUsage + | IndividualUsage + | PortionUsage + | EventOccurrenceUsage + | ItemUsage + | PartUsage + | ViewUsage + | RenderingUsage + | PortUsage + | ConnectionUsage + | InterfaceUsage + | AllocationUsage + | Message + | FlowUsage + | SuccessionFlowUsage + | BehaviorUsageElement + +// Clause 8.2.2.6.5 Specialization + +SubclassificationPart : Classifier = + SPECIALIZES ownedRelationship += OwnedSubclassification + ( ',' ownedRelationship += OwnedSubclassification )* + +OwnedSubclassification : Subclassification = + superClassifier = [QualifiedName] + +FeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? FeatureSpecialization* + | MultiplicityPart FeatureSpecialization* + +FeatureSpecialization : Feature = + Typings | Subsettings | References | Crosses | Redefinitions + +Typings : Feature = + TypedBy ( ',' ownedRelationship += FeatureTyping )* + +TypedBy : Feature = + DEFINED_BY ownedRelationship += FeatureTyping + +FeatureTyping = + OwnedFeatureTyping | ConjugatedPortTyping + +OwnedFeatureTyping : FeatureTyping = + type = [QualifiedName] + | type = OwnedFeatureChain + { ownedRelatedElement += type } + +Subsettings : Feature = + Subsets ( ',' ownedRelationship += OwnedSubsetting )* + +Subsets : Feature = + SUBSETS ownedRelationship += OwnedSubsetting + +OwnedSubsetting : Subsetting = + subsettedFeature = [QualifiedName] + | subsettedFeature = OwnedFeatureChain + { ownedRelatedElement += subsettedFeature } + +References : Feature = + REFERENCES ownedRelationship += OwnedReferenceSubsetting + +OwnedReferenceSubsetting : ReferenceSubsetting = + referencedFeature = [QualifiedName] + | referencedFeature = OwnedFeatureChain + { ownedRelatedElement += referenceFeature } + +Crosses : Feature = + CROSSES ownedRelationship += OwnedCrossSubsetting + +OwnedCrossSubsetting : CrossSubsetting = + crossedFeature = [QualifiedName] + | crossedFeature = OwnedFeatureChain + { ownedRelatedElement += crossedFeature } + +Redefinitions : Feature = + Redefines ( ',' ownedRelationship += OwnedRedefinition )* + +Redefines : Feature = + REDEFINES ownedRelationship += OwnedRedefinition + +OwnedRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + | redefinedFeature = OwnedFeatureChain + { ownedRelatedElement += redefinedFeature } + +OwnedFeatureChain : Feature = + ownedRelationship += OwnedFeatureChaining + ( '.' ownedRelationship += OwnedFeatureChaining )+ + +OwnedFeatureChaining : FeatureChaining = + chainingFeature = [QualifiedName] + +// Clause 8.2.2.6.6 Multiplicity + +MultiplicityPart : Feature = + ownedRelationship += OwnedMultiplicity + | ( ownedRelationship += OwnedMultiplicity )? + ( isOrdered ?= 'ordered' ( { isUnique = false } 'nonunique' )? + | { isUnique = false } 'nonunique' ( isOrdered ?= 'ordered' )? ) + +OwnedMultiplicity : OwningMembership = + ownedRelatedElement += MultiplicityRange + +MultiplicityRange = + '[' ( ownedRelationship += MultiplicityExpressionMember '..' )? + ownedRelationship += MultiplicityExpressionMember ']' + +MultiplicityExpressionMember : OwningMembership = + ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression ) + +// Clause 8.2.2.7 Attributes Textual Notation + +AttributeDefinition : AttributeDefinition = + DefinitionPrefix 'attribute' 'def' Definition + +AttributeUsage : AttributeUsage = + UsagePrefix 'attribute' Usage + +// Clause 8.2.2.8 Enumerations Textual Notation + +EnumerationDefinition = + DefinitionExtensionKeyword* + 'enum' 'def' DefinitionDeclaration EnumerationBody + +EnumerationBody : EnumerationDefinition = + ';' + | '{' ( ownedRelationship += AnnotatingMember + | ownedRelationship += EnumerationUsageMember )* + '}' + +EnumerationUsageMember : VariantMembership = + MemberPrefix ownedRelatedElement += EnumeratedValue + +EnumeratedValue : EnumerationUsage = + 'enum'? Usage + +EnumerationUsage : EnumerationUsage = + UsagePrefix 'enum' Usage + +// Clause 8.2.2.9 Occurrences Textual Notation + +// Clause 8.2.2.9.1 Occurrence Definitions + +OccurrenceDefinitionPrefix : OccurrenceDefinition = + BasicDefinitionPrefix? + ( isIndividual ?= 'individual' + ownedRelationship += EmptyMultiplicityMember + )? + DefinitionExtensionKeyword* + +OccurrenceDefinition = + OccurrenceDefinitionPrefix 'occurrence' 'def' Definition + +IndividualDefinition : OccurrenceDefinition = + BasicDefinitionPrefix? isIndividual ?= 'individual' + DefinitionExtensionKeyword* 'def' Definition + ownedRelationship += EmptyMultiplicityMember + +EmptyMultiplicityMember : OwningMembership = + ownedRelatedElement += EmptyMultiplicity + +EmptyMultiplicity : Multiplicity = + { } + +// Clause 8.2.2.9.2 Occurrence Usages + +OccurrenceUsagePrefix : OccurrenceUsage = + BasicUsagePrefix + ( isIndividual ?= 'individual' )? + ( portionKind = PortionKind + { isPortion = true } + )? + UsageExtensionKeyword* + +OccurrenceUsage = + OccurrenceUsagePrefix 'occurrence' Usage + +IndividualUsage : OccurrenceUsage = + BasicUsagePrefix isIndividual ?= 'individual' + UsageExtensionKeyword* Usage + +PortionUsage : OccurrenceUsage = + BasicUsagePrefix ( isIndividual ?= 'individual' )? + portionKind = PortionKind + UsageExtensionKeyword* Usage + { isPortion = true } + +PortionKind = + 'snapshot' | 'timeslice' + +EventOccurrenceUsage = + OccurrenceUsagePrefix 'event' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'occurrence' UsageDeclaration? ) + UsageCompletion + +// Clause 8.2.2.9.3 Occurrence Successions + +SourceSuccessionMember : FeatureMembership = + 'then' ownedRelatedElement += SourceSuccession + +SourceSuccession : SuccessionAsUsage = + ownedRelationship += SourceEndMember + +SourceEndMember : EndFeatureMembership = + ownedRelatedElement += SourceEnd + +SourceEnd : ReferenceUsage = + ( ownedRelationship += OwnedMultiplicity )? + +// Clause 8.2.2.10 Items Textual Notation + +ItemDefinition = + OccurrenceDefinitionPrefix + 'item' 'def' Definition + +ItemUsage = + OccurrenceUsagePrefix 'item' Usage + +// Clause 8.2.2.11 Parts Textual Notation + +PartDefinition = + OccurrenceDefinitionPrefix 'part' 'def' Definition + +PartUsage = + OccurrenceUsagePrefix 'part' Usage + +// Clause 8.2.2.12 Ports Textual Notation + +PortDefinition = + DefinitionPrefix 'port' 'def' Definition + ownedRelationship += ConjugatedPortDefinitionMember + { conjugatedPortDefinition.ownedPortConjugator. + originalPortDefinition = this } + +// (See Note 1) + +ConjugatedPortDefinitionMember : OwningMembership = + ownedRelatedElement += ConjugatedPortDefinition + +ConjugatedPortDefinition = + ownedRelationship += PortConjugation + +PortConjugation = + {} + +PortUsage = + OccurrenceUsagePrefix 'port' Usage + +ConjugatedPortTyping : ConjugatedPortTyping = + '~' originalPortDefinition = ~[QualifiedName] + +// (See Note 2) + +// Notes: +// 1. Even though it is not explicitly represented in the text, a PortDefinition is always parsed as containing a nested ConjugatedPortDefinition with a PortDefinition Relationship pointing back to the containing PortDefinition. The abstract syntax for ConjugatedPortDefinition sets its effectiveName to the name of its originalPortDefinition with the symbol ~ prepended to it (see 8.3.12.2). (See also 8.4.8.1.) +// 2. The notation ~[QualifiedName] indicates that a QualifiedName shall be parsed from the input text, but that it shall be resolved as if it was the qualified name constructed as follows: +// • Extract the last segment name of the given QualifiedName and prepend the symbol ~ to it. +// • Append the name so constructed to the end of the entire original QualifiedName. +// For example, if the ConjugatedPortTyping is ~A::B::C, then the given QualifiedName is A::B::C, and ~[QualifiedName] is resolved as A::B::C::'~C'. Alternatively, a conforming tool may first resolve the given QualifiedName as usual to a PortDefinition and then use the conjugatedPortDefinition of this PortDefinition as the resolution of ~[QualifiedName]. + +// Clause 8.2.2.13 Connections Textual Notation + +// Clause 8.2.2.13.1 Connection Definition and Usage + +ConnectionDefinition = + OccurrenceDefinitionPrefix 'connection' 'def' Definition + +ConnectionUsage = + OccurrenceUsagePrefix + ( 'connection' UsageDeclaration ValuePart? + ( 'connect' ConnectorPart )? + | 'connect' ConnectorPart ) + UsageBody + +ConnectorPart : ConnectionUsage = + BinaryConnectorPart | NaryConnectorPart + +BinaryConnectorPart : ConnectionUsage = + ownedRelationship += ConnectorEndMember 'to' + ownedRelationship += ConnectorEndMember + +NaryConnectorPart : ConnectionUsage = + '(' ownedRelationship += ConnectorEndMember ',' + ownedRelationship += ConnectorEndMember + ( ',' ownedRelationship += ConnectorEndMember )* ')' + +ConnectorEndMember : EndFeatureMembership = + ownedRelatedElement += ConnectorEnd + +ConnectorEnd : ReferenceUsage = + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +OwnedCrossMultiplicityMember : OwningMembership = + ownedRelatedElement += OwnedCrossMultiplicity + +OwnedCrossMultiplicity : Feature = + ownedRelationship += OwnedMultiplicity + +// Clause 8.2.2.13.2 Binding Connectors + +BindingConnectorAsUsage = + UsagePrefix ( 'binding' UsageDeclaration )? + 'bind' ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember + UsageBody + +// Clause 8.2.2.13.3 Successions + +SuccessionAsUsage = + UsagePrefix ( 'succession' UsageDeclaration )? + 'first' s.ownedRelationship += ConnectorEndMember + 'then' s.ownedRelationship += ConnectorEndMember + UsageBody + +// Clause 8.2.2.14 Interfaces Textual Notation + +// Clause 8.2.2.14.1 Interface Definitions + +InterfaceDefinition = + OccurrenceDefinitionPrefix 'interface' 'def' + DefinitionDeclaration InterfaceBody + +InterfaceBody : Type = + ';' | '{' InterfaceBodyItem* '}' + +InterfaceBodyItem : Type = + ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += InterfaceNonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += InterfaceOccurrenceUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +InterfaceNonOccurrenceUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += InterfaceNonOccurrenceUsageElement + +InterfaceNonOccurrenceUsageElement : Usage = + ReferenceUsage + | AttributeUsage + | EnumerationUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + +InterfaceOccurrenceUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += InterfaceOccurrenceUsageElement + +InterfaceOccurrenceUsageElement : Usage = + DefaultInterfaceEnd | StructureUsageElement | BehaviorUsageElement + +DefaultInterfaceEnd : PortUsage = + isEnd ?= 'end' Usage + +// Clause 8.2.2.14.2 Interface Usages + +InterfaceUsage = + OccurrenceUsagePrefix 'interface' + InterfaceUsageDeclaration InterfaceBody + +InterfaceUsageDeclaration : InterfaceUsage = + UsageDeclaration ValuePart? + ( 'connect' InterfacePart )? + | InterfacePart + +InterfacePart : InterfaceUsage = + BinaryInterfacePart | NaryInterfacePart + +BinaryInterfacePart : InterfaceUsage = + ownedRelationship += InterfaceEndMember 'to' + ownedRelationship += InterfaceEndMember + +NaryInterfacePart : InterfaceUsage = + '(' ownedRelationship += InterfaceEndMember ',' + ownedRelationship += InterfaceEndMember + ( ',' ownedRelationship += InterfaceEndMember )* ')' + +InterfaceEndMember : EndFeatureMembership = + ownedRelatedElement += InterfaceEnd + +InterfaceEnd : PortUsage = + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +// Clause 8.2.2.15 Allocations Textual Notation + +AllocationDefinition = + OccurrenceDefinitionPrefix 'allocation' 'def' Definition + +AllocationUsage = + OccurrenceUsagePrefix + AllocationUsageDeclaration UsageBody + +AllocationUsageDeclaration : AllocationUsage = + 'allocation' UsageDeclaration + ( 'allocate' ConnectorPart )? + | 'allocate' ConnectorPart + +// Clause 8.2.2.16 Flows Textual Notation + +FlowDefinition = + OccurrenceDefinitionPrefix 'flow' 'def' Definition + +Message : FlowUsage = + OccurrenceUsagePrefix 'message' + MessageDeclaration DefinitionBody + { isAbstract = true } + +MessageDeclaration : FlowUsage = + UsageDeclaration ValuePart? + ( 'of' ownedRelationship += FlowPayloadFeatureMember )? + ( 'from' ownedRelationship += MessageEventMember + 'to' ownedRelationship += MessageEventMember + )? + | ownedRelationship += MessageEventMember 'to' + ownedRelationship += MessageEventMember + +MessageEventMember : ParameterMembership = + ownedRelatedElement += MessageEvent + +MessageEvent : EventOccurrenceUsage = + ownedRelationship += OwnedReferenceSubsetting + +FlowUsage = + OccurrenceUsagePrefix 'flow' + FlowDeclaration DefinitionBody + +SuccessionFlowUsage = + OccurrenceUsagePrefix 'succession' 'flow' + FlowDeclaration DefinitionBody + +FlowDeclaration : FlowUsage = + UsageDeclaration ValuePart? + ( 'of' ownedRelationship += FlowPayloadFeatureMember )? + ( 'from' ownedRelationship += FlowEndMember + 'to' ownedRelationship += FlowEndMember )? + | ownedRelationship += FlowEndMember 'to' + ownedRelationship += FlowEndMember + +FlowPayloadFeatureMember : FeatureMembership = + ownedRelatedElement += FlowPayloadFeature + +FlowPayloadFeature : PayloadFeature = + PayloadFeature + +PayloadFeature : Feature = + Identification? PayloadFeatureSpecializationPart + ValuePart? + | ownedRelationship += OwnedFeatureTyping + ( ownedRelationship += OwnedMultiplicity )? + | ownedRelationship += OwnedMultiplicity + ownedRelationship += OwnedFeatureTyping + +PayloadFeatureSpecializationPart : Feature = + ( FeatureSpecialization )+ MultiplicityPart? + FeatureSpecialization* + | MultiplicityPart FeatureSpecialization+ + +FlowEndMember : EndFeatureMembership = + ownedRelatedElement += FlowEnd + +FlowEnd = + ( ownedRelationship += FlowEndSubsetting )? + ownedRelationship += FlowFeatureMember + +FlowEndSubsetting : ReferenceSubsetting = + referencedFeature = [QualifiedName] + | referencedFeature = FeatureChainPrefix + { ownedRelatedElement += referencedFeature } + +FeatureChainPrefix : Feature = + ( ownedRelationship += OwnedFeatureChaining '.' )+ + ownedRelationship += OwnedFeatureChaining '.' + +FlowFeatureMember : FeatureMembership = + ownedRelatedElement += FlowFeature + +FlowFeature : ReferenceUsage = + ownedRelationship += FlowFeatureRedefinition + +// (See Note 1) + +FlowFeatureRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + +// Notes: +// 1. To ensure that a FlowFeature passes the validateRedefinitionDirectionConformance constraint (see [KerML, 8.3.3.3.8]), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature) + +// Clause 8.2.2.17 Actions Textual Notation + +// Clause 8.2.2.17.1 Action Definitions + +ActionDefinition = + OccurrenceDefinitionPrefix 'action' 'def' + DefinitionDeclaration ActionBody + +ActionBody : Type = + ';' | '{' ActionBodyItem* '}' + +ActionBodyItem : Type = + NonBehaviorBodyItem + | ownedRelationship += InitialNodeMember + ( ownedRelationship += ActionTargetSuccessionMember )* + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += ActionBehaviorMember + ( ownedRelationship += ActionTargetSuccessionMember )* + | ownedRelationship += GuardedSuccessionMember + +NonBehaviorBodyItem = + ownedRelationship += Import + | ownedRelationship += AliasMember + | ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += NonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += StructureUsageMember + +ActionBehaviorMember : FeatureMembership = + BehaviorUsageMember | ActionNodeMember + +InitialNodeMember : FeatureMembership = + MemberPrefix 'first' memberFeature = [QualifiedName] + RelationshipBody + +ActionNodeMember : FeatureMembership = + MemberPrefix ownedRelatedElement += ActionNode + +ActionTargetSuccessionMember : FeatureMembership = + MemberPrefix ownedRelatedElement += ActionTargetSuccession + +GuardedSuccessionMember : FeatureMembership = + MemberPrefix ownedRelatedElement += GuardedSuccession + +// Clause 8.2.2.17.2 Action Usages + +ActionUsage = + OccurrenceUsagePrefix 'action' + ActionUsageDeclaration ActionBody + +ActionUsageDeclaration : ActionUsage = + UsageDeclaration ValuePart? + +PerformActionUsage = + OccurrenceUsagePrefix 'perform' + PerformActionUsageDeclaration ActionBody + +PerformActionUsageDeclaration : PerformActionUsage = + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'action' UsageDeclaration ) + ValuePart? + +ActionNode : ActionUsage = + ControlNode + | SendNode | AcceptNode + | AssignmentNode + | TerminateNode + | IfNode | WhileLoopNode | ForLoopNode + +ActionNodeUsageDeclaration : ActionUsage = + 'action' UsageDeclaration? + +ActionNodePrefix : ActionUsage = + OccurrenceUsagePrefix ActionNodeUsageDeclaration? + +// Clause 8.2.2.17.3 Control Nodes + +ControlNode = + MergeNode | DecisionNode | JoinNode| ForkNode + +ControlNodePrefix : OccurrenceUsage = + RefPrefix + ( isIndividual ?= 'individual' )? + ( portionKind = PortionKind + { isPortion = true } + )? + UsageExtensionKeyword* + +MergeNode = + ControlNodePrefix + isComposite ?= 'merge' UsageDeclaration + ActionBody + +DecisionNode = + ControlNodePrefix + isComposite ?= 'decide' UsageDeclaration + ActionBody + +JoinNode = + ControlNodePrefix + isComposite ?= 'join' UsageDeclaration + ActionBody + +ForkNode = + ControlNodePrefix + isComposite ?= 'fork' UsageDeclaration + ActionBody + +// Clause 8.2.2.17.4 Send and Accept Action Usages + +AcceptNode : AcceptActionUsage = + OccurrenceUsagePrefix + AcceptNodeDeclaration ActionBody + +AcceptNodeDeclaration : AcceptActionUsage = + ActionNodeUsageDeclaration? + 'accept' AcceptParameterPart + +AcceptParameterPart : AcceptActionUsage = + ownedRelationship += PayloadParameterMember + ( 'via' ownedRelationship += NodeParameterMember )? + +PayloadParameterMember : ParameterMembership = + ownedRelatedElement += PayloadParameter + +PayloadParameter : ReferenceUsage = + PayloadFeature + | Identification PayloadFeatureSpecializationPart? + TriggerValuePart + +TriggerValuePart : Feature = + ownedRelationship += TriggerFeatureValue + +TriggerFeatureValue : FeatureValue = + ownedRelatedElement += TriggerExpression + +TriggerExpression : TriggerInvocationExpression = + kind = ( 'at' | 'after' ) + ownedRelationship += ArgumentMember + | kind = 'when' + ownedRelationship += ArgumentExpressionMember + +ArgumentMember : ParameterMembership = + ownedMemberParameter = Argument + +Argument : Feature = + ownedRelationship += ArgumentValue + +ArgumentValue : FeatureValue = + value = OwnedExpression + +ArgumentExpressionMember : ParameterMembership = + ownedRelatedElement += ArgumentExpression + +ArgumentExpression : Feature = + ownedRelationship += ArgumentExpressionValue + +ArgumentExpressionValue : FeatureValue = + ownedRelatedElement += OwnedExpressionReference + +SendNode : SendActionUsage = + OccurrenceUsagePrefix ActionUsageDeclaration? 'send' + ( ownedRelationship += NodeParameterMember SenderReceiverPart? + | ownedRelationship += EmptyParameterMember SenderReceiverPart )? + ActionBody + +SendNodeDeclaration : SendActionUsage = + ActionNodeUsageDeclaration? 'send' + ownedRelationship += NodeParameterMember SenderReceiverPart? + +SenderReceiverPart : SendActionUsage = + 'via' ownedRelationship += NodeParameterMember + ( 'to' ownedRelationship += NodeParameterMember )? + | ownedRelationship += EmptyParameterMember + 'to' ownedRelationship += NodeParameterMember + +NodeParameterMember : ParameterMembership = + ownedRelatedElement += NodeParameter + +NodeParameter : ReferenceUsage = + ownedRelationship += FeatureBinding + +FeatureBinding : FeatureValue = + ownedRelatedElement += OwnedExpression + +EmptyParameterMember : ParameterMembership = + ownedRelatedElement += EmptyUsage + +EmptyUsage : ReferenceUsage = + {} + +// Notes: +// 1. The productions for ArgumentMember, Argument, ArgumentValue, ArgumentExpressionMember, ArgumentExpression and ArgumentExpressionValue are the same as given in [KerML, 8.2.5.8.1]. + +// Clause 8.2.2.17.5 Assignment Action Usages + +AssignmentNode : AssignmentActionUsage = + OccurrenceUsagePrefix + AssignmentNodeDeclaration ActionBody + +AssignmentNodeDeclaration: ActionUsage = + ( ActionNodeUsageDeclaration )? 'assign' + ownedRelationship += AssignmentTargetMember + ownedRelationship += FeatureChainMember ':=' + ownedRelationship += NodeParameterMember + +AssignmentTargetMember : ParameterMembership = + ownedRelatedElement += AssignmentTargetParameter + +AssignmentTargetParameter : ReferenceUsage = + ( ownedRelationship += AssignmentTargetBinding '.' )? + +AssignmentTargetBinding : FeatureValue = + ownedRelatedElement += NonFeatureChainPrimaryExpression + +FeatureChainMember : Membership = + memberElement = [QualifiedName] + | OwnedFeatureChainMember + +OwnedFeatureChainMember : OwningMembership = + ownedRelatedElement += OwnedFeatureChain + +// Clause 8.2.2.17.6 Terminate Action Usages + +TerminateNode : TerminateActionUsage = + OccurrenceUsagePrefix ActionNodeUsageDeclaration? + 'terminate' ( ownedRelationship += NodeParameterMember )? + ActionBody + +// Clause 8.2.2.17.7 Structured Control Action Usages + +IfNode : IfActionUsage = + ActionNodePrefix + 'if' ownedRelationship += ExpressionParameterMember + ownedRelationship += ActionBodyParameterMember + ( 'else' ownedRelationship += + ( ActionBodyParameterMember | IfNodeParameterMember ) )? + +ExpressionParameterMember : ParameterMembership = + ownedRelatedElement += OwnedExpression + +ActionBodyParameterMember : ParameterMembership = + ownedRelatedElement += ActionBodyParameter + +ActionBodyParameter : ActionUsage = + ( 'action' UsageDeclaration? )? + '{' ActionBodyItem* '}' + +IfNodeParameterMember : ParameterMembership = + ownedRelatedElement += IfNode + +WhileLoopNode : WhileLoopActionUsage = + ActionNodePrefix + ( 'while' ownedRelationship += ExpressionParameterMember + | 'loop' ownedRelationship += EmptyParameterMember + ) + ownedRelationship += ActionBodyParameterMember + ( 'until' ownedRelationship += ExpressionParameterMember ';' )? + +ForLoopNode : ForLoopActionUsage = + ActionNodePrefix + 'for' ownedRelationship += ForVariableDeclarationMember + 'in' ownedRelationship += NodeParameterMember + ownedRelationship += ActionBodyParameterMember + +ForVariableDeclarationMember : FeatureMembership = + ownedRelatedElement += UsageDeclaration + +ForVariableDeclaration : ReferenceUsage = + UsageDeclaration + +// Clause 8.2.2.17.8 Action Successions + +ActionTargetSuccession : Usage = + ( TargetSuccession | GuardedTargetSuccession | DefaultTargetSuccession ) + UsageBody + +TargetSuccession : SuccessionAsUsage = + ownedRelationship += SourceEndMember + 'then' ownedRelationship += ConnectorEndMember + +GuardedTargetSuccession : TransitionUsage = + ownedRelationship += GuardExpressionMember + 'then' ownedRelationship += TransitionSuccessionMember + +DefaultTargetSuccession : TransitionUsage = + 'else' ownedRelationship += TransitionSuccessionMember + +GuardedSuccession : TransitionUsage = + ( 'succession' UsageDeclaration )? + 'first' ownedRelationship += FeatureChainMember + ownedRelationship += GuardExpressionMember + 'then' ownedRelationship += TransitionSuccessionMember + UsageBody + +// Clause 8.2.2.18 States Textual Notation + +// Clause 8.2.2.18.1 State Definitions + +StateDefinition = + OccurrenceDefinitionPrefix 'state' 'def' + DefinitionDeclaration StateDefBody + +StateDefBody : StateDefinition = + ';' + | ( isParallel ?= 'parallel' )? + '{' StateBodyItem* '}' + +StateBodyItem : Type = + NonBehaviorBodyItem + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += BehaviorUsageMember + ( ownedRelationship += TargetTransitionUsageMember )* + | ownedRelationship += TransitionUsageMember + | ownedRelationship += EntryActionMember + ( ownedRelationship += EntryTransitionMember )* + | ownedRelationship += DoActionMember + | ownedRelationship += ExitActionMember + +EntryActionMember : StateSubactionMembership = + MemberPrefix kind = 'entry' + ownedRelatedElement += StateActionUsage + +DoActionMember : StateSubactionMembership = + MemberPrefix kind = 'do' + ownedRelatedElement += StateActionUsage + +ExitActionMember : StateSubactionMembership = + MemberPrefix kind = 'exit' + ownedRelatedElement += StateActionUsage + +EntryTransitionMember : FeatureMembership = + MemberPrefix + ( ownedRelatedElement += GuardedTargetSuccession + | 'then' ownedRelatedElement += TargetSuccession + ) ';' + +StateActionUsage : ActionUsage = + EmptyActionUsage ';' + | StatePerformActionUsage + | StateAcceptActionUsage + | StateSendActionUsage + | StateAssignmentActionUsage + +EmptyActionUsage : ActionUsage = + {} + +StatePerformActionUsage : PerformActionUsage = + PerformActionUsageDeclaration ActionBody + +StateAcceptActionUsage : AcceptActionUsage = + AcceptNodeDeclaration ActionBody + +StateSendActionUsage : SendActionUsage = + SendNodeDeclaration ActionBody + +StateAssignmentActionUsage : AssignmentActionUsage = + AssignmentNodeDeclaration ActionBody + +TransitionUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += TransitionUsage + +TargetTransitionUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += TargetTransitionUsage + +// Clause 8.2.2.18.2 State Usages + +StateUsage = + OccurrenceUsagePrefix 'state' + ActionUsageDeclaration StateUsageBody + +StateUsageBody : StateUsage = + ';' + | ( isParallel ?= 'parallel' )? + '{' StateBodyItem* '}' + +ExhibitStateUsage = + OccurrenceUsagePrefix 'exhibit' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'state' UsageDeclaration ) + ValuePart? StateUsageBody + +// Clause 8.2.2.18.3 Transition Usages + +TransitionUsage = + 'transition' ( UsageDeclaration 'first' )? + ownedRelationship += FeatureChainMember + ownedRelationship += EmptyParameterMember + ( ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember )? + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + 'then' ownedRelationship += TransitionSuccessionMember + ActionBody + +TargetTransitionUsage : TransitionUsage = + ownedRelationship += EmptyParameterMember + ( 'transition' + ( ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember )? + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + | ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + | ownedRelationship += GuardExpressionMember + ( ownedRelationship += EffectBehaviorMember )? + )? + 'then' ownedRelationship += TransitionSuccessionMember + ActionBody + +TriggerActionMember : TransitionFeatureMembership = + 'accept' { kind = 'trigger' } ownedRelatedElement += TriggerAction + +TriggerAction : AcceptActionUsage = + AcceptParameterPart + +GuardExpressionMember : TransitionFeatureMembership = + 'if' { kind = 'guard' } ownedRelatedElement += OwnedExpression + +EffectBehaviorMember : TransitionFeatureMembership = + 'do' { kind = 'effect' } ownedRelatedElement += EffectBehaviorUsage + +EffectBehaviorUsage : ActionUsage = + EmptyActionUsage + | TransitionPerformActionUsage + | TransitionAcceptActionUsage + | TransitionSendActionUsage + | TransitionAssignmentActionUsage + +TransitionPerformActionUsage : PerformActionUsage = + PerformActionUsageDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionAcceptActionUsage : AcceptActionUsage = + AcceptNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionSendActionUsage : SendActionUsage = + SendNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionAssignmentActionUsage : AssignmentActionUsage = + AssignmentNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionSuccessionMember : OwningMembership = + ownedRelatedElement += TransitionSuccession + +TransitionSuccession : Succession = + ownedRelationship += EmptyEndMember + ownedRelationship += ConnectorEndMember + +EmptyEndMember : EndFeatureMembership = + ownedRelatedElement += EmptyFeature + +EmptyFeature : ReferenceUsage = + {} + +// Clause 8.2.2.19 Calculations Textual Notation + +CalculationDefinition = + OccurrenceDefinitionPrefix 'calc' 'def' + DefinitionDeclaration CalculationBody + +CalculationUsage : CalculationUsage = + OccurrenceUsagePrefix 'calc' + ActionUsageDeclaration CalculationBody + +CalculationBody : Type = + ';' | '{' CalculationBodyPart '}' + +CalculationBodyPart : Type = + CalculationBodyItem* + ( ownedRelationship += ResultExpressionMember )? + +CalculationBodyItem : Type = + ActionBodyItem + | ownedRelationship += ReturnParameterMember + +ReturnParameterMember : ReturnParameterMembership = + MemberPrefix? 'return' ownedRelatedElement += UsageElement + +ResultExpressionMember : ResultExpressionMembership = + MemberPrefix? ownedRelatedElement += OwnedExpression + +// Clause 8.2.2.20 Constraints Textual Notation + +ConstraintDefinition = + OccurrenceDefinitionPrefix 'constraint' 'def' + DefinitionDeclaration CalculationBody + +ConstraintUsage = + OccurrenceUsagePrefix 'constraint' + ConstraintUsageDeclaration CalculationBody + +AssertConstraintUsage = + OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' )? + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'constraint' ConstraintUsageDeclaration ) + CalculationBody + +ConstraintUsageDeclaration : ConstraintUsage = + UsageDeclaration ValuePart? + +// Clause 8.2.2.21 Requirements Textual Notation + +// Clause 8.2.2.21.1 Requirement Definitions + +RequirementDefinition = + OccurrenceDefinitionPrefix 'requirement' 'def' + DefinitionDeclaration RequirementBody + +RequirementBody : Type = + ';' | '{' RequirementBodyItem* '}' + +RequirementBodyItem : Type = + DefinitionBodyItem + | ownedRelationship += SubjectMember + | ownedRelationship += RequirementConstraintMember + | ownedRelationship += FramedConcernMember + | ownedRelationship += RequirementVerificationMember + | ownedRelationship += ActorMember + | ownedRelationship += StakeholderMember + +SubjectMember : SubjectMembership = + MemberPrefix ownedRelatedElement += SubjectUsage + +SubjectUsage : ReferenceUsage = + 'subject' UsageExtensionKeyword* Usage + +RequirementConstraintMember : RequirementConstraintMembership = + MemberPrefix? RequirementKind + ownedRelatedElement += RequirementConstraintUsage + +RequirementKind : RequirementConstraintMembership = + 'assume' { kind = 'assumption' } + | 'require' { kind = 'requirement' } + +RequirementConstraintUsage : ConstraintUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? RequirementBody + | ( UsageExtensionKeyword* 'constraint' + | UsageExtensionKeyword+ ) + ConstraintUsageDeclaration CalculationBody + +FramedConcernMember : FramedConcernMembership = + MemberPrefix? 'frame' + ownedRelatedElement += FramedConcernUsage + +FramedConcernUsage : ConcernUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? CalculationBody + | ( UsageExtensionKeyword* 'concern' + | UsageExtensionKeyword+ ) + CalculationUsageDeclaration CalculationBody + +ActorMember : ActorMembership = + MemberPrefix ownedRelatedElement += ActorUsage + +ActorUsage : PartUsage = + 'actor' UsageExtensionKeyword* Usage + +StakeholderMember : StakeholderMembership = + MemberPrefix ownedRelatedElement += StakeholderUsage + +StakeholderUsage : PartUsage = + 'stakeholder' UsageExtensionKeyword* Usage + +// Clause 8.2.2.21.2 Requirement Usages + +RequirementUsage = + OccurrenceUsagePrefix 'requirement' + ConstraintUsageDeclaration RequirementBody + +SatisfyRequirementUsage = + OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' ) 'satisfy' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'requirement' UsageDeclaration ) + ValuePart? + ( 'by' ownedRelationship += SatisfactionSubjectMember )? + RequirementBody + +SatisfactionSubjectMember : SubjectMembership = + ownedRelatedElement += SatisfactionParameter + +SatisfactionParameter : ReferenceUsage = + ownedRelationship += SatisfactionFeatureValue + +SatisfactionFeatureValue : FeatureValue = + ownedRelatedElement += SatisfactionReferenceExpression + +SatisfactionReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FeatureChainMember + +// Clause 8.2.2.21.3 Concerns + +ConcernDefinition = + OccurrenceDefinitionPrefix 'concern' 'def' + DefinitionDeclaration RequirementBody + +ConcernUsage = + OccurrenceUsagePrefix 'concern' + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.22 Cases Textual Notation + +CaseDefinition = + OccurrenceDefinitionPrefix 'case' 'def' + DefinitionDeclaration CaseBody + +CaseUsage = + OccurrenceUsagePrefix 'case' + ConstraintUsageDeclaration CaseBody + +CaseBody : Type = + ';' + | '{' CaseBodyItem* + ( ownedRelationship += ResultExpressionMember )? + '}' + +CaseBodyItem : Type = + ActionBodyItem + | ownedRelationship += SubjectMember + | ownedRelationship += ActorMember + | ownedRelationship += ObjectiveMember + +ObjectiveMember : ObjectiveMembership = + MemberPrefix 'objective' + ownedRelatedElement += ObjectiveRequirementUsage + +ObjectiveRequirementUsage : RequirementUsage = + UsageExtensionKeyword* ConstraintUsageDeclaration + RequirementBody + +// Clause 8.2.2.23 Analysis Cases Textual Notation + +AnalysisCaseDefinition = + OccurrenceDefinitionPrefix 'analysis' 'def' + DefinitionDeclaration CaseBody + +AnalysisCaseUsage = + OccurrenceUsagePrefix 'analysis' + ConstraintUsageDeclaration CaseBody + +// Clause 8.2.2.24 Verification Cases Textual Notation + +VerificationCaseDefinition = + OccurrenceDefinitionPrefix 'verification' 'def' + DefinitionDeclaration CaseBody + +VerificationCaseUsage = + OccurrenceUsagePrefix 'verification' + ConstraintUsageDeclaration CaseBody + +RequirementVerificationMember : RequirementVerificationMembership = + MemberPrefix 'verify' { kind = 'requirement' } + ownedRelatedElement += RequirementVerificationUsage + +RequirementVerificationUsage : RequirementUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecialization* RequirementBody + | ( UsageExtensionKeyword* 'requirement' + | UsageExtensionKeyword+ ) + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.25 Use Cases Textual Notation + +UseCaseDefinition = + OccurrenceDefinitionPrefix 'use' 'case' 'def' + DefinitionDeclaration CaseBody + +UseCaseUsage = + OccurrenceUsagePrefix 'use' 'case' + ConstraintUsageDeclaration CaseBody + +IncludeUseCaseUsage = + OccurrenceUsagePrefix 'include' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'use' 'case' UsageDeclaration ) + ValuePart? + CaseBody + +// Clause 8.2.2.26 Views and Viewpoints Textual Notation + +// Clause 8.2.2.26.1 View Definitions + +ViewDefinition = + OccurrenceDefinitionPrefix 'view' 'def' + DefinitionDeclaration ViewDefinitionBody + +ViewDefinitionBody : ViewDefinition = + ';' | '{' ViewDefinitionBodyItem* '}' + +ViewDefinitionBodyItem : ViewDefinition = + DefinitionBodyItem + | ownedRelationship += ElementFilterMember + | ownedRelationship += ViewRenderingMember + +ViewRenderingMember : ViewRenderingMembership = + MemberPrefix 'render' + ownedRelatedElement += ViewRenderingUsage + +ViewRenderingUsage : RenderingUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + UsageBody + | ( UsageExtensionKeyword* 'rendering' + | UsageExtensionKeyword+ ) + Usage + +// Clause 8.2.2.26.2 View Usages + +ViewUsage = + OccurrenceUsagePrefix 'view' + UsageDeclaration? ValuePart? + ViewBody + +ViewBody : ViewUsage = + ';' | '{' ViewBodyItem* '}' + +ViewBodyItem : ViewUsage = + DefinitionBodyItem + | ownedRelationship += ElementFilterMember + | ownedRelationship += ViewRenderingMember + | ownedRelationship += Expose + +Expose = + 'expose' ( MembershipExpose | NamespaceExpose ) + RelationshipBody + +MembershipExpose = + MembershipImport + +NamespaceExpose = + NamespaceImport + +// Clause 8.2.2.26.3 Viewpoints + +ViewpointDefinition = + OccurrenceDefinitionPrefix 'viewpoint' 'def' + DefinitionDeclaration RequirementBody + +ViewpointUsage = + OccurrenceUsagePrefix 'viewpoint' + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.26.4 Renderings + +RenderingDefinition = + OccurrenceDefinitionPrefix 'rendering' 'def' + Definition + +RenderingUsage = + OccurrenceUsagePrefix 'rendering' + Usage + +// Clause 8.2.2.27 Metadata Textual Notation + +MetadataDefinition = + ( isAbstract ?= 'abstract')? DefinitionExtensionKeyword* + 'metadata' 'def' Definition + +PrefixMetadataAnnotation : Annotation = + '#' annotatingElement = PrefixMetadataUsage + { ownedRelatedElement += annotatingElement } + +PrefixMetadataMember : OwningMembership = + '#' ownedRelatedElement = PrefixMetadataUsage + +PrefixMetadataUsage : MetadataUsage = + ownedRelationship += OwnedFeatureTyping + +MetadataUsage = + UsageExtensionKeyword* ( '@' | 'metadata' ) + MetadataUsageDeclaration + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + MetadataBody + +MetadataUsageDeclaration : MetadataUsage = + ( Identification ( ':' | 'typed' 'by' ) )? + ownedRelationship += OwnedFeatureTyping + +MetadataBody : Type = + ';' | + '{' ( ownedRelationship += DefinitionMember + | ownedRelationship += MetadataBodyUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + )* + '}' + +MetadataBodyUsageMember : FeatureMembership = + ownedMemberFeature = MetadataBodyUsage + +MetadataBodyUsage : ReferenceUsage = + 'ref'? ( ':>>' | 'redefines' )? ownedRelationship += OwnedRedefinition + FeatureSpecializationPart? ValuePart? + MetadataBody + +ExtendedDefinition : Definition = + BasicDefinitionPrefix? DefinitionExtensionKeyword+ + 'def' Definition + +ExtendedUsage : Usage = + UnextendedUsagePrefix UsageExtensionKeyword+ + Usage + +// End of BNF + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-elements.json b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-elements.json new file mode 100644 index 000000000..63b8c3d71 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-elements.json @@ -0,0 +1,4884 @@ +[ + { + "@type": "Info", + "clause_id": "", + "lines": [], + "source": "tests/KerML_and_SysML_spec_sources/SysML-spec.html", + "timestamp": "2025-12-04T19:31:35Z" + }, + { + "@type": "Heading", + "clause_id": "", + "lines": [ + "Part 2 - Systems Modeling Language (SysML)" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2", + "lines": [ + "Clause 8.2.2 Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.1", + "lines": [ + "Clause 8.2.2.1 Textual Notation Overview" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.1.1", + "lines": [ + "Clause 8.2.2.1.1 EBNF Conventions" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.1.2", + "lines": [ + "Clause 8.2.2.1.2 Lexical Structure" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "RESERVED_KEYWORD = ", + " 'about' | 'abstract' | 'accept' | 'action' | 'actor' | 'after' | 'alias' | 'all' | 'allocate' | 'allocation'", + " | 'analysis' | 'and' | 'as' | 'assert' | 'assign' | 'assume' | 'at' | 'attribute' | 'bind' | 'binding' | 'by' | 'calc'", + " | 'case' | 'comment' | 'concern' | 'connect' | 'connection' | 'constant' | 'constraint' | 'crosses' | 'decide'", + " | 'def' | 'default' | 'defined' | 'dependency' | 'derived' | 'do' | 'doc' | 'else' | 'end' | 'entry' | 'enum'", + " | 'event' | 'exhibit' | 'exit' | 'expose' | 'false' | 'filter' | 'first' | 'flow' | 'for' | 'fork' | 'frame' | 'from'", + " | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'include' | 'individual' | 'inout' | 'interface' | 'istype'", + " | 'item' | 'join' | 'language' | 'library' | 'locale' | 'loop' | 'merge' | 'message' | 'meta' | 'metadata'", + " | 'nonunique' | 'not' | 'null' | 'objective' | 'occurrence' | 'of' | 'or' | 'ordered' | 'out' | 'package' | 'parallel'", + " | 'part' | 'perform' | 'port' | 'private' | 'protected' | 'public' | 'redefines' | 'ref' | 'references' | 'render'", + " | 'rendering' | 'rep' | 'require' | 'requirement' | 'return' | 'satisfy' | 'send' | 'snapshot' | 'specializes'", + " | 'stakeholder' | 'standard' | 'state' | 'subject' | 'subsets' | 'succession' | 'terminate' | 'then' | 'timeslice'", + " | 'to' | 'transition' | 'true' | 'until' | 'use' | 'variant' | 'variation' | 'verification' | 'verify' | 'via'", + " | 'view' | 'viewpoint' | 'when' | 'while' | 'xor'" + ], + "name": "RESERVED_KEYWORD" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "DEFINED_BY = ':' | 'defined' 'by'" + ], + "name": "DEFINED_BY" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "SPECIALIZES = ':>' | 'specializes'" + ], + "name": "SPECIALIZES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "SUBSETS = ':>' | 'subsets'" + ], + "name": "SUBSETS" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "REFERENCES = '::>' | 'references'" + ], + "name": "REFERENCES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "CROSSES = '=>' | 'crosses'" + ], + "name": "CROSSES" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.1.2", + "is_partial": false, + "lines": [ + "REDEFINES = ':>>' | 'redefines'" + ], + "name": "REDEFINES" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.2", + "lines": [ + "Clause 8.2.2.2 Elements and Relationships Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "Identification : Element =", + " ( '<' declaredShortName = NAME '>' )?", + " ( declaredName = NAME )?" + ], + "name": "Identification" + }, + { + "@type": "Production", + "abstract_syntax_type": "Relationship", + "clause_id": "8.2.2.2", + "is_partial": false, + "lines": [ + "RelationshipBody : Relationship =", + " ';' | '{' ( ownedRelationship += OwnedAnnotation )* '}'" + ], + "name": "RelationshipBody" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.3", + "lines": [ + "Clause 8.2.2.3 Dependencies Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Dependency", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "Dependency =", + " ( ownedRelationship += PrefixMetadataAnnotation )*", + " 'dependency' DependencyDeclaration", + " RelationshipBody" + ], + "name": "Dependency" + }, + { + "@type": "Production", + "abstract_syntax_type": "DependencyDeclaration", + "clause_id": "8.2.2.3", + "is_partial": false, + "lines": [ + "DependencyDeclaration =", + " ( Identification 'from' )?", + " client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to'", + " supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )*" + ], + "name": "DependencyDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.4", + "lines": [ + "Clause 8.2.2.4 Annotations Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.4.1", + "lines": [ + "Clause 8.2.2.4.1 Annotations" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.2.4.1", + "is_partial": false, + "lines": [ + "Annotation =", + " annotatedElement = [QualifiedName]" + ], + "name": "Annotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.2.4.1", + "is_partial": false, + "lines": [ + "OwnedAnnotation : Annotation =", + " ownedRelatedElement += AnnotatingElement" + ], + "name": "OwnedAnnotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.4.1", + "is_partial": false, + "lines": [ + "AnnotatingMember : OwningMembership =", + " ownedRelatedElement += AnnotatingElement" + ], + "name": "AnnotatingMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "AnnotatingElement", + "clause_id": "8.2.2.4.1", + "is_partial": false, + "lines": [ + "AnnotatingElement =", + " Comment", + " | Documentation", + " | TextualRepresentation", + " | MetadataFeature" + ], + "name": "AnnotatingElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.4.2", + "lines": [ + "Clause 8.2.2.4.2 Comments and Documentation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Comment", + "clause_id": "8.2.2.4.2", + "is_partial": false, + "lines": [ + "Comment =", + " ( 'comment' Identification", + " ( 'about' ownedRelationship += Annotation", + " ( ',' ownedRelationship += Annotation )*", + " )?", + " )?", + " ( 'locale' locale = STRING_VALUE )?", + " body = REGULAR_COMMENT" + ], + "name": "Comment" + }, + { + "@type": "Production", + "abstract_syntax_type": "Documentation", + "clause_id": "8.2.2.4.2", + "is_partial": false, + "lines": [ + "Documentation =", + " 'doc' Identification", + " ( 'locale' locale = STRING_VALUE )?", + " body = REGULAR_COMMENT" + ], + "name": "Documentation" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.4.3", + "lines": [ + "Clause 8.2.2.4.3 Textual Representation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "TextualRepresentation", + "clause_id": "8.2.2.4.3", + "is_partial": false, + "lines": [ + "TextualRepresentation =", + " ( 'rep' Identification )?", + " 'language' language = STRING_VALUE body = REGULAR_COMMENT" + ], + "name": "TextualRepresentation" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.5", + "lines": [ + "Clause 8.2.2.5 Namespaces and Packages Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.5.1", + "lines": [ + "Clause 8.2.2.5.1 Packages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Namespace", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "RootNamespace : Namespace =", + " PackageBodyElement*" + ], + "name": "RootNamespace" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "Package =", + " ( ownedRelationship += PrefixMetadataMember )*", + " PackageDeclaration PackageBody" + ], + "name": "Package" + }, + { + "@type": "Production", + "abstract_syntax_type": "LibraryPackage", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "LibraryPackage =", + " ( isStandard ?= 'standard' ) 'library'", + " ( ownedRelationship += PrefixMetadataMember )*", + " PackageDeclaration PackageBody" + ], + "name": "LibraryPackage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "PackageDeclaration : Package =", + " 'package' Identification" + ], + "name": "PackageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "PackageBody : Package =", + " ';' | '{' PackageBodyElement* '}'" + ], + "name": "PackageBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "PackageBodyElement : Package =", + " ownedRelationship += PackageMember", + " | ownedRelationship += ElementFilterMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import" + ], + "name": "PackageBodyElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "MemberPrefix : Membership =", + " ( visibility = VisibilityIndicator )?" + ], + "name": "MemberPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "PackageMember : OwningMembership", + " MemberPrefix", + " ( ownedRelatedElement += DefinitionElement", + " | ownedRelatedElement = UsageElement )" + ], + "name": "PackageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ElementFilterMembership", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "ElementFilterMember : ElementFilterMembership =", + " MemberPrefix", + " 'filter' ownedRelatedElement += OwnedExpression ';'" + ], + "name": "ElementFilterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "AliasMember : Membership =", + " MemberPrefix", + " 'alias' ( '<' memberShortName = NAME '>' )?", + " ( memberName = NAME )?", + " 'for' memberElement = [QualifiedName]", + " RelationshipBody" + ], + "name": "AliasMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Import", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "Import =", + " visibility = VisibilityIndicator", + " 'import' ( isImportAll ?= 'all' )?", + " ImportDeclaration", + " RelationshipBody" + ], + "name": "Import" + }, + { + "@type": "Production", + "abstract_syntax_type": "Import", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "ImportDeclaration : Import =", + " MembershipImport | NamespaceImport" + ], + "name": "ImportDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "MembershipImport", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "MembershipImport =", + " importedMembership = [QualifiedName]", + " ( '::' isRecursive ?= '**' )?" + ], + "name": "MembershipImport" + }, + { + "@type": "Production", + "abstract_syntax_type": "NamespaceImport", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "NamespaceImport =", + " importedNamespace = [QualifiedName] '::' '*'", + " ( '::' isRecursive ?= '**' )?", + " | importedNamspace = FilterPackage", + " { ownedRelatedElement += importedNamespace }" + ], + "name": "NamespaceImport" + }, + { + "@type": "Production", + "abstract_syntax_type": "Package", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "FilterPackage : Package =", + " ownedRelationship += FilterPackageImport", + " ( ownedRelationship += FilterPackageMember )+" + ], + "name": "FilterPackage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ElementFilterMembership", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "FilterPackageMember : ElementFilterMembership =", + " '[' ownedRelatedElement += OwnedExpression ']'" + ], + "name": "FilterPackageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "VisibilityKind", + "clause_id": "8.2.2.5.1", + "is_partial": false, + "lines": [ + "VisibilityIndicator : VisibilityKind =", + " 'public' | 'private' | 'protected'" + ], + "name": "VisibilityIndicator" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.5.2", + "lines": [ + "Clause 8.2.2.5.2 Package Elements" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Element", + "clause_id": "8.2.2.5.2", + "is_partial": false, + "lines": [ + "DefinitionElement : Element =", + " Package", + " | LibraryPackage", + " | AnnotatingElement", + " | Dependency", + " | AttributeDefinition", + " | EnumerationDefinition", + " | OccurrenceDefinition", + " | IndividualDefinition", + " | ItemDefinition", + " | PartDefinition", + " | ConnectionDefinition", + " | FlowDefinition", + " | InterfaceDefinition", + " | PortDefinition", + " | ActionDefinition", + " | CalculationDefinition", + " | StateDefinition", + " | ConstraintDefinition", + " | RequirementDefinition", + " | ConcernDefinition", + " | CaseDefinition", + " | AnalysisCaseDefinition", + " | VerificationCaseDefinition", + " | UseCaseDefinition", + " | ViewDefinition", + " | ViewpointDefinition", + " | RenderingDefinition", + " | MetadataDefinition", + " | ExtendedDefinition" + ], + "name": "DefinitionElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.5.2", + "is_partial": false, + "lines": [ + "UsageElement : Usage =", + " NonOccurrenceUsageElement", + " | OccurrenceUsageElement" + ], + "name": "UsageElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6", + "lines": [ + "Clause 8.2.2.6 Definition and Usage Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.1", + "lines": [ + "Clause 8.2.2.6.1 Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "BasicDefinitionPrefix", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "BasicDefinitionPrefix =", + " isAbstract ?= 'abstract' | isVariation ?= 'variation'" + ], + "name": "BasicDefinitionPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Definition", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionExtensionKeyword : Definition =", + " ownedRelationship += PrefixMetadataMember" + ], + "name": "DefinitionExtensionKeyword" + }, + { + "@type": "Production", + "abstract_syntax_type": "Definition", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionPrefix : Definition =", + " BasicDefinitionPrefix? DefinitionExtensionKeyword*" + ], + "name": "DefinitionPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Definition", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "Definition =", + " DefinitionDeclaration DefinitionBody" + ], + "name": "Definition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Definition", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionDeclaration : Definition", + " Identification SubclassificationPart?" + ], + "name": "DefinitionDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionBody : Type =", + " ';' | '{' DefinitionBodyItem* '}'" + ], + "name": "DefinitionBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionBodyItem : Type =", + " ownedRelationship += DefinitionMember", + " | ownedRelationship += VariantUsageMember", + " | ownedRelationship += NonOccurrenceUsageMember", + " | ( ownedRelationship += SourceSuccessionMember )?", + " ownedRelationship += OccurrenceUsageMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import" + ], + "name": "DefinitionBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "DefinitionMember : OwningMembership =", + " MemberPrefix", + " ownedRelatedElement += DefinitionElement" + ], + "name": "DefinitionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "VariantMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "VariantUsageMember : VariantMembership =", + " MemberPrefix 'variant'", + " ownedVariantUsage = VariantUsageElement" + ], + "name": "VariantUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "NonOccurrenceUsageMember : FeatureMembership =", + " MemberPrefix", + " ownedRelatedElement += NonOccurrenceUsageElement" + ], + "name": "NonOccurrenceUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "OccurrenceUsageMember : FeatureMembership =", + " MemberPrefix", + " ownedRelatedElement += OccurrenceUsageElement" + ], + "name": "OccurrenceUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "StructureUsageMember : FeatureMembership =", + " MemberPrefix", + " ownedRelatedElement += StructureUsageElement" + ], + "name": "StructureUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.6.1", + "is_partial": false, + "lines": [ + "BehaviorUsageMember : FeatureMembership =", + " MemberPrefix", + " ownedRelatedElement += BehaviorUsageElement" + ], + "name": "BehaviorUsageMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.2", + "lines": [ + "Clause 8.2.2.6.2 Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureDirectionKind", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "FeatureDirection : FeatureDirectionKind =", + " 'in' | 'out' | 'inout'" + ], + "name": "FeatureDirection" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "RefPrefix : Usage =", + " ( direction = FeatureDirection )?", + " ( isDerived ?= 'derived' )?", + " ( isAbstract ?= 'abstract' | isVariation ?= 'variation' )?", + " ( isConstant ?= 'constant' )?" + ], + "name": "RefPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "BasicUsagePrefix : Usage =", + " RefPrefix", + " ( isReference ?= 'ref' )?" + ], + "name": "BasicUsagePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "EndUsagePrefix : Usage =", + " isEnd ?= 'end' ( ownedRelationship += OwnedCrossFeatureMember )?" + ], + "name": "EndUsagePrefix" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.2.6.2", + "lines": [ + "(See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "OwnedCrossFeatureMember : OwningMembership =", + " ownedRelatedElement += OwnedCrossFeature" + ], + "name": "OwnedCrossFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "OwnedCrossFeature : ReferenceUsage =", + " BasicUsagePrefix UsageDeclaration" + ], + "name": "OwnedCrossFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UsageExtensionKeyword : Usage =", + " ownedRelationship += PrefixMetadataMember" + ], + "name": "UsageExtensionKeyword" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UnextendedUsagePrefix : Usage =", + " EndUsagePrefix | BasicUsagePrefix" + ], + "name": "UnextendedUsagePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UsagePrefix : Usage", + " UnextendedUsagePrefix UsageExtensionKeyword*" + ], + "name": "UsagePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "Usage =", + " UsageDeclaration UsageCompletion" + ], + "name": "Usage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UsageDeclaration : Usage =", + " Identification FeatureSpecializationPart?" + ], + "name": "UsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UsageCompletion : Usage =", + " ValuePart? UsageBody" + ], + "name": "UsageCompletion" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "UsageBody : Usage =", + " DefinitionBody" + ], + "name": "UsageBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "ValuePart : Feature =", + " ownedRelationship += FeatureValue" + ], + "name": "ValuePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.6.2", + "is_partial": false, + "lines": [ + "FeatureValue =", + " ( '='", + " | isInitial ?= ':='", + " | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )?", + " )", + " ownedRelatedElement += OwnedExpression" + ], + "name": "FeatureValue" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.6.2", + "html_snippet": "
        1. A Usage parsed with isEnd = true for which mayTimeVary = true must also have isConstant set to true, even though this is not explicitly notated in the textual notation, in order to satisfy the KerML constraint checkFeatureEndIsConstant.
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.3", + "lines": [ + "Clause 8.2.2.6.3 Reference Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.6.3", + "is_partial": false, + "lines": [ + "DefaultReferenceUsage : ReferenceUsage =", + " RefPrefix Usage" + ], + "name": "DefaultReferenceUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.6.3", + "is_partial": false, + "lines": [ + "ReferenceUsage =", + " ( EndUsagePrefix | RefPrefix )", + " 'ref' Usage" + ], + "name": "ReferenceUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.6.3", + "is_partial": false, + "lines": [ + "VariantReference : ReferenceUsage =", + " ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecialization* UsageBody" + ], + "name": "VariantReference" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.4", + "lines": [ + "Clause 8.2.2.6.4 Body Elements" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.4", + "is_partial": false, + "lines": [ + "NonOccurrenceUsageElement : Usage =", + " DefaultReferenceUsage", + " | ReferenceUsage", + " | AttributeUsage", + " | EnumerationUsage", + " | BindingConnectorAsUsage", + " | SuccessionAsUsage", + " | ExtendedUsage" + ], + "name": "NonOccurrenceUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.4", + "is_partial": false, + "lines": [ + "OccurrenceUsageElement : Usage =", + " StructureUsageElement | BehaviorUsageElement" + ], + "name": "OccurrenceUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.4", + "is_partial": false, + "lines": [ + "StructureUsageElement : Usage =", + " OccurrenceUsage", + " | IndividualUsage", + " | PortionUsage", + " | EventOccurrenceUsage", + " | ItemUsage", + " | PartUsage", + " | ViewUsage", + " | RenderingUsage", + " | PortUsage", + " | ConnectionUsage", + " | InterfaceUsage", + " | AllocationUsage", + " | Message", + " | FlowUsage", + " | SuccessionFlowUsage" + ], + "name": "StructureUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.4", + "is_partial": false, + "lines": [ + "BehaviorUsageElement : Usage =", + " ActionUsage", + " | CalculationUsage", + " | StateUsage", + " | ConstraintUsage", + " | RequirementUsage", + " | ConcernUsage", + " | CaseUsage", + " | AnalysisCaseUsage", + " | VerificationCaseUsage", + " | UseCaseUsage", + " | ViewpointUsage", + " | PerformActionUsage", + " | ExhibitStateUsage", + " | IncludeUseCaseUsage", + " | AssertConstraintUsage", + " | SatisfyRequirementUsage" + ], + "name": "BehaviorUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.6.4", + "is_partial": false, + "lines": [ + "VariantUsageElement : Usage =", + " VariantReference", + " | ReferenceUsage", + " | AttributeUsage", + " | BindingConnectorAsUsage", + " | SuccessionAsUsage", + " | OccurrenceUsage", + " | IndividualUsage", + " | PortionUsage", + " | EventOccurrenceUsage", + " | ItemUsage", + " | PartUsage", + " | ViewUsage", + " | RenderingUsage", + " | PortUsage", + " | ConnectionUsage", + " | InterfaceUsage", + " | AllocationUsage", + " | Message", + " | FlowUsage", + " | SuccessionFlowUsage", + " | BehaviorUsageElement" + ], + "name": "VariantUsageElement" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.5", + "lines": [ + "Clause 8.2.2.6.5 Specialization" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Classifier", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "SubclassificationPart : Classifier =", + " SPECIALIZES ownedRelationship += OwnedSubclassification", + " ( ',' ownedRelationship += OwnedSubclassification )*" + ], + "name": "SubclassificationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Subclassification", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedSubclassification : Subclassification =", + " superClassifier = [QualifiedName]" + ], + "name": "OwnedSubclassification" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "FeatureSpecializationPart : Feature =", + " FeatureSpecialization+ MultiplicityPart? FeatureSpecialization*", + " | MultiplicityPart FeatureSpecialization*" + ], + "name": "FeatureSpecializationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "FeatureSpecialization : Feature =", + " Typings | Subsettings | References | Crosses | Redefinitions" + ], + "name": "FeatureSpecialization" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Typings : Feature =", + " TypedBy ( ',' ownedRelationship += FeatureTyping )*" + ], + "name": "Typings" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "TypedBy : Feature =", + " DEFINED_BY ownedRelationship += FeatureTyping" + ], + "name": "TypedBy" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureTyping", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "FeatureTyping =", + " OwnedFeatureTyping | ConjugatedPortTyping" + ], + "name": "FeatureTyping" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureTyping", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedFeatureTyping : FeatureTyping =", + " type = [QualifiedName]", + " | type = OwnedFeatureChain", + " { ownedRelatedElement += type }" + ], + "name": "OwnedFeatureTyping" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Subsettings : Feature =", + " Subsets ( ',' ownedRelationship += OwnedSubsetting )*" + ], + "name": "Subsettings" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Subsets : Feature =", + " SUBSETS ownedRelationship += OwnedSubsetting" + ], + "name": "Subsets" + }, + { + "@type": "Production", + "abstract_syntax_type": "Subsetting", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedSubsetting : Subsetting =", + " subsettedFeature = [QualifiedName]", + " | subsettedFeature = OwnedFeatureChain", + " { ownedRelatedElement += subsettedFeature }" + ], + "name": "OwnedSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "References : Feature =", + " REFERENCES ownedRelationship += OwnedReferenceSubsetting" + ], + "name": "References" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceSubsetting", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedReferenceSubsetting : ReferenceSubsetting =", + " referencedFeature = [QualifiedName]", + " | referencedFeature = OwnedFeatureChain", + " { ownedRelatedElement += referenceFeature }" + ], + "name": "OwnedReferenceSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Crosses : Feature =", + " CROSSES ownedRelationship += OwnedCrossSubsetting" + ], + "name": "Crosses" + }, + { + "@type": "Production", + "abstract_syntax_type": "CrossSubsetting", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedCrossSubsetting : CrossSubsetting =", + " crossedFeature = [QualifiedName]", + " | crossedFeature = OwnedFeatureChain", + " { ownedRelatedElement += crossedFeature }" + ], + "name": "OwnedCrossSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Redefinitions : Feature =", + " Redefines ( ',' ownedRelationship += OwnedRedefinition )*" + ], + "name": "Redefinitions" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "Redefines : Feature =", + " REDEFINES ownedRelationship += OwnedRedefinition" + ], + "name": "Redefines" + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedRedefinition : Redefinition =", + " redefinedFeature = [QualifiedName]", + " | redefinedFeature = OwnedFeatureChain", + " { ownedRelatedElement += redefinedFeature }" + ], + "name": "OwnedRedefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedFeatureChain : Feature =", + " ownedRelationship += OwnedFeatureChaining", + " ( '.' ownedRelationship += OwnedFeatureChaining )+" + ], + "name": "OwnedFeatureChain" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureChaining", + "clause_id": "8.2.2.6.5", + "is_partial": false, + "lines": [ + "OwnedFeatureChaining : FeatureChaining =", + " chainingFeature = [QualifiedName]" + ], + "name": "OwnedFeatureChaining" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.6.6", + "lines": [ + "Clause 8.2.2.6.6 Multiplicity" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.6.6", + "is_partial": false, + "lines": [ + "MultiplicityPart : Feature =", + " ownedRelationship += OwnedMultiplicity", + " | ( ownedRelationship += OwnedMultiplicity )?", + " ( isOrdered ?= 'ordered' ( { isUnique = false } 'nonunique' )?", + " | { isUnique = false } 'nonunique' ( isOrdered ?= 'ordered' )? )" + ], + "name": "MultiplicityPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.6.6", + "is_partial": false, + "lines": [ + "OwnedMultiplicity : OwningMembership =", + " ownedRelatedElement += MultiplicityRange" + ], + "name": "OwnedMultiplicity" + }, + { + "@type": "Production", + "abstract_syntax_type": "MultiplicityRange", + "clause_id": "8.2.2.6.6", + "is_partial": false, + "lines": [ + "MultiplicityRange =", + " '[' ( ownedRelationship += MultiplicityExpressionMember '..' )?", + " ownedRelationship += MultiplicityExpressionMember ']'" + ], + "name": "MultiplicityRange" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.6.6", + "is_partial": false, + "lines": [ + "MultiplicityExpressionMember : OwningMembership =", + " ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression )" + ], + "name": "MultiplicityExpressionMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.7", + "lines": [ + "Clause 8.2.2.7 Attributes Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "AttributeDefinition", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "AttributeDefinition : AttributeDefinition =", + " DefinitionPrefix 'attribute' 'def' Definition" + ], + "name": "AttributeDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "AttributeUsage", + "clause_id": "8.2.2.7", + "is_partial": false, + "lines": [ + "AttributeUsage : AttributeUsage =", + " UsagePrefix 'attribute' Usage" + ], + "name": "AttributeUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.8", + "lines": [ + "Clause 8.2.2.8 Enumerations Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "EnumerationDefinition", + "clause_id": "8.2.2.8", + "is_partial": false, + "lines": [ + "EnumerationDefinition =", + " DefinitionExtensionKeyword*", + " 'enum' 'def' DefinitionDeclaration EnumerationBody" + ], + "name": "EnumerationDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "EnumerationDefinition", + "clause_id": "8.2.2.8", + "is_partial": false, + "lines": [ + "EnumerationBody : EnumerationDefinition =", + " ';'", + " | '{' ( ownedRelationship += AnnotatingMember", + " | ownedRelationship += EnumerationUsageMember )*", + " '}'" + ], + "name": "EnumerationBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "VariantMembership", + "clause_id": "8.2.2.8", + "is_partial": false, + "lines": [ + "EnumerationUsageMember : VariantMembership =", + " MemberPrefix ownedRelatedElement += EnumeratedValue" + ], + "name": "EnumerationUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "EnumerationUsage", + "clause_id": "8.2.2.8", + "is_partial": false, + "lines": [ + "EnumeratedValue : EnumerationUsage =", + " 'enum'? Usage" + ], + "name": "EnumeratedValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "EnumerationUsage", + "clause_id": "8.2.2.8", + "is_partial": false, + "lines": [ + "EnumerationUsage : EnumerationUsage =", + " UsagePrefix 'enum' Usage" + ], + "name": "EnumerationUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.9", + "lines": [ + "Clause 8.2.2.9 Occurrences Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.9.1", + "lines": [ + "Clause 8.2.2.9.1 Occurrence Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceDefinition", + "clause_id": "8.2.2.9.1", + "is_partial": false, + "lines": [ + "OccurrenceDefinitionPrefix : OccurrenceDefinition =", + " BasicDefinitionPrefix?", + " ( isIndividual ?= 'individual'", + " ownedRelationship += EmptyMultiplicityMember", + " )?", + " DefinitionExtensionKeyword*" + ], + "name": "OccurrenceDefinitionPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceDefinition", + "clause_id": "8.2.2.9.1", + "is_partial": false, + "lines": [ + "OccurrenceDefinition =", + " OccurrenceDefinitionPrefix 'occurrence' 'def' Definition" + ], + "name": "OccurrenceDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceDefinition", + "clause_id": "8.2.2.9.1", + "is_partial": false, + "lines": [ + "IndividualDefinition : OccurrenceDefinition =", + " BasicDefinitionPrefix? isIndividual ?= 'individual'", + " DefinitionExtensionKeyword* 'def' Definition", + " ownedRelationship += EmptyMultiplicityMember" + ], + "name": "IndividualDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.9.1", + "is_partial": false, + "lines": [ + "EmptyMultiplicityMember : OwningMembership =", + " ownedRelatedElement += EmptyMultiplicity" + ], + "name": "EmptyMultiplicityMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Multiplicity", + "clause_id": "8.2.2.9.1", + "is_partial": false, + "lines": [ + "EmptyMultiplicity : Multiplicity =", + " { }" + ], + "name": "EmptyMultiplicity" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.9.2", + "lines": [ + "Clause 8.2.2.9.2 Occurrence Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceUsage", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "OccurrenceUsagePrefix : OccurrenceUsage =", + " BasicUsagePrefix", + " ( isIndividual ?= 'individual' )?", + " ( portionKind = PortionKind", + " { isPortion = true }", + " )?", + " UsageExtensionKeyword*" + ], + "name": "OccurrenceUsagePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceUsage", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "OccurrenceUsage =", + " OccurrenceUsagePrefix 'occurrence' Usage" + ], + "name": "OccurrenceUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceUsage", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "IndividualUsage : OccurrenceUsage =", + " BasicUsagePrefix isIndividual ?= 'individual'", + " UsageExtensionKeyword* Usage" + ], + "name": "IndividualUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceUsage", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "PortionUsage : OccurrenceUsage =", + " BasicUsagePrefix ( isIndividual ?= 'individual' )?", + " portionKind = PortionKind", + " UsageExtensionKeyword* Usage", + " { isPortion = true }" + ], + "name": "PortionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "PortionKind", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "PortionKind =", + " 'snapshot' | 'timeslice'" + ], + "name": "PortionKind" + }, + { + "@type": "Production", + "abstract_syntax_type": "EventOccurrenceUsage", + "clause_id": "8.2.2.9.2", + "is_partial": false, + "lines": [ + "EventOccurrenceUsage =", + " OccurrenceUsagePrefix 'event'", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'occurrence' UsageDeclaration? )", + " UsageCompletion" + ], + "name": "EventOccurrenceUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.9.3", + "lines": [ + "Clause 8.2.2.9.3 Occurrence Successions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.9.3", + "is_partial": false, + "lines": [ + "SourceSuccessionMember : FeatureMembership =", + " 'then' ownedRelatedElement += SourceSuccession" + ], + "name": "SourceSuccessionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "SuccessionAsUsage", + "clause_id": "8.2.2.9.3", + "is_partial": false, + "lines": [ + "SourceSuccession : SuccessionAsUsage =", + " ownedRelationship += SourceEndMember" + ], + "name": "SourceSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.2.9.3", + "is_partial": false, + "lines": [ + "SourceEndMember : EndFeatureMembership =", + " ownedRelatedElement += SourceEnd" + ], + "name": "SourceEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.9.3", + "is_partial": false, + "lines": [ + "SourceEnd : ReferenceUsage =", + " ( ownedRelationship += OwnedMultiplicity )?" + ], + "name": "SourceEnd" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.10", + "lines": [ + "Clause 8.2.2.10 Items Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ItemDefinition", + "clause_id": "8.2.2.10", + "is_partial": false, + "lines": [ + "ItemDefinition =", + " OccurrenceDefinitionPrefix", + " 'item' 'def' Definition" + ], + "name": "ItemDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ItemUsage", + "clause_id": "8.2.2.10", + "is_partial": false, + "lines": [ + "ItemUsage =", + " OccurrenceUsagePrefix 'item' Usage" + ], + "name": "ItemUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.11", + "lines": [ + "Clause 8.2.2.11 Parts Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "PartDefinition", + "clause_id": "8.2.2.11", + "is_partial": false, + "lines": [ + "PartDefinition =", + " OccurrenceDefinitionPrefix 'part' 'def' Definition" + ], + "name": "PartDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "PartUsage", + "clause_id": "8.2.2.11", + "is_partial": false, + "lines": [ + "PartUsage =", + " OccurrenceUsagePrefix 'part' Usage" + ], + "name": "PartUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.12", + "lines": [ + "Clause 8.2.2.12 Ports Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "PortDefinition", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "PortDefinition =", + " DefinitionPrefix 'port' 'def' Definition", + " ownedRelationship += ConjugatedPortDefinitionMember", + " { conjugatedPortDefinition.ownedPortConjugator.", + " originalPortDefinition = this }" + ], + "name": "PortDefinition" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.2.12", + "lines": [ + "(See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "ConjugatedPortDefinitionMember : OwningMembership =", + " ownedRelatedElement += ConjugatedPortDefinition" + ], + "name": "ConjugatedPortDefinitionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConjugatedPortDefinition", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "ConjugatedPortDefinition =", + " ownedRelationship += PortConjugation" + ], + "name": "ConjugatedPortDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "PortConjugation", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "PortConjugation =", + " {}" + ], + "name": "PortConjugation" + }, + { + "@type": "Production", + "abstract_syntax_type": "PortUsage", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "PortUsage =", + " OccurrenceUsagePrefix 'port' Usage" + ], + "name": "PortUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConjugatedPortTyping", + "clause_id": "8.2.2.12", + "is_partial": false, + "lines": [ + "ConjugatedPortTyping : ConjugatedPortTyping =", + " '~' originalPortDefinition = ~[QualifiedName]" + ], + "name": "ConjugatedPortTyping" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.2.12", + "lines": [ + "(See Note 2)" + ] + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.12", + "html_snippet": "
        1. Even though it is not explicitly represented in the text, a PortDefinition is always parsed as containing a nested ConjugatedPortDefinition with a PortDefinition Relationship pointing back to the containing PortDefinition. The abstract syntax for ConjugatedPortDefinition sets its effectiveName to the name of its originalPortDefinition with the symbol ~ prepended to it (see 8.3.12.2). (See also 8.4.8.1.)
        2. The notation ~[QualifiedName] indicates that a QualifiedName shall be parsed from the input text, but that it shall be resolved as if it was the qualified name constructed as follows:
          • Extract the last segment name of the given QualifiedName and prepend the symbol ~ to it.
          • Append the name so constructed to the end of the entire original QualifiedName.
          For example, if the ConjugatedPortTyping is ~A::B::C, then the given QualifiedName is A::B::C, and ~[QualifiedName] is resolved as A::B::C::'~C'. Alternatively, a conforming tool may first resolve the given QualifiedName as usual to a PortDefinition and then use the conjugatedPortDefinition of this PortDefinition as the resolution of ~[QualifiedName].
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.13", + "lines": [ + "Clause 8.2.2.13 Connections Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.13.1", + "lines": [ + "Clause 8.2.2.13.1 Connection Definition and Usage" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ConnectionDefinition", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "ConnectionDefinition =", + " OccurrenceDefinitionPrefix 'connection' 'def' Definition" + ], + "name": "ConnectionDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConnectionUsage", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "ConnectionUsage =", + " OccurrenceUsagePrefix", + " ( 'connection' UsageDeclaration ValuePart?", + " ( 'connect' ConnectorPart )?", + " | 'connect' ConnectorPart )", + " UsageBody" + ], + "name": "ConnectionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConnectionUsage", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "ConnectorPart : ConnectionUsage =", + " BinaryConnectorPart | NaryConnectorPart" + ], + "name": "ConnectorPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConnectionUsage", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "BinaryConnectorPart : ConnectionUsage =", + " ownedRelationship += ConnectorEndMember 'to'", + " ownedRelationship += ConnectorEndMember" + ], + "name": "BinaryConnectorPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConnectionUsage", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "NaryConnectorPart : ConnectionUsage =", + " '(' ownedRelationship += ConnectorEndMember ','", + " ownedRelationship += ConnectorEndMember", + " ( ',' ownedRelationship += ConnectorEndMember )* ')'" + ], + "name": "NaryConnectorPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership :", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "ConnectorEndMember : EndFeatureMembership :", + " ownedRelatedElement += ConnectorEnd" + ], + "name": "ConnectorEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "ConnectorEnd : ReferenceUsage =", + "\t( ownedRelationship += OwnedCrossMultiplicityMember )?", + "\t( declaredName = NAME REFERENCES )?", + "\townedRelationship += OwnedReferenceSubsetting" + ], + "name": "ConnectorEnd" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "OwnedCrossMultiplicityMember : OwningMembership =", + "\townedRelatedElement += OwnedCrossMultiplicity" + ], + "name": "OwnedCrossMultiplicityMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.13.1", + "is_partial": false, + "lines": [ + "OwnedCrossMultiplicity : Feature =", + "\townedRelationship += OwnedMultiplicity" + ], + "name": "OwnedCrossMultiplicity" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.13.2", + "lines": [ + "Clause 8.2.2.13.2 Binding Connectors" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "BindingConnectorAsUsage", + "clause_id": "8.2.2.13.2", + "is_partial": false, + "lines": [ + "BindingConnectorAsUsage =", + " UsagePrefix ( 'binding' UsageDeclaration )?", + " 'bind' ownedRelationship += ConnectorEndMember", + " '=' ownedRelationship += ConnectorEndMember", + " UsageBody" + ], + "name": "BindingConnectorAsUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.13.3", + "lines": [ + "Clause 8.2.2.13.3 Successions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "SuccessionAsUsage", + "clause_id": "8.2.2.13.3", + "is_partial": false, + "lines": [ + "SuccessionAsUsage =", + " UsagePrefix ( 'succession' UsageDeclaration )?", + " 'first' s.ownedRelationship += ConnectorEndMember", + " 'then' s.ownedRelationship += ConnectorEndMember", + " UsageBody" + ], + "name": "SuccessionAsUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.14", + "lines": [ + "Clause 8.2.2.14 Interfaces Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.14.1", + "lines": [ + "Clause 8.2.2.14.1 Interface Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceDefinition", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceDefinition =", + " OccurrenceDefinitionPrefix 'interface' 'def'", + " DefinitionDeclaration InterfaceBody" + ], + "name": "InterfaceDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceBody : Type =", + " ';' | '{' InterfaceBodyItem* '}'" + ], + "name": "InterfaceBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceBodyItem : Type =", + " ownedRelationship += DefinitionMember", + " | ownedRelationship += VariantUsageMember", + " | ownedRelationship += InterfaceNonOccurrenceUsageMember", + " | ( ownedRelationship += SourceSuccessionMember )?", + " ownedRelationship += InterfaceOccurrenceUsageMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import" + ], + "name": "InterfaceBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceNonOccurrenceUsageMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += InterfaceNonOccurrenceUsageElement" + ], + "name": "InterfaceNonOccurrenceUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceNonOccurrenceUsageElement : Usage =", + " ReferenceUsage", + " | AttributeUsage", + " | EnumerationUsage", + " | BindingConnectorAsUsage", + " | SuccessionAsUsage" + ], + "name": "InterfaceNonOccurrenceUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceOccurrenceUsageMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += InterfaceOccurrenceUsageElement" + ], + "name": "InterfaceOccurrenceUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "InterfaceOccurrenceUsageElement : Usage =", + " DefaultInterfaceEnd | StructureUsageElement | BehaviorUsageElement" + ], + "name": "InterfaceOccurrenceUsageElement" + }, + { + "@type": "Production", + "abstract_syntax_type": "PortUsage", + "clause_id": "8.2.2.14.1", + "is_partial": false, + "lines": [ + "DefaultInterfaceEnd : PortUsage =", + " isEnd ?= 'end' Usage" + ], + "name": "DefaultInterfaceEnd" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.14.2", + "lines": [ + "Clause 8.2.2.14.2 Interface Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "InterfaceUsage =", + " OccurrenceUsagePrefix 'interface'", + " InterfaceUsageDeclaration InterfaceBody" + ], + "name": "InterfaceUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "InterfaceUsageDeclaration : InterfaceUsage =", + " UsageDeclaration ValuePart?", + " ( 'connect' InterfacePart )?", + " | InterfacePart" + ], + "name": "InterfaceUsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "InterfacePart : InterfaceUsage =", + " BinaryInterfacePart | NaryInterfacePart" + ], + "name": "InterfacePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "BinaryInterfacePart : InterfaceUsage =", + " ownedRelationship += InterfaceEndMember 'to'", + " ownedRelationship += InterfaceEndMember" + ], + "name": "BinaryInterfacePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "InterfaceUsage", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "NaryInterfacePart : InterfaceUsage =", + " '(' ownedRelationship += InterfaceEndMember ','", + " ownedRelationship += InterfaceEndMember", + " ( ',' ownedRelationship += InterfaceEndMember )* ')'" + ], + "name": "NaryInterfacePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "InterfaceEndMember : EndFeatureMembership =", + " ownedRelatedElement += InterfaceEnd" + ], + "name": "InterfaceEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "PortUsage :", + "clause_id": "8.2.2.14.2", + "is_partial": false, + "lines": [ + "InterfaceEnd : PortUsage :", + " ( ownedRelationship += OwnedCrossMultiplicityMember )?", + " ( declaredName = NAME REFERENCES )?", + " ownedRelationship += OwnedReferenceSubsetting" + ], + "name": "InterfaceEnd" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.15", + "lines": [ + "Clause 8.2.2.15 Allocations Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "AllocationDefinition", + "clause_id": "8.2.2.15", + "is_partial": false, + "lines": [ + "AllocationDefinition =", + " OccurrenceDefinitionPrefix 'allocation' 'def' Definition" + ], + "name": "AllocationDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "AllocationUsage", + "clause_id": "8.2.2.15", + "is_partial": false, + "lines": [ + "AllocationUsage =", + " OccurrenceUsagePrefix", + " AllocationUsageDeclaration UsageBody" + ], + "name": "AllocationUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AllocationUsage", + "clause_id": "8.2.2.15", + "is_partial": false, + "lines": [ + "AllocationUsageDeclaration : AllocationUsage =", + " 'allocation' UsageDeclaration", + " ( 'allocate' ConnectorPart )?", + " | 'allocate' ConnectorPart" + ], + "name": "AllocationUsageDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.16", + "lines": [ + "Clause 8.2.2.16 Flows Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowDefinition :", + " OccurrenceDefinitionPrefix 'flow' 'def' Definition" + ], + "name": "FlowDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "Message : FlowUsage =", + " OccurrenceUsagePrefix 'message'", + " MessageDeclaration DefinitionBody", + " { isAbstract = true }" + ], + "name": "Message" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "MessageDeclaration : FlowUsage =", + " UsageDeclaration ValuePart?", + " ( 'of' ownedRelationship += FlowPayloadFeatureMember )?", + " ( 'from' ownedRelationship += MessageEventMember", + " 'to' ownedRelationship += MessageEventMember", + " )?", + " | ownedRelationship += MessageEventMember 'to'", + " ownedRelationship += MessageEventMember" + ], + "name": "MessageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "MessageEventMember : ParameterMembership =", + " ownedRelatedElement += MessageEvent" + ], + "name": "MessageEventMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "EventOccurrenceUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "MessageEvent : EventOccurrenceUsage =", + " ownedRelationship += OwnedReferenceSubsetting" + ], + "name": "MessageEvent" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowUsage =", + " OccurrenceUsagePrefix 'flow'", + " FlowDeclaration DefinitionBody" + ], + "name": "FlowUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "SuccessionFlowUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "SuccessionFlowUsage =", + " OccurrenceUsagePrefix 'succession' 'flow'", + " FlowDeclaration DefinitionBody" + ], + "name": "SuccessionFlowUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowDeclaration : FlowUsage =", + " UsageDeclaration ValuePart?", + " ( 'of' ownedRelationship += FlowPayloadFeatureMember )?", + " ( 'from' ownedRelationship += FlowEndMember", + " 'to' ownedRelationship += FlowEndMember )?", + " | ownedRelationship += FlowEndMember 'to'", + " ownedRelationship += FlowEndMember" + ], + "name": "FlowDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowPayloadFeatureMember : FeatureMembership =", + " ownedRelatedElement += FlowPayloadFeature" + ], + "name": "FlowPayloadFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "PayloadFeature", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowPayloadFeature : PayloadFeature =", + " PayloadFeature" + ], + "name": "FlowPayloadFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "PayloadFeature : Feature =", + " Identification? PayloadFeatureSpecializationPart", + " ValuePart?", + " | ownedRelationship += OwnedFeatureTyping", + " ( ownedRelationship += OwnedMultiplicity )?", + " | ownedRelationship += OwnedMultiplicity", + " ownedRelationship += OwnedFeatureTyping" + ], + "name": "PayloadFeature" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "PayloadFeatureSpecializationPart : Feature =", + " ( -> FeatureSpecialization )+ MultiplicityPart?", + " FeatureSpecialization*", + " | MultiplicityPart FeatureSpecialization+" + ], + "name": "PayloadFeatureSpecializationPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowEndMember : EndFeatureMembership =", + " ownedRelatedElement += FlowEnd" + ], + "name": "FlowEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FlowEnd", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowEnd =", + " ( ownedRelationship += FlowEndSubsetting )?", + " ownedRelationship += FlowFeatureMember" + ], + "name": "FlowEnd" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceSubsetting", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowEndSubsetting : ReferenceSubsetting =", + " referencedFeature = [QualifiedName]", + " | referencedFeature = FeatureChainPrefix", + " { ownedRelatedElement += referencedFeature }" + ], + "name": "FlowEndSubsetting" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FeatureChainPrefix : Feature =", + " ( ownedRelationship += OwnedFeatureChaining '.' )+", + " ownedRelationship += OwnedFeatureChaining '.'" + ], + "name": "FeatureChainPrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowFeatureMember : FeatureMembership =", + " ownedRelatedElement += FlowFeature" + ], + "name": "FlowFeatureMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowFeature : ReferenceUsage =", + " ownedRelationship += FlowFeatureRedefinition" + ], + "name": "FlowFeature" + }, + { + "@type": "NoteRef", + "clause_id": "8.2.2.16", + "lines": [ + "(See Note 1)" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Redefinition", + "clause_id": "8.2.2.16", + "is_partial": false, + "lines": [ + "FlowFeatureRefefinition : Redefinition =", + " redefinedFeature = [QualifiedName]" + ], + "name": "FlowFeatureRefefinition" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.16", + "html_snippet": "
        1. To ensure that a FlowFeature passes the validateRedefinitionDirectionConformance constraint (see [KerML, 8.3.3.3.8]), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature)\n
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17", + "lines": [ + "Clause 8.2.2.17 Actions Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.1", + "lines": [ + "Clause 8.2.2.17.1 Action Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionDefinition", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionDefinition =", + " OccurrenceDefinitionPrefix 'action' 'def'", + " DefinitionDeclaration ActionBody" + ], + "name": "ActionDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionBody : Type =", + " ';' | '{' ActionBodyItem* '}'" + ], + "name": "ActionBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionBodyItem : Type =", + " NonBehaviorBodyItem", + " | ownedRelationship += InitialNodeMember", + " ( ownedRelationship += ActionTargetSuccessionMember )*", + " | ( ownedRelationship += SourceSuccessionMember )?", + " ownedRelationsuip += ActionBehaviorMember", + " ( ownedRelationship += ActionTargetSuccessionMember )*", + " | ownedRelationship += GuardedSuccessionMember" + ], + "name": "ActionBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "NonBehaviorBodyItem", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "NonBehaviorBodyItem =", + " ownedRelationship += Import", + " | ownedRelationship += AliasMember", + " | ownedRelationship += DefinitionMember", + " | ownedRelationship += VariantUsageMember", + " | ownedRelationship += NonOccurrenceUsageMember", + " | ( ownedRelationship += SourceSuccessionMember )?", + " ownedRelationship += StructureUsageMember" + ], + "name": "NonBehaviorBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionBehaviorMember : FeatureMembership =", + " BehaviorUsageMember | ActionNodeMember" + ], + "name": "ActionBehaviorMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "InitialNodeMember : FeatureMembership =", + " MemberPrefix 'first' memberFeature = [QualifiedName]", + " RelationshipBody" + ], + "name": "InitialNodeMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionNodeMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += ActionNode" + ], + "name": "ActionNodeMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "ActionTargetSuccessionMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += ActionTargetSuccession" + ], + "name": "ActionTargetSuccessionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.1", + "is_partial": false, + "lines": [ + "GuardedSuccessionMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += GuardedSuccession" + ], + "name": "GuardedSuccessionMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.2", + "lines": [ + "Clause 8.2.2.17.2 Action Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "ActionUsage =", + " OccurrenceUsagePrefix 'action'", + " ActionUsageDeclaration ActionBody" + ], + "name": "ActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "ActionUsageDeclaration : ActionUsage =", + " UsageDeclaration ValuePart?" + ], + "name": "ActionUsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "PerformActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "PerformActionUsage =", + " OccurrenceUsagePrefix 'perform'", + " PerformActionUsageDeclaration ActionBody" + ], + "name": "PerformActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "PerformActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "PerformActionUsageDeclaration : PerformActionUsage =", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'action' UsageDeclaration )", + " ValuePart?" + ], + "name": "PerformActionUsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "ActionNode : ActionUsage =", + " ControlNode", + " | SendNode | AcceptNode", + " | AssignmentNode", + " | TerminateNode", + " | IfNode | WhileLoopNode | ForLoopNode" + ], + "name": "ActionNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "ActionNodeUsageDeclaration : ActionUsage =", + " 'action' UsageDeclaration?" + ], + "name": "ActionNodeUsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.2", + "is_partial": false, + "lines": [ + "ActionNodePrefix : ActionUsage =", + " OccurrenceUsagePrefix ActionNodeUsageDeclaration?" + ], + "name": "ActionNodePrefix" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.3", + "lines": [ + "Clause 8.2.2.17.3 Control Nodes" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ControlNode", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "ControlNode =", + " MergeNode | DecisionNode | JoinNode| ForkNode" + ], + "name": "ControlNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "OccurrenceUsage", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "ControlNodePrefix : OccurrenceUsage =", + " RefPrefix", + " ( isIndividual ?= 'individual )?", + " ( portionKind = PortionKind", + " { isPortion = true }", + " )?", + " UsageExtensionKeyword*" + ], + "name": "ControlNodePrefix" + }, + { + "@type": "Production", + "abstract_syntax_type": "MergeNode", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "MergeNode =", + " ControlNodePrefix", + " isComposite ?= 'merge' UsageDeclaration", + " ActionBody" + ], + "name": "MergeNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "DecisionNode", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "DecisionNode =", + " ControlNodePrefix", + " isComposite ?= 'decide' UsageDeclaration", + " ActionBody" + ], + "name": "DecisionNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "JoinNode", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "JoinNode =", + " ControlNodePrefix", + " isComposite ?= 'join' UsageDeclaration", + " ActionBody" + ], + "name": "JoinNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "ForkNode", + "clause_id": "8.2.2.17.3", + "is_partial": false, + "lines": [ + "ForkNode =", + " ControlNodePrefix", + " isComposite ?= 'fork' UsageDeclaration", + " ActionBody" + ], + "name": "ForkNode" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.4", + "lines": [ + "Clause 8.2.2.17.4 Send and Accept Action Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "AcceptNode : AcceptActionUsage =", + " OccurrenceUsagePrefix", + " AcceptNodeDeclaration ActionBody" + ], + "name": "AcceptNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "AcceptNodeDeclaration : AcceptActionUsage =", + " ActionNodeUsageDeclaration?", + " 'accept' AcceptParameterPart" + ], + "name": "AcceptNodeDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "AcceptParameterPart : AcceptActionUsage =", + " ownedRelationship += PayloadParameterMember", + " ( 'via' ownedRelationship += NodeParameterMember )?" + ], + "name": "AcceptParameterPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "PayloadParameterMember : ParameterMembership =", + " ownedRelatedElement += PayloadParameter" + ], + "name": "PayloadParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "PayloadParameter : ReferenceUsage =", + " PayloadFeature", + " | Identification PayloadFeatureSpecializationPart?", + " TriggerValuePart" + ], + "name": "PayloadParameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "TriggerValuePart : Feature =", + " ownedRelationship += TriggerFeatureValue" + ], + "name": "TriggerValuePart" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "TriggerFeatureValue : FeatureValue =", + " ownedRelatedElement += TriggerExpression" + ], + "name": "TriggerFeatureValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "TriggerInvocationExpression", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "TriggerExpression : TriggerInvocationExpression =", + " kind = ( 'at | 'after' )", + " ownedRelationship += ArgumentMember", + " | kind = 'when'", + " ownedRelationship += ArgumentExpressionMember" + ], + "name": "TriggerExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "ArgumentMember : ParameterMembership =", + " ownedMemberParameter = Argument" + ], + "name": "ArgumentMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "Argument : Feature =", + " ownedRelationship += ArgumentValue" + ], + "name": "Argument" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "ArgumentValue : FeatureValue =", + " value = OwnedExpression" + ], + "name": "ArgumentValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "ArgumentExpressionMember : ParameterMembership =", + " ownedRelatedElement += ArgumentExpression" + ], + "name": "ArgumentExpressionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Feature", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "ArgumentExpression : Feature =", + " ownedRelationship += ArgumentExpressionValue" + ], + "name": "ArgumentExpression" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "ArgumentExpressionValue : FeatureValue =", + " ownedRelatedElement += OwnedExpressionReference" + ], + "name": "ArgumentExpressionValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "SendActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "SendNode : SendActionUsage =", + " OccurrenceUsagePrefix ActionUsageDeclaration? 'send'", + " ( ownedRelationship += NodeParameterMember SenderReceiverPart?", + " | ownedRelationship += EmptyParameterMember SendReceiverPart )?", + " ActionBody" + ], + "name": "SendNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "SendActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "SendNodeDeclaration : SendActionUsage =", + " ActionNodeUsageDeclaration? 'send'", + " ownedRelationship += NodeParameterMember SenderReceiverPart?" + ], + "name": "SendNodeDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "SendActionUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "SenderReceiverPart : SendActionUsage =", + " 'via' ownedRelationship += NodeParameterMember", + " ( 'to' ownedRelationship += NodeParameterMember )?", + " | ownedRelationship += EmptyParameterMember", + " 'to' ownedRelationship += NodeParameterMember" + ], + "name": "SenderReceiverPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "NodeParameterMember : ParameterMembership =", + " ownedRelatedElement += NodeParameter" + ], + "name": "NodeParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "NodeParameter : ReferenceUsage =", + " ownedRelationship += FeatureBinding" + ], + "name": "NodeParameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "FeatureBinding : FeatureValue =", + " ownedRelatedElement += OwnedExpression" + ], + "name": "FeatureBinding" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "EmptyParameterMember : ParameterMembership =", + " ownedRelatedElement += EmptyUsage" + ], + "name": "EmptyParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.17.4", + "is_partial": false, + "lines": [ + "EmptyUsage : ReferenceUsage =", + " {}" + ], + "name": "EmptyUsage" + }, + { + "@type": "NoteList", + "clause_id": "8.2.2.17.4", + "html_snippet": "
        1. The productions for ArgumentMember, Argument, ArgumentValue, ArgumentExpressionMember, ArgumentExpression and ArgumentExpressionValue are the same as given in [KerML, 8.2.5.8.1].
        ", + "lines": [] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.5", + "lines": [ + "Clause 8.2.2.17.5 Assignment Action Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "AssignmentActionUsage", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "AssignmentNode : AssignmentActionUsage =", + " OccurrenceUsagePrefix", + " AssignmentNodeDeclaration ActionBody" + ], + "name": "AssignmentNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "AssignmentNodeDeclaration: ActionUsage =", + " ( ActionNodeUsageDeclaration )? 'assign'", + " ownedRelationship += AssignmentTargetMember", + " ownedRelationship += FeatureChainMember ':='", + " ownedRelationship += NodeParameterMember" + ], + "name": "AssignmentNodeDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "AssignmentTargetMember : ParameterMembership =", + " ownedRelatedElement += AssignmentTargetParameter" + ], + "name": "AssignmentTargetMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "AssignmentTargetParameter : ReferenceUsage =", + " ( ownedRelationship += AssignmentTargetBinding '.' )?" + ], + "name": "AssignmentTargetParameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "AssignmentTargetBinding : FeatureValue =", + " ownedRelatedElement += NonFeatureChainPrimaryExpression" + ], + "name": "AssignmentTargetBinding" + }, + { + "@type": "Production", + "abstract_syntax_type": "Membership", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "FeatureChainMember : Membership =", + " memberElement = [QualifiedName]", + " | OwnedFeatureChainMember" + ], + "name": "FeatureChainMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.17.5", + "is_partial": false, + "lines": [ + "OwnedFeatureChainMember : OwningMembership =", + " ownedRelatedElement += OwnedFeatureChain" + ], + "name": "OwnedFeatureChainMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.6", + "lines": [ + "Clause 8.2.2.17.6 Terminate Action Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "TerminateActionUsage", + "clause_id": "8.2.2.17.6", + "is_partial": false, + "lines": [ + "TerminateNode : TerminateActionUsage =", + " OccurrenceUsagePrefix ActionNodeUsageDeclaration?", + " 'terminate' ( ownedRelationship += NodeParameterMember )?", + " ActionBody" + ], + "name": "TerminateNode" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.7", + "lines": [ + "Clause 8.2.2.17.7 Structured Control Action Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "IfActionUsage", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "IfNode : IfActionUsage =", + " ActionNodePrefix", + " 'if' ownedRelationship += ExpressionParameterMember", + " ownedRelationship += ActionBodyParameterMember", + " ( 'else' ownedRelationship +=", + " ( ActionBodyParameterMember | IfNodeParameterMember ) )?" + ], + "name": "IfNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ExpressionParameterMember : ParameterMembership =", + " ownedRelatedElement += OwnedExpression" + ], + "name": "ExpressionParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ActionBodyParameterMember : ParameterMembership =", + " ownedRelatedElement += ActionBodyParameter" + ], + "name": "ActionBodyParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ActionBodyParameter : ActionUsage =", + " ( 'action' UsageDeclaration? )?", + " '{' ActionBodyItem* '}'" + ], + "name": "ActionBodyParameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "ParameterMembership", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "IfNodeParameterMember : ParameterMembership =", + " ownedRelatedElement += IfNode" + ], + "name": "IfNodeParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "WhileLoopActionUsage", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "WhileLoopNode : WhileLoopActionUsage =", + " ActionNodePrefix", + " ( 'while' ownedRelationship += ExpressionParameterMember", + " | 'loop' ownedRelationship += EmptyParameterMember", + " )", + " ownedRelationship += ActionBodyParameterMember", + " ( 'until' ownedRelationship += ExpressionParameterMember ';' )?" + ], + "name": "WhileLoopNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "ForLoopActionUsage", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ForLoopNode : ForLoopActionUsage =", + " ActionNodePrefix", + " 'for' ownedRelationship += ForVariableDeclarationMember", + " 'in' ownedRelationship += NodeParameterMember", + " ownedRelationship += ActionBodyParameterMember" + ], + "name": "ForLoopNode" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ForVariableDeclarationMember : FeatureMembership =", + " ownedRelatedElement += UsageDeclaration" + ], + "name": "ForVariableDeclarationMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.17.7", + "is_partial": false, + "lines": [ + "ForVariableDeclaration : ReferenceUsage =", + " UsageDeclaration" + ], + "name": "ForVariableDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.17.8", + "lines": [ + "Clause 8.2.2.17.8 Action Successions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.17.8", + "is_partial": false, + "lines": [ + "ActionTargetSuccession : Usage =", + " ( TargetSuccession | GuardedTargetSuccession | DefaultTargetSuccession )", + " UsageBody" + ], + "name": "ActionTargetSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "SuccessionAsUsage", + "clause_id": "8.2.2.17.8", + "is_partial": false, + "lines": [ + "TargetSuccession : SuccessionAsUsage =", + " ownedRelationship += SourceEndMember", + " 'then' ownedRelationship += ConnectorEndMember" + ], + "name": "TargetSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionUsage", + "clause_id": "8.2.2.17.8", + "is_partial": false, + "lines": [ + "GuardedTargetSuccession : TransitionUsage =", + " ownedRelationship += GuardExpressionMember", + " 'then' ownedRelationship += TransitionSuccessionMember" + ], + "name": "GuardedTargetSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionUsage", + "clause_id": "8.2.2.17.8", + "is_partial": false, + "lines": [ + "DefaultTargetSuccession : TransitionUsage =", + " 'else' ownedRelationship += TransitionSuccessionMember" + ], + "name": "DefaultTargetSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionUsage", + "clause_id": "8.2.2.17.8", + "is_partial": false, + "lines": [ + "GuardedSuccession : TransitionUsage =", + " ( 'succession' UsageDeclaration )?", + " 'first' ownedRelationship += FeatureChainMember", + " ownedRelationship += GuardExpressionMember", + " 'then' ownedRelationship += TransitionSuccessionMember", + " UsageBody" + ], + "name": "GuardedSuccession" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.18", + "lines": [ + "Clause 8.2.2.18 States Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.18.1", + "lines": [ + "Clause 8.2.2.18.1 State Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "StateDefinition", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateDefinition =", + " OccurrenceDefinitionPrefix 'state' 'def'", + " DefinitionDeclaration StateDefBody" + ], + "name": "StateDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "StateDefinition", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateDefBody : StateDefinition =", + " ';'", + " | ( isParallel ?= 'parallel' )?", + " '{' StateBodyItem* '}'" + ], + "name": "StateDefBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateBodyItem : Type =", + " NonBehaviorBodyItem", + " | ( ownedRelationsup += SourceSuccessionMember )?", + " ownedRelationship += BehaviorUsageMember", + " ( ownedRelationship += TargetTransitionUsageMember )*", + " | ownedRelationship += TransitionUsageMember", + " | ownedRelationship += EntryActionMember", + " ( ownedRelationship += EntryTransitionMember )*", + " | ownedRelationship += DoActionMember", + " | ownedRelationship += ExitActionMember" + ], + "name": "StateBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "StateSubactionMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "EntryActionMember : StateSubactionMembership =", + " MemberPrefix kind = 'entry'", + " ownedRelatedElement += StateActionUsage" + ], + "name": "EntryActionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "StateSubactionMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "DoActionMember : StateSubactionMembership =", + " MemberPrefix kind = 'do'", + " ownedRelatedElement += StateActionUsage" + ], + "name": "DoActionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "StateSubactionMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "ExitActionMember : StateSubactionMembership =", + " MemberPrefix kind = 'exit'", + " ownedRelatedElement += StateActionUsage" + ], + "name": "ExitActionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership :", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "EntryTransitionMember : FeatureMembership :", + " MemberPrefix", + " ( ownedRelatedElement += GuardedTargetSuccession", + " | 'then' ownedRelatedElement += TargetSuccession", + " ) ';'" + ], + "name": "EntryTransitionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateActionUsage : ActionUsage =", + " EmptyActionUsage ';'", + " | StatePerformActionUsage", + " | StateAcceptActionUsage", + " | StateSendActionUsage", + " | StateAssignmentActionUsage" + ], + "name": "StateActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "EmptyActionUsage : ActionUsage =", + " {}" + ], + "name": "EmptyActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "PerformActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StatePerformActionUsage : PerformActionUsage =", + " PerformActionUsageDeclaration ActionBody" + ], + "name": "StatePerformActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateAcceptActionUsage : AcceptActionUsage =", + " AcceptNodeDeclaration ActionBody" + ], + "name": "StateAcceptActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "SendActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateSendActionUsage : SendActionUsage", + " SendNodeDeclaration ActionBody" + ], + "name": "StateSendActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AssignmentActionUsage", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "StateAssignmentActionUsage : AssignmentActionUsage =", + " AssignmentNodeDeclaration ActionBody" + ], + "name": "StateAssignmentActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "TransitionUsageMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += TransitionUsage" + ], + "name": "TransitionUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.18.1", + "is_partial": false, + "lines": [ + "TargetTransitionUsageMember : FeatureMembership =", + " MemberPrefix ownedRelatedElement += TargetTransitionUsage" + ], + "name": "TargetTransitionUsageMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.18.2", + "lines": [ + "Clause 8.2.2.18.2 State Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "StateUsage", + "clause_id": "8.2.2.18.2", + "is_partial": false, + "lines": [ + "StateUsage =", + " OccurrenceUsagePrefix 'state'", + " ActionUsageDeclaration StateUsageBody" + ], + "name": "StateUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "StateUsage", + "clause_id": "8.2.2.18.2", + "is_partial": false, + "lines": [ + "StateUsageBody : StateUsage =", + " ';'", + " | ( isParallel ?= 'parallel' )?", + " '{' StateBodyItem* '}'" + ], + "name": "StateUsageBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "ExhibitStateUsage", + "clause_id": "8.2.2.18.2", + "is_partial": false, + "lines": [ + "ExhibitStateUsage =", + " OccurrenceUsagePrefix 'exhibit'", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'state' UsageDeclaration )", + " ValuePart? StateUsageBody" + ], + "name": "ExhibitStateUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.18.3", + "lines": [ + "Clause 8.2.2.18.3 Transition Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionUsage =", + " 'transition' ( UsageDeclaration 'first' )?", + " ownedRelationship += FeatureChainMember", + " ownedRelationship += EmptyParameterMember", + " ( ownedRelationship += EmptyParameterMember", + " ownedRelationship += TriggerActionMember )?", + " ( ownedRelationship += GuardExpressionMember )?", + " ( ownedRelationship += EffectBehaviorMember )?", + " 'then' ownedRelationship += TransitionSuccessionMember", + " ActionBody" + ], + "name": "TransitionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TargetTransitionUsage : TransitionUsage =", + " ownedRelationship += EmptyParameterMember", + " ( 'transition'", + " ( ownedRelationship += EmptyParameterMember", + " ownedRelationship += TriggerActionMember )?", + " ( ownedRelationship += GuardExpressionMember )?", + " ( ownedRelationship += EffectBehaviorMember )?", + " | ownedRelationship += EmptyParameterMember", + " ownedRelationship += TriggerActionMember", + " ( ownedRelationship += GuardExpressionMember )?", + " ( ownedRelationship += EffectBehaviorMember )?", + " | ownedRelationship += GuardExpressionMember", + " ( ownedRelationship += EffectBehaviorMember )?", + " )?", + " 'then' ownedRelationship += TransitionSuccessionMember", + " ActionBody" + ], + "name": "TargetTransitionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionFeatureMembership", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TriggerActionMember : TransitionFeatureMembership =", + " 'accept' { kind = 'trigger' } ownedRelatedElement += TriggerAction" + ], + "name": "TriggerActionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TriggerAction : AcceptActionUsage =", + " AcceptParameterPart" + ], + "name": "TriggerAction" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionFeatureMembership", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "GuardExpressionMember : TransitionFeatureMembership =", + " 'if' { kind = 'guard' } ownedRelatedElement += OwnedExpression" + ], + "name": "GuardExpressionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "TransitionFeatureMembership", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "EffectBehaviorMember : TransitionFeatureMembership =", + " 'do' { kind = 'effect' } ownedRelatedElement += EffectBehaviorUsage" + ], + "name": "EffectBehaviorMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "EffectBehaviorUsage : ActionUsage =", + " EmptyActionUsage", + " | TransitionPerformActionUsage", + " | TransitionAcceptActionUsage", + " | TransitionSendActionUsage", + " | TransitionAssignmentActionUsage" + ], + "name": "EffectBehaviorUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "PerformActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionPerformActionUsage : PerformActionUsage =", + " PerformActionUsageDeclaration ( '{' ActionBodyItem* '}' )?" + ], + "name": "TransitionPerformActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AcceptActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionAcceptActionUsage : AcceptActionUsage =", + " AcceptNodeDeclaration ( '{' ActionBodyItem* '}' )?" + ], + "name": "TransitionAcceptActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "SendActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionSendActionUsage : SendActionUsage =", + " SendNodeDeclaration ( '{' ActionBodyItem* '}' )?" + ], + "name": "TransitionSendActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AssignmentActionUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionAssignmentActionUsage : AssignmentActionUsage =", + " AssignmentNodeDeclaration ( '{' ActionBodyItem* '}' )?" + ], + "name": "TransitionAssignmentActionUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionSuccessionMember : OwningMembership =", + " ownedRelatedElement += TransitionSuccession" + ], + "name": "TransitionSuccessionMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "Succession", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "TransitionSuccession : Succession =", + " ownedRelationship += EmptyEndMember", + " ownedRelationship += ConnectorEndMember" + ], + "name": "TransitionSuccession" + }, + { + "@type": "Production", + "abstract_syntax_type": "EndFeatureMembership", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "EmptyEndMember : EndFeatureMembership =", + " ownedRelatedElement += EmptyFeature" + ], + "name": "EmptyEndMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.18.3", + "is_partial": false, + "lines": [ + "EmptyFeature : ReferenceUsage =", + " {}" + ], + "name": "EmptyFeature" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.19", + "lines": [ + "Clause 8.2.2.19 Calculations Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "CalculationDefinition", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "CalculationDefinition =", + " OccurrenceDefinitionPrefix 'calc' 'def'", + " DefinitionDeclaration CalculationBody" + ], + "name": "CalculationDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "CalculationUsage", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "CalculationUsage : CalculationUsage =", + " OccurrenceUsagePrefix 'calc'", + " ActionUsageDeclaration CalculationBody" + ], + "name": "CalculationUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "CalculationBody : Type =", + " ';' | '{' CalculationBodyPart '}'" + ], + "name": "CalculationBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "CalculationBodyPart : Type =", + " CalculationBodyItem*", + " ( ownedRelationship += ResultExpressionMember )?" + ], + "name": "CalculationBodyPart" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "CalculationBodyItem : Type =", + " ActionBodyItem", + " | ownedRelationship += ReturnParameterMember" + ], + "name": "CalculationBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReturnParameterMembership", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "ReturnParameterMember : ReturnParameterMembership =", + " MemberPrefix? 'return' ownedRelatedElement += UsageElement" + ], + "name": "ReturnParameterMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ResultExpressionMembership", + "clause_id": "8.2.2.19", + "is_partial": false, + "lines": [ + "ResultExpressionMember : ResultExpressionMembership =", + " MemberPrefix? ownedRelatedElement += OwnedExpression" + ], + "name": "ResultExpressionMember" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.20", + "lines": [ + "Clause 8.2.2.20 Constraints Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ConstraintDefinition", + "clause_id": "8.2.2.20", + "is_partial": false, + "lines": [ + "ConstraintDefinition =", + " OccurrenceDefinitionPrefix 'constraint' 'def'", + " DefinitionDeclaration CalculationBody" + ], + "name": "ConstraintDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConstraintUsage", + "clause_id": "8.2.2.20", + "is_partial": false, + "lines": [ + "ConstraintUsage =", + " OccurrenceUsagePrefix 'constraint'", + " ConstraintUsageDeclaration CalculationBody" + ], + "name": "ConstraintUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "AssertConstraintUsage", + "clause_id": "8.2.2.20", + "is_partial": false, + "lines": [ + "AssertConstraintUsage =", + " OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' )?", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'constraint' ConstraintUsageDeclaration )", + " CalculationBody" + ], + "name": "AssertConstraintUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConstraintUsage", + "clause_id": "8.2.2.20", + "is_partial": false, + "lines": [ + "ConstraintUsageDeclaration : ConstraintUsage =", + " UsageDeclaration ValuePart?" + ], + "name": "ConstraintUsageDeclaration" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.21", + "lines": [ + "Clause 8.2.2.21 Requirements Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.21.1", + "lines": [ + "Clause 8.2.2.21.1 Requirement Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementDefinition", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementDefinition =", + " OccurrenceDefinitionPrefix 'requirement' 'def'", + " DefinitionDeclaration RequirementBody" + ], + "name": "RequirementDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementBody : Type =", + " ';' | '{' RequirementBodyItem* '}'" + ], + "name": "RequirementBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementBodyItem : Type =", + " DefinitionBodyItem", + " | ownedRelationship += SubjectMember", + " | ownedRelationship += RequirementConstraintMember", + " | ownedRelationship += FramedConcernMember", + " | ownedRelationship += RequirementVerificationMember", + " | ownedRelationship += ActorMember", + " | ownedRelationship += StakeholderMember" + ], + "name": "RequirementBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "SubjectMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "SubjectMember : SubjectMembership =", + " MemberPrefix ownedRelatedElement += SubjectUsage" + ], + "name": "SubjectMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "SubjectUsage : ReferenceUsage =", + " 'subject' UsageExtensionKeyword* Usage" + ], + "name": "SubjectUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementConstraintMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementConstraintMember : RequirementConstraintMembership =", + " MemberPrefix? RequirementKind", + " ownedRelatedElement += RequirementConstraintUsage" + ], + "name": "RequirementConstraintMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementConstraintMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementKind : RequirementConstraintMembership =", + " 'assume' { kind = 'assumption' }", + " | 'require' { kind = 'requirement' }" + ], + "name": "RequirementKind" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConstraintUsage", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "RequirementConstraintUsage : ConstraintUsage =", + " ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart? RequirementBody", + " | ( UsageExtensionKeyword* 'constraint'", + " | UsageExtensionKeyword+ )", + " ConstraintUsageDeclaration CalculationBody" + ], + "name": "RequirementConstraintUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "FramedConcernMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "FramedConcernMember : FramedConcernMembership =", + " MemberPrefix? 'frame'", + " ownedRelatedElement += FramedConcernUsage" + ], + "name": "FramedConcernMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConcernUsage", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "FramedConcernUsage : ConcernUsage =", + " ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart? CalculationBody", + " | ( UsageExtensionKeyword* 'concern'", + " | UsageExtensionKeyword+ )", + " CalculationUsageDeclaration CalculationBody" + ], + "name": "FramedConcernUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ActorMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "ActorMember : ActorMembership =", + " MemberPrefix ownedRelatedElement += ActorUsage" + ], + "name": "ActorMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "PartUsage", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "ActorUsage : PartUsage =", + " 'actor' UsageExtensionKeyword* Usage" + ], + "name": "ActorUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "StakeholderMembership", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "StakeholderMember : StakeholderMembership =", + " MemberPrefix ownedRelatedElement += StakeholderUsage" + ], + "name": "StakeholderMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "PartUsage", + "clause_id": "8.2.2.21.1", + "is_partial": false, + "lines": [ + "StakeholderUsage : PartUsage =", + " 'stakeholder' UsageExtensionKeyword* Usage" + ], + "name": "StakeholderUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.21.2", + "lines": [ + "Clause 8.2.2.21.2 Requirement Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementUsage", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "RequirementUsage =", + " OccurrenceUsagePrefix 'requirement'", + " ConstraintUsageDeclaration RequirementBody" + ], + "name": "RequirementUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "SatisfyRequirementUsage", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "SatisfyRequirementUsage =", + " OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' ) 'satisfy'", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'requirement' UsageDeclaration )", + " ValuePart?", + " ( 'by' ownedRelationship += SatisfactionSubjectMember )?", + " RequirementBody" + ], + "name": "SatisfyRequirementUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "SubjectMembership", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "SatisfactionSubjectMember : SubjectMembership =", + " ownedRelatedElement += SatisfactionParameter" + ], + "name": "SatisfactionSubjectMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "SatisfactionParameter : ReferenceUsage =", + " ownedRelationship += SatisfactionFeatureValue" + ], + "name": "SatisfactionParameter" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureValue", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "SatisfactionFeatureValue : FeatureValue =", + " ownedRelatedElement += SatisfactionReferenceExpression" + ], + "name": "SatisfactionFeatureValue" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureReferenceExpression", + "clause_id": "8.2.2.21.2", + "is_partial": false, + "lines": [ + "SatisfactionReferenceExpression : FeatureReferenceExpression =", + " ownedRelationship += FeatureChainMember" + ], + "name": "SatisfactionReferenceExpression" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.21.3", + "lines": [ + "Clause 8.2.2.21.3 Concerns" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ConcernDefinition", + "clause_id": "8.2.2.21.3", + "is_partial": false, + "lines": [ + "ConcernDefinition =", + " OccurrenceDefinitionPrefix 'concern' 'def'", + " DefinitionDeclaration RequirementBody" + ], + "name": "ConcernDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ConcernUsage", + "clause_id": "8.2.2.21.3", + "is_partial": false, + "lines": [ + "ConcernUsage =", + " OccurrenceUsagePrefix 'concern'", + " ConstraintUsageDeclaration RequirementBody" + ], + "name": "ConcernUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.22", + "lines": [ + "Clause 8.2.2.22 Cases Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "CaseDefinition", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "CaseDefinition =", + " OccurrenceDefinitionPrefix 'case' 'def'", + " DefinitionDeclaration CaseBody" + ], + "name": "CaseDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "CaseUsage", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "CaseUsage =", + " OccurrenceUsagePrefix 'case'", + " ConstraintUsageDeclaration CaseBody" + ], + "name": "CaseUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "CaseBody : Type =", + " ';'", + " | '{' CaseBodyItem*", + " ( ownedRelationship += ResultExpressionMember )?", + " '}'" + ], + "name": "CaseBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "CaseBodyItem : Type =", + " ActionBodyItem", + " | ownedRelationship += SubjectMember", + " | ownedRelationship += ActorMember", + " | ownedRelationship += ObjectiveMember" + ], + "name": "CaseBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "ObjectiveMembership", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "ObjectiveMember : ObjectiveMembership =", + " MemberPrefix 'objective'", + " ownedRelatedElement += ObjectiveRequirementUsage" + ], + "name": "ObjectiveMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementUsage", + "clause_id": "8.2.2.22", + "is_partial": false, + "lines": [ + "ObjectiveRequirementUsage : RequirementUsage =", + " UsageExtensionKeyword* ConstraintUsageDeclaration", + " RequirementBody" + ], + "name": "ObjectiveRequirementUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.23", + "lines": [ + "Clause 8.2.2.23 Analysis Cases Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "AnalysisCaseDefinition", + "clause_id": "8.2.2.23", + "is_partial": false, + "lines": [ + "AnalysisCaseDefinition =", + " OccurrenceDefinitionPrefix 'analysis' 'def'", + " DefinitionDeclaration CaseBody" + ], + "name": "AnalysisCaseDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "AnalysisCaseUsage", + "clause_id": "8.2.2.23", + "is_partial": false, + "lines": [ + "AnalysisCaseUsage =", + " OccurrenceUsagePrefix 'analysis'", + " ConstraintUsageDeclaration CaseBody" + ], + "name": "AnalysisCaseUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.24", + "lines": [ + "Clause 8.2.2.24 Verification Cases Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "VerificationCaseDefinition", + "clause_id": "8.2.2.24", + "is_partial": false, + "lines": [ + "VerificationCaseDefinition =", + " OccurrenceDefinitionPrefix 'verification' 'def'", + " DefinitionDeclaration CaseBody" + ], + "name": "VerificationCaseDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "VerificationCaseUsage", + "clause_id": "8.2.2.24", + "is_partial": false, + "lines": [ + "VerificationCaseUsage =", + " OccurrenceUsagePrefix 'verification'", + " ConstraintUsageDeclaration CaseBody" + ], + "name": "VerificationCaseUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementVerificationMembership", + "clause_id": "8.2.2.24", + "is_partial": false, + "lines": [ + "RequirementVerificationMember : RequirementVerificationMembership =", + " MemberPrefix 'verify' { kind = 'requirement' }", + " ownedRelatedElement += RequirementVerificationUsage" + ], + "name": "RequirementVerificationMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "RequirementUsage", + "clause_id": "8.2.2.24", + "is_partial": false, + "lines": [ + "RequirementVerificationUsage : RequirementUsage =", + " ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecialization* RequirementBody", + " | ( UsageExtensionKeyword* 'requirement'", + " | UsageExtensionKeyword+ )", + " ConstraintUsageDeclaration RequirementBody" + ], + "name": "RequirementVerificationUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.25", + "lines": [ + "Clause 8.2.2.25 Use Cases Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "UseCaseDefinition", + "clause_id": "8.2.2.25", + "is_partial": false, + "lines": [ + "UseCaseDefinition =", + " OccurrenceDefinitionPrefix 'use' 'case' 'def'", + " DefinitionDeclaration CaseBody" + ], + "name": "UseCaseDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "UseCaseUsage", + "clause_id": "8.2.2.25", + "is_partial": false, + "lines": [ + "UseCaseUsage =", + " OccurrenceUsagePrefix 'use' 'case'", + " ConstraintUsageDeclaration CaseBody" + ], + "name": "UseCaseUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "", + "clause_id": "8.2.2.25", + "is_partial": false, + "lines": [ + "IncludeUseCaseUsage :", + " OccurrenceUsagePrefix 'include'", + " ( ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " | 'use' 'case' UsageDeclaration )", + " ValuePart?", + " CaseBody" + ], + "name": "IncludeUseCaseUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.26", + "lines": [ + "Clause 8.2.2.26 Views and Viewpoints Textual Notation" + ] + }, + { + "@type": "Heading", + "clause_id": "8.2.2.26.1", + "lines": [ + "Clause 8.2.2.26.1 View Definitions" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewDefinition", + "clause_id": "8.2.2.26.1", + "is_partial": false, + "lines": [ + "ViewDefinition =", + " OccurrenceDefinitionPrefix 'view' 'def'", + " DefinitionDeclaration ViewDefinitionBody" + ], + "name": "ViewDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewDefinition", + "clause_id": "8.2.2.26.1", + "is_partial": false, + "lines": [ + "ViewDefinitionBody : ViewDefinition =", + " ';' | '{' ViewDefinitionBodyItem* '}'" + ], + "name": "ViewDefinitionBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewDefinition", + "clause_id": "8.2.2.26.1", + "is_partial": false, + "lines": [ + "ViewDefinitionBodyItem : ViewDefinition =", + " DefinitionBodyItem", + " | ownedRelationship += ElementFilterMember", + " | ownedRelationship += ViewRenderingMember" + ], + "name": "ViewDefinitionBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewRenderingMembership", + "clause_id": "8.2.2.26.1", + "is_partial": false, + "lines": [ + "ViewRenderingMember : ViewRenderingMembership =", + " MemberPrefix 'render'", + " ownedRelatedElement += ViewRenderingUsage" + ], + "name": "ViewRenderingMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "RenderingUsage", + "clause_id": "8.2.2.26.1", + "is_partial": false, + "lines": [ + "ViewRenderingUsage : RenderingUsage =", + " ownedRelationship += OwnedReferenceSubsetting", + " FeatureSpecializationPart?", + " UsageBody", + " | ( UsageExtensionKeyword* 'rendering'", + " | UsageExtensionKeyword+ )", + " Usage" + ], + "name": "ViewRenderingUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.26.2", + "lines": [ + "Clause 8.2.2.26.2 View Usages" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewUsage", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "ViewUsage =", + " OccurrenceUsagePrefix 'view'", + " UsageDeclaration? ValuePart?", + " ViewBody" + ], + "name": "ViewUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewUsage", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "ViewBody : ViewUsage =", + " ';' | '{' ViewBodyItem* '}'" + ], + "name": "ViewBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewUsage", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "ViewBodyItem : ViewUsage =", + " DefinitionBodyItem", + " | ownedRelationship += ElementFilterMember", + " | ownedRelationship += ViewRenderingMember", + " | ownedRelationship += Expose" + ], + "name": "ViewBodyItem" + }, + { + "@type": "Production", + "abstract_syntax_type": "Expose", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "Expose =", + " 'expose' ( MembershipExpose | NamespaceExpose )", + " RelationshipBody" + ], + "name": "Expose" + }, + { + "@type": "Production", + "abstract_syntax_type": "MembershipExpose", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "MembershipExpose =", + " MembershipImport" + ], + "name": "MembershipExpose" + }, + { + "@type": "Production", + "abstract_syntax_type": "NamespaceExpose", + "clause_id": "8.2.2.26.2", + "is_partial": false, + "lines": [ + "NamespaceExpose =", + " NamespaceImport" + ], + "name": "NamespaceExpose" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.26.3", + "lines": [ + "Clause 8.2.2.26.3 Viewpoints" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewpointDefinition", + "clause_id": "8.2.2.26.3", + "is_partial": false, + "lines": [ + "ViewpointDefinition =", + " OccurrenceDefinitionPrefix 'viewpoint' 'def'", + " DefinitionDeclaration RequirementBody" + ], + "name": "ViewpointDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "ViewpointUsage", + "clause_id": "8.2.2.26.3", + "is_partial": false, + "lines": [ + "ViewpointUsage =", + " OccurrenceUsagePrefix 'viewpoint'", + " ConstraintUsageDeclaration RequirementBody" + ], + "name": "ViewpointUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.26.4", + "lines": [ + "Clause 8.2.2.26.4 Renderings" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "RenderingDefinition", + "clause_id": "8.2.2.26.4", + "is_partial": false, + "lines": [ + "RenderingDefinition =", + " OccurrenceDefinitionPrefix 'rendering' 'def'", + " Definition" + ], + "name": "RenderingDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "RenderingUsage", + "clause_id": "8.2.2.26.4", + "is_partial": false, + "lines": [ + "RenderingUsage =", + " OccurrenceUsagePrefix 'rendering'", + " Usage" + ], + "name": "RenderingUsage" + }, + { + "@type": "Heading", + "clause_id": "8.2.2.27", + "lines": [ + "Clause 8.2.2.27 Metadata Textual Notation" + ] + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataDefinition", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataDefinition =", + " ( isAbstract ?= 'abstract')? DefinitionExtensionKeyWord*", + " 'metadata' 'def' Definition" + ], + "name": "MetadataDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Annotation", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "PrefixMetadataAnnotation : Annotation =", + " '#' annotatingElement = PrefixMetadataUsage", + " { ownedRelatedElement += annotatingElement }" + ], + "name": "PrefixMetadataAnnotation" + }, + { + "@type": "Production", + "abstract_syntax_type": "OwningMembership", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "PrefixMetadataMember : OwningMembership =", + " '#' ownedRelatedEleemnt = PrefixMetadataUsage" + ], + "name": "PrefixMetadataMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataUsage", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "PrefixMetadataUsage : MetadataUsage =", + " ownedRelationship += OwnedFeatureTyping" + ], + "name": "PrefixMetadataUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataUsage", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataUsage =", + " UsageExtensionKeyword* ( '@' | 'metadata' )", + " MetadataUsageDeclaration", + " ( 'about' ownedRelationship += Annotation", + " ( ',' ownedRelationship += Annotation )*", + " )?", + " MetadataBody" + ], + "name": "MetadataUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "MetadataUsage", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataUsageDeclaration : MetadataUsage =", + " ( Identification ( ':' | 'typed' 'by' ) )?", + " ownedRelationship += OwnedFeatureTyping" + ], + "name": "MetadataUsageDeclaration" + }, + { + "@type": "Production", + "abstract_syntax_type": "Type", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataBody : Type =", + " ';' |", + " '{' ( ownedRelationship += DefinitionMember", + " | ownedRelationship += MetadataBodyUsageMember", + " | ownedRelationship += AliasMember", + " | ownedRelationship += Import", + " )*", + " '}'" + ], + "name": "MetadataBody" + }, + { + "@type": "Production", + "abstract_syntax_type": "FeatureMembership", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataBodyUsageMember : FeatureMembership =", + " ownedMemberFeature = MetadataBodyUsage" + ], + "name": "MetadataBodyUsageMember" + }, + { + "@type": "Production", + "abstract_syntax_type": "ReferenceUsage :", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "MetadataBodyUsage : ReferenceUsage :", + " 'ref'? ( ':>>' | 'redefines' )? ownedRelationship += OwnedRedefinition", + " FeatureSpecializationPart? ValuePart?", + " MetadataBody" + ], + "name": "MetadataBodyUsage" + }, + { + "@type": "Production", + "abstract_syntax_type": "Definition", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "ExtendedDefinition : Definition =", + " BasicDefinitionPrefix? DefinitionExtensionKeyword+", + " 'def' Definition" + ], + "name": "ExtendedDefinition" + }, + { + "@type": "Production", + "abstract_syntax_type": "Usage", + "clause_id": "8.2.2.27", + "is_partial": false, + "lines": [ + "ExtendedUsage : Usage =", + " UnextendedUsagePrefix UsageExtensionKeyword+", + " Usage" + ], + "name": "ExtendedUsage" + }, + { + "@type": "Comment", + "clause_id": "", + "lines": [ + "// End of BNF\n" + ] + } +] \ No newline at end of file diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-marked_up.kebnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-marked_up.kebnf new file mode 100644 index 000000000..85fdab30c --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf-marked_up.kebnf @@ -0,0 +1,1712 @@ +// Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html +// Generated by bnf_grammar_processor at: 2025-12-04T19:31:35Z + + +// Part 2 - Systems Modeling Language (SysML) + +// Clause 8.2.2 Textual Notation + +// Clause 8.2.2.1 Textual Notation Overview + +// Clause 8.2.2.1.1 EBNF Conventions + +// Clause 8.2.2.1.2 Lexical Structure + +RESERVED_KEYWORD = + 'about' | 'abstract' | 'accept' | 'action' | 'actor' | 'after' | 'alias' | 'all' | 'allocate' | 'allocation' + | 'analysis' | 'and' | 'as' | 'assert' | 'assign' | 'assume' | 'at' | 'attribute' | 'bind' | 'binding' | 'by' | 'calc' + | 'case' | 'comment' | 'concern' | 'connect' | 'connection' | 'constant' | 'constraint' | 'crosses' | 'decide' + | 'def' | 'default' | 'defined' | 'dependency' | 'derived' | 'do' | 'doc' | 'else' | 'end' | 'entry' | 'enum' + | 'event' | 'exhibit' | 'exit' | 'expose' | 'false' | 'filter' | 'first' | 'flow' | 'for' | 'fork' | 'frame' | 'from' + | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'include' | 'individual' | 'inout' | 'interface' | 'istype' + | 'item' | 'join' | 'language' | 'library' | 'locale' | 'loop' | 'merge' | 'message' | 'meta' | 'metadata' + | 'nonunique' | 'not' | 'null' | 'objective' | 'occurrence' | 'of' | 'or' | 'ordered' | 'out' | 'package' | 'parallel' + | 'part' | 'perform' | 'port' | 'private' | 'protected' | 'public' | 'redefines' | 'ref' | 'references' | 'render' + | 'rendering' | 'rep' | 'require' | 'requirement' | 'return' | 'satisfy' | 'send' | 'snapshot' | 'specializes' + | 'stakeholder' | 'standard' | 'state' | 'subject' | 'subsets' | 'succession' | 'terminate' | 'then' | 'timeslice' + | 'to' | 'transition' | 'true' | 'until' | 'use' | 'variant' | 'variation' | 'verification' | 'verify' | 'via' + | 'view' | 'viewpoint' | 'when' | 'while' | 'xor' + +DEFINED_BY = ':' | 'defined' 'by' + +SPECIALIZES = ':>' | 'specializes' + +SUBSETS = ':>' | 'subsets' + +REFERENCES = '::>' | 'references' + +CROSSES = '=>' | 'crosses' + +REDEFINES = ':>>' | 'redefines' + +// Clause 8.2.2.2 Elements and Relationships Textual Notation + +Identification : Element = + ( '<' declaredShortName = NAME '>' )? + ( declaredName = NAME )? + +RelationshipBody : Relationship = + ';' | '{' ( ownedRelationship += OwnedAnnotation )* '}' + +// Clause 8.2.2.3 Dependencies Textual Notation + +Dependency = + ( ownedRelationship += PrefixMetadataAnnotation )* + 'dependency' DependencyDeclaration + RelationshipBody + +DependencyDeclaration = + ( Identification 'from' )? + client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to' + supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )* + +// Clause 8.2.2.4 Annotations Textual Notation + +// Clause 8.2.2.4.1 Annotations + +Annotation = + annotatedElement = [QualifiedName] + +OwnedAnnotation : Annotation = + ownedRelatedElement += AnnotatingElement + +AnnotatingMember : OwningMembership = + ownedRelatedElement += AnnotatingElement + +AnnotatingElement = + Comment + | Documentation + | TextualRepresentation + | MetadataFeature + +// Clause 8.2.2.4.2 Comments and Documentation + +Comment = + ( 'comment' Identification + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + )? + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +Documentation = + 'doc' Identification + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +// Clause 8.2.2.4.3 Textual Representation + +TextualRepresentation = + ( 'rep' Identification )? + 'language' language = STRING_VALUE body = REGULAR_COMMENT + +// Clause 8.2.2.5 Namespaces and Packages Textual Notation + +// Clause 8.2.2.5.1 Packages + +RootNamespace : Namespace = + PackageBodyElement* + +Package = + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +LibraryPackage = + ( isStandard ?= 'standard' ) 'library' + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +PackageDeclaration : Package = + 'package' Identification + +PackageBody : Package = + ';' | '{' PackageBodyElement* '}' + +PackageBodyElement : Package = + ownedRelationship += PackageMember + | ownedRelationship += ElementFilterMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +MemberPrefix : Membership = + ( visibility = VisibilityIndicator )? + +PackageMember : OwningMembership + MemberPrefix + ( ownedRelatedElement += DefinitionElement + | ownedRelatedElement = UsageElement ) + +ElementFilterMember : ElementFilterMembership = + MemberPrefix + 'filter' ownedRelatedElement += OwnedExpression ';' + +AliasMember : Membership = + MemberPrefix + 'alias' ( '<' memberShortName = NAME '>' )? + ( memberName = NAME )? + 'for' memberElement = [QualifiedName] + RelationshipBody + +Import = + visibility = VisibilityIndicator + 'import' ( isImportAll ?= 'all' )? + ImportDeclaration + RelationshipBody + +ImportDeclaration : Import = + MembershipImport | NamespaceImport + +MembershipImport = + importedMembership = [QualifiedName] + ( '::' isRecursive ?= '**' )? + +NamespaceImport = + importedNamespace = [QualifiedName] '::' '*' + ( '::' isRecursive ?= '**' )? + | importedNamspace = FilterPackage + { ownedRelatedElement += importedNamespace } + +FilterPackage : Package = + ownedRelationship += FilterPackageImport + ( ownedRelationship += FilterPackageMember )+ + +FilterPackageMember : ElementFilterMembership = + '[' ownedRelatedElement += OwnedExpression ']' + +VisibilityIndicator : VisibilityKind = + 'public' | 'private' | 'protected' + +// Clause 8.2.2.5.2 Package Elements + +DefinitionElement : Element = + Package + | LibraryPackage + | AnnotatingElement + | Dependency + | AttributeDefinition + | EnumerationDefinition + | OccurrenceDefinition + | IndividualDefinition + | ItemDefinition + | PartDefinition + | ConnectionDefinition + | FlowDefinition + | InterfaceDefinition + | PortDefinition + | ActionDefinition + | CalculationDefinition + | StateDefinition + | ConstraintDefinition + | RequirementDefinition + | ConcernDefinition + | CaseDefinition + | AnalysisCaseDefinition + | VerificationCaseDefinition + | UseCaseDefinition + | ViewDefinition + | ViewpointDefinition + | RenderingDefinition + | MetadataDefinition + | ExtendedDefinition + +UsageElement : Usage = + NonOccurrenceUsageElement + | OccurrenceUsageElement + +// Clause 8.2.2.6 Definition and Usage Textual Notation + +// Clause 8.2.2.6.1 Definitions + +BasicDefinitionPrefix = + isAbstract ?= 'abstract' | isVariation ?= 'variation' + +DefinitionExtensionKeyword : Definition = + ownedRelationship += PrefixMetadataMember + +DefinitionPrefix : Definition = + BasicDefinitionPrefix? DefinitionExtensionKeyword* + +Definition = + DefinitionDeclaration DefinitionBody + +DefinitionDeclaration : Definition + Identification SubclassificationPart? + +DefinitionBody : Type = + ';' | '{' DefinitionBodyItem* '}' + +DefinitionBodyItem : Type = + ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += NonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += OccurrenceUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +DefinitionMember : OwningMembership = + MemberPrefix + ownedRelatedElement += DefinitionElement + +VariantUsageMember : VariantMembership = + MemberPrefix 'variant' + ownedVariantUsage = VariantUsageElement + +NonOccurrenceUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += NonOccurrenceUsageElement + +OccurrenceUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += OccurrenceUsageElement + +StructureUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += StructureUsageElement + +BehaviorUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += BehaviorUsageElement + +// Clause 8.2.2.6.2 Usages + +FeatureDirection : FeatureDirectionKind = + 'in' | 'out' | 'inout' + +RefPrefix : Usage = + ( direction = FeatureDirection )? + ( isDerived ?= 'derived' )? + ( isAbstract ?= 'abstract' | isVariation ?= 'variation' )? + ( isConstant ?= 'constant' )? + +BasicUsagePrefix : Usage = + RefPrefix + ( isReference ?= 'ref' )? + +EndUsagePrefix : Usage = + isEnd ?= 'end' ( ownedRelationship += OwnedCrossFeatureMember )? + +// (See Note 1) + +OwnedCrossFeatureMember : OwningMembership = + ownedRelatedElement += OwnedCrossFeature + +OwnedCrossFeature : ReferenceUsage = + BasicUsagePrefix UsageDeclaration + +UsageExtensionKeyword : Usage = + ownedRelationship += PrefixMetadataMember + +UnextendedUsagePrefix : Usage = + EndUsagePrefix | BasicUsagePrefix + +UsagePrefix : Usage + UnextendedUsagePrefix UsageExtensionKeyword* + +Usage = + UsageDeclaration UsageCompletion + +UsageDeclaration : Usage = + Identification FeatureSpecializationPart? + +UsageCompletion : Usage = + ValuePart? UsageBody + +UsageBody : Usage = + DefinitionBody + +ValuePart : Feature = + ownedRelationship += FeatureValue + +FeatureValue = + ( '=' + | isInitial ?= ':=' + | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )? + ) + ownedRelatedElement += OwnedExpression + +// Notes: +//
          +//
        1. A Usage parsed with isEnd = true for which mayTimeVary = true must also have isConstant set to true, even though this is not explicitly notated in the textual notation, in order to satisfy the KerML constraint checkFeatureEndIsConstant.
        + +// Clause 8.2.2.6.3 Reference Usages + +DefaultReferenceUsage : ReferenceUsage = + RefPrefix Usage + +ReferenceUsage = + ( EndUsagePrefix | RefPrefix ) + 'ref' Usage + +VariantReference : ReferenceUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecialization* UsageBody + +// Clause 8.2.2.6.4 Body Elements + +NonOccurrenceUsageElement : Usage = + DefaultReferenceUsage + | ReferenceUsage + | AttributeUsage + | EnumerationUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + | ExtendedUsage + +OccurrenceUsageElement : Usage = + StructureUsageElement | BehaviorUsageElement + +StructureUsageElement : Usage = + OccurrenceUsage + | IndividualUsage + | PortionUsage + | EventOccurrenceUsage + | ItemUsage + | PartUsage + | ViewUsage + | RenderingUsage + | PortUsage + | ConnectionUsage + | InterfaceUsage + | AllocationUsage + | Message + | FlowUsage + | SuccessionFlowUsage + +BehaviorUsageElement : Usage = + ActionUsage + | CalculationUsage + | StateUsage + | ConstraintUsage + | RequirementUsage + | ConcernUsage + | CaseUsage + | AnalysisCaseUsage + | VerificationCaseUsage + | UseCaseUsage + | ViewpointUsage + | PerformActionUsage + | ExhibitStateUsage + | IncludeUseCaseUsage + | AssertConstraintUsage + | SatisfyRequirementUsage + +VariantUsageElement : Usage = + VariantReference + | ReferenceUsage + | AttributeUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + | OccurrenceUsage + | IndividualUsage + | PortionUsage + | EventOccurrenceUsage + | ItemUsage + | PartUsage + | ViewUsage + | RenderingUsage + | PortUsage + | ConnectionUsage + | InterfaceUsage + | AllocationUsage + | Message + | FlowUsage + | SuccessionFlowUsage + | BehaviorUsageElement + +// Clause 8.2.2.6.5 Specialization + +SubclassificationPart : Classifier = + SPECIALIZES ownedRelationship += OwnedSubclassification + ( ',' ownedRelationship += OwnedSubclassification )* + +OwnedSubclassification : Subclassification = + superClassifier = [QualifiedName] + +FeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? FeatureSpecialization* + | MultiplicityPart FeatureSpecialization* + +FeatureSpecialization : Feature = + Typings | Subsettings | References | Crosses | Redefinitions + +Typings : Feature = + TypedBy ( ',' ownedRelationship += FeatureTyping )* + +TypedBy : Feature = + DEFINED_BY ownedRelationship += FeatureTyping + +FeatureTyping = + OwnedFeatureTyping | ConjugatedPortTyping + +OwnedFeatureTyping : FeatureTyping = + type = [QualifiedName] + | type = OwnedFeatureChain + { ownedRelatedElement += type } + +Subsettings : Feature = + Subsets ( ',' ownedRelationship += OwnedSubsetting )* + +Subsets : Feature = + SUBSETS ownedRelationship += OwnedSubsetting + +OwnedSubsetting : Subsetting = + subsettedFeature = [QualifiedName] + | subsettedFeature = OwnedFeatureChain + { ownedRelatedElement += subsettedFeature } + +References : Feature = + REFERENCES ownedRelationship += OwnedReferenceSubsetting + +OwnedReferenceSubsetting : ReferenceSubsetting = + referencedFeature = [QualifiedName] + | referencedFeature = OwnedFeatureChain + { ownedRelatedElement += referenceFeature } + +Crosses : Feature = + CROSSES ownedRelationship += OwnedCrossSubsetting + +OwnedCrossSubsetting : CrossSubsetting = + crossedFeature = [QualifiedName] + | crossedFeature = OwnedFeatureChain + { ownedRelatedElement += crossedFeature } + +Redefinitions : Feature = + Redefines ( ',' ownedRelationship += OwnedRedefinition )* + +Redefines : Feature = + REDEFINES ownedRelationship += OwnedRedefinition + +OwnedRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + | redefinedFeature = OwnedFeatureChain + { ownedRelatedElement += redefinedFeature } + +OwnedFeatureChain : Feature = + ownedRelationship += OwnedFeatureChaining + ( '.' ownedRelationship += OwnedFeatureChaining )+ + +OwnedFeatureChaining : FeatureChaining = + chainingFeature = [QualifiedName] + +// Clause 8.2.2.6.6 Multiplicity + +MultiplicityPart : Feature = + ownedRelationship += OwnedMultiplicity + | ( ownedRelationship += OwnedMultiplicity )? + ( isOrdered ?= 'ordered' ( { isUnique = false } 'nonunique' )? + | { isUnique = false } 'nonunique' ( isOrdered ?= 'ordered' )? ) + +OwnedMultiplicity : OwningMembership = + ownedRelatedElement += MultiplicityRange + +MultiplicityRange = + '[' ( ownedRelationship += MultiplicityExpressionMember '..' )? + ownedRelationship += MultiplicityExpressionMember ']' + +MultiplicityExpressionMember : OwningMembership = + ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression ) + +// Clause 8.2.2.7 Attributes Textual Notation + +AttributeDefinition : AttributeDefinition = + DefinitionPrefix 'attribute' 'def' Definition + +AttributeUsage : AttributeUsage = + UsagePrefix 'attribute' Usage + +// Clause 8.2.2.8 Enumerations Textual Notation + +EnumerationDefinition = + DefinitionExtensionKeyword* + 'enum' 'def' DefinitionDeclaration EnumerationBody + +EnumerationBody : EnumerationDefinition = + ';' + | '{' ( ownedRelationship += AnnotatingMember + | ownedRelationship += EnumerationUsageMember )* + '}' + +EnumerationUsageMember : VariantMembership = + MemberPrefix ownedRelatedElement += EnumeratedValue + +EnumeratedValue : EnumerationUsage = + 'enum'? Usage + +EnumerationUsage : EnumerationUsage = + UsagePrefix 'enum' Usage + +// Clause 8.2.2.9 Occurrences Textual Notation + +// Clause 8.2.2.9.1 Occurrence Definitions + +OccurrenceDefinitionPrefix : OccurrenceDefinition = + BasicDefinitionPrefix? + ( isIndividual ?= 'individual' + ownedRelationship += EmptyMultiplicityMember + )? + DefinitionExtensionKeyword* + +OccurrenceDefinition = + OccurrenceDefinitionPrefix 'occurrence' 'def' Definition + +IndividualDefinition : OccurrenceDefinition = + BasicDefinitionPrefix? isIndividual ?= 'individual' + DefinitionExtensionKeyword* 'def' Definition + ownedRelationship += EmptyMultiplicityMember + +EmptyMultiplicityMember : OwningMembership = + ownedRelatedElement += EmptyMultiplicity + +EmptyMultiplicity : Multiplicity = + { } + +// Clause 8.2.2.9.2 Occurrence Usages + +OccurrenceUsagePrefix : OccurrenceUsage = + BasicUsagePrefix + ( isIndividual ?= 'individual' )? + ( portionKind = PortionKind + { isPortion = true } + )? + UsageExtensionKeyword* + +OccurrenceUsage = + OccurrenceUsagePrefix 'occurrence' Usage + +IndividualUsage : OccurrenceUsage = + BasicUsagePrefix isIndividual ?= 'individual' + UsageExtensionKeyword* Usage + +PortionUsage : OccurrenceUsage = + BasicUsagePrefix ( isIndividual ?= 'individual' )? + portionKind = PortionKind + UsageExtensionKeyword* Usage + { isPortion = true } + +PortionKind = + 'snapshot' | 'timeslice' + +EventOccurrenceUsage = + OccurrenceUsagePrefix 'event' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'occurrence' UsageDeclaration? ) + UsageCompletion + +// Clause 8.2.2.9.3 Occurrence Successions + +SourceSuccessionMember : FeatureMembership = + 'then' ownedRelatedElement += SourceSuccession + +SourceSuccession : SuccessionAsUsage = + ownedRelationship += SourceEndMember + +SourceEndMember : EndFeatureMembership = + ownedRelatedElement += SourceEnd + +SourceEnd : ReferenceUsage = + ( ownedRelationship += OwnedMultiplicity )? + +// Clause 8.2.2.10 Items Textual Notation + +ItemDefinition = + OccurrenceDefinitionPrefix + 'item' 'def' Definition + +ItemUsage = + OccurrenceUsagePrefix 'item' Usage + +// Clause 8.2.2.11 Parts Textual Notation + +PartDefinition = + OccurrenceDefinitionPrefix 'part' 'def' Definition + +PartUsage = + OccurrenceUsagePrefix 'part' Usage + +// Clause 8.2.2.12 Ports Textual Notation + +PortDefinition = + DefinitionPrefix 'port' 'def' Definition + ownedRelationship += ConjugatedPortDefinitionMember + { conjugatedPortDefinition.ownedPortConjugator. + originalPortDefinition = this } + +// (See Note 1) + +ConjugatedPortDefinitionMember : OwningMembership = + ownedRelatedElement += ConjugatedPortDefinition + +ConjugatedPortDefinition = + ownedRelationship += PortConjugation + +PortConjugation = + {} + +PortUsage = + OccurrenceUsagePrefix 'port' Usage + +ConjugatedPortTyping : ConjugatedPortTyping = + '~' originalPortDefinition = ~[QualifiedName] + +// (See Note 2) + +// Notes: +//
          +//
        1. Even though it is not explicitly represented in the text, a PortDefinition is always parsed as containing a nested ConjugatedPortDefinition with a PortDefinition Relationship pointing back to the containing PortDefinition. The abstract syntax for ConjugatedPortDefinition sets its effectiveName to the name of its originalPortDefinition with the symbol ~ prepended to it (see 8.3.12.2). (See also 8.4.8.1.)
        2. +//
        3. The notation ~[QualifiedName] indicates that a QualifiedName shall be parsed from the input text, but that it shall be resolved as if it was the qualified name constructed as follows: +//
            +//
          • Extract the last segment name of the given QualifiedName and prepend the symbol ~ to it.
          • +//
          • Append the name so constructed to the end of the entire original QualifiedName.
          For example, if the ConjugatedPortTyping is ~A::B::C, then the given QualifiedName is A::B::C, and ~[QualifiedName] is resolved as A::B::C::'~C'. Alternatively, a conforming tool may first resolve the given QualifiedName as usual to a PortDefinition and then use the conjugatedPortDefinition of this PortDefinition as the resolution of ~[QualifiedName].
        + +// Clause 8.2.2.13 Connections Textual Notation + +// Clause 8.2.2.13.1 Connection Definition and Usage + +ConnectionDefinition = + OccurrenceDefinitionPrefix 'connection' 'def' Definition + +ConnectionUsage = + OccurrenceUsagePrefix + ( 'connection' UsageDeclaration ValuePart? + ( 'connect' ConnectorPart )? + | 'connect' ConnectorPart ) + UsageBody + +ConnectorPart : ConnectionUsage = + BinaryConnectorPart | NaryConnectorPart + +BinaryConnectorPart : ConnectionUsage = + ownedRelationship += ConnectorEndMember 'to' + ownedRelationship += ConnectorEndMember + +NaryConnectorPart : ConnectionUsage = + '(' ownedRelationship += ConnectorEndMember ',' + ownedRelationship += ConnectorEndMember + ( ',' ownedRelationship += ConnectorEndMember )* ')' + +ConnectorEndMember : EndFeatureMembership : + ownedRelatedElement += ConnectorEnd + +ConnectorEnd : ReferenceUsage = + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +OwnedCrossMultiplicityMember : OwningMembership = + ownedRelatedElement += OwnedCrossMultiplicity + +OwnedCrossMultiplicity : Feature = + ownedRelationship += OwnedMultiplicity + +// Clause 8.2.2.13.2 Binding Connectors + +BindingConnectorAsUsage = + UsagePrefix ( 'binding' UsageDeclaration )? + 'bind' ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember + UsageBody + +// Clause 8.2.2.13.3 Successions + +SuccessionAsUsage = + UsagePrefix ( 'succession' UsageDeclaration )? + 'first' s.ownedRelationship += ConnectorEndMember + 'then' s.ownedRelationship += ConnectorEndMember + UsageBody + +// Clause 8.2.2.14 Interfaces Textual Notation + +// Clause 8.2.2.14.1 Interface Definitions + +InterfaceDefinition = + OccurrenceDefinitionPrefix 'interface' 'def' + DefinitionDeclaration InterfaceBody + +InterfaceBody : Type = + ';' | '{' InterfaceBodyItem* '}' + +InterfaceBodyItem : Type = + ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += InterfaceNonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += InterfaceOccurrenceUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +InterfaceNonOccurrenceUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += InterfaceNonOccurrenceUsageElement + +InterfaceNonOccurrenceUsageElement : Usage = + ReferenceUsage + | AttributeUsage + | EnumerationUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + +InterfaceOccurrenceUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += InterfaceOccurrenceUsageElement + +InterfaceOccurrenceUsageElement : Usage = + DefaultInterfaceEnd | StructureUsageElement | BehaviorUsageElement + +DefaultInterfaceEnd : PortUsage = + isEnd ?= 'end' Usage + +// Clause 8.2.2.14.2 Interface Usages + +InterfaceUsage = + OccurrenceUsagePrefix 'interface' + InterfaceUsageDeclaration InterfaceBody + +InterfaceUsageDeclaration : InterfaceUsage = + UsageDeclaration ValuePart? + ( 'connect' InterfacePart )? + | InterfacePart + +InterfacePart : InterfaceUsage = + BinaryInterfacePart | NaryInterfacePart + +BinaryInterfacePart : InterfaceUsage = + ownedRelationship += InterfaceEndMember 'to' + ownedRelationship += InterfaceEndMember + +NaryInterfacePart : InterfaceUsage = + '(' ownedRelationship += InterfaceEndMember ',' + ownedRelationship += InterfaceEndMember + ( ',' ownedRelationship += InterfaceEndMember )* ')' + +InterfaceEndMember : EndFeatureMembership = + ownedRelatedElement += InterfaceEnd + +InterfaceEnd : PortUsage : + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +// Clause 8.2.2.15 Allocations Textual Notation + +AllocationDefinition = + OccurrenceDefinitionPrefix 'allocation' 'def' Definition + +AllocationUsage = + OccurrenceUsagePrefix + AllocationUsageDeclaration UsageBody + +AllocationUsageDeclaration : AllocationUsage = + 'allocation' UsageDeclaration + ( 'allocate' ConnectorPart )? + | 'allocate' ConnectorPart + +// Clause 8.2.2.16 Flows Textual Notation + +FlowDefinition : + OccurrenceDefinitionPrefix 'flow' 'def' Definition + +Message : FlowUsage = + OccurrenceUsagePrefix 'message' + MessageDeclaration DefinitionBody + { isAbstract = true } + +MessageDeclaration : FlowUsage = + UsageDeclaration ValuePart? + ( 'of' ownedRelationship += FlowPayloadFeatureMember )? + ( 'from' ownedRelationship += MessageEventMember + 'to' ownedRelationship += MessageEventMember + )? + | ownedRelationship += MessageEventMember 'to' + ownedRelationship += MessageEventMember + +MessageEventMember : ParameterMembership = + ownedRelatedElement += MessageEvent + +MessageEvent : EventOccurrenceUsage = + ownedRelationship += OwnedReferenceSubsetting + +FlowUsage = + OccurrenceUsagePrefix 'flow' + FlowDeclaration DefinitionBody + +SuccessionFlowUsage = + OccurrenceUsagePrefix 'succession' 'flow' + FlowDeclaration DefinitionBody + +FlowDeclaration : FlowUsage = + UsageDeclaration ValuePart? + ( 'of' ownedRelationship += FlowPayloadFeatureMember )? + ( 'from' ownedRelationship += FlowEndMember + 'to' ownedRelationship += FlowEndMember )? + | ownedRelationship += FlowEndMember 'to' + ownedRelationship += FlowEndMember + +FlowPayloadFeatureMember : FeatureMembership = + ownedRelatedElement += FlowPayloadFeature + +FlowPayloadFeature : PayloadFeature = + PayloadFeature + +PayloadFeature : Feature = + Identification? PayloadFeatureSpecializationPart + ValuePart? + | ownedRelationship += OwnedFeatureTyping + ( ownedRelationship += OwnedMultiplicity )? + | ownedRelationship += OwnedMultiplicity + ownedRelationship += OwnedFeatureTyping + +PayloadFeatureSpecializationPart : Feature = + ( -> FeatureSpecialization )+ MultiplicityPart? + FeatureSpecialization* + | MultiplicityPart FeatureSpecialization+ + +FlowEndMember : EndFeatureMembership = + ownedRelatedElement += FlowEnd + +FlowEnd = + ( ownedRelationship += FlowEndSubsetting )? + ownedRelationship += FlowFeatureMember + +FlowEndSubsetting : ReferenceSubsetting = + referencedFeature = [QualifiedName] + | referencedFeature = FeatureChainPrefix + { ownedRelatedElement += referencedFeature } + +FeatureChainPrefix : Feature = + ( ownedRelationship += OwnedFeatureChaining '.' )+ + ownedRelationship += OwnedFeatureChaining '.' + +FlowFeatureMember : FeatureMembership = + ownedRelatedElement += FlowFeature + +FlowFeature : ReferenceUsage = + ownedRelationship += FlowFeatureRedefinition + +// (See Note 1) + +FlowFeatureRefefinition : Redefinition = + redefinedFeature = [QualifiedName] + +// Notes: +//
          +//
        1. To ensure that a FlowFeature passes the validateRedefinitionDirectionConformance constraint (see [KerML, 8.3.3.3.8]), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature) +//
        + +// Clause 8.2.2.17 Actions Textual Notation + +// Clause 8.2.2.17.1 Action Definitions + +ActionDefinition = + OccurrenceDefinitionPrefix 'action' 'def' + DefinitionDeclaration ActionBody + +ActionBody : Type = + ';' | '{' ActionBodyItem* '}' + +ActionBodyItem : Type = + NonBehaviorBodyItem + | ownedRelationship += InitialNodeMember + ( ownedRelationship += ActionTargetSuccessionMember )* + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationsuip += ActionBehaviorMember + ( ownedRelationship += ActionTargetSuccessionMember )* + | ownedRelationship += GuardedSuccessionMember + +NonBehaviorBodyItem = + ownedRelationship += Import + | ownedRelationship += AliasMember + | ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += NonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += StructureUsageMember + +ActionBehaviorMember : FeatureMembership = + BehaviorUsageMember | ActionNodeMember + +InitialNodeMember : FeatureMembership = + MemberPrefix 'first' memberFeature = [QualifiedName] + RelationshipBody + +ActionNodeMember : FeatureMembership = + MemberPrefix ownedRelatedElement += ActionNode + +ActionTargetSuccessionMember : FeatureMembership = + MemberPrefix ownedRelatedElement += ActionTargetSuccession + +GuardedSuccessionMember : FeatureMembership = + MemberPrefix ownedRelatedElement += GuardedSuccession + +// Clause 8.2.2.17.2 Action Usages + +ActionUsage = + OccurrenceUsagePrefix 'action' + ActionUsageDeclaration ActionBody + +ActionUsageDeclaration : ActionUsage = + UsageDeclaration ValuePart? + +PerformActionUsage = + OccurrenceUsagePrefix 'perform' + PerformActionUsageDeclaration ActionBody + +PerformActionUsageDeclaration : PerformActionUsage = + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'action' UsageDeclaration ) + ValuePart? + +ActionNode : ActionUsage = + ControlNode + | SendNode | AcceptNode + | AssignmentNode + | TerminateNode + | IfNode | WhileLoopNode | ForLoopNode + +ActionNodeUsageDeclaration : ActionUsage = + 'action' UsageDeclaration? + +ActionNodePrefix : ActionUsage = + OccurrenceUsagePrefix ActionNodeUsageDeclaration? + +// Clause 8.2.2.17.3 Control Nodes + +ControlNode = + MergeNode | DecisionNode | JoinNode| ForkNode + +ControlNodePrefix : OccurrenceUsage = + RefPrefix + ( isIndividual ?= 'individual )? + ( portionKind = PortionKind + { isPortion = true } + )? + UsageExtensionKeyword* + +MergeNode = + ControlNodePrefix + isComposite ?= 'merge' UsageDeclaration + ActionBody + +DecisionNode = + ControlNodePrefix + isComposite ?= 'decide' UsageDeclaration + ActionBody + +JoinNode = + ControlNodePrefix + isComposite ?= 'join' UsageDeclaration + ActionBody + +ForkNode = + ControlNodePrefix + isComposite ?= 'fork' UsageDeclaration + ActionBody + +// Clause 8.2.2.17.4 Send and Accept Action Usages + +AcceptNode : AcceptActionUsage = + OccurrenceUsagePrefix + AcceptNodeDeclaration ActionBody + +AcceptNodeDeclaration : AcceptActionUsage = + ActionNodeUsageDeclaration? + 'accept' AcceptParameterPart + +AcceptParameterPart : AcceptActionUsage = + ownedRelationship += PayloadParameterMember + ( 'via' ownedRelationship += NodeParameterMember )? + +PayloadParameterMember : ParameterMembership = + ownedRelatedElement += PayloadParameter + +PayloadParameter : ReferenceUsage = + PayloadFeature + | Identification PayloadFeatureSpecializationPart? + TriggerValuePart + +TriggerValuePart : Feature = + ownedRelationship += TriggerFeatureValue + +TriggerFeatureValue : FeatureValue = + ownedRelatedElement += TriggerExpression + +TriggerExpression : TriggerInvocationExpression = + kind = ( 'at | 'after' ) + ownedRelationship += ArgumentMember + | kind = 'when' + ownedRelationship += ArgumentExpressionMember + +ArgumentMember : ParameterMembership = + ownedMemberParameter = Argument + +Argument : Feature = + ownedRelationship += ArgumentValue + +ArgumentValue : FeatureValue = + value = OwnedExpression + +ArgumentExpressionMember : ParameterMembership = + ownedRelatedElement += ArgumentExpression + +ArgumentExpression : Feature = + ownedRelationship += ArgumentExpressionValue + +ArgumentExpressionValue : FeatureValue = + ownedRelatedElement += OwnedExpressionReference + +SendNode : SendActionUsage = + OccurrenceUsagePrefix ActionUsageDeclaration? 'send' + ( ownedRelationship += NodeParameterMember SenderReceiverPart? + | ownedRelationship += EmptyParameterMember SendReceiverPart )? + ActionBody + +SendNodeDeclaration : SendActionUsage = + ActionNodeUsageDeclaration? 'send' + ownedRelationship += NodeParameterMember SenderReceiverPart? + +SenderReceiverPart : SendActionUsage = + 'via' ownedRelationship += NodeParameterMember + ( 'to' ownedRelationship += NodeParameterMember )? + | ownedRelationship += EmptyParameterMember + 'to' ownedRelationship += NodeParameterMember + +NodeParameterMember : ParameterMembership = + ownedRelatedElement += NodeParameter + +NodeParameter : ReferenceUsage = + ownedRelationship += FeatureBinding + +FeatureBinding : FeatureValue = + ownedRelatedElement += OwnedExpression + +EmptyParameterMember : ParameterMembership = + ownedRelatedElement += EmptyUsage + +EmptyUsage : ReferenceUsage = + {} + +// Notes: +//
          +//
        1. The productions for ArgumentMember, Argument, ArgumentValue, ArgumentExpressionMember, ArgumentExpression and ArgumentExpressionValue are the same as given in [KerML, 8.2.5.8.1].
        + +// Clause 8.2.2.17.5 Assignment Action Usages + +AssignmentNode : AssignmentActionUsage = + OccurrenceUsagePrefix + AssignmentNodeDeclaration ActionBody + +AssignmentNodeDeclaration: ActionUsage = + ( ActionNodeUsageDeclaration )? 'assign' + ownedRelationship += AssignmentTargetMember + ownedRelationship += FeatureChainMember ':=' + ownedRelationship += NodeParameterMember + +AssignmentTargetMember : ParameterMembership = + ownedRelatedElement += AssignmentTargetParameter + +AssignmentTargetParameter : ReferenceUsage = + ( ownedRelationship += AssignmentTargetBinding '.' )? + +AssignmentTargetBinding : FeatureValue = + ownedRelatedElement += NonFeatureChainPrimaryExpression + +FeatureChainMember : Membership = + memberElement = [QualifiedName] + | OwnedFeatureChainMember + +OwnedFeatureChainMember : OwningMembership = + ownedRelatedElement += OwnedFeatureChain + +// Clause 8.2.2.17.6 Terminate Action Usages + +TerminateNode : TerminateActionUsage = + OccurrenceUsagePrefix ActionNodeUsageDeclaration? + 'terminate' ( ownedRelationship += NodeParameterMember )? + ActionBody + +// Clause 8.2.2.17.7 Structured Control Action Usages + +IfNode : IfActionUsage = + ActionNodePrefix + 'if' ownedRelationship += ExpressionParameterMember + ownedRelationship += ActionBodyParameterMember + ( 'else' ownedRelationship += + ( ActionBodyParameterMember | IfNodeParameterMember ) )? + +ExpressionParameterMember : ParameterMembership = + ownedRelatedElement += OwnedExpression + +ActionBodyParameterMember : ParameterMembership = + ownedRelatedElement += ActionBodyParameter + +ActionBodyParameter : ActionUsage = + ( 'action' UsageDeclaration? )? + '{' ActionBodyItem* '}' + +IfNodeParameterMember : ParameterMembership = + ownedRelatedElement += IfNode + +WhileLoopNode : WhileLoopActionUsage = + ActionNodePrefix + ( 'while' ownedRelationship += ExpressionParameterMember + | 'loop' ownedRelationship += EmptyParameterMember + ) + ownedRelationship += ActionBodyParameterMember + ( 'until' ownedRelationship += ExpressionParameterMember ';' )? + +ForLoopNode : ForLoopActionUsage = + ActionNodePrefix + 'for' ownedRelationship += ForVariableDeclarationMember + 'in' ownedRelationship += NodeParameterMember + ownedRelationship += ActionBodyParameterMember + +ForVariableDeclarationMember : FeatureMembership = + ownedRelatedElement += UsageDeclaration + +ForVariableDeclaration : ReferenceUsage = + UsageDeclaration + +// Clause 8.2.2.17.8 Action Successions + +ActionTargetSuccession : Usage = + ( TargetSuccession | GuardedTargetSuccession | DefaultTargetSuccession ) + UsageBody + +TargetSuccession : SuccessionAsUsage = + ownedRelationship += SourceEndMember + 'then' ownedRelationship += ConnectorEndMember + +GuardedTargetSuccession : TransitionUsage = + ownedRelationship += GuardExpressionMember + 'then' ownedRelationship += TransitionSuccessionMember + +DefaultTargetSuccession : TransitionUsage = + 'else' ownedRelationship += TransitionSuccessionMember + +GuardedSuccession : TransitionUsage = + ( 'succession' UsageDeclaration )? + 'first' ownedRelationship += FeatureChainMember + ownedRelationship += GuardExpressionMember + 'then' ownedRelationship += TransitionSuccessionMember + UsageBody + +// Clause 8.2.2.18 States Textual Notation + +// Clause 8.2.2.18.1 State Definitions + +StateDefinition = + OccurrenceDefinitionPrefix 'state' 'def' + DefinitionDeclaration StateDefBody + +StateDefBody : StateDefinition = + ';' + | ( isParallel ?= 'parallel' )? + '{' StateBodyItem* '}' + +StateBodyItem : Type = + NonBehaviorBodyItem + | ( ownedRelationsup += SourceSuccessionMember )? + ownedRelationship += BehaviorUsageMember + ( ownedRelationship += TargetTransitionUsageMember )* + | ownedRelationship += TransitionUsageMember + | ownedRelationship += EntryActionMember + ( ownedRelationship += EntryTransitionMember )* + | ownedRelationship += DoActionMember + | ownedRelationship += ExitActionMember + +EntryActionMember : StateSubactionMembership = + MemberPrefix kind = 'entry' + ownedRelatedElement += StateActionUsage + +DoActionMember : StateSubactionMembership = + MemberPrefix kind = 'do' + ownedRelatedElement += StateActionUsage + +ExitActionMember : StateSubactionMembership = + MemberPrefix kind = 'exit' + ownedRelatedElement += StateActionUsage + +EntryTransitionMember : FeatureMembership : + MemberPrefix + ( ownedRelatedElement += GuardedTargetSuccession + | 'then' ownedRelatedElement += TargetSuccession + ) ';' + +StateActionUsage : ActionUsage = + EmptyActionUsage ';' + | StatePerformActionUsage + | StateAcceptActionUsage + | StateSendActionUsage + | StateAssignmentActionUsage + +EmptyActionUsage : ActionUsage = + {} + +StatePerformActionUsage : PerformActionUsage = + PerformActionUsageDeclaration ActionBody + +StateAcceptActionUsage : AcceptActionUsage = + AcceptNodeDeclaration ActionBody + +StateSendActionUsage : SendActionUsage + SendNodeDeclaration ActionBody + +StateAssignmentActionUsage : AssignmentActionUsage = + AssignmentNodeDeclaration ActionBody + +TransitionUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += TransitionUsage + +TargetTransitionUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += TargetTransitionUsage + +// Clause 8.2.2.18.2 State Usages + +StateUsage = + OccurrenceUsagePrefix 'state' + ActionUsageDeclaration StateUsageBody + +StateUsageBody : StateUsage = + ';' + | ( isParallel ?= 'parallel' )? + '{' StateBodyItem* '}' + +ExhibitStateUsage = + OccurrenceUsagePrefix 'exhibit' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'state' UsageDeclaration ) + ValuePart? StateUsageBody + +// Clause 8.2.2.18.3 Transition Usages + +TransitionUsage = + 'transition' ( UsageDeclaration 'first' )? + ownedRelationship += FeatureChainMember + ownedRelationship += EmptyParameterMember + ( ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember )? + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + 'then' ownedRelationship += TransitionSuccessionMember + ActionBody + +TargetTransitionUsage : TransitionUsage = + ownedRelationship += EmptyParameterMember + ( 'transition' + ( ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember )? + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + | ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + | ownedRelationship += GuardExpressionMember + ( ownedRelationship += EffectBehaviorMember )? + )? + 'then' ownedRelationship += TransitionSuccessionMember + ActionBody + +TriggerActionMember : TransitionFeatureMembership = + 'accept' { kind = 'trigger' } ownedRelatedElement += TriggerAction + +TriggerAction : AcceptActionUsage = + AcceptParameterPart + +GuardExpressionMember : TransitionFeatureMembership = + 'if' { kind = 'guard' } ownedRelatedElement += OwnedExpression + +EffectBehaviorMember : TransitionFeatureMembership = + 'do' { kind = 'effect' } ownedRelatedElement += EffectBehaviorUsage + +EffectBehaviorUsage : ActionUsage = + EmptyActionUsage + | TransitionPerformActionUsage + | TransitionAcceptActionUsage + | TransitionSendActionUsage + | TransitionAssignmentActionUsage + +TransitionPerformActionUsage : PerformActionUsage = + PerformActionUsageDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionAcceptActionUsage : AcceptActionUsage = + AcceptNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionSendActionUsage : SendActionUsage = + SendNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionAssignmentActionUsage : AssignmentActionUsage = + AssignmentNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionSuccessionMember : OwningMembership = + ownedRelatedElement += TransitionSuccession + +TransitionSuccession : Succession = + ownedRelationship += EmptyEndMember + ownedRelationship += ConnectorEndMember + +EmptyEndMember : EndFeatureMembership = + ownedRelatedElement += EmptyFeature + +EmptyFeature : ReferenceUsage = + {} + +// Clause 8.2.2.19 Calculations Textual Notation + +CalculationDefinition = + OccurrenceDefinitionPrefix 'calc' 'def' + DefinitionDeclaration CalculationBody + +CalculationUsage : CalculationUsage = + OccurrenceUsagePrefix 'calc' + ActionUsageDeclaration CalculationBody + +CalculationBody : Type = + ';' | '{' CalculationBodyPart '}' + +CalculationBodyPart : Type = + CalculationBodyItem* + ( ownedRelationship += ResultExpressionMember )? + +CalculationBodyItem : Type = + ActionBodyItem + | ownedRelationship += ReturnParameterMember + +ReturnParameterMember : ReturnParameterMembership = + MemberPrefix? 'return' ownedRelatedElement += UsageElement + +ResultExpressionMember : ResultExpressionMembership = + MemberPrefix? ownedRelatedElement += OwnedExpression + +// Clause 8.2.2.20 Constraints Textual Notation + +ConstraintDefinition = + OccurrenceDefinitionPrefix 'constraint' 'def' + DefinitionDeclaration CalculationBody + +ConstraintUsage = + OccurrenceUsagePrefix 'constraint' + ConstraintUsageDeclaration CalculationBody + +AssertConstraintUsage = + OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' )? + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'constraint' ConstraintUsageDeclaration ) + CalculationBody + +ConstraintUsageDeclaration : ConstraintUsage = + UsageDeclaration ValuePart? + +// Clause 8.2.2.21 Requirements Textual Notation + +// Clause 8.2.2.21.1 Requirement Definitions + +RequirementDefinition = + OccurrenceDefinitionPrefix 'requirement' 'def' + DefinitionDeclaration RequirementBody + +RequirementBody : Type = + ';' | '{' RequirementBodyItem* '}' + +RequirementBodyItem : Type = + DefinitionBodyItem + | ownedRelationship += SubjectMember + | ownedRelationship += RequirementConstraintMember + | ownedRelationship += FramedConcernMember + | ownedRelationship += RequirementVerificationMember + | ownedRelationship += ActorMember + | ownedRelationship += StakeholderMember + +SubjectMember : SubjectMembership = + MemberPrefix ownedRelatedElement += SubjectUsage + +SubjectUsage : ReferenceUsage = + 'subject' UsageExtensionKeyword* Usage + +RequirementConstraintMember : RequirementConstraintMembership = + MemberPrefix? RequirementKind + ownedRelatedElement += RequirementConstraintUsage + +RequirementKind : RequirementConstraintMembership = + 'assume' { kind = 'assumption' } + | 'require' { kind = 'requirement' } + +RequirementConstraintUsage : ConstraintUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? RequirementBody + | ( UsageExtensionKeyword* 'constraint' + | UsageExtensionKeyword+ ) + ConstraintUsageDeclaration CalculationBody + +FramedConcernMember : FramedConcernMembership = + MemberPrefix? 'frame' + ownedRelatedElement += FramedConcernUsage + +FramedConcernUsage : ConcernUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? CalculationBody + | ( UsageExtensionKeyword* 'concern' + | UsageExtensionKeyword+ ) + CalculationUsageDeclaration CalculationBody + +ActorMember : ActorMembership = + MemberPrefix ownedRelatedElement += ActorUsage + +ActorUsage : PartUsage = + 'actor' UsageExtensionKeyword* Usage + +StakeholderMember : StakeholderMembership = + MemberPrefix ownedRelatedElement += StakeholderUsage + +StakeholderUsage : PartUsage = + 'stakeholder' UsageExtensionKeyword* Usage + +// Clause 8.2.2.21.2 Requirement Usages + +RequirementUsage = + OccurrenceUsagePrefix 'requirement' + ConstraintUsageDeclaration RequirementBody + +SatisfyRequirementUsage = + OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' ) 'satisfy' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'requirement' UsageDeclaration ) + ValuePart? + ( 'by' ownedRelationship += SatisfactionSubjectMember )? + RequirementBody + +SatisfactionSubjectMember : SubjectMembership = + ownedRelatedElement += SatisfactionParameter + +SatisfactionParameter : ReferenceUsage = + ownedRelationship += SatisfactionFeatureValue + +SatisfactionFeatureValue : FeatureValue = + ownedRelatedElement += SatisfactionReferenceExpression + +SatisfactionReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FeatureChainMember + +// Clause 8.2.2.21.3 Concerns + +ConcernDefinition = + OccurrenceDefinitionPrefix 'concern' 'def' + DefinitionDeclaration RequirementBody + +ConcernUsage = + OccurrenceUsagePrefix 'concern' + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.22 Cases Textual Notation + +CaseDefinition = + OccurrenceDefinitionPrefix 'case' 'def' + DefinitionDeclaration CaseBody + +CaseUsage = + OccurrenceUsagePrefix 'case' + ConstraintUsageDeclaration CaseBody + +CaseBody : Type = + ';' + | '{' CaseBodyItem* + ( ownedRelationship += ResultExpressionMember )? + '}' + +CaseBodyItem : Type = + ActionBodyItem + | ownedRelationship += SubjectMember + | ownedRelationship += ActorMember + | ownedRelationship += ObjectiveMember + +ObjectiveMember : ObjectiveMembership = + MemberPrefix 'objective' + ownedRelatedElement += ObjectiveRequirementUsage + +ObjectiveRequirementUsage : RequirementUsage = + UsageExtensionKeyword* ConstraintUsageDeclaration + RequirementBody + +// Clause 8.2.2.23 Analysis Cases Textual Notation + +AnalysisCaseDefinition = + OccurrenceDefinitionPrefix 'analysis' 'def' + DefinitionDeclaration CaseBody + +AnalysisCaseUsage = + OccurrenceUsagePrefix 'analysis' + ConstraintUsageDeclaration CaseBody + +// Clause 8.2.2.24 Verification Cases Textual Notation + +VerificationCaseDefinition = + OccurrenceDefinitionPrefix 'verification' 'def' + DefinitionDeclaration CaseBody + +VerificationCaseUsage = + OccurrenceUsagePrefix 'verification' + ConstraintUsageDeclaration CaseBody + +RequirementVerificationMember : RequirementVerificationMembership = + MemberPrefix 'verify' { kind = 'requirement' } + ownedRelatedElement += RequirementVerificationUsage + +RequirementVerificationUsage : RequirementUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecialization* RequirementBody + | ( UsageExtensionKeyword* 'requirement' + | UsageExtensionKeyword+ ) + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.25 Use Cases Textual Notation + +UseCaseDefinition = + OccurrenceDefinitionPrefix 'use' 'case' 'def' + DefinitionDeclaration CaseBody + +UseCaseUsage = + OccurrenceUsagePrefix 'use' 'case' + ConstraintUsageDeclaration CaseBody + +IncludeUseCaseUsage : + OccurrenceUsagePrefix 'include' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'use' 'case' UsageDeclaration ) + ValuePart? + CaseBody + +// Clause 8.2.2.26 Views and Viewpoints Textual Notation + +// Clause 8.2.2.26.1 View Definitions + +ViewDefinition = + OccurrenceDefinitionPrefix 'view' 'def' + DefinitionDeclaration ViewDefinitionBody + +ViewDefinitionBody : ViewDefinition = + ';' | '{' ViewDefinitionBodyItem* '}' + +ViewDefinitionBodyItem : ViewDefinition = + DefinitionBodyItem + | ownedRelationship += ElementFilterMember + | ownedRelationship += ViewRenderingMember + +ViewRenderingMember : ViewRenderingMembership = + MemberPrefix 'render' + ownedRelatedElement += ViewRenderingUsage + +ViewRenderingUsage : RenderingUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + UsageBody + | ( UsageExtensionKeyword* 'rendering' + | UsageExtensionKeyword+ ) + Usage + +// Clause 8.2.2.26.2 View Usages + +ViewUsage = + OccurrenceUsagePrefix 'view' + UsageDeclaration? ValuePart? + ViewBody + +ViewBody : ViewUsage = + ';' | '{' ViewBodyItem* '}' + +ViewBodyItem : ViewUsage = + DefinitionBodyItem + | ownedRelationship += ElementFilterMember + | ownedRelationship += ViewRenderingMember + | ownedRelationship += Expose + +Expose = + 'expose' ( MembershipExpose | NamespaceExpose ) + RelationshipBody + +MembershipExpose = + MembershipImport + +NamespaceExpose = + NamespaceImport + +// Clause 8.2.2.26.3 Viewpoints + +ViewpointDefinition = + OccurrenceDefinitionPrefix 'viewpoint' 'def' + DefinitionDeclaration RequirementBody + +ViewpointUsage = + OccurrenceUsagePrefix 'viewpoint' + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.26.4 Renderings + +RenderingDefinition = + OccurrenceDefinitionPrefix 'rendering' 'def' + Definition + +RenderingUsage = + OccurrenceUsagePrefix 'rendering' + Usage + +// Clause 8.2.2.27 Metadata Textual Notation + +MetadataDefinition = + ( isAbstract ?= 'abstract')? DefinitionExtensionKeyWord* + 'metadata' 'def' Definition + +PrefixMetadataAnnotation : Annotation = + '#' annotatingElement = PrefixMetadataUsage + { ownedRelatedElement += annotatingElement } + +PrefixMetadataMember : OwningMembership = + '#' ownedRelatedEleemnt = PrefixMetadataUsage + +PrefixMetadataUsage : MetadataUsage = + ownedRelationship += OwnedFeatureTyping + +MetadataUsage = + UsageExtensionKeyword* ( '@' | 'metadata' ) + MetadataUsageDeclaration + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + MetadataBody + +MetadataUsageDeclaration : MetadataUsage = + ( Identification ( ':' | 'typed' 'by' ) )? + ownedRelationship += OwnedFeatureTyping + +MetadataBody : Type = + ';' | + '{' ( ownedRelationship += DefinitionMember + | ownedRelationship += MetadataBodyUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + )* + '}' + +MetadataBodyUsageMember : FeatureMembership = + ownedMemberFeature = MetadataBodyUsage + +MetadataBodyUsage : ReferenceUsage : + 'ref'? ( ':>>' | 'redefines' )? ownedRelationship += OwnedRedefinition + FeatureSpecializationPart? ValuePart? + MetadataBody + +ExtendedDefinition : Definition = + BasicDefinitionPrefix? DefinitionExtensionKeyword+ + 'def' Definition + +ExtendedUsage : Usage = + UnextendedUsagePrefix UsageExtensionKeyword+ + Usage + +// End of BNF + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf.html b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf.html new file mode 100644 index 000000000..4ca619244 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf.html @@ -0,0 +1,2001 @@ + + + + +SysML-textual-bnf + + + +

        // Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html
        +// Generated by bnf_grammar_processor at: 2025-12-04T19:31:35Z +

        +

        // Part 2 - Systems Modeling Language (SysML)

        +

        // Clause 8.2.2 Textual Notation

        +

        // Clause 8.2.2.1 Textual Notation Overview

        +
        // Clause 8.2.2.1.1 EBNF Conventions
        +
        // Clause 8.2.2.1.2 Lexical Structure
        + +
        RESERVED_KEYWORD = 
        +    'about' | 'abstract' | 'accept' | 'action' | 'actor' | 'after' | 'alias' | 'all' | 'allocate' | 'allocation'
        +    | 'analysis' | 'and' | 'as' | 'assert' | 'assign' | 'assume' | 'at' | 'attribute' | 'bind' | 'binding' | 'by' | 'calc'
        +    | 'case' | 'comment' | 'concern' | 'connect' | 'connection' | 'constant' | 'constraint' | 'crosses' | 'decide'
        +    | 'def' | 'default' | 'defined' | 'dependency' | 'derived' | 'do' | 'doc' | 'else' | 'end' | 'entry' | 'enum'
        +    | 'event' | 'exhibit' | 'exit' | 'expose' | 'false' | 'filter' | 'first' | 'flow' | 'for' | 'fork' | 'frame' | 'from'
        +    | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'include' | 'individual' | 'inout' | 'interface' | 'istype'
        +    | 'item' | 'join' | 'language' | 'library' | 'locale' | 'loop' | 'merge' | 'message' | 'meta' | 'metadata'
        +    | 'nonunique' | 'not' | 'null' | 'objective' | 'occurrence' | 'of' | 'or' | 'ordered' | 'out' | 'package' | 'parallel'
        +    | 'part' | 'perform' | 'port' | 'private' | 'protected' | 'public' | 'redefines' | 'ref' | 'references' | 'render'
        +    | 'rendering' | 'rep' | 'require' | 'requirement' | 'return' | 'satisfy' | 'send' | 'snapshot' | 'specializes'
        +    | 'stakeholder' | 'standard' | 'state' | 'subject' | 'subsets' | 'succession' | 'terminate' | 'then' | 'timeslice'
        +    | 'to' | 'transition' | 'true' | 'until' | 'use' | 'variant' | 'variation' | 'verification' | 'verify' | 'via'
        +    | 'view' | 'viewpoint' | 'when' | 'while' | 'xor'
        +
        + +
        DEFINED_BY  = ':'   | 'defined' 'by'
        +
        + +
        SPECIALIZES = ':>'  | 'specializes'
        +
        + +
        SUBSETS     = ':>'  | 'subsets'
        +
        + +
        REFERENCES  = '::>' | 'references'
        +
        + +
        CROSSES     = '=>'  | 'crosses'
        +
        + +
        REDEFINES   = ':>>' | 'redefines'
        +
        +

        // Clause 8.2.2.2 Elements and Relationships Textual Notation

        + +
        Identification : Element =
        +    ( '<' declaredShortName = NAME '>' )?
        +    ( declaredName = NAME )?
        +
        + +
        RelationshipBody : Relationship =
        +    ';' | '{' ( ownedRelationship += OwnedAnnotation )* '}'
        +
        +

        // Clause 8.2.2.3 Dependencies Textual Notation

        + +
        Dependency =
        +    ( ownedRelationship += PrefixMetadataAnnotation )*
        +    'dependency' DependencyDeclaration
        +    RelationshipBody
        +
        + +
        DependencyDeclaration =
        +    ( Identification 'from' )?
        +    client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to'
        +    supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )*
        +
        +

        // Clause 8.2.2.4 Annotations Textual Notation

        +
        // Clause 8.2.2.4.1 Annotations
        + +
        Annotation =
        +    annotatedElement = [QualifiedName]
        +
        + +
        OwnedAnnotation : Annotation =
        +    ownedRelatedElement += AnnotatingElement
        +
        + +
        AnnotatingMember : OwningMembership =
        +    ownedRelatedElement += AnnotatingElement
        +
        + +
        AnnotatingElement =
        +      Comment
        +    | Documentation
        +    | TextualRepresentation
        +    | MetadataFeature
        +
        +
        // Clause 8.2.2.4.2 Comments and Documentation
        + +
        Comment =
        +    ( 'comment' Identification
        +      ( 'about' ownedRelationship += Annotation
        +        ( ',' ownedRelationship += Annotation )*
        +      )?
        +    )?
        +    ( 'locale' locale = STRING_VALUE )?
        +    body = REGULAR_COMMENT
        +
        + +
        Documentation =
        +    'doc' Identification
        +    ( 'locale' locale = STRING_VALUE )?
        +    body = REGULAR_COMMENT
        +
        +
        // Clause 8.2.2.4.3 Textual Representation
        + +
        TextualRepresentation =
        +    ( 'rep' Identification )?
        +    'language' language = STRING_VALUE body = REGULAR_COMMENT
        +
        +

        // Clause 8.2.2.5 Namespaces and Packages Textual Notation

        +
        // Clause 8.2.2.5.1 Packages
        + +
        RootNamespace : Namespace =
        +    PackageBodyElement*
        +
        + +
        Package =
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    PackageDeclaration PackageBody
        +
        + +
        LibraryPackage =
        +    ( isStandard ?= 'standard' ) 'library'
        +    ( ownedRelationship += PrefixMetadataMember )*
        +    PackageDeclaration PackageBody
        +
        + +
        PackageDeclaration : Package =
        +    'package' Identification
        +
        + +
        PackageBody : Package =
        +    ';' | '{' PackageBodyElement* '}'
        +
        + +
        PackageBodyElement : Package =
        +      ownedRelationship += PackageMember
        +    | ownedRelationship += ElementFilterMember
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += Import
        +
        + +
        MemberPrefix : Membership =
        +    ( visibility = VisibilityIndicator )?
        +
        + +
        PackageMember : OwningMembership
        +    MemberPrefix
        +    ( ownedRelatedElement += DefinitionElement
        +    | ownedRelatedElement = UsageElement )
        +
        + +
        ElementFilterMember : ElementFilterMembership =
        +    MemberPrefix
        +    'filter' ownedRelatedElement += OwnedExpression ';'
        +
        + +
        AliasMember : Membership =
        +    MemberPrefix
        +    'alias' ( '<' memberShortName = NAME '>' )?
        +    ( memberName = NAME )?
        +     'for' memberElement = [QualifiedName]
        +    RelationshipBody
        +
        + +
        Import =
        +    visibility = VisibilityIndicator
        +    'import' ( isImportAll ?= 'all' )?
        +    ImportDeclaration
        +    RelationshipBody
        +
        + +
        ImportDeclaration : Import =
        +    MembershipImport | NamespaceImport
        +
        + +
        MembershipImport =
        +    importedMembership = [QualifiedName]
        +    ( '::' isRecursive ?= '**' )?
        +
        + +
        NamespaceImport =
        +      importedNamespace = [QualifiedName] '::' '*'
        +      ( '::' isRecursive ?= '**' )?
        +    | importedNamspace = FilterPackage
        +      { ownedRelatedElement += importedNamespace }
        +
        + +
        FilterPackage : Package =
        +    ownedRelationship += FilterPackageImport
        +    ( ownedRelationship += FilterPackageMember )+
        +
        + +
        FilterPackageMember : ElementFilterMembership =
        +    '[' ownedRelatedElement += OwnedExpression ']'
        +
        + +
        VisibilityIndicator : VisibilityKind =
        +    'public' | 'private' | 'protected'
        +
        +
        // Clause 8.2.2.5.2 Package Elements
        + +
        DefinitionElement : Element =
        +      Package
        +    | LibraryPackage
        +    | AnnotatingElement
        +    | Dependency
        +    | AttributeDefinition
        +    | EnumerationDefinition
        +    | OccurrenceDefinition
        +    | IndividualDefinition
        +    | ItemDefinition
        +    | PartDefinition
        +    | ConnectionDefinition
        +    | FlowDefinition
        +    | InterfaceDefinition
        +    | PortDefinition
        +    | ActionDefinition
        +    | CalculationDefinition
        +    | StateDefinition
        +    | ConstraintDefinition
        +    | RequirementDefinition
        +    | ConcernDefinition
        +    | CaseDefinition
        +    | AnalysisCaseDefinition
        +    | VerificationCaseDefinition
        +    | UseCaseDefinition
        +    | ViewDefinition
        +    | ViewpointDefinition
        +    | RenderingDefinition
        +    | MetadataDefinition
        +    | ExtendedDefinition
        +
        + +
        UsageElement : Usage =
        +      NonOccurrenceUsageElement
        +    | OccurrenceUsageElement
        +
        +

        // Clause 8.2.2.6 Definition and Usage Textual Notation

        +
        // Clause 8.2.2.6.1 Definitions
        + +
        BasicDefinitionPrefix =
        +    isAbstract ?= 'abstract' | isVariation ?= 'variation'
        +
        + +
        DefinitionExtensionKeyword : Definition =
        +    ownedRelationship += PrefixMetadataMember
        +
        + +
        DefinitionPrefix : Definition =
        +    BasicDefinitionPrefix? DefinitionExtensionKeyword*
        +
        + +
        Definition =
        +    DefinitionDeclaration DefinitionBody
        +
        + +
        DefinitionDeclaration : Definition
        +    Identification SubclassificationPart?
        +
        + +
        DefinitionBody : Type =
        +      ';' | '{' DefinitionBodyItem* '}'
        +
        + +
        DefinitionBodyItem : Type =
        +      ownedRelationship += DefinitionMember
        +    | ownedRelationship += VariantUsageMember
        +    | ownedRelationship += NonOccurrenceUsageMember
        +    | ( ownedRelationship += SourceSuccessionMember )?
        +      ownedRelationship += OccurrenceUsageMember
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += Import
        +
        + +
        DefinitionMember : OwningMembership =
        +    MemberPrefix
        +    ownedRelatedElement += DefinitionElement
        +
        + +
        VariantUsageMember : VariantMembership =
        +    MemberPrefix 'variant'
        +    ownedVariantUsage = VariantUsageElement
        +
        + +
        NonOccurrenceUsageMember : FeatureMembership =
        +    MemberPrefix
        +    ownedRelatedElement += NonOccurrenceUsageElement
        +
        + +
        OccurrenceUsageMember : FeatureMembership =
        +    MemberPrefix
        +    ownedRelatedElement += OccurrenceUsageElement
        +
        + +
        StructureUsageMember : FeatureMembership =
        +    MemberPrefix
        +    ownedRelatedElement += StructureUsageElement
        +
        + +
        BehaviorUsageMember : FeatureMembership =
        +    MemberPrefix
        +    ownedRelatedElement += BehaviorUsageElement
        +
        +
        // Clause 8.2.2.6.2 Usages
        + +
        FeatureDirection : FeatureDirectionKind =
        +    'in' | 'out' | 'inout'
        +
        + +
        RefPrefix : Usage =
        +    ( direction = FeatureDirection )?
        +    ( isDerived ?= 'derived' )?
        +    ( isAbstract ?= 'abstract' | isVariation ?= 'variation' )?
        +    ( isConstant ?= 'constant' )?
        +
        + +
        BasicUsagePrefix : Usage =
        +    RefPrefix
        +    ( isReference ?= 'ref' )?
        +
        + +
        EndUsagePrefix : Usage =
        +    isEnd ?= 'end' ( ownedRelationship += OwnedCrossFeatureMember )?
        +
        +

        // (See Note 1)

        + +
        OwnedCrossFeatureMember : OwningMembership =
        +    ownedRelatedElement += OwnedCrossFeature
        +
        + +
        OwnedCrossFeature : ReferenceUsage =
        +    BasicUsagePrefix UsageDeclaration
        +
        + +
        UsageExtensionKeyword : Usage =
        +    ownedRelationship += PrefixMetadataMember
        +
        + +
        UnextendedUsagePrefix : Usage =
        +    EndUsagePrefix | BasicUsagePrefix
        +
        + +
        UsagePrefix : Usage
        +    UnextendedUsagePrefix UsageExtensionKeyword*
        +
        + +
        Usage =
        +    UsageDeclaration UsageCompletion
        +
        + +
        UsageDeclaration : Usage =
        +    Identification FeatureSpecializationPart?
        +
        + +
        UsageCompletion : Usage =
        +    ValuePart? UsageBody
        +
        + +
        UsageBody : Usage =
        +    DefinitionBody
        +
        + +
        ValuePart : Feature =
        +    ownedRelationship += FeatureValue
        +
        + +
        FeatureValue =
        +    ( '='
        +    | isInitial ?= ':='
        +    | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )?
        +    )
        +    ownedRelatedElement += OwnedExpression
        +
        +

        // Notes:

        +
          +
        1. // 1. A Usage parsed with isEnd = true for which mayTimeVary = true must also have isConstant set to true, even though this is not explicitly notated in the textual notation, in order to satisfy the KerML constraint checkFeatureEndIsConstant.
        2. +
        +
        // Clause 8.2.2.6.3 Reference Usages
        + +
        DefaultReferenceUsage : ReferenceUsage =
        +    RefPrefix Usage
        +
        + +
        ReferenceUsage =
        +    ( EndUsagePrefix | RefPrefix )
        +    'ref' Usage
        +
        + +
        VariantReference : ReferenceUsage =
        +    ownedRelationship += OwnedReferenceSubsetting
        +    FeatureSpecialization* UsageBody
        +
        +
        // Clause 8.2.2.6.4 Body Elements
        + +
        NonOccurrenceUsageElement : Usage =
        +      DefaultReferenceUsage
        +    | ReferenceUsage
        +    | AttributeUsage
        +    | EnumerationUsage
        +    | BindingConnectorAsUsage
        +    | SuccessionAsUsage
        +    | ExtendedUsage
        +
        + +
        OccurrenceUsageElement : Usage =
        +    StructureUsageElement | BehaviorUsageElement
        +
        + +
        StructureUsageElement : Usage =
        +      OccurrenceUsage
        +    | IndividualUsage
        +    | PortionUsage
        +    | EventOccurrenceUsage
        +    | ItemUsage
        +    | PartUsage
        +    | ViewUsage
        +    | RenderingUsage
        +    | PortUsage
        +    | ConnectionUsage
        +    | InterfaceUsage
        +    | AllocationUsage
        +    | Message
        +    | FlowUsage
        +    | SuccessionFlowUsage
        +
        + +
        BehaviorUsageElement : Usage =
        +      ActionUsage
        +    | CalculationUsage
        +    | StateUsage
        +    | ConstraintUsage
        +    | RequirementUsage
        +    | ConcernUsage
        +    | CaseUsage
        +    | AnalysisCaseUsage
        +    | VerificationCaseUsage
        +    | UseCaseUsage
        +    | ViewpointUsage
        +    | PerformActionUsage
        +    | ExhibitStateUsage
        +    | IncludeUseCaseUsage
        +    | AssertConstraintUsage
        +    | SatisfyRequirementUsage
        +
        + +
        VariantUsageElement : Usage =
        +      VariantReference
        +    | ReferenceUsage
        +    | AttributeUsage
        +    | BindingConnectorAsUsage
        +    | SuccessionAsUsage
        +    | OccurrenceUsage
        +    | IndividualUsage
        +    | PortionUsage
        +    | EventOccurrenceUsage
        +    | ItemUsage
        +    | PartUsage
        +    | ViewUsage
        +    | RenderingUsage
        +    | PortUsage
        +    | ConnectionUsage
        +    | InterfaceUsage
        +    | AllocationUsage
        +    | Message
        +    | FlowUsage
        +    | SuccessionFlowUsage
        +    | BehaviorUsageElement
        +
        +
        // Clause 8.2.2.6.5 Specialization
        + +
        SubclassificationPart : Classifier =
        +      SPECIALIZES ownedRelationship += OwnedSubclassification
        +      ( ',' ownedRelationship += OwnedSubclassification )*
        +
        + +
        OwnedSubclassification : Subclassification =
        +    superClassifier = [QualifiedName]
        +
        + +
        FeatureSpecializationPart : Feature =
        +      FeatureSpecialization+ MultiplicityPart? FeatureSpecialization*
        +    | MultiplicityPart FeatureSpecialization*
        +
        + +
        FeatureSpecialization : Feature =
        +    Typings | Subsettings | References | Crosses | Redefinitions
        +
        + +
        Typings : Feature =
        +      TypedBy ( ',' ownedRelationship += FeatureTyping )*
        +
        + +
        TypedBy : Feature =
        +    DEFINED_BY ownedRelationship += FeatureTyping
        +
        + +
        FeatureTyping =
        +    OwnedFeatureTyping | ConjugatedPortTyping
        +
        + +
        OwnedFeatureTyping : FeatureTyping =
        +      type = [QualifiedName]
        +    | type = OwnedFeatureChain
        +      { ownedRelatedElement += type }
        +
        + +
        Subsettings : Feature =
        +    Subsets ( ',' ownedRelationship += OwnedSubsetting )*
        +
        + +
        Subsets : Feature =
        +    SUBSETS ownedRelationship += OwnedSubsetting
        +
        + +
        OwnedSubsetting : Subsetting =
        +      subsettedFeature = [QualifiedName]
        +    | subsettedFeature = OwnedFeatureChain
        +      { ownedRelatedElement += subsettedFeature }
        +
        + +
        References : Feature =
        +    REFERENCES ownedRelationship += OwnedReferenceSubsetting
        +
        + +
        OwnedReferenceSubsetting : ReferenceSubsetting =
        +      referencedFeature = [QualifiedName]
        +    | referencedFeature = OwnedFeatureChain
        +      { ownedRelatedElement += referenceFeature }
        +
        + +
        Crosses : Feature =
        +    CROSSES ownedRelationship += OwnedCrossSubsetting
        +
        + +
        OwnedCrossSubsetting : CrossSubsetting =
        +      crossedFeature = [QualifiedName]
        +    | crossedFeature = OwnedFeatureChain
        +      { ownedRelatedElement += crossedFeature }
        +
        + +
        Redefinitions : Feature =
        +    Redefines ( ',' ownedRelationship += OwnedRedefinition )*
        +
        + +
        Redefines : Feature =
        +    REDEFINES ownedRelationship += OwnedRedefinition
        +
        + +
        OwnedRedefinition : Redefinition =
        +      redefinedFeature = [QualifiedName]
        +    | redefinedFeature = OwnedFeatureChain
        +      { ownedRelatedElement += redefinedFeature }
        +
        + +
        OwnedFeatureChain : Feature =
        +    ownedRelationship += OwnedFeatureChaining
        +    ( '.' ownedRelationship += OwnedFeatureChaining )+
        +
        + +
        OwnedFeatureChaining : FeatureChaining =
        +    chainingFeature = [QualifiedName]
        +
        +
        // Clause 8.2.2.6.6 Multiplicity
        + +
        MultiplicityPart : Feature =
        +      ownedRelationship += OwnedMultiplicity
        +    | ( ownedRelationship += OwnedMultiplicity )?
        +      ( isOrdered ?= 'ordered' ( { isUnique = false } 'nonunique' )?
        +      | { isUnique = false } 'nonunique' ( isOrdered ?= 'ordered' )? )
        +
        + +
        OwnedMultiplicity : OwningMembership =
        +    ownedRelatedElement += MultiplicityRange
        +
        + +
        MultiplicityRange =
        +    '[' ( ownedRelationship += MultiplicityExpressionMember '..' )?
        +          ownedRelationship += MultiplicityExpressionMember ']'
        +
        + +
        MultiplicityExpressionMember : OwningMembership =
        +    ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression )
        +
        +

        // Clause 8.2.2.7 Attributes Textual Notation

        + +
        AttributeDefinition : AttributeDefinition =
        +    DefinitionPrefix 'attribute' 'def' Definition
        +
        + +
        AttributeUsage : AttributeUsage =
        +    UsagePrefix 'attribute' Usage
        +
        +

        // Clause 8.2.2.8 Enumerations Textual Notation

        + +
        EnumerationDefinition =
        +    DefinitionExtensionKeyword*
        +    'enum' 'def' DefinitionDeclaration EnumerationBody
        +
        + +
        EnumerationBody : EnumerationDefinition =
        +      ';'
        +    | '{' ( ownedRelationship += AnnotatingMember
        +          | ownedRelationship += EnumerationUsageMember )*
        +      '}'
        +
        + +
        EnumerationUsageMember : VariantMembership =
        +    MemberPrefix ownedRelatedElement += EnumeratedValue
        +
        + +
        EnumeratedValue : EnumerationUsage =
        +    'enum'? Usage
        +
        + +
        EnumerationUsage : EnumerationUsage =
        +    UsagePrefix 'enum' Usage
        +
        +

        // Clause 8.2.2.9 Occurrences Textual Notation

        +
        // Clause 8.2.2.9.1 Occurrence Definitions
        + +
        OccurrenceDefinitionPrefix : OccurrenceDefinition =
        +    BasicDefinitionPrefix?
        +    ( isIndividual ?= 'individual'
        +      ownedRelationship += EmptyMultiplicityMember
        +    )?
        +    DefinitionExtensionKeyword*
        +
        + +
        OccurrenceDefinition =
        +    OccurrenceDefinitionPrefix 'occurrence' 'def' Definition
        +
        + +
        IndividualDefinition : OccurrenceDefinition =
        +    BasicDefinitionPrefix? isIndividual ?= 'individual'
        +    DefinitionExtensionKeyword* 'def' Definition
        +    ownedRelationship += EmptyMultiplicityMember
        +
        + +
        EmptyMultiplicityMember : OwningMembership =
        +    ownedRelatedElement += EmptyMultiplicity
        +
        + +
        EmptyMultiplicity : Multiplicity =
        +    { }
        +
        +
        // Clause 8.2.2.9.2 Occurrence Usages
        + +
        OccurrenceUsagePrefix : OccurrenceUsage =
        +    BasicUsagePrefix
        +    ( isIndividual ?= 'individual' )?
        +    ( portionKind = PortionKind
        +      { isPortion = true }
        +    )?
        +    UsageExtensionKeyword*
        +
        + +
        OccurrenceUsage =
        +    OccurrenceUsagePrefix 'occurrence' Usage
        +
        + +
        IndividualUsage : OccurrenceUsage =
        +    BasicUsagePrefix isIndividual ?= 'individual'
        +    UsageExtensionKeyword* Usage
        +
        + +
        PortionUsage : OccurrenceUsage  =
        +    BasicUsagePrefix ( isIndividual ?= 'individual' )?
        +    portionKind = PortionKind
        +    UsageExtensionKeyword* Usage
        +    { isPortion = true }
        +
        + +
        PortionKind =
        +    'snapshot' | 'timeslice'
        +
        + +
        EventOccurrenceUsage =
        +    OccurrenceUsagePrefix 'event'
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'occurrence' UsageDeclaration? )
        +    UsageCompletion
        +
        +
        // Clause 8.2.2.9.3 Occurrence Successions
        + +
        SourceSuccessionMember  : FeatureMembership =
        +    'then' ownedRelatedElement += SourceSuccession
        +
        + +
        SourceSuccession : SuccessionAsUsage =
        +    ownedRelationship += SourceEndMember
        +
        + +
        SourceEndMember : EndFeatureMembership =
        +    ownedRelatedElement += SourceEnd
        +
        + +
        SourceEnd : ReferenceUsage =
        +    ( ownedRelationship += OwnedMultiplicity )?
        +
        +

        // Clause 8.2.2.10 Items Textual Notation

        + +
        ItemDefinition =
        +    OccurrenceDefinitionPrefix
        +    'item' 'def' Definition
        +
        + +
        ItemUsage =
        +    OccurrenceUsagePrefix 'item' Usage
        +
        +

        // Clause 8.2.2.11 Parts Textual Notation

        + +
        PartDefinition =
        +    OccurrenceDefinitionPrefix 'part' 'def' Definition
        +
        + +
        PartUsage =
        +    OccurrenceUsagePrefix 'part' Usage
        +
        +

        // Clause 8.2.2.12 Ports Textual Notation

        + +
        PortDefinition =
        +    DefinitionPrefix 'port' 'def' Definition
        +    ownedRelationship += ConjugatedPortDefinitionMember
        +    { conjugatedPortDefinition.ownedPortConjugator.
        +        originalPortDefinition = this }
        +
        +

        // (See Note 1)

        + +
        ConjugatedPortDefinitionMember : OwningMembership =
        +    ownedRelatedElement += ConjugatedPortDefinition
        +
        + +
        ConjugatedPortDefinition =
        +    ownedRelationship += PortConjugation
        +
        + +
        PortConjugation =
        +    {}
        +
        + +
        PortUsage =
        +    OccurrenceUsagePrefix 'port' Usage
        +
        + +
        ConjugatedPortTyping : ConjugatedPortTyping =
        +    '~' originalPortDefinition = ~[QualifiedName]
        +
        +

        // (See Note 2)

        +

        // Notes:

        +
          +
        1. // 1. Even though it is not explicitly represented in the text, a PortDefinition is always parsed as containing a nested ConjugatedPortDefinition with a PortDefinition Relationship pointing back to the containing PortDefinition. The abstract syntax for ConjugatedPortDefinition sets its effectiveName to the name of its originalPortDefinition with the symbol ~ prepended to it (see 8.3.12.2). (See also 8.4.8.1.)
        2. +
        3. // 2. The notation ~[QualifiedName] indicates that a QualifiedName shall be parsed from the input text, but that it shall be resolved as if it was the qualified name constructed as follows: +
            +
          • // • Extract the last segment name of the given QualifiedName and prepend the symbol ~ to it.
          • +
          • // • Append the name so constructed to the end of the entire original QualifiedName.
          • +
          +// For example, if the ConjugatedPortTyping is ~A::B::C, then the given QualifiedName is A::B::C, and ~[QualifiedName] is resolved as A::B::C::'~C'. Alternatively, a conforming tool may first resolve the given QualifiedName as usual to a PortDefinition and then use the conjugatedPortDefinition of this PortDefinition as the resolution of ~[QualifiedName].
        4. +
        +

        // Clause 8.2.2.13 Connections Textual Notation

        +
        // Clause 8.2.2.13.1 Connection Definition and Usage
        + +
        ConnectionDefinition =
        +    OccurrenceDefinitionPrefix 'connection' 'def' Definition
        +
        + +
        ConnectionUsage =
        +    OccurrenceUsagePrefix
        +    ( 'connection' UsageDeclaration ValuePart?
        +      ( 'connect' ConnectorPart )?
        +    | 'connect' ConnectorPart )
        +    UsageBody
        +
        + +
        ConnectorPart : ConnectionUsage =
        +    BinaryConnectorPart | NaryConnectorPart
        +
        + +
        BinaryConnectorPart : ConnectionUsage =
        +    ownedRelationship += ConnectorEndMember 'to'
        +    ownedRelationship += ConnectorEndMember
        +
        + +
        NaryConnectorPart : ConnectionUsage =
        +    '(' ownedRelationship += ConnectorEndMember ','
        +        ownedRelationship += ConnectorEndMember
        +        ( ',' ownedRelationship += ConnectorEndMember )* ')'
        +
        + +
        ConnectorEndMember : EndFeatureMembership :
        +    ownedRelatedElement += ConnectorEnd
        +
        + +
        ConnectorEnd : ReferenceUsage =
        +	( ownedRelationship += OwnedCrossMultiplicityMember )?
        +	( declaredName = NAME REFERENCES )?
        +	ownedRelationship += OwnedReferenceSubsetting
        +
        + +
        OwnedCrossMultiplicityMember : OwningMembership =
        +	ownedRelatedElement += OwnedCrossMultiplicity
        +
        + +
        OwnedCrossMultiplicity : Feature =
        +	ownedRelationship += OwnedMultiplicity
        +
        +
        // Clause 8.2.2.13.2 Binding Connectors
        + +
        BindingConnectorAsUsage =
        +    UsagePrefix ( 'binding' UsageDeclaration )?
        +    'bind' ownedRelationship += ConnectorEndMember
        +    '=' ownedRelationship += ConnectorEndMember
        +    UsageBody
        +
        +
        // Clause 8.2.2.13.3 Successions
        + +
        SuccessionAsUsage =
        +    UsagePrefix ( 'succession' UsageDeclaration )?
        +    'first' s.ownedRelationship += ConnectorEndMember
        +    'then' s.ownedRelationship += ConnectorEndMember
        +    UsageBody
        +
        +

        // Clause 8.2.2.14 Interfaces Textual Notation

        +
        // Clause 8.2.2.14.1 Interface Definitions
        + +
        InterfaceDefinition =
        +    OccurrenceDefinitionPrefix 'interface' 'def'
        +    DefinitionDeclaration InterfaceBody
        +
        + +
        InterfaceBody : Type =
        +    ';' | '{' InterfaceBodyItem* '}'
        +
        + +
        InterfaceBodyItem : Type =
        +      ownedRelationship += DefinitionMember
        +    | ownedRelationship += VariantUsageMember
        +    | ownedRelationship += InterfaceNonOccurrenceUsageMember
        +    | ( ownedRelationship += SourceSuccessionMember )?
        +      ownedRelationship += InterfaceOccurrenceUsageMember
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += Import
        +
        + +
        InterfaceNonOccurrenceUsageMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += InterfaceNonOccurrenceUsageElement
        +
        + +
        InterfaceNonOccurrenceUsageElement : Usage =
        +      ReferenceUsage
        +    | AttributeUsage
        +    | EnumerationUsage
        +    | BindingConnectorAsUsage
        +    | SuccessionAsUsage
        +
        + +
        InterfaceOccurrenceUsageMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += InterfaceOccurrenceUsageElement
        +
        + +
        InterfaceOccurrenceUsageElement : Usage =
        +    DefaultInterfaceEnd | StructureUsageElement | BehaviorUsageElement
        +
        + +
        DefaultInterfaceEnd : PortUsage =
        +    isEnd ?= 'end' Usage
        +
        +
        // Clause 8.2.2.14.2 Interface Usages
        + +
        InterfaceUsage =
        +    OccurrenceUsagePrefix 'interface'
        +    InterfaceUsageDeclaration InterfaceBody
        +
        + +
        InterfaceUsageDeclaration : InterfaceUsage =
        +      UsageDeclaration ValuePart?
        +      ( 'connect' InterfacePart )?
        +    | InterfacePart
        +
        + +
        InterfacePart : InterfaceUsage =
        +    BinaryInterfacePart | NaryInterfacePart
        +
        + +
        BinaryInterfacePart : InterfaceUsage =
        +    ownedRelationship += InterfaceEndMember 'to'
        +    ownedRelationship += InterfaceEndMember
        +
        + +
        NaryInterfacePart : InterfaceUsage =
        +    '(' ownedRelationship += InterfaceEndMember ','
        +        ownedRelationship += InterfaceEndMember
        +        ( ',' ownedRelationship += InterfaceEndMember )* ')'
        +
        + +
        InterfaceEndMember : EndFeatureMembership =
        +    ownedRelatedElement += InterfaceEnd
        +
        + +
        InterfaceEnd : PortUsage :
        +    ( ownedRelationship += OwnedCrossMultiplicityMember )?
        +    ( declaredName = NAME REFERENCES )?
        +    ownedRelationship += OwnedReferenceSubsetting
        +
        +

        // Clause 8.2.2.15 Allocations Textual Notation

        + +
        AllocationDefinition =
        +    OccurrenceDefinitionPrefix 'allocation' 'def' Definition
        +
        + +
        AllocationUsage =
        +    OccurrenceUsagePrefix
        +    AllocationUsageDeclaration UsageBody
        +
        + +
        AllocationUsageDeclaration : AllocationUsage =
        +      'allocation' UsageDeclaration
        +      ( 'allocate' ConnectorPart )?
        +    | 'allocate' ConnectorPart
        +
        +

        // Clause 8.2.2.16 Flows Textual Notation

        + +
        FlowDefinition :
        +    OccurrenceDefinitionPrefix 'flow' 'def' Definition
        +
        + +
        Message : FlowUsage =
        +    OccurrenceUsagePrefix 'message'
        +    MessageDeclaration DefinitionBody
        +    { isAbstract = true }
        +
        + +
        MessageDeclaration : FlowUsage =
        +      UsageDeclaration ValuePart?
        +      ( 'of' ownedRelationship += FlowPayloadFeatureMember )?
        +      ( 'from' ownedRelationship += MessageEventMember
        +        'to' ownedRelationship += MessageEventMember
        +      )?
        +    | ownedRelationship += MessageEventMember 'to'
        +      ownedRelationship += MessageEventMember
        +
        + +
        MessageEventMember : ParameterMembership =
        +    ownedRelatedElement += MessageEvent
        +
        + +
        MessageEvent : EventOccurrenceUsage =
        +    ownedRelationship += OwnedReferenceSubsetting
        +
        + +
        FlowUsage =
        +    OccurrenceUsagePrefix 'flow'
        +    FlowDeclaration DefinitionBody
        +
        + +
        SuccessionFlowUsage =
        +    OccurrenceUsagePrefix 'succession' 'flow'
        +    FlowDeclaration DefinitionBody
        +
        + +
        FlowDeclaration : FlowUsage =
        +      UsageDeclaration ValuePart?
        +      ( 'of'  ownedRelationship += FlowPayloadFeatureMember )?
        +      ( 'from' ownedRelationship += FlowEndMember
        +        'to'   ownedRelationship += FlowEndMember )?
        +    | ownedRelationship += FlowEndMember 'to'
        +      ownedRelationship += FlowEndMember
        +
        + +
        FlowPayloadFeatureMember : FeatureMembership =
        +    ownedRelatedElement += FlowPayloadFeature
        +
        + +
        FlowPayloadFeature : PayloadFeature =
        +    PayloadFeature
        +
        + +
        PayloadFeature : Feature =
        +      Identification? PayloadFeatureSpecializationPart
        +      ValuePart?
        +    | ownedRelationship += OwnedFeatureTyping
        +      ( ownedRelationship += OwnedMultiplicity )?
        +    | ownedRelationship += OwnedMultiplicity
        +      ownedRelationship += OwnedFeatureTyping
        +
        + +
        PayloadFeatureSpecializationPart : Feature =
        +      ( > FeatureSpecialization )+ MultiplicityPart?
        +      FeatureSpecialization*
        +    | MultiplicityPart FeatureSpecialization+
        +
        + +
        FlowEndMember : EndFeatureMembership =
        +    ownedRelatedElement += FlowEnd
        +
        + +
        FlowEnd =
        +    ( ownedRelationship += FlowEndSubsetting )?
        +    ownedRelationship += FlowFeatureMember
        +
        + +
        FlowEndSubsetting : ReferenceSubsetting =
        +      referencedFeature = [QualifiedName]
        +    | referencedFeature = FeatureChainPrefix
        +      { ownedRelatedElement += referencedFeature }
        +
        + +
        FeatureChainPrefix : Feature =
        +    ( ownedRelationship += OwnedFeatureChaining '.' )+
        +    ownedRelationship += OwnedFeatureChaining '.'
        +
        + +
        FlowFeatureMember : FeatureMembership =
        +    ownedRelatedElement += FlowFeature
        +
        + +
        FlowFeature : ReferenceUsage =
        +    ownedRelationship += FlowFeatureRedefinition
        +
        +

        // (See Note 1)

        + +
        FlowFeatureRefefinition : Redefinition =
        +    redefinedFeature = [QualifiedName]
        +
        +

        // Notes:

        +
          +
        1. // 1. To ensure that a FlowFeature passes the validateRedefinitionDirectionConformance constraint (see [KerML, 8.3.3.3.8]), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature) +
        2. +
        +

        // Clause 8.2.2.17 Actions Textual Notation

        +
        // Clause 8.2.2.17.1 Action Definitions
        + +
        ActionDefinition =
        +    OccurrenceDefinitionPrefix 'action' 'def'
        +    DefinitionDeclaration ActionBody
        +
        + +
        ActionBody : Type =
        +    ';' | '{' ActionBodyItem* '}'
        +
        + +
        ActionBodyItem : Type =
        +      NonBehaviorBodyItem
        +    | ownedRelationship += InitialNodeMember
        +      ( ownedRelationship += ActionTargetSuccessionMember )*
        +    | ( ownedRelationship += SourceSuccessionMember )?
        +      ownedRelationsuip += ActionBehaviorMember
        +      ( ownedRelationship += ActionTargetSuccessionMember )*
        +    | ownedRelationship += GuardedSuccessionMember
        +
        + +
        NonBehaviorBodyItem =
        +      ownedRelationship += Import
        +    | ownedRelationship += AliasMember
        +    | ownedRelationship += DefinitionMember
        +    | ownedRelationship += VariantUsageMember
        +    | ownedRelationship += NonOccurrenceUsageMember
        +    | ( ownedRelationship += SourceSuccessionMember )?
        +      ownedRelationship += StructureUsageMember
        +
        + +
        ActionBehaviorMember : FeatureMembership =
        +    BehaviorUsageMember | ActionNodeMember
        +
        + +
        InitialNodeMember : FeatureMembership =
        +    MemberPrefix 'first' memberFeature = [QualifiedName]
        +    RelationshipBody
        +
        + +
        ActionNodeMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += ActionNode
        +
        + +
        ActionTargetSuccessionMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += ActionTargetSuccession
        +
        + +
        GuardedSuccessionMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += GuardedSuccession
        +
        +
        // Clause 8.2.2.17.2 Action Usages
        + +
        ActionUsage =
        +    OccurrenceUsagePrefix 'action'
        +    ActionUsageDeclaration ActionBody
        +
        + +
        ActionUsageDeclaration : ActionUsage =
        +    UsageDeclaration ValuePart?
        +
        + +
        PerformActionUsage =
        +    OccurrenceUsagePrefix 'perform'
        +    PerformActionUsageDeclaration ActionBody
        +
        + +
        PerformActionUsageDeclaration : PerformActionUsage =
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'action' UsageDeclaration )
        +    ValuePart?
        +
        + +
        ActionNode : ActionUsage =
        +      ControlNode
        +    | SendNode | AcceptNode
        +    | AssignmentNode
        +    | TerminateNode
        +    | IfNode | WhileLoopNode | ForLoopNode
        +
        + +
        ActionNodeUsageDeclaration : ActionUsage =
        +    'action' UsageDeclaration?
        +
        + +
        ActionNodePrefix : ActionUsage =
        +    OccurrenceUsagePrefix ActionNodeUsageDeclaration?
        +
        +
        // Clause 8.2.2.17.3 Control Nodes
        + +
        ControlNode =
        +    MergeNode | DecisionNode | JoinNode| ForkNode
        +
        + +
        ControlNodePrefix : OccurrenceUsage =
        +    RefPrefix
        +    ( isIndividual ?=  'individual )?
        +    ( portionKind = PortionKind
        +      { isPortion = true }
        +    )?
        +    UsageExtensionKeyword*
        +
        + +
        MergeNode =
        +    ControlNodePrefix
        +    isComposite ?= 'merge' UsageDeclaration
        +    ActionBody
        +
        + +
        DecisionNode =
        +    ControlNodePrefix
        +    isComposite ?= 'decide' UsageDeclaration
        +    ActionBody
        +
        + +
        JoinNode =
        +    ControlNodePrefix
        +    isComposite ?= 'join' UsageDeclaration
        +    ActionBody
        +
        + +
        ForkNode =
        +    ControlNodePrefix
        +    isComposite ?= 'fork' UsageDeclaration
        +    ActionBody
        +
        +
        // Clause 8.2.2.17.4 Send and Accept Action Usages
        + +
        AcceptNode : AcceptActionUsage =
        +    OccurrenceUsagePrefix
        +    AcceptNodeDeclaration ActionBody
        +
        + +
        AcceptNodeDeclaration : AcceptActionUsage =
        +    ActionNodeUsageDeclaration?
        +    'accept' AcceptParameterPart
        +
        + +
        AcceptParameterPart : AcceptActionUsage =
        +    ownedRelationship += PayloadParameterMember
        +    ( 'via' ownedRelationship += NodeParameterMember )?
        +
        + +
        PayloadParameterMember : ParameterMembership =
        +    ownedRelatedElement += PayloadParameter
        +
        + +
        PayloadParameter : ReferenceUsage =
        +      PayloadFeature
        +    | Identification PayloadFeatureSpecializationPart?
        +      TriggerValuePart
        +
        + +
        TriggerValuePart : Feature =
        +    ownedRelationship += TriggerFeatureValue
        +
        + +
        TriggerFeatureValue : FeatureValue =
        +    ownedRelatedElement += TriggerExpression
        +
        + +
        TriggerExpression : TriggerInvocationExpression =
        +      kind = (   'at | 'after )
        +      ownedRelationship += ArgumentMember
        +    | kind = 'when'
        +      ownedRelationship += ArgumentExpressionMember
        +
        + +
        ArgumentMember : ParameterMembership =
        +    ownedMemberParameter = Argument
        +
        + +
        Argument : Feature =
        +    ownedRelationship += ArgumentValue
        +
        + +
        ArgumentValue : FeatureValue =
        +    value = OwnedExpression
        +
        + +
        ArgumentExpressionMember : ParameterMembership =
        +    ownedRelatedElement += ArgumentExpression
        +
        + +
        ArgumentExpression : Feature =
        +    ownedRelationship += ArgumentExpressionValue
        +
        + +
        ArgumentExpressionValue : FeatureValue =
        +    ownedRelatedElement += OwnedExpressionReference
        +
        + +
        SendNode : SendActionUsage =
        +    OccurrenceUsagePrefix ActionUsageDeclaration? 'send'
        +    ( ownedRelationship += NodeParameterMember SenderReceiverPart?
        +    | ownedRelationship += EmptyParameterMember SendReceiverPart )?
        +    ActionBody
        +
        + +
        SendNodeDeclaration : SendActionUsage =
        +    ActionNodeUsageDeclaration?  'send'
        +    ownedRelationship += NodeParameterMember SenderReceiverPart?
        +
        + +
        SenderReceiverPart : SendActionUsage =
        +      'via' ownedRelationship += NodeParameterMember
        +      ( 'to' ownedRelationship += NodeParameterMember )?
        +    | ownedRelationship += EmptyParameterMember
        +      'to' ownedRelationship += NodeParameterMember
        +
        + +
        NodeParameterMember : ParameterMembership =
        +    ownedRelatedElement += NodeParameter
        +
        + +
        NodeParameter : ReferenceUsage =
        +    ownedRelationship += FeatureBinding
        +
        + +
        FeatureBinding : FeatureValue =
        +    ownedRelatedElement += OwnedExpression
        +
        + +
        EmptyParameterMember : ParameterMembership =
        +    ownedRelatedElement += EmptyUsage
        +
        + +
        EmptyUsage : ReferenceUsage =
        +    {}
        +
        +

        // Notes:

        +
          +
        1. // 1. The productions for ArgumentMember, Argument, ArgumentValue, ArgumentExpressionMember, ArgumentExpression and ArgumentExpressionValue are the same as given in [KerML, 8.2.5.8.1].
        2. +
        +
        // Clause 8.2.2.17.5 Assignment Action Usages
        + +
        AssignmentNode : AssignmentActionUsage =
        +    OccurrenceUsagePrefix
        +    AssignmentNodeDeclaration ActionBody
        +
        + +
        AssignmentNodeDeclaration: ActionUsage =
        +    ( ActionNodeUsageDeclaration )? 'assign'
        +    ownedRelationship += AssignmentTargetMember
        +    ownedRelationship += FeatureChainMember ':='
        +    ownedRelationship += NodeParameterMember
        +
        + +
        AssignmentTargetMember : ParameterMembership =
        +    ownedRelatedElement += AssignmentTargetParameter
        +
        + +
        AssignmentTargetParameter : ReferenceUsage =
        +    ( ownedRelationship += AssignmentTargetBinding '.' )?
        +
        + +
        AssignmentTargetBinding : FeatureValue =
        +    ownedRelatedElement += NonFeatureChainPrimaryExpression
        +
        + +
        FeatureChainMember : Membership =
        +      memberElement = [QualifiedName]
        +    | OwnedFeatureChainMember
        +
        + +
        OwnedFeatureChainMember : OwningMembership =
        +    ownedRelatedElement += OwnedFeatureChain
        +
        +
        // Clause 8.2.2.17.6 Terminate Action Usages
        + +
        TerminateNode : TerminateActionUsage =
        +    OccurrenceUsagePrefix ActionNodeUsageDeclaration?
        +    'terminate' ( ownedRelationship += NodeParameterMember )?
        +    ActionBody
        +
        +
        // Clause 8.2.2.17.7 Structured Control Action Usages
        + +
        IfNode : IfActionUsage =
        +    ActionNodePrefix
        +    'if' ownedRelationship += ExpressionParameterMember
        +    ownedRelationship += ActionBodyParameterMember
        +    ( 'else' ownedRelationship +=
        +      ( ActionBodyParameterMember | IfNodeParameterMember ) )?
        +
        + +
        ExpressionParameterMember : ParameterMembership =
        +    ownedRelatedElement += OwnedExpression
        +
        + +
        ActionBodyParameterMember : ParameterMembership =
        +    ownedRelatedElement += ActionBodyParameter
        +
        + +
        ActionBodyParameter : ActionUsage =
        +    ( 'action' UsageDeclaration? )?
        +    '{' ActionBodyItem* '}'
        +
        + +
        IfNodeParameterMember : ParameterMembership =
        +    ownedRelatedElement += IfNode
        +
        + +
        WhileLoopNode : WhileLoopActionUsage =
        +    ActionNodePrefix
        +    ( 'while' ownedRelationship += ExpressionParameterMember
        +    | 'loop' ownedRelationship += EmptyParameterMember
        +    )
        +    ownedRelationship += ActionBodyParameterMember
        +    ( 'until' ownedRelationship += ExpressionParameterMember ';' )?
        +
        + +
        ForLoopNode : ForLoopActionUsage =
        +    ActionNodePrefix
        +    'for' ownedRelationship += ForVariableDeclarationMember
        +    'in' ownedRelationship += NodeParameterMember
        +    ownedRelationship += ActionBodyParameterMember
        +
        + +
        ForVariableDeclarationMember : FeatureMembership =
        +    ownedRelatedElement += UsageDeclaration
        +
        + +
        ForVariableDeclaration : ReferenceUsage =
        +    UsageDeclaration
        +
        +
        // Clause 8.2.2.17.8 Action Successions
        + +
        ActionTargetSuccession : Usage =
        +    ( TargetSuccession | GuardedTargetSuccession | DefaultTargetSuccession )
        +    UsageBody
        +
        + +
        TargetSuccession : SuccessionAsUsage =
        +    ownedRelationship += SourceEndMember
        +    'then' ownedRelationship += ConnectorEndMember
        +
        + +
        GuardedTargetSuccession : TransitionUsage =
        +    ownedRelationship += GuardExpressionMember
        +    'then' ownedRelationship += TransitionSuccessionMember
        +
        + +
        DefaultTargetSuccession : TransitionUsage =
        +    'else' ownedRelationship += TransitionSuccessionMember
        +
        + +
        GuardedSuccession : TransitionUsage =
        +    ( 'succession' UsageDeclaration )?
        +    'first' ownedRelationship += FeatureChainMember
        +    ownedRelationship += GuardExpressionMember
        +    'then' ownedRelationship += TransitionSuccessionMember
        +    UsageBody
        +
        +

        // Clause 8.2.2.18 States Textual Notation

        +
        // Clause 8.2.2.18.1 State Definitions
        + +
        StateDefinition =
        +    OccurrenceDefinitionPrefix 'state' 'def'
        +    DefinitionDeclaration StateDefBody
        +
        + +
        StateDefBody : StateDefinition =
        +      ';'
        +    | ( isParallel ?= 'parallel' )?
        +      '{' StateBodyItem* '}'
        +
        + +
        StateBodyItem : Type =
        +      NonBehaviorBodyItem
        +    | ( ownedRelationsup += SourceSuccessionMember )?
        +      ownedRelationship += BehaviorUsageMember
        +      ( ownedRelationship += TargetTransitionUsageMember )*
        +    | ownedRelationship += TransitionUsageMember
        +    | ownedRelationship += EntryActionMember
        +      ( ownedRelationship += EntryTransitionMember )*
        +    | ownedRelationship += DoActionMember
        +    | ownedRelationship += ExitActionMember
        +
        + +
        EntryActionMember : StateSubactionMembership =
        +    MemberPrefix kind = 'entry'
        +    ownedRelatedElement += StateActionUsage
        +
        + +
        DoActionMember : StateSubactionMembership =
        +    MemberPrefix kind = 'do'
        +    ownedRelatedElement += StateActionUsage
        +
        + +
        ExitActionMember : StateSubactionMembership =
        +    MemberPrefix kind = 'exit'
        +    ownedRelatedElement += StateActionUsage
        +
        + +
        EntryTransitionMember : FeatureMembership :
        +    MemberPrefix
        +    ( ownedRelatedElement += GuardedTargetSuccession
        +    | 'then' ownedRelatedElement += TargetSuccession
        +    ) ';'
        +
        + +
        StateActionUsage : ActionUsage =
        +    EmptyActionUsage ';'
        +    | StatePerformActionUsage
        +    | StateAcceptActionUsage
        +    | StateSendActionUsage
        +    | StateAssignmentActionUsage
        +
        + +
        EmptyActionUsage : ActionUsage =
        +    {}
        +
        + +
        StatePerformActionUsage : PerformActionUsage =
        +    PerformActionUsageDeclaration ActionBody
        +
        + +
        StateAcceptActionUsage : AcceptActionUsage =
        +    AcceptNodeDeclaration ActionBody
        +
        + +
        StateSendActionUsage : SendActionUsage
        +    SendNodeDeclaration ActionBody
        +
        + +
        StateAssignmentActionUsage : AssignmentActionUsage =
        +    AssignmentNodeDeclaration ActionBody
        +
        + +
        TransitionUsageMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += TransitionUsage
        +
        + +
        TargetTransitionUsageMember : FeatureMembership =
        +    MemberPrefix ownedRelatedElement += TargetTransitionUsage
        +
        +
        // Clause 8.2.2.18.2 State Usages
        + +
        StateUsage =
        +    OccurrenceUsagePrefix 'state'
        +    ActionUsageDeclaration StateUsageBody
        +
        + +
        StateUsageBody : StateUsage =
        +       ';'
        +     | ( isParallel ?= 'parallel' )?
        +       '{' StateBodyItem* '}'
        +
        + +
        ExhibitStateUsage =
        +    OccurrenceUsagePrefix 'exhibit'
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'state' UsageDeclaration )
        +    ValuePart? StateUsageBody
        +
        +
        // Clause 8.2.2.18.3 Transition Usages
        + +
        TransitionUsage =
        +    'transition' ( UsageDeclaration 'first' )?
        +    ownedRelationship += FeatureChainMember
        +    ownedRelationship += EmptyParameterMember
        +    ( ownedRelationship += EmptyParameterMember
        +      ownedRelationship += TriggerActionMember )?
        +    ( ownedRelationship += GuardExpressionMember )?
        +    ( ownedRelationship += EffectBehaviorMember )?
        +    'then' ownedRelationship += TransitionSuccessionMember
        +    ActionBody
        +
        + +
        TargetTransitionUsage : TransitionUsage =
        +    ownedRelationship += EmptyParameterMember
        +    ( 'transition'
        +      ( ownedRelationship += EmptyParameterMember
        +        ownedRelationship += TriggerActionMember )?
        +      ( ownedRelationship += GuardExpressionMember )?
        +      ( ownedRelationship += EffectBehaviorMember )?
        +    | ownedRelationship += EmptyParameterMember
        +      ownedRelationship += TriggerActionMember
        +      ( ownedRelationship += GuardExpressionMember )?
        +      ( ownedRelationship += EffectBehaviorMember )?
        +    | ownedRelationship += GuardExpressionMember
        +      ( ownedRelationship += EffectBehaviorMember )?
        +    )?
        +    'then' ownedRelationship += TransitionSuccessionMember
        +    ActionBody
        +
        + +
        TriggerActionMember : TransitionFeatureMembership =
        +    'accept' { kind = 'trigger' } ownedRelatedElement += TriggerAction
        +
        + +
        TriggerAction : AcceptActionUsage =
        +    AcceptParameterPart
        +
        + +
        GuardExpressionMember : TransitionFeatureMembership =
        +    'if' { kind = 'guard' } ownedRelatedElement += OwnedExpression
        +
        + +
        EffectBehaviorMember : TransitionFeatureMembership =
        +    'do' { kind = 'effect' } ownedRelatedElement += EffectBehaviorUsage
        +
        + +
        EffectBehaviorUsage : ActionUsage =
        +      EmptyActionUsage
        +    | TransitionPerformActionUsage
        +    | TransitionAcceptActionUsage
        +    | TransitionSendActionUsage
        +    | TransitionAssignmentActionUsage
        +
        + +
        TransitionPerformActionUsage : PerformActionUsage =
        +    PerformActionUsageDeclaration ( '{' ActionBodyItem* '}' )?
        +
        + +
        TransitionAcceptActionUsage : AcceptActionUsage =
        +    AcceptNodeDeclaration ( '{' ActionBodyItem* '}' )?
        +
        + +
        TransitionSendActionUsage : SendActionUsage =
        +    SendNodeDeclaration ( '{' ActionBodyItem* '}' )?
        +
        + +
        TransitionAssignmentActionUsage : AssignmentActionUsage =
        +    AssignmentNodeDeclaration ( '{' ActionBodyItem* '}' )?
        +
        + +
        TransitionSuccessionMember : OwningMembership =
        +    ownedRelatedElement += TransitionSuccession
        +
        + +
        TransitionSuccession : Succession =
        +    ownedRelationship += EmptyEndMember
        +    ownedRelationship += ConnectorEndMember
        +
        + +
        EmptyEndMember : EndFeatureMembership =
        +    ownedRelatedElement += EmptyFeature
        +
        + +
        EmptyFeature : ReferenceUsage =
        +    {}
        +
        +

        // Clause 8.2.2.19 Calculations Textual Notation

        + +
        CalculationDefinition =
        +    OccurrenceDefinitionPrefix 'calc' 'def'
        +    DefinitionDeclaration CalculationBody
        +
        + +
        CalculationUsage : CalculationUsage =
        +    OccurrenceUsagePrefix 'calc'
        +    ActionUsageDeclaration CalculationBody
        +
        + +
        CalculationBody : Type =
        +      ';' | '{' CalculationBodyPart '}'
        +
        + +
        CalculationBodyPart : Type =
        +      CalculationBodyItem*
        +      ( ownedRelationship += ResultExpressionMember )?
        +
        + +
        CalculationBodyItem : Type =
        +      ActionBodyItem
        +    | ownedRelationship += ReturnParameterMember
        +
        + +
        ReturnParameterMember : ReturnParameterMembership =
        +    MemberPrefix? 'return' ownedRelatedElement += UsageElement
        +
        + +
        ResultExpressionMember : ResultExpressionMembership =
        +    MemberPrefix? ownedRelatedElement += OwnedExpression
        +
        +

        // Clause 8.2.2.20 Constraints Textual Notation

        + +
        ConstraintDefinition =
        +    OccurrenceDefinitionPrefix 'constraint' 'def'
        +    DefinitionDeclaration CalculationBody
        +
        + +
        ConstraintUsage =
        +    OccurrenceUsagePrefix 'constraint'
        +    ConstraintUsageDeclaration CalculationBody
        +
        + +
        AssertConstraintUsage =
        +    OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' )?
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'constraint' ConstraintUsageDeclaration )
        +    CalculationBody
        +
        + +
        ConstraintUsageDeclaration : ConstraintUsage =
        +    UsageDeclaration ValuePart?
        +
        +

        // Clause 8.2.2.21 Requirements Textual Notation

        +
        // Clause 8.2.2.21.1 Requirement Definitions
        + +
        RequirementDefinition =
        +    OccurrenceDefinitionPrefix 'requirement' 'def'
        +    DefinitionDeclaration RequirementBody
        +
        + +
        RequirementBody : Type =
        +      ';' | '{' RequirementBodyItem* '}'
        +
        + +
        RequirementBodyItem : Type =
        +      DefinitionBodyItem
        +    | ownedRelationship += SubjectMember
        +    | ownedRelationship += RequirementConstraintMember
        +    | ownedRelationship += FramedConcernMember
        +    | ownedRelationship += RequirementVerificationMember
        +    | ownedRelationship += ActorMember
        +    | ownedRelationship += StakeholderMember
        +
        + +
        SubjectMember : SubjectMembership =
        +    MemberPrefix ownedRelatedElement += SubjectUsage
        +
        + +
        SubjectUsage : ReferenceUsage =
        +    'subject' UsageExtensionKeyword* Usage
        +
        + +
        RequirementConstraintMember : RequirementConstraintMembership =
        +    MemberPrefix? RequirementKind
        +    ownedRelatedElement += RequirementConstraintUsage
        +
        + +
        RequirementKind : RequirementConstraintMembership =
        +      'assume' { kind = 'assumption' }
        +    | 'require' { kind = 'requirement' }
        +
        + +
        RequirementConstraintUsage : ConstraintUsage =
        +      ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart? RequirementBody
        +    | ( UsageExtensionKeyword* 'constraint'
        +      | UsageExtensionKeyword+ )
        +      ConstraintUsageDeclaration CalculationBody
        +
        + +
        FramedConcernMember : FramedConcernMembership =
        +    MemberPrefix? 'frame'
        +    ownedRelatedElement += FramedConcernUsage
        +
        + +
        FramedConcernUsage : ConcernUsage =
        +      ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart? CalculationBody
        +    | ( UsageExtensionKeyword* 'concern'
        +      | UsageExtensionKeyword+ )
        +      CalculationUsageDeclaration CalculationBody
        +
        + +
        ActorMember : ActorMembership =
        +    MemberPrefix ownedRelatedElement += ActorUsage
        +
        + +
        ActorUsage : PartUsage =
        +    'actor' UsageExtensionKeyword* Usage
        +
        + +
        StakeholderMember : StakeholderMembership =
        +    MemberPrefix ownedRelatedElement += StakeholderUsage
        +
        + +
        StakeholderUsage : PartUsage =
        +    'stakeholder' UsageExtensionKeyword* Usage
        +
        +
        // Clause 8.2.2.21.2 Requirement Usages
        + +
        RequirementUsage =
        +    OccurrenceUsagePrefix 'requirement'
        +    ConstraintUsageDeclaration RequirementBody
        +
        + +
        SatisfyRequirementUsage =
        +    OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' ) 'satisfy'
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'requirement' UsageDeclaration )
        +    ValuePart?
        +    ( 'by' ownedRelationship += SatisfactionSubjectMember )?
        +    RequirementBody
        +
        + +
        SatisfactionSubjectMember : SubjectMembership =
        +    ownedRelatedElement += SatisfactionParameter
        +
        + +
        SatisfactionParameter : ReferenceUsage =
        +    ownedRelationship += SatisfactionFeatureValue
        +
        + +
        SatisfactionFeatureValue : FeatureValue =
        +    ownedRelatedElement += SatisfactionReferenceExpression
        +
        + +
        SatisfactionReferenceExpression : FeatureReferenceExpression =
        +    ownedRelationship += FeatureChainMember
        +
        +
        // Clause 8.2.2.21.3 Concerns
        + +
        ConcernDefinition =
        +    OccurrenceDefinitionPrefix 'concern' 'def'
        +    DefinitionDeclaration RequirementBody
        +
        + +
        ConcernUsage =
        +    OccurrenceUsagePrefix 'concern'
        +    ConstraintUsageDeclaration RequirementBody
        +
        +

        // Clause 8.2.2.22 Cases Textual Notation

        + +
        CaseDefinition =
        +    OccurrenceDefinitionPrefix 'case' 'def'
        +    DefinitionDeclaration CaseBody
        +
        + +
        CaseUsage =
        +    OccurrenceUsagePrefix 'case'
        +    ConstraintUsageDeclaration CaseBody
        +
        + +
        CaseBody : Type =
        +      ';'
        +    | '{' CaseBodyItem*
        +          ( ownedRelationship += ResultExpressionMember )?
        +      '}'
        +
        + +
        CaseBodyItem : Type =
        +      ActionBodyItem
        +    | ownedRelationship += SubjectMember
        +    | ownedRelationship += ActorMember
        +    | ownedRelationship += ObjectiveMember
        +
        + +
        ObjectiveMember : ObjectiveMembership =
        +    MemberPrefix 'objective'
        +    ownedRelatedElement += ObjectiveRequirementUsage
        +
        + +
        ObjectiveRequirementUsage : RequirementUsage =
        +    UsageExtensionKeyword* ConstraintUsageDeclaration
        +    RequirementBody
        +
        +

        // Clause 8.2.2.23 Analysis Cases Textual Notation

        + +
        AnalysisCaseDefinition =
        +    OccurrenceDefinitionPrefix 'analysis' 'def'
        +    DefinitionDeclaration CaseBody
        +
        + +
        AnalysisCaseUsage =
        +    OccurrenceUsagePrefix 'analysis'
        +    ConstraintUsageDeclaration CaseBody
        +
        +

        // Clause 8.2.2.24 Verification Cases Textual Notation

        + +
        VerificationCaseDefinition =
        +    OccurrenceDefinitionPrefix 'verification' 'def'
        +    DefinitionDeclaration CaseBody
        +
        + +
        VerificationCaseUsage =
        +    OccurrenceUsagePrefix 'verification'
        +    ConstraintUsageDeclaration CaseBody
        +
        + +
        RequirementVerificationMember : RequirementVerificationMembership =
        +    MemberPrefix 'verify' { kind = 'requirement' }
        +    ownedRelatedElement += RequirementVerificationUsage
        +
        + +
        RequirementVerificationUsage : RequirementUsage =
        +      ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecialization* RequirementBody
        +    | ( UsageExtensionKeyword* 'requirement'
        +      | UsageExtensionKeyword+ )
        +      ConstraintUsageDeclaration RequirementBody
        +
        +

        // Clause 8.2.2.25 Use Cases Textual Notation

        + +
        UseCaseDefinition =
        +    OccurrenceDefinitionPrefix 'use' 'case' 'def'
        +    DefinitionDeclaration CaseBody
        +
        + +
        UseCaseUsage =
        +    OccurrenceUsagePrefix 'use' 'case'
        +    ConstraintUsageDeclaration CaseBody
        +
        + +
        IncludeUseCaseUsage :
        +    OccurrenceUsagePrefix 'include'
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'use' 'case' UsageDeclaration )
        +    ValuePart?
        +    CaseBody
        +
        +

        // Clause 8.2.2.26 Views and Viewpoints Textual Notation

        +
        // Clause 8.2.2.26.1 View Definitions
        + +
        ViewDefinition =
        +    OccurrenceDefinitionPrefix 'view' 'def'
        +    DefinitionDeclaration ViewDefinitionBody
        +
        + +
        ViewDefinitionBody : ViewDefinition =
        +    ';' | '{' ViewDefinitionBodyItem* '}'
        +
        + +
        ViewDefinitionBodyItem : ViewDefinition =
        +      DefinitionBodyItem
        +    | ownedRelationship += ElementFilterMember
        +    | ownedRelationship += ViewRenderingMember
        +
        + +
        ViewRenderingMember : ViewRenderingMembership =
        +    MemberPrefix 'render'
        +    ownedRelatedElement += ViewRenderingUsage
        +
        + +
        ViewRenderingUsage : RenderingUsage =
        +      ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +      UsageBody
        +    | ( UsageExtensionKeyword* 'rendering'
        +      | UsageExtensionKeyword+ )
        +      Usage
        +
        +
        // Clause 8.2.2.26.2 View Usages
        + +
        ViewUsage =
        +    OccurrenceUsagePrefix 'view'
        +    UsageDeclaration? ValuePart?
        +    ViewBody
        +
        + +
        ViewBody : ViewUsage =
        +    ';' | '{' ViewBodyItem* '}'
        +
        + +
        ViewBodyItem : ViewUsage =
        +      DefinitionBodyItem
        +    | ownedRelationship += ElementFilterMember
        +    | ownedRelationship += ViewRenderingMember
        +    | ownedRelationship += Expose
        +
        + +
        Expose =
        +    'expose' ( MembershipExpose | NamespaceExpose )
        +    RelationshipBody
        +
        + +
        MembershipExpose =
        +    MembershipImport
        +
        + +
        NamespaceExpose =
        +    NamespaceImport
        +
        +
        // Clause 8.2.2.26.3 Viewpoints
        + +
        ViewpointDefinition =
        +    OccurrenceDefinitionPrefix 'viewpoint' 'def'
        +    DefinitionDeclaration RequirementBody
        +
        + +
        ViewpointUsage =
        +    OccurrenceUsagePrefix 'viewpoint'
        +    ConstraintUsageDeclaration RequirementBody
        +
        +
        // Clause 8.2.2.26.4 Renderings
        + +
        RenderingDefinition =
        +    OccurrenceDefinitionPrefix 'rendering' 'def'
        +    Definition
        +
        + +
        RenderingUsage =
        +    OccurrenceUsagePrefix 'rendering'
        +    Usage
        +
        +

        // Clause 8.2.2.27 Metadata Textual Notation

        + +
        MetadataDefinition =
        +    ( isAbstract ?= 'abstract')? DefinitionExtensionKeyWord*
        +    'metadata' 'def' Definition
        +
        + +
        PrefixMetadataAnnotation : Annotation =
        +    '#' annotatingElement = PrefixMetadataUsage
        +    { ownedRelatedElement += annotatingElement }
        +
        + +
        PrefixMetadataMember : OwningMembership =
        +    '#' ownedRelatedEleemnt = PrefixMetadataUsage
        +
        + +
        PrefixMetadataUsage : MetadataUsage =
        +    ownedRelationship += OwnedFeatureTyping
        +
        + +
        MetadataUsage =
        +    UsageExtensionKeyword* ( '@' | 'metadata' )
        +    MetadataUsageDeclaration
        +    ( 'about' ownedRelationship += Annotation
        +      ( ',' ownedRelationship += Annotation )*
        +    )?
        +    MetadataBody
        +
        + +
        MetadataUsageDeclaration : MetadataUsage =
        +    ( Identification ( ':' | 'typed' 'by' ) )?
        +    ownedRelationship += OwnedFeatureTyping
        +
        + +
        MetadataBody : Type =
        +    ';' |
        +    '{' ( ownedRelationship += DefinitionMember
        +        | ownedRelationship += MetadataBodyUsageMember
        +        | ownedRelationship += AliasMember
        +        | ownedRelationship += Import
        +        )*
        +    '}'
        +
        + +
        MetadataBodyUsageMember : FeatureMembership =
        +    ownedMemberFeature = MetadataBodyUsage
        +
        + +
        MetadataBodyUsage : ReferenceUsage :
        +    'ref'? ( ':>>' | 'redefines' )? ownedRelationship += OwnedRedefinition
        +    FeatureSpecializationPart? ValuePart?
        +    MetadataBody
        +
        + +
        ExtendedDefinition : Definition =
        +    BasicDefinitionPrefix? DefinitionExtensionKeyword+
        +    'def' Definition
        +
        + +
        ExtendedUsage : Usage =
        +    UnextendedUsagePrefix UsageExtensionKeyword+
        +    Usage
        +
        +

        // End of BNF + +

        + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf.kebnf b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf.kebnf new file mode 100644 index 000000000..67bdd947b --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/SysML-textual-bnf.kebnf @@ -0,0 +1,1708 @@ +// Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html +// Generated by bnf_grammar_processor at: 2025-12-04T19:31:35Z + + +// Part 2 - Systems Modeling Language (SysML) + +// Clause 8.2.2 Textual Notation + +// Clause 8.2.2.1 Textual Notation Overview + +// Clause 8.2.2.1.1 EBNF Conventions + +// Clause 8.2.2.1.2 Lexical Structure + +RESERVED_KEYWORD = + 'about' | 'abstract' | 'accept' | 'action' | 'actor' | 'after' | 'alias' | 'all' | 'allocate' | 'allocation' + | 'analysis' | 'and' | 'as' | 'assert' | 'assign' | 'assume' | 'at' | 'attribute' | 'bind' | 'binding' | 'by' | 'calc' + | 'case' | 'comment' | 'concern' | 'connect' | 'connection' | 'constant' | 'constraint' | 'crosses' | 'decide' + | 'def' | 'default' | 'defined' | 'dependency' | 'derived' | 'do' | 'doc' | 'else' | 'end' | 'entry' | 'enum' + | 'event' | 'exhibit' | 'exit' | 'expose' | 'false' | 'filter' | 'first' | 'flow' | 'for' | 'fork' | 'frame' | 'from' + | 'hastype' | 'if' | 'implies' | 'import' | 'in' | 'include' | 'individual' | 'inout' | 'interface' | 'istype' + | 'item' | 'join' | 'language' | 'library' | 'locale' | 'loop' | 'merge' | 'message' | 'meta' | 'metadata' + | 'nonunique' | 'not' | 'null' | 'objective' | 'occurrence' | 'of' | 'or' | 'ordered' | 'out' | 'package' | 'parallel' + | 'part' | 'perform' | 'port' | 'private' | 'protected' | 'public' | 'redefines' | 'ref' | 'references' | 'render' + | 'rendering' | 'rep' | 'require' | 'requirement' | 'return' | 'satisfy' | 'send' | 'snapshot' | 'specializes' + | 'stakeholder' | 'standard' | 'state' | 'subject' | 'subsets' | 'succession' | 'terminate' | 'then' | 'timeslice' + | 'to' | 'transition' | 'true' | 'until' | 'use' | 'variant' | 'variation' | 'verification' | 'verify' | 'via' + | 'view' | 'viewpoint' | 'when' | 'while' | 'xor' + +DEFINED_BY = ':' | 'defined' 'by' + +SPECIALIZES = ':>' | 'specializes' + +SUBSETS = ':>' | 'subsets' + +REFERENCES = '::>' | 'references' + +CROSSES = '=>' | 'crosses' + +REDEFINES = ':>>' | 'redefines' + +// Clause 8.2.2.2 Elements and Relationships Textual Notation + +Identification : Element = + ( '<' declaredShortName = NAME '>' )? + ( declaredName = NAME )? + +RelationshipBody : Relationship = + ';' | '{' ( ownedRelationship += OwnedAnnotation )* '}' + +// Clause 8.2.2.3 Dependencies Textual Notation + +Dependency = + ( ownedRelationship += PrefixMetadataAnnotation )* + 'dependency' DependencyDeclaration + RelationshipBody + +DependencyDeclaration = + ( Identification 'from' )? + client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to' + supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )* + +// Clause 8.2.2.4 Annotations Textual Notation + +// Clause 8.2.2.4.1 Annotations + +Annotation = + annotatedElement = [QualifiedName] + +OwnedAnnotation : Annotation = + ownedRelatedElement += AnnotatingElement + +AnnotatingMember : OwningMembership = + ownedRelatedElement += AnnotatingElement + +AnnotatingElement = + Comment + | Documentation + | TextualRepresentation + | MetadataFeature + +// Clause 8.2.2.4.2 Comments and Documentation + +Comment = + ( 'comment' Identification + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + )? + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +Documentation = + 'doc' Identification + ( 'locale' locale = STRING_VALUE )? + body = REGULAR_COMMENT + +// Clause 8.2.2.4.3 Textual Representation + +TextualRepresentation = + ( 'rep' Identification )? + 'language' language = STRING_VALUE body = REGULAR_COMMENT + +// Clause 8.2.2.5 Namespaces and Packages Textual Notation + +// Clause 8.2.2.5.1 Packages + +RootNamespace : Namespace = + PackageBodyElement* + +Package = + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +LibraryPackage = + ( isStandard ?= 'standard' ) 'library' + ( ownedRelationship += PrefixMetadataMember )* + PackageDeclaration PackageBody + +PackageDeclaration : Package = + 'package' Identification + +PackageBody : Package = + ';' | '{' PackageBodyElement* '}' + +PackageBodyElement : Package = + ownedRelationship += PackageMember + | ownedRelationship += ElementFilterMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +MemberPrefix : Membership = + ( visibility = VisibilityIndicator )? + +PackageMember : OwningMembership + MemberPrefix + ( ownedRelatedElement += DefinitionElement + | ownedRelatedElement = UsageElement ) + +ElementFilterMember : ElementFilterMembership = + MemberPrefix + 'filter' ownedRelatedElement += OwnedExpression ';' + +AliasMember : Membership = + MemberPrefix + 'alias' ( '<' memberShortName = NAME '>' )? + ( memberName = NAME )? + 'for' memberElement = [QualifiedName] + RelationshipBody + +Import = + visibility = VisibilityIndicator + 'import' ( isImportAll ?= 'all' )? + ImportDeclaration + RelationshipBody + +ImportDeclaration : Import = + MembershipImport | NamespaceImport + +MembershipImport = + importedMembership = [QualifiedName] + ( '::' isRecursive ?= '**' )? + +NamespaceImport = + importedNamespace = [QualifiedName] '::' '*' + ( '::' isRecursive ?= '**' )? + | importedNamspace = FilterPackage + { ownedRelatedElement += importedNamespace } + +FilterPackage : Package = + ownedRelationship += FilterPackageImport + ( ownedRelationship += FilterPackageMember )+ + +FilterPackageMember : ElementFilterMembership = + '[' ownedRelatedElement += OwnedExpression ']' + +VisibilityIndicator : VisibilityKind = + 'public' | 'private' | 'protected' + +// Clause 8.2.2.5.2 Package Elements + +DefinitionElement : Element = + Package + | LibraryPackage + | AnnotatingElement + | Dependency + | AttributeDefinition + | EnumerationDefinition + | OccurrenceDefinition + | IndividualDefinition + | ItemDefinition + | PartDefinition + | ConnectionDefinition + | FlowDefinition + | InterfaceDefinition + | PortDefinition + | ActionDefinition + | CalculationDefinition + | StateDefinition + | ConstraintDefinition + | RequirementDefinition + | ConcernDefinition + | CaseDefinition + | AnalysisCaseDefinition + | VerificationCaseDefinition + | UseCaseDefinition + | ViewDefinition + | ViewpointDefinition + | RenderingDefinition + | MetadataDefinition + | ExtendedDefinition + +UsageElement : Usage = + NonOccurrenceUsageElement + | OccurrenceUsageElement + +// Clause 8.2.2.6 Definition and Usage Textual Notation + +// Clause 8.2.2.6.1 Definitions + +BasicDefinitionPrefix = + isAbstract ?= 'abstract' | isVariation ?= 'variation' + +DefinitionExtensionKeyword : Definition = + ownedRelationship += PrefixMetadataMember + +DefinitionPrefix : Definition = + BasicDefinitionPrefix? DefinitionExtensionKeyword* + +Definition = + DefinitionDeclaration DefinitionBody + +DefinitionDeclaration : Definition + Identification SubclassificationPart? + +DefinitionBody : Type = + ';' | '{' DefinitionBodyItem* '}' + +DefinitionBodyItem : Type = + ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += NonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += OccurrenceUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +DefinitionMember : OwningMembership = + MemberPrefix + ownedRelatedElement += DefinitionElement + +VariantUsageMember : VariantMembership = + MemberPrefix 'variant' + ownedVariantUsage = VariantUsageElement + +NonOccurrenceUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += NonOccurrenceUsageElement + +OccurrenceUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += OccurrenceUsageElement + +StructureUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += StructureUsageElement + +BehaviorUsageMember : FeatureMembership = + MemberPrefix + ownedRelatedElement += BehaviorUsageElement + +// Clause 8.2.2.6.2 Usages + +FeatureDirection : FeatureDirectionKind = + 'in' | 'out' | 'inout' + +RefPrefix : Usage = + ( direction = FeatureDirection )? + ( isDerived ?= 'derived' )? + ( isAbstract ?= 'abstract' | isVariation ?= 'variation' )? + ( isConstant ?= 'constant' )? + +BasicUsagePrefix : Usage = + RefPrefix + ( isReference ?= 'ref' )? + +EndUsagePrefix : Usage = + isEnd ?= 'end' ( ownedRelationship += OwnedCrossFeatureMember )? + +// (See Note 1) + +OwnedCrossFeatureMember : OwningMembership = + ownedRelatedElement += OwnedCrossFeature + +OwnedCrossFeature : ReferenceUsage = + BasicUsagePrefix UsageDeclaration + +UsageExtensionKeyword : Usage = + ownedRelationship += PrefixMetadataMember + +UnextendedUsagePrefix : Usage = + EndUsagePrefix | BasicUsagePrefix + +UsagePrefix : Usage + UnextendedUsagePrefix UsageExtensionKeyword* + +Usage = + UsageDeclaration UsageCompletion + +UsageDeclaration : Usage = + Identification FeatureSpecializationPart? + +UsageCompletion : Usage = + ValuePart? UsageBody + +UsageBody : Usage = + DefinitionBody + +ValuePart : Feature = + ownedRelationship += FeatureValue + +FeatureValue = + ( '=' + | isInitial ?= ':=' + | isDefault ?= 'default' ( '=' | isInitial ?= ':=' )? + ) + ownedRelatedElement += OwnedExpression + +// Notes: +// 1. A Usage parsed with isEnd = true for which mayTimeVary = true must also have isConstant set to true, even though this is not explicitly notated in the textual notation, in order to satisfy the KerML constraint checkFeatureEndIsConstant. + +// Clause 8.2.2.6.3 Reference Usages + +DefaultReferenceUsage : ReferenceUsage = + RefPrefix Usage + +ReferenceUsage = + ( EndUsagePrefix | RefPrefix ) + 'ref' Usage + +VariantReference : ReferenceUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecialization* UsageBody + +// Clause 8.2.2.6.4 Body Elements + +NonOccurrenceUsageElement : Usage = + DefaultReferenceUsage + | ReferenceUsage + | AttributeUsage + | EnumerationUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + | ExtendedUsage + +OccurrenceUsageElement : Usage = + StructureUsageElement | BehaviorUsageElement + +StructureUsageElement : Usage = + OccurrenceUsage + | IndividualUsage + | PortionUsage + | EventOccurrenceUsage + | ItemUsage + | PartUsage + | ViewUsage + | RenderingUsage + | PortUsage + | ConnectionUsage + | InterfaceUsage + | AllocationUsage + | Message + | FlowUsage + | SuccessionFlowUsage + +BehaviorUsageElement : Usage = + ActionUsage + | CalculationUsage + | StateUsage + | ConstraintUsage + | RequirementUsage + | ConcernUsage + | CaseUsage + | AnalysisCaseUsage + | VerificationCaseUsage + | UseCaseUsage + | ViewpointUsage + | PerformActionUsage + | ExhibitStateUsage + | IncludeUseCaseUsage + | AssertConstraintUsage + | SatisfyRequirementUsage + +VariantUsageElement : Usage = + VariantReference + | ReferenceUsage + | AttributeUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + | OccurrenceUsage + | IndividualUsage + | PortionUsage + | EventOccurrenceUsage + | ItemUsage + | PartUsage + | ViewUsage + | RenderingUsage + | PortUsage + | ConnectionUsage + | InterfaceUsage + | AllocationUsage + | Message + | FlowUsage + | SuccessionFlowUsage + | BehaviorUsageElement + +// Clause 8.2.2.6.5 Specialization + +SubclassificationPart : Classifier = + SPECIALIZES ownedRelationship += OwnedSubclassification + ( ',' ownedRelationship += OwnedSubclassification )* + +OwnedSubclassification : Subclassification = + superClassifier = [QualifiedName] + +FeatureSpecializationPart : Feature = + FeatureSpecialization+ MultiplicityPart? FeatureSpecialization* + | MultiplicityPart FeatureSpecialization* + +FeatureSpecialization : Feature = + Typings | Subsettings | References | Crosses | Redefinitions + +Typings : Feature = + TypedBy ( ',' ownedRelationship += FeatureTyping )* + +TypedBy : Feature = + DEFINED_BY ownedRelationship += FeatureTyping + +FeatureTyping = + OwnedFeatureTyping | ConjugatedPortTyping + +OwnedFeatureTyping : FeatureTyping = + type = [QualifiedName] + | type = OwnedFeatureChain + { ownedRelatedElement += type } + +Subsettings : Feature = + Subsets ( ',' ownedRelationship += OwnedSubsetting )* + +Subsets : Feature = + SUBSETS ownedRelationship += OwnedSubsetting + +OwnedSubsetting : Subsetting = + subsettedFeature = [QualifiedName] + | subsettedFeature = OwnedFeatureChain + { ownedRelatedElement += subsettedFeature } + +References : Feature = + REFERENCES ownedRelationship += OwnedReferenceSubsetting + +OwnedReferenceSubsetting : ReferenceSubsetting = + referencedFeature = [QualifiedName] + | referencedFeature = OwnedFeatureChain + { ownedRelatedElement += referenceFeature } + +Crosses : Feature = + CROSSES ownedRelationship += OwnedCrossSubsetting + +OwnedCrossSubsetting : CrossSubsetting = + crossedFeature = [QualifiedName] + | crossedFeature = OwnedFeatureChain + { ownedRelatedElement += crossedFeature } + +Redefinitions : Feature = + Redefines ( ',' ownedRelationship += OwnedRedefinition )* + +Redefines : Feature = + REDEFINES ownedRelationship += OwnedRedefinition + +OwnedRedefinition : Redefinition = + redefinedFeature = [QualifiedName] + | redefinedFeature = OwnedFeatureChain + { ownedRelatedElement += redefinedFeature } + +OwnedFeatureChain : Feature = + ownedRelationship += OwnedFeatureChaining + ( '.' ownedRelationship += OwnedFeatureChaining )+ + +OwnedFeatureChaining : FeatureChaining = + chainingFeature = [QualifiedName] + +// Clause 8.2.2.6.6 Multiplicity + +MultiplicityPart : Feature = + ownedRelationship += OwnedMultiplicity + | ( ownedRelationship += OwnedMultiplicity )? + ( isOrdered ?= 'ordered' ( { isUnique = false } 'nonunique' )? + | { isUnique = false } 'nonunique' ( isOrdered ?= 'ordered' )? ) + +OwnedMultiplicity : OwningMembership = + ownedRelatedElement += MultiplicityRange + +MultiplicityRange = + '[' ( ownedRelationship += MultiplicityExpressionMember '..' )? + ownedRelationship += MultiplicityExpressionMember ']' + +MultiplicityExpressionMember : OwningMembership = + ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression ) + +// Clause 8.2.2.7 Attributes Textual Notation + +AttributeDefinition : AttributeDefinition = + DefinitionPrefix 'attribute' 'def' Definition + +AttributeUsage : AttributeUsage = + UsagePrefix 'attribute' Usage + +// Clause 8.2.2.8 Enumerations Textual Notation + +EnumerationDefinition = + DefinitionExtensionKeyword* + 'enum' 'def' DefinitionDeclaration EnumerationBody + +EnumerationBody : EnumerationDefinition = + ';' + | '{' ( ownedRelationship += AnnotatingMember + | ownedRelationship += EnumerationUsageMember )* + '}' + +EnumerationUsageMember : VariantMembership = + MemberPrefix ownedRelatedElement += EnumeratedValue + +EnumeratedValue : EnumerationUsage = + 'enum'? Usage + +EnumerationUsage : EnumerationUsage = + UsagePrefix 'enum' Usage + +// Clause 8.2.2.9 Occurrences Textual Notation + +// Clause 8.2.2.9.1 Occurrence Definitions + +OccurrenceDefinitionPrefix : OccurrenceDefinition = + BasicDefinitionPrefix? + ( isIndividual ?= 'individual' + ownedRelationship += EmptyMultiplicityMember + )? + DefinitionExtensionKeyword* + +OccurrenceDefinition = + OccurrenceDefinitionPrefix 'occurrence' 'def' Definition + +IndividualDefinition : OccurrenceDefinition = + BasicDefinitionPrefix? isIndividual ?= 'individual' + DefinitionExtensionKeyword* 'def' Definition + ownedRelationship += EmptyMultiplicityMember + +EmptyMultiplicityMember : OwningMembership = + ownedRelatedElement += EmptyMultiplicity + +EmptyMultiplicity : Multiplicity = + { } + +// Clause 8.2.2.9.2 Occurrence Usages + +OccurrenceUsagePrefix : OccurrenceUsage = + BasicUsagePrefix + ( isIndividual ?= 'individual' )? + ( portionKind = PortionKind + { isPortion = true } + )? + UsageExtensionKeyword* + +OccurrenceUsage = + OccurrenceUsagePrefix 'occurrence' Usage + +IndividualUsage : OccurrenceUsage = + BasicUsagePrefix isIndividual ?= 'individual' + UsageExtensionKeyword* Usage + +PortionUsage : OccurrenceUsage = + BasicUsagePrefix ( isIndividual ?= 'individual' )? + portionKind = PortionKind + UsageExtensionKeyword* Usage + { isPortion = true } + +PortionKind = + 'snapshot' | 'timeslice' + +EventOccurrenceUsage = + OccurrenceUsagePrefix 'event' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'occurrence' UsageDeclaration? ) + UsageCompletion + +// Clause 8.2.2.9.3 Occurrence Successions + +SourceSuccessionMember : FeatureMembership = + 'then' ownedRelatedElement += SourceSuccession + +SourceSuccession : SuccessionAsUsage = + ownedRelationship += SourceEndMember + +SourceEndMember : EndFeatureMembership = + ownedRelatedElement += SourceEnd + +SourceEnd : ReferenceUsage = + ( ownedRelationship += OwnedMultiplicity )? + +// Clause 8.2.2.10 Items Textual Notation + +ItemDefinition = + OccurrenceDefinitionPrefix + 'item' 'def' Definition + +ItemUsage = + OccurrenceUsagePrefix 'item' Usage + +// Clause 8.2.2.11 Parts Textual Notation + +PartDefinition = + OccurrenceDefinitionPrefix 'part' 'def' Definition + +PartUsage = + OccurrenceUsagePrefix 'part' Usage + +// Clause 8.2.2.12 Ports Textual Notation + +PortDefinition = + DefinitionPrefix 'port' 'def' Definition + ownedRelationship += ConjugatedPortDefinitionMember + { conjugatedPortDefinition.ownedPortConjugator. + originalPortDefinition = this } + +// (See Note 1) + +ConjugatedPortDefinitionMember : OwningMembership = + ownedRelatedElement += ConjugatedPortDefinition + +ConjugatedPortDefinition = + ownedRelationship += PortConjugation + +PortConjugation = + {} + +PortUsage = + OccurrenceUsagePrefix 'port' Usage + +ConjugatedPortTyping : ConjugatedPortTyping = + '~' originalPortDefinition = ~[QualifiedName] + +// (See Note 2) + +// Notes: +// 1. Even though it is not explicitly represented in the text, a PortDefinition is always parsed as containing a nested ConjugatedPortDefinition with a PortDefinition Relationship pointing back to the containing PortDefinition. The abstract syntax for ConjugatedPortDefinition sets its effectiveName to the name of its originalPortDefinition with the symbol ~ prepended to it (see 8.3.12.2). (See also 8.4.8.1.) +// 2. The notation ~[QualifiedName] indicates that a QualifiedName shall be parsed from the input text, but that it shall be resolved as if it was the qualified name constructed as follows: +// • Extract the last segment name of the given QualifiedName and prepend the symbol ~ to it. +// • Append the name so constructed to the end of the entire original QualifiedName. +// For example, if the ConjugatedPortTyping is ~A::B::C, then the given QualifiedName is A::B::C, and ~[QualifiedName] is resolved as A::B::C::'~C'. Alternatively, a conforming tool may first resolve the given QualifiedName as usual to a PortDefinition and then use the conjugatedPortDefinition of this PortDefinition as the resolution of ~[QualifiedName]. + +// Clause 8.2.2.13 Connections Textual Notation + +// Clause 8.2.2.13.1 Connection Definition and Usage + +ConnectionDefinition = + OccurrenceDefinitionPrefix 'connection' 'def' Definition + +ConnectionUsage = + OccurrenceUsagePrefix + ( 'connection' UsageDeclaration ValuePart? + ( 'connect' ConnectorPart )? + | 'connect' ConnectorPart ) + UsageBody + +ConnectorPart : ConnectionUsage = + BinaryConnectorPart | NaryConnectorPart + +BinaryConnectorPart : ConnectionUsage = + ownedRelationship += ConnectorEndMember 'to' + ownedRelationship += ConnectorEndMember + +NaryConnectorPart : ConnectionUsage = + '(' ownedRelationship += ConnectorEndMember ',' + ownedRelationship += ConnectorEndMember + ( ',' ownedRelationship += ConnectorEndMember )* ')' + +ConnectorEndMember : EndFeatureMembership : + ownedRelatedElement += ConnectorEnd + +ConnectorEnd : ReferenceUsage = + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +OwnedCrossMultiplicityMember : OwningMembership = + ownedRelatedElement += OwnedCrossMultiplicity + +OwnedCrossMultiplicity : Feature = + ownedRelationship += OwnedMultiplicity + +// Clause 8.2.2.13.2 Binding Connectors + +BindingConnectorAsUsage = + UsagePrefix ( 'binding' UsageDeclaration )? + 'bind' ownedRelationship += ConnectorEndMember + '=' ownedRelationship += ConnectorEndMember + UsageBody + +// Clause 8.2.2.13.3 Successions + +SuccessionAsUsage = + UsagePrefix ( 'succession' UsageDeclaration )? + 'first' s.ownedRelationship += ConnectorEndMember + 'then' s.ownedRelationship += ConnectorEndMember + UsageBody + +// Clause 8.2.2.14 Interfaces Textual Notation + +// Clause 8.2.2.14.1 Interface Definitions + +InterfaceDefinition = + OccurrenceDefinitionPrefix 'interface' 'def' + DefinitionDeclaration InterfaceBody + +InterfaceBody : Type = + ';' | '{' InterfaceBodyItem* '}' + +InterfaceBodyItem : Type = + ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += InterfaceNonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += InterfaceOccurrenceUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + +InterfaceNonOccurrenceUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += InterfaceNonOccurrenceUsageElement + +InterfaceNonOccurrenceUsageElement : Usage = + ReferenceUsage + | AttributeUsage + | EnumerationUsage + | BindingConnectorAsUsage + | SuccessionAsUsage + +InterfaceOccurrenceUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += InterfaceOccurrenceUsageElement + +InterfaceOccurrenceUsageElement : Usage = + DefaultInterfaceEnd | StructureUsageElement | BehaviorUsageElement + +DefaultInterfaceEnd : PortUsage = + isEnd ?= 'end' Usage + +// Clause 8.2.2.14.2 Interface Usages + +InterfaceUsage = + OccurrenceUsagePrefix 'interface' + InterfaceUsageDeclaration InterfaceBody + +InterfaceUsageDeclaration : InterfaceUsage = + UsageDeclaration ValuePart? + ( 'connect' InterfacePart )? + | InterfacePart + +InterfacePart : InterfaceUsage = + BinaryInterfacePart | NaryInterfacePart + +BinaryInterfacePart : InterfaceUsage = + ownedRelationship += InterfaceEndMember 'to' + ownedRelationship += InterfaceEndMember + +NaryInterfacePart : InterfaceUsage = + '(' ownedRelationship += InterfaceEndMember ',' + ownedRelationship += InterfaceEndMember + ( ',' ownedRelationship += InterfaceEndMember )* ')' + +InterfaceEndMember : EndFeatureMembership = + ownedRelatedElement += InterfaceEnd + +InterfaceEnd : PortUsage : + ( ownedRelationship += OwnedCrossMultiplicityMember )? + ( declaredName = NAME REFERENCES )? + ownedRelationship += OwnedReferenceSubsetting + +// Clause 8.2.2.15 Allocations Textual Notation + +AllocationDefinition = + OccurrenceDefinitionPrefix 'allocation' 'def' Definition + +AllocationUsage = + OccurrenceUsagePrefix + AllocationUsageDeclaration UsageBody + +AllocationUsageDeclaration : AllocationUsage = + 'allocation' UsageDeclaration + ( 'allocate' ConnectorPart )? + | 'allocate' ConnectorPart + +// Clause 8.2.2.16 Flows Textual Notation + +FlowDefinition : + OccurrenceDefinitionPrefix 'flow' 'def' Definition + +Message : FlowUsage = + OccurrenceUsagePrefix 'message' + MessageDeclaration DefinitionBody + { isAbstract = true } + +MessageDeclaration : FlowUsage = + UsageDeclaration ValuePart? + ( 'of' ownedRelationship += FlowPayloadFeatureMember )? + ( 'from' ownedRelationship += MessageEventMember + 'to' ownedRelationship += MessageEventMember + )? + | ownedRelationship += MessageEventMember 'to' + ownedRelationship += MessageEventMember + +MessageEventMember : ParameterMembership = + ownedRelatedElement += MessageEvent + +MessageEvent : EventOccurrenceUsage = + ownedRelationship += OwnedReferenceSubsetting + +FlowUsage = + OccurrenceUsagePrefix 'flow' + FlowDeclaration DefinitionBody + +SuccessionFlowUsage = + OccurrenceUsagePrefix 'succession' 'flow' + FlowDeclaration DefinitionBody + +FlowDeclaration : FlowUsage = + UsageDeclaration ValuePart? + ( 'of' ownedRelationship += FlowPayloadFeatureMember )? + ( 'from' ownedRelationship += FlowEndMember + 'to' ownedRelationship += FlowEndMember )? + | ownedRelationship += FlowEndMember 'to' + ownedRelationship += FlowEndMember + +FlowPayloadFeatureMember : FeatureMembership = + ownedRelatedElement += FlowPayloadFeature + +FlowPayloadFeature : PayloadFeature = + PayloadFeature + +PayloadFeature : Feature = + Identification? PayloadFeatureSpecializationPart + ValuePart? + | ownedRelationship += OwnedFeatureTyping + ( ownedRelationship += OwnedMultiplicity )? + | ownedRelationship += OwnedMultiplicity + ownedRelationship += OwnedFeatureTyping + +PayloadFeatureSpecializationPart : Feature = + ( -> FeatureSpecialization )+ MultiplicityPart? + FeatureSpecialization* + | MultiplicityPart FeatureSpecialization+ + +FlowEndMember : EndFeatureMembership = + ownedRelatedElement += FlowEnd + +FlowEnd = + ( ownedRelationship += FlowEndSubsetting )? + ownedRelationship += FlowFeatureMember + +FlowEndSubsetting : ReferenceSubsetting = + referencedFeature = [QualifiedName] + | referencedFeature = FeatureChainPrefix + { ownedRelatedElement += referencedFeature } + +FeatureChainPrefix : Feature = + ( ownedRelationship += OwnedFeatureChaining '.' )+ + ownedRelationship += OwnedFeatureChaining '.' + +FlowFeatureMember : FeatureMembership = + ownedRelatedElement += FlowFeature + +FlowFeature : ReferenceUsage = + ownedRelationship += FlowFeatureRedefinition + +// (See Note 1) + +FlowFeatureRefefinition : Redefinition = + redefinedFeature = [QualifiedName] + +// Notes: +// 1. To ensure that a FlowFeature passes the validateRedefinitionDirectionConformance constraint (see [KerML, 8.3.3.3.8]), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature) +// + +// Clause 8.2.2.17 Actions Textual Notation + +// Clause 8.2.2.17.1 Action Definitions + +ActionDefinition = + OccurrenceDefinitionPrefix 'action' 'def' + DefinitionDeclaration ActionBody + +ActionBody : Type = + ';' | '{' ActionBodyItem* '}' + +ActionBodyItem : Type = + NonBehaviorBodyItem + | ownedRelationship += InitialNodeMember + ( ownedRelationship += ActionTargetSuccessionMember )* + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationsuip += ActionBehaviorMember + ( ownedRelationship += ActionTargetSuccessionMember )* + | ownedRelationship += GuardedSuccessionMember + +NonBehaviorBodyItem = + ownedRelationship += Import + | ownedRelationship += AliasMember + | ownedRelationship += DefinitionMember + | ownedRelationship += VariantUsageMember + | ownedRelationship += NonOccurrenceUsageMember + | ( ownedRelationship += SourceSuccessionMember )? + ownedRelationship += StructureUsageMember + +ActionBehaviorMember : FeatureMembership = + BehaviorUsageMember | ActionNodeMember + +InitialNodeMember : FeatureMembership = + MemberPrefix 'first' memberFeature = [QualifiedName] + RelationshipBody + +ActionNodeMember : FeatureMembership = + MemberPrefix ownedRelatedElement += ActionNode + +ActionTargetSuccessionMember : FeatureMembership = + MemberPrefix ownedRelatedElement += ActionTargetSuccession + +GuardedSuccessionMember : FeatureMembership = + MemberPrefix ownedRelatedElement += GuardedSuccession + +// Clause 8.2.2.17.2 Action Usages + +ActionUsage = + OccurrenceUsagePrefix 'action' + ActionUsageDeclaration ActionBody + +ActionUsageDeclaration : ActionUsage = + UsageDeclaration ValuePart? + +PerformActionUsage = + OccurrenceUsagePrefix 'perform' + PerformActionUsageDeclaration ActionBody + +PerformActionUsageDeclaration : PerformActionUsage = + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'action' UsageDeclaration ) + ValuePart? + +ActionNode : ActionUsage = + ControlNode + | SendNode | AcceptNode + | AssignmentNode + | TerminateNode + | IfNode | WhileLoopNode | ForLoopNode + +ActionNodeUsageDeclaration : ActionUsage = + 'action' UsageDeclaration? + +ActionNodePrefix : ActionUsage = + OccurrenceUsagePrefix ActionNodeUsageDeclaration? + +// Clause 8.2.2.17.3 Control Nodes + +ControlNode = + MergeNode | DecisionNode | JoinNode| ForkNode + +ControlNodePrefix : OccurrenceUsage = + RefPrefix + ( isIndividual ?= 'individual )? + ( portionKind = PortionKind + { isPortion = true } + )? + UsageExtensionKeyword* + +MergeNode = + ControlNodePrefix + isComposite ?= 'merge' UsageDeclaration + ActionBody + +DecisionNode = + ControlNodePrefix + isComposite ?= 'decide' UsageDeclaration + ActionBody + +JoinNode = + ControlNodePrefix + isComposite ?= 'join' UsageDeclaration + ActionBody + +ForkNode = + ControlNodePrefix + isComposite ?= 'fork' UsageDeclaration + ActionBody + +// Clause 8.2.2.17.4 Send and Accept Action Usages + +AcceptNode : AcceptActionUsage = + OccurrenceUsagePrefix + AcceptNodeDeclaration ActionBody + +AcceptNodeDeclaration : AcceptActionUsage = + ActionNodeUsageDeclaration? + 'accept' AcceptParameterPart + +AcceptParameterPart : AcceptActionUsage = + ownedRelationship += PayloadParameterMember + ( 'via' ownedRelationship += NodeParameterMember )? + +PayloadParameterMember : ParameterMembership = + ownedRelatedElement += PayloadParameter + +PayloadParameter : ReferenceUsage = + PayloadFeature + | Identification PayloadFeatureSpecializationPart? + TriggerValuePart + +TriggerValuePart : Feature = + ownedRelationship += TriggerFeatureValue + +TriggerFeatureValue : FeatureValue = + ownedRelatedElement += TriggerExpression + +TriggerExpression : TriggerInvocationExpression = + kind = ( 'at | 'after' ) + ownedRelationship += ArgumentMember + | kind = 'when' + ownedRelationship += ArgumentExpressionMember + +ArgumentMember : ParameterMembership = + ownedMemberParameter = Argument + +Argument : Feature = + ownedRelationship += ArgumentValue + +ArgumentValue : FeatureValue = + value = OwnedExpression + +ArgumentExpressionMember : ParameterMembership = + ownedRelatedElement += ArgumentExpression + +ArgumentExpression : Feature = + ownedRelationship += ArgumentExpressionValue + +ArgumentExpressionValue : FeatureValue = + ownedRelatedElement += OwnedExpressionReference + +SendNode : SendActionUsage = + OccurrenceUsagePrefix ActionUsageDeclaration? 'send' + ( ownedRelationship += NodeParameterMember SenderReceiverPart? + | ownedRelationship += EmptyParameterMember SendReceiverPart )? + ActionBody + +SendNodeDeclaration : SendActionUsage = + ActionNodeUsageDeclaration? 'send' + ownedRelationship += NodeParameterMember SenderReceiverPart? + +SenderReceiverPart : SendActionUsage = + 'via' ownedRelationship += NodeParameterMember + ( 'to' ownedRelationship += NodeParameterMember )? + | ownedRelationship += EmptyParameterMember + 'to' ownedRelationship += NodeParameterMember + +NodeParameterMember : ParameterMembership = + ownedRelatedElement += NodeParameter + +NodeParameter : ReferenceUsage = + ownedRelationship += FeatureBinding + +FeatureBinding : FeatureValue = + ownedRelatedElement += OwnedExpression + +EmptyParameterMember : ParameterMembership = + ownedRelatedElement += EmptyUsage + +EmptyUsage : ReferenceUsage = + {} + +// Notes: +// 1. The productions for ArgumentMember, Argument, ArgumentValue, ArgumentExpressionMember, ArgumentExpression and ArgumentExpressionValue are the same as given in [KerML, 8.2.5.8.1]. + +// Clause 8.2.2.17.5 Assignment Action Usages + +AssignmentNode : AssignmentActionUsage = + OccurrenceUsagePrefix + AssignmentNodeDeclaration ActionBody + +AssignmentNodeDeclaration: ActionUsage = + ( ActionNodeUsageDeclaration )? 'assign' + ownedRelationship += AssignmentTargetMember + ownedRelationship += FeatureChainMember ':=' + ownedRelationship += NodeParameterMember + +AssignmentTargetMember : ParameterMembership = + ownedRelatedElement += AssignmentTargetParameter + +AssignmentTargetParameter : ReferenceUsage = + ( ownedRelationship += AssignmentTargetBinding '.' )? + +AssignmentTargetBinding : FeatureValue = + ownedRelatedElement += NonFeatureChainPrimaryExpression + +FeatureChainMember : Membership = + memberElement = [QualifiedName] + | OwnedFeatureChainMember + +OwnedFeatureChainMember : OwningMembership = + ownedRelatedElement += OwnedFeatureChain + +// Clause 8.2.2.17.6 Terminate Action Usages + +TerminateNode : TerminateActionUsage = + OccurrenceUsagePrefix ActionNodeUsageDeclaration? + 'terminate' ( ownedRelationship += NodeParameterMember )? + ActionBody + +// Clause 8.2.2.17.7 Structured Control Action Usages + +IfNode : IfActionUsage = + ActionNodePrefix + 'if' ownedRelationship += ExpressionParameterMember + ownedRelationship += ActionBodyParameterMember + ( 'else' ownedRelationship += + ( ActionBodyParameterMember | IfNodeParameterMember ) )? + +ExpressionParameterMember : ParameterMembership = + ownedRelatedElement += OwnedExpression + +ActionBodyParameterMember : ParameterMembership = + ownedRelatedElement += ActionBodyParameter + +ActionBodyParameter : ActionUsage = + ( 'action' UsageDeclaration? )? + '{' ActionBodyItem* '}' + +IfNodeParameterMember : ParameterMembership = + ownedRelatedElement += IfNode + +WhileLoopNode : WhileLoopActionUsage = + ActionNodePrefix + ( 'while' ownedRelationship += ExpressionParameterMember + | 'loop' ownedRelationship += EmptyParameterMember + ) + ownedRelationship += ActionBodyParameterMember + ( 'until' ownedRelationship += ExpressionParameterMember ';' )? + +ForLoopNode : ForLoopActionUsage = + ActionNodePrefix + 'for' ownedRelationship += ForVariableDeclarationMember + 'in' ownedRelationship += NodeParameterMember + ownedRelationship += ActionBodyParameterMember + +ForVariableDeclarationMember : FeatureMembership = + ownedRelatedElement += UsageDeclaration + +ForVariableDeclaration : ReferenceUsage = + UsageDeclaration + +// Clause 8.2.2.17.8 Action Successions + +ActionTargetSuccession : Usage = + ( TargetSuccession | GuardedTargetSuccession | DefaultTargetSuccession ) + UsageBody + +TargetSuccession : SuccessionAsUsage = + ownedRelationship += SourceEndMember + 'then' ownedRelationship += ConnectorEndMember + +GuardedTargetSuccession : TransitionUsage = + ownedRelationship += GuardExpressionMember + 'then' ownedRelationship += TransitionSuccessionMember + +DefaultTargetSuccession : TransitionUsage = + 'else' ownedRelationship += TransitionSuccessionMember + +GuardedSuccession : TransitionUsage = + ( 'succession' UsageDeclaration )? + 'first' ownedRelationship += FeatureChainMember + ownedRelationship += GuardExpressionMember + 'then' ownedRelationship += TransitionSuccessionMember + UsageBody + +// Clause 8.2.2.18 States Textual Notation + +// Clause 8.2.2.18.1 State Definitions + +StateDefinition = + OccurrenceDefinitionPrefix 'state' 'def' + DefinitionDeclaration StateDefBody + +StateDefBody : StateDefinition = + ';' + | ( isParallel ?= 'parallel' )? + '{' StateBodyItem* '}' + +StateBodyItem : Type = + NonBehaviorBodyItem + | ( ownedRelationsup += SourceSuccessionMember )? + ownedRelationship += BehaviorUsageMember + ( ownedRelationship += TargetTransitionUsageMember )* + | ownedRelationship += TransitionUsageMember + | ownedRelationship += EntryActionMember + ( ownedRelationship += EntryTransitionMember )* + | ownedRelationship += DoActionMember + | ownedRelationship += ExitActionMember + +EntryActionMember : StateSubactionMembership = + MemberPrefix kind = 'entry' + ownedRelatedElement += StateActionUsage + +DoActionMember : StateSubactionMembership = + MemberPrefix kind = 'do' + ownedRelatedElement += StateActionUsage + +ExitActionMember : StateSubactionMembership = + MemberPrefix kind = 'exit' + ownedRelatedElement += StateActionUsage + +EntryTransitionMember : FeatureMembership : + MemberPrefix + ( ownedRelatedElement += GuardedTargetSuccession + | 'then' ownedRelatedElement += TargetSuccession + ) ';' + +StateActionUsage : ActionUsage = + EmptyActionUsage ';' + | StatePerformActionUsage + | StateAcceptActionUsage + | StateSendActionUsage + | StateAssignmentActionUsage + +EmptyActionUsage : ActionUsage = + {} + +StatePerformActionUsage : PerformActionUsage = + PerformActionUsageDeclaration ActionBody + +StateAcceptActionUsage : AcceptActionUsage = + AcceptNodeDeclaration ActionBody + +StateSendActionUsage : SendActionUsage + SendNodeDeclaration ActionBody + +StateAssignmentActionUsage : AssignmentActionUsage = + AssignmentNodeDeclaration ActionBody + +TransitionUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += TransitionUsage + +TargetTransitionUsageMember : FeatureMembership = + MemberPrefix ownedRelatedElement += TargetTransitionUsage + +// Clause 8.2.2.18.2 State Usages + +StateUsage = + OccurrenceUsagePrefix 'state' + ActionUsageDeclaration StateUsageBody + +StateUsageBody : StateUsage = + ';' + | ( isParallel ?= 'parallel' )? + '{' StateBodyItem* '}' + +ExhibitStateUsage = + OccurrenceUsagePrefix 'exhibit' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'state' UsageDeclaration ) + ValuePart? StateUsageBody + +// Clause 8.2.2.18.3 Transition Usages + +TransitionUsage = + 'transition' ( UsageDeclaration 'first' )? + ownedRelationship += FeatureChainMember + ownedRelationship += EmptyParameterMember + ( ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember )? + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + 'then' ownedRelationship += TransitionSuccessionMember + ActionBody + +TargetTransitionUsage : TransitionUsage = + ownedRelationship += EmptyParameterMember + ( 'transition' + ( ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember )? + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + | ownedRelationship += EmptyParameterMember + ownedRelationship += TriggerActionMember + ( ownedRelationship += GuardExpressionMember )? + ( ownedRelationship += EffectBehaviorMember )? + | ownedRelationship += GuardExpressionMember + ( ownedRelationship += EffectBehaviorMember )? + )? + 'then' ownedRelationship += TransitionSuccessionMember + ActionBody + +TriggerActionMember : TransitionFeatureMembership = + 'accept' { kind = 'trigger' } ownedRelatedElement += TriggerAction + +TriggerAction : AcceptActionUsage = + AcceptParameterPart + +GuardExpressionMember : TransitionFeatureMembership = + 'if' { kind = 'guard' } ownedRelatedElement += OwnedExpression + +EffectBehaviorMember : TransitionFeatureMembership = + 'do' { kind = 'effect' } ownedRelatedElement += EffectBehaviorUsage + +EffectBehaviorUsage : ActionUsage = + EmptyActionUsage + | TransitionPerformActionUsage + | TransitionAcceptActionUsage + | TransitionSendActionUsage + | TransitionAssignmentActionUsage + +TransitionPerformActionUsage : PerformActionUsage = + PerformActionUsageDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionAcceptActionUsage : AcceptActionUsage = + AcceptNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionSendActionUsage : SendActionUsage = + SendNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionAssignmentActionUsage : AssignmentActionUsage = + AssignmentNodeDeclaration ( '{' ActionBodyItem* '}' )? + +TransitionSuccessionMember : OwningMembership = + ownedRelatedElement += TransitionSuccession + +TransitionSuccession : Succession = + ownedRelationship += EmptyEndMember + ownedRelationship += ConnectorEndMember + +EmptyEndMember : EndFeatureMembership = + ownedRelatedElement += EmptyFeature + +EmptyFeature : ReferenceUsage = + {} + +// Clause 8.2.2.19 Calculations Textual Notation + +CalculationDefinition = + OccurrenceDefinitionPrefix 'calc' 'def' + DefinitionDeclaration CalculationBody + +CalculationUsage : CalculationUsage = + OccurrenceUsagePrefix 'calc' + ActionUsageDeclaration CalculationBody + +CalculationBody : Type = + ';' | '{' CalculationBodyPart '}' + +CalculationBodyPart : Type = + CalculationBodyItem* + ( ownedRelationship += ResultExpressionMember )? + +CalculationBodyItem : Type = + ActionBodyItem + | ownedRelationship += ReturnParameterMember + +ReturnParameterMember : ReturnParameterMembership = + MemberPrefix? 'return' ownedRelatedElement += UsageElement + +ResultExpressionMember : ResultExpressionMembership = + MemberPrefix? ownedRelatedElement += OwnedExpression + +// Clause 8.2.2.20 Constraints Textual Notation + +ConstraintDefinition = + OccurrenceDefinitionPrefix 'constraint' 'def' + DefinitionDeclaration CalculationBody + +ConstraintUsage = + OccurrenceUsagePrefix 'constraint' + ConstraintUsageDeclaration CalculationBody + +AssertConstraintUsage = + OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' )? + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'constraint' ConstraintUsageDeclaration ) + CalculationBody + +ConstraintUsageDeclaration : ConstraintUsage = + UsageDeclaration ValuePart? + +// Clause 8.2.2.21 Requirements Textual Notation + +// Clause 8.2.2.21.1 Requirement Definitions + +RequirementDefinition = + OccurrenceDefinitionPrefix 'requirement' 'def' + DefinitionDeclaration RequirementBody + +RequirementBody : Type = + ';' | '{' RequirementBodyItem* '}' + +RequirementBodyItem : Type = + DefinitionBodyItem + | ownedRelationship += SubjectMember + | ownedRelationship += RequirementConstraintMember + | ownedRelationship += FramedConcernMember + | ownedRelationship += RequirementVerificationMember + | ownedRelationship += ActorMember + | ownedRelationship += StakeholderMember + +SubjectMember : SubjectMembership = + MemberPrefix ownedRelatedElement += SubjectUsage + +SubjectUsage : ReferenceUsage = + 'subject' UsageExtensionKeyword* Usage + +RequirementConstraintMember : RequirementConstraintMembership = + MemberPrefix? RequirementKind + ownedRelatedElement += RequirementConstraintUsage + +RequirementKind : RequirementConstraintMembership = + 'assume' { kind = 'assumption' } + | 'require' { kind = 'requirement' } + +RequirementConstraintUsage : ConstraintUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? RequirementBody + | ( UsageExtensionKeyword* 'constraint' + | UsageExtensionKeyword+ ) + ConstraintUsageDeclaration CalculationBody + +FramedConcernMember : FramedConcernMembership = + MemberPrefix? 'frame' + ownedRelatedElement += FramedConcernUsage + +FramedConcernUsage : ConcernUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? CalculationBody + | ( UsageExtensionKeyword* 'concern' + | UsageExtensionKeyword+ ) + CalculationUsageDeclaration CalculationBody + +ActorMember : ActorMembership = + MemberPrefix ownedRelatedElement += ActorUsage + +ActorUsage : PartUsage = + 'actor' UsageExtensionKeyword* Usage + +StakeholderMember : StakeholderMembership = + MemberPrefix ownedRelatedElement += StakeholderUsage + +StakeholderUsage : PartUsage = + 'stakeholder' UsageExtensionKeyword* Usage + +// Clause 8.2.2.21.2 Requirement Usages + +RequirementUsage = + OccurrenceUsagePrefix 'requirement' + ConstraintUsageDeclaration RequirementBody + +SatisfyRequirementUsage = + OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' ) 'satisfy' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'requirement' UsageDeclaration ) + ValuePart? + ( 'by' ownedRelationship += SatisfactionSubjectMember )? + RequirementBody + +SatisfactionSubjectMember : SubjectMembership = + ownedRelatedElement += SatisfactionParameter + +SatisfactionParameter : ReferenceUsage = + ownedRelationship += SatisfactionFeatureValue + +SatisfactionFeatureValue : FeatureValue = + ownedRelatedElement += SatisfactionReferenceExpression + +SatisfactionReferenceExpression : FeatureReferenceExpression = + ownedRelationship += FeatureChainMember + +// Clause 8.2.2.21.3 Concerns + +ConcernDefinition = + OccurrenceDefinitionPrefix 'concern' 'def' + DefinitionDeclaration RequirementBody + +ConcernUsage = + OccurrenceUsagePrefix 'concern' + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.22 Cases Textual Notation + +CaseDefinition = + OccurrenceDefinitionPrefix 'case' 'def' + DefinitionDeclaration CaseBody + +CaseUsage = + OccurrenceUsagePrefix 'case' + ConstraintUsageDeclaration CaseBody + +CaseBody : Type = + ';' + | '{' CaseBodyItem* + ( ownedRelationship += ResultExpressionMember )? + '}' + +CaseBodyItem : Type = + ActionBodyItem + | ownedRelationship += SubjectMember + | ownedRelationship += ActorMember + | ownedRelationship += ObjectiveMember + +ObjectiveMember : ObjectiveMembership = + MemberPrefix 'objective' + ownedRelatedElement += ObjectiveRequirementUsage + +ObjectiveRequirementUsage : RequirementUsage = + UsageExtensionKeyword* ConstraintUsageDeclaration + RequirementBody + +// Clause 8.2.2.23 Analysis Cases Textual Notation + +AnalysisCaseDefinition = + OccurrenceDefinitionPrefix 'analysis' 'def' + DefinitionDeclaration CaseBody + +AnalysisCaseUsage = + OccurrenceUsagePrefix 'analysis' + ConstraintUsageDeclaration CaseBody + +// Clause 8.2.2.24 Verification Cases Textual Notation + +VerificationCaseDefinition = + OccurrenceDefinitionPrefix 'verification' 'def' + DefinitionDeclaration CaseBody + +VerificationCaseUsage = + OccurrenceUsagePrefix 'verification' + ConstraintUsageDeclaration CaseBody + +RequirementVerificationMember : RequirementVerificationMembership = + MemberPrefix 'verify' { kind = 'requirement' } + ownedRelatedElement += RequirementVerificationUsage + +RequirementVerificationUsage : RequirementUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecialization* RequirementBody + | ( UsageExtensionKeyword* 'requirement' + | UsageExtensionKeyword+ ) + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.25 Use Cases Textual Notation + +UseCaseDefinition = + OccurrenceDefinitionPrefix 'use' 'case' 'def' + DefinitionDeclaration CaseBody + +UseCaseUsage = + OccurrenceUsagePrefix 'use' 'case' + ConstraintUsageDeclaration CaseBody + +IncludeUseCaseUsage : + OccurrenceUsagePrefix 'include' + ( ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + | 'use' 'case' UsageDeclaration ) + ValuePart? + CaseBody + +// Clause 8.2.2.26 Views and Viewpoints Textual Notation + +// Clause 8.2.2.26.1 View Definitions + +ViewDefinition = + OccurrenceDefinitionPrefix 'view' 'def' + DefinitionDeclaration ViewDefinitionBody + +ViewDefinitionBody : ViewDefinition = + ';' | '{' ViewDefinitionBodyItem* '}' + +ViewDefinitionBodyItem : ViewDefinition = + DefinitionBodyItem + | ownedRelationship += ElementFilterMember + | ownedRelationship += ViewRenderingMember + +ViewRenderingMember : ViewRenderingMembership = + MemberPrefix 'render' + ownedRelatedElement += ViewRenderingUsage + +ViewRenderingUsage : RenderingUsage = + ownedRelationship += OwnedReferenceSubsetting + FeatureSpecializationPart? + UsageBody + | ( UsageExtensionKeyword* 'rendering' + | UsageExtensionKeyword+ ) + Usage + +// Clause 8.2.2.26.2 View Usages + +ViewUsage = + OccurrenceUsagePrefix 'view' + UsageDeclaration? ValuePart? + ViewBody + +ViewBody : ViewUsage = + ';' | '{' ViewBodyItem* '}' + +ViewBodyItem : ViewUsage = + DefinitionBodyItem + | ownedRelationship += ElementFilterMember + | ownedRelationship += ViewRenderingMember + | ownedRelationship += Expose + +Expose = + 'expose' ( MembershipExpose | NamespaceExpose ) + RelationshipBody + +MembershipExpose = + MembershipImport + +NamespaceExpose = + NamespaceImport + +// Clause 8.2.2.26.3 Viewpoints + +ViewpointDefinition = + OccurrenceDefinitionPrefix 'viewpoint' 'def' + DefinitionDeclaration RequirementBody + +ViewpointUsage = + OccurrenceUsagePrefix 'viewpoint' + ConstraintUsageDeclaration RequirementBody + +// Clause 8.2.2.26.4 Renderings + +RenderingDefinition = + OccurrenceDefinitionPrefix 'rendering' 'def' + Definition + +RenderingUsage = + OccurrenceUsagePrefix 'rendering' + Usage + +// Clause 8.2.2.27 Metadata Textual Notation + +MetadataDefinition = + ( isAbstract ?= 'abstract')? DefinitionExtensionKeyWord* + 'metadata' 'def' Definition + +PrefixMetadataAnnotation : Annotation = + '#' annotatingElement = PrefixMetadataUsage + { ownedRelatedElement += annotatingElement } + +PrefixMetadataMember : OwningMembership = + '#' ownedRelatedEleemnt = PrefixMetadataUsage + +PrefixMetadataUsage : MetadataUsage = + ownedRelationship += OwnedFeatureTyping + +MetadataUsage = + UsageExtensionKeyword* ( '@' | 'metadata' ) + MetadataUsageDeclaration + ( 'about' ownedRelationship += Annotation + ( ',' ownedRelationship += Annotation )* + )? + MetadataBody + +MetadataUsageDeclaration : MetadataUsage = + ( Identification ( ':' | 'typed' 'by' ) )? + ownedRelationship += OwnedFeatureTyping + +MetadataBody : Type = + ';' | + '{' ( ownedRelationship += DefinitionMember + | ownedRelationship += MetadataBodyUsageMember + | ownedRelationship += AliasMember + | ownedRelationship += Import + )* + '}' + +MetadataBodyUsageMember : FeatureMembership = + ownedMemberFeature = MetadataBodyUsage + +MetadataBodyUsage : ReferenceUsage : + 'ref'? ( ':>>' | 'redefines' )? ownedRelationship += OwnedRedefinition + FeatureSpecializationPart? ValuePart? + MetadataBody + +ExtendedDefinition : Definition = + BasicDefinitionPrefix? DefinitionExtensionKeyword+ + 'def' Definition + +ExtendedUsage : Usage = + UnextendedUsagePrefix UsageExtensionKeyword+ + Usage + +// End of BNF + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_file_parser--KerML-textual-corrected.log b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_file_parser--KerML-textual-corrected.log new file mode 100644 index 000000000..62b50ba01 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_file_parser--KerML-textual-corrected.log @@ -0,0 +1,3366 @@ +INFO : Started parsing .\tests\KerML_and_SysML_grammars\KerML-textual-bnf-corrected.kebnf at 2025-12-04T17:03:12Z +INFO : Parse completed successfully +INFO : The resulting (AST) parse tree is: + +start + line_comment // Source document: tests/KerML_and_SysML_grammars/KerML-textual-bnf-corrected-marked_up.kebnf + line_comment // Generated by bnf_grammar_processor at: 2025-12-03T23:14:32Z + line_comment // Source document: tests\KerML_and_SysML_spec_sources\KerML-spec.html + line_comment // Generated by bnf_grammar_processor at: 2025-11-14T23:08:48Z + line_comment // Manual corrections by HP de Koning + line_comment // Part 1 - Kernel Modeling Language (KerML) + line_comment // Clause 8.2 Concrete Syntax + line_comment // Clause 8.2.1 Concrete Syntax Overview + line_comment // Clause 8.2.2 Lexical Structure + line_comment // Clause 8.2.2.1 Line Terminators and White Space + lexical_rule + LINE_TERMINATOR + alternation + terminal '\n' + terminal '\r' + terminal '\r\n' + line_comment // implementation defined character sequence + lexical_rule + LINE_TEXT + terminal '[^\r\n]*' + line_comment // character sequence excluding LINE_TERMINATORs + lexical_rule + WHITE_SPACE + alternation + terminal ' ' + terminal '\t' + terminal '\f' + name LINE_TERMINATOR + line_comment // space | tab | form_feed | LINE_TERMINATOR + line_comment // Notes: + line_comment // 1. Notation text is divided up into lines separated by line terminators. A line terminator may be a single character (such as a line feed) or a sequence of characters (such as a carriage return/line feed combination). This specification does not require any specific encoding for a line terminator, but any encoding used must be consistent throughout any specific input text. + line_comment // 2. Any characters in text line that are not a part of the line terminator are referred to as line text. + line_comment // 3. A white space character is a space, tab, form feed or line terminator. Any contiguous sequence of white space characters can be used to separate tokens that would otherwise be considered to be part of a single token. It is otherwise ignored, with the single exception that a line terminator is used to mark the end of a single-line note (see 8.2.2.2). + line_comment // Clause 8.2.2.2 Notes and Comments + lexical_rule + SINGLE_LINE_NOTE + sequence + terminal '//' + name LINE_TEXT + lexical_rule + MULTILINE_NOTE + sequence + terminal '//*' + name COMMENT_TEXT + terminal '*/' + lexical_rule + REGULAR_COMMENT + sequence + terminal '/*' + name COMMENT_TEXT + terminal '*/' + lexical_rule + COMMENT_TEXT + expression + alternation + name COMMENT_LINE_TEXT + name LINE_TERMINATOR + repetition * + lexical_rule + COMMENT_LINE_TEXT + terminal '.*(?=(\r|\n|\*/))' + line_comment // LINE_TEXT excluding the sequence '*/' + line_comment // Clause 8.2.2.3 Names + lexical_rule + NAME + alternation + name BASIC_NAME + name UNRESTRICTED_NAME + lexical_rule + BASIC_NAME + sequence + name BASIC_INITIAL_CHARACTER + expression + name BASIC_NAME_CHARACTER + repetition * + lexical_rule + SINGLE_QUOTE + terminal '#x27' + lexical_rule + UNRESTRICTED_NAME + sequence + name SINGLE_QUOTE + expression + alternation + name NAME_CHARACTER + name ESCAPE_SEQUENCE + repetition * + name SINGLE_QUOTE + line_comment // (See Note 1) + lexical_rule + BASIC_INITIAL_CHARACTER + alternation + name ALPHABETIC_CHARACTER + terminal '_' + lexical_rule + BASIC_NAME_CHARACTER + alternation + name BASIC_INITIAL_CHARACTER + name DECIMAL_DIGIT + lexical_rule + ALPHABETIC_CHARACTER + alternation + terminal 'A' + terminal 'B' + terminal 'C' + terminal 'D' + terminal 'E' + terminal 'F' + terminal 'G' + terminal 'H' + terminal 'I' + terminal 'J' + terminal 'K' + terminal 'L' + terminal 'M' + terminal 'N' + terminal 'O' + terminal 'P' + terminal 'Q' + terminal 'R' + terminal 'S' + terminal 'T' + terminal 'U' + terminal 'V' + terminal 'W' + terminal 'X' + terminal 'Y' + terminal 'Z' + terminal 'a' + terminal 'b' + terminal 'c' + terminal 'd' + terminal 'e' + terminal 'f' + terminal 'g' + terminal 'h' + terminal 'i' + terminal 'j' + terminal 'k' + terminal 'l' + terminal 'm' + terminal 'n' + terminal 'o' + terminal 'p' + terminal 'q' + terminal 'r' + terminal 's' + terminal 't' + terminal 'u' + terminal 'v' + terminal 'w' + terminal 'x' + terminal 'y' + terminal 'z' + line_comment // any character 'a' through 'z' or 'A' through 'Z' + lexical_rule + DECIMAL_DIGIT + alternation + terminal '0' + terminal '1' + terminal '2' + terminal '3' + terminal '4' + terminal '5' + terminal '6' + terminal '7' + terminal '8' + terminal '9' + lexical_rule + NAME_CHARACTER + terminal 'any printable character other than backslash or single_quote' + lexical_rule + ESCAPE_SEQUENCE + alternation + terminal '\f' + terminal '\n' + terminal '\t' + terminal '\r' + terminal '\v' + line_comment // (See Note 2) + line_comment // Notes: + line_comment // 1. The single_quote character is '. The name represented by an UNRESTRICTED_NAME shall consist of the characters within the single quotes, with escape characters resolved as described below. The surrounding single quote characters are not part of the represented name. + line_comment // 2. An ESCAPE_SEQUENCE is a sequence of two text characters starting with a backslash that actually denotes only a single character, except for the newline escape sequence, which represents however many characters is necessary to represent an end of line in a specific implementation (see also 8.2.2.1). Table 4 shows the meaning of the allowed escape sequences. The ESCAPE_SEQUENCES in an UNRESTRICTED_NAME shall be replaced by the characters specified as their meanings in the actual represented name. + line_comment // Clause 8.2.2.4 Numeric Values + lexical_rule + DECIMAL_VALUE + expression + name DECIMAL_DIGIT + repetition + + lexical_rule + EXPONENTIAL_VALUE + sequence + name DECIMAL_VALUE + alternation + terminal 'e' + terminal 'E' + expression + alternation + terminal '+' + terminal '-' + repetition ? + name DECIMAL_VALUE + line_comment // Notes: + line_comment // 1. A DECIMAL_VALUE may specify a natural literal, or it may be part of the specification of a real literal (see 8.2.5.8.4). Note that a DECIMAL_VALUE does not include a sign, because negating a literal is an operator in the KerML Expression syntax. + line_comment // 2. An EXPONENTIAL_VALUE may be used in the specification of a real literal (see 8.2.5.8.4). Note that a decimal point and fractional part are not included in the lexical structure of an exponential value. They are handled as part of the syntax of real literals. + line_comment // Clause 8.2.2.5 String Value + lexical_rule + STRING_VALUE + sequence + terminal '"' + expression + alternation + name STRING_CHARACTER + name ESCAPE_SEQUENCE + repetition * + terminal '"' + lexical_rule + STRING_CHARACTER + terminal 'any printable character other than backslash or "' + line_comment // Notes: + line_comment // 1. ESCAPE_SEQUENCE is specified in 8.2.2.3. + line_comment // Clause 8.2.2.6 Reserved Words + lexical_rule + RESERVED_KEYWORD + alternation + terminal 'about' + terminal 'abstract' + terminal 'alias' + terminal 'all' + terminal 'and' + terminal 'as' + terminal 'assoc' + terminal 'behavior' + terminal 'binding' + terminal 'bool' + terminal 'by' + terminal 'chains' + terminal 'class' + terminal 'classifier' + terminal 'comment' + terminal 'composite' + terminal 'conjugate' + terminal 'conjugates' + terminal 'conjugation' + terminal 'connector' + terminal 'const' + terminal 'crosses' + terminal 'datatype' + terminal 'default' + terminal 'dependency' + terminal 'derived' + terminal 'differences' + terminal 'disjoining' + terminal 'disjoint' + terminal 'doc' + terminal 'else' + terminal 'end' + terminal 'expr' + terminal 'false' + terminal 'feature' + terminal 'featured' + terminal 'featuring' + terminal 'filter' + terminal 'first' + terminal 'flow' + terminal 'for' + terminal 'from' + terminal 'function' + terminal 'hastype' + terminal 'if' + terminal 'implies' + terminal 'import' + terminal 'in' + terminal 'inout' + terminal 'interaction' + terminal 'intersects' + terminal 'inv' + terminal 'inverse' + terminal 'inverting' + terminal 'istype' + terminal 'language' + terminal 'library' + terminal 'locale' + terminal 'member' + terminal 'meta' + terminal 'metaclass' + terminal 'metadata' + terminal 'multiplicity' + terminal 'namespace' + terminal 'nonunique' + terminal 'not' + terminal 'null' + terminal 'of' + terminal 'or' + terminal 'ordered' + terminal 'out' + terminal 'package' + terminal 'portion' + terminal 'predicate' + terminal 'private' + terminal 'protected' + terminal 'public' + terminal 'redefines' + terminal 'redefinition' + terminal 'references' + terminal 'rep' + terminal 'return' + terminal 'specialization' + terminal 'specializes' + terminal 'standard' + terminal 'step' + terminal 'struct' + terminal 'subclassifier' + terminal 'subset' + terminal 'subsets' + terminal 'subtype' + terminal 'succession' + terminal 'then' + terminal 'to' + terminal 'true' + terminal 'type' + terminal 'typed' + terminal 'typing' + terminal 'unions' + terminal 'var' + terminal 'xor' + line_comment // Clause 8.2.2.7 Symbols + lexical_rule + RESERVED_SYMBOL + alternation + terminal '~' + terminal '}' + terminal '|' + terminal '{' + terminal '^' + terminal ']' + terminal '[' + terminal '@' + terminal '??' + terminal '?' + terminal '>=' + terminal '>' + terminal '=>' + terminal '===' + terminal '==' + terminal '=' + terminal '<=' + terminal '<' + terminal ';' + terminal ':>>' + terminal ':>' + terminal ':=' + terminal '::>' + terminal '::' + terminal ':' + terminal '/' + terminal '.?' + terminal '..' + terminal '.' + terminal '->' + terminal '-' + terminal ',' + terminal '+' + terminal '**' + terminal '*' + terminal ')' + terminal '(' + terminal '&' + terminal '%' + terminal '$' + terminal '#' + terminal '!==' + terminal '!=' + lexical_rule + TYPED_BY + alternation + terminal ':' + sequence + terminal 'typed' + terminal 'by' + lexical_rule + SPECIALIZES + alternation + terminal ':>' + terminal 'specializes' + lexical_rule + SUBSETS + alternation + terminal ':>' + terminal 'subsets' + lexical_rule + REFERENCES + alternation + terminal '::>' + terminal 'references' + lexical_rule + CROSSES + alternation + terminal '=>' + terminal 'crosses' + lexical_rule + REDEFINES + alternation + terminal ':>>' + terminal 'redefines' + lexical_rule + CONJUGATES + alternation + terminal '~' + terminal 'conjugates' + line_comment // Clause 8.2.3 Root Concrete Syntax + line_comment // Clause 8.2.3.1 Elements and Relationships Concrete Syntax + nonterminal_rule + Identification + abstract_element Element + sequence + expression + sequence + terminal '<' + prop_assign + prop_name declaredShortName + name NAME + terminal '>' + repetition ? + expression + prop_assign + prop_name declaredName + name NAME + repetition ? + nonterminal_rule + RelationshipBody + abstract_element Relationship + alternation + terminal ';' + sequence + terminal '{' + expression + name RelationshipOwnedElement + repetition * + terminal '}' + nonterminal_rule + RelationshipOwnedElement + abstract_element Relationship + alternation + prop_list_append + prop_name ownedRelatedElement + name OwnedRelatedElement + prop_list_append + prop_name ownedRelationship + name OwnedAnnotation + nonterminal_rule + OwnedRelatedElement + abstract_element Element + alternation + name NonFeatureElement + name FeatureElement + line_comment // Clause 8.2.3.2 Dependencies Concrete Syntax + nonterminal_rule + Dependency + sequence + expression + prop_list_append + prop_name ownedRelationship + name PrefixMetadataAnnotation + repetition * + terminal 'dependency' + expression + sequence + expression + name Identification + repetition ? + terminal 'from' + repetition ? + prop_list_append + prop_name client + qualified_name [QualifiedName] + expression + sequence + terminal ',' + prop_list_append + prop_name client + qualified_name [QualifiedName] + repetition * + terminal 'to' + prop_list_append + prop_name supplier + qualified_name [QualifiedName] + expression + sequence + terminal ',' + prop_list_append + prop_name supplier + qualified_name [QualifiedName] + repetition * + name RelationshipBody + line_comment // Notes: + line_comment // 1. PrefixMetadataAnnotation is defined in the Kernel layer (see 8.2.5.12). + line_comment // Clause 8.2.3.3 Annotations Concrete Syntax + line_comment // Clause 8.2.3.3.1 Annotations + nonterminal_rule + Annotation + prop_assign + prop_name annotatedElement + qualified_name [QualifiedName] + nonterminal_rule + OwnedAnnotation + abstract_element Annotation + prop_list_append + prop_name ownedRelatedElement + name AnnotatingElement + nonterminal_rule + AnnotatingElement + alternation + name Comment + name Documentation + name TextualRepresentation + name MetadataFeature + line_comment // Notes: + line_comment // 1. MetadataFeature is defined in the Kernel layer (see 8.2.5.12). + line_comment // Clause 8.2.3.3.2 Comments and Documentation + nonterminal_rule + Comment + sequence + expression + sequence + terminal 'comment' + name Identification + expression + sequence + terminal 'about' + prop_list_append + prop_name ownedRelationship + name Annotation + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name Annotation + repetition * + repetition ? + repetition ? + expression + sequence + terminal 'locale' + prop_assign + prop_name locale + name STRING_VALUE + repetition ? + prop_assign + prop_name body + name REGULAR_COMMENT + nonterminal_rule + Documentation + sequence + terminal 'doc' + name Identification + expression + sequence + terminal 'locale' + prop_assign + prop_name locale + name STRING_VALUE + repetition ? + prop_assign + prop_name body + name REGULAR_COMMENT + line_comment // Notes: + line_comment // 1. The text of a lexical REGULAR_COMMENT or PREFIX_COMMENT shall be processed as follows before it is included as the body of a Comment or Documentation: + line_comment // • Remove the initial /* and final */ characters. + line_comment // • Remove any white space immediately after the initial /*, up to and including the first line terminator (if any). + line_comment // • On each subsequent line of the text: + line_comment // • Strip initial white space other than line terminators. + line_comment // • Then, if the first remaining character is "*", remove it. + line_comment // • Then, if the first remaining character is now a space, remove it. + line_comment // 2. The body text of a Comment can include markup information (such as HTML), and a conforming tool may display such text as rendered according to the markup. However, marked up "rich text" for a Comment written using the KerML textual concrete syntax shall be stored in the Comment body in plain text including all mark up text, with all line terminators and white space included as entered, other than what is removed according to the rules above. + line_comment // Clause 8.2.3.3.3 Textual Representation + nonterminal_rule + TextualRepresentation + sequence + expression + sequence + terminal 'rep' + name Identification + repetition ? + terminal 'language' + prop_assign + prop_name language + name STRING_VALUE + prop_assign + prop_name body + name REGULAR_COMMENT + line_comment // Notes: + line_comment // 1. The lexical text of a REGULAR_COMMENT shall be processed as specified in 8.2.3.3.2 for Comments before being included as the body of a TextualRepresentation. + line_comment // 2. See also 8.3.2.3.6 on the standard language names recognized for a TextualRepresentation. + line_comment // Clause 8.2.3.4 Namespaces Concrete Syntax + line_comment // Clause 8.2.3.4.1 Namespaces + nonterminal_rule + RootNamespace + abstract_element Namespace + expression + name NamespaceBodyElement + repetition * + line_comment // (See Note 1) + nonterminal_rule + Namespace + sequence + expression + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + repetition * + name NamespaceDeclaration + name NamespaceBody + line_comment // (See Note 2) + nonterminal_rule + NamespaceDeclaration + abstract_element Namespace + sequence + terminal 'namespace' + name Identification + nonterminal_rule + NamespaceBody + abstract_element Namespace + alternation + terminal ';' + sequence + terminal '{' + expression + name NamespaceBodyElement + repetition * + terminal '}' + nonterminal_rule + NamespaceBodyElement + abstract_element Namespace + alternation + prop_list_append + prop_name ownedRelationship + name NamespaceMember + prop_list_append + prop_name ownedRelationship + name AliasMember + prop_list_append + prop_name ownedRelationship + name Import + nonterminal_rule + MemberPrefix + abstract_element Membership + expression + prop_assign + prop_name visibility + name VisibilityIndicator + repetition ? + nonterminal_rule + VisibilityIndicator + abstract_element VisibilityKind + alternation + terminal 'public' + terminal 'private' + terminal 'protected' + nonterminal_rule + NamespaceMember + abstract_element OwningMembership + alternation + name NonFeatureMember + name NamespaceFeatureMember + nonterminal_rule + NonFeatureMember + abstract_element OwningMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name MemberElement + nonterminal_rule + NamespaceFeatureMember + abstract_element OwningMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name FeatureElement + nonterminal_rule + AliasMember + abstract_element Membership + sequence + name MemberPrefix + terminal 'alias' + expression + sequence + terminal '<' + prop_assign + prop_name memberShortName + name NAME + terminal '>' + repetition ? + expression + prop_assign + prop_name memberName + name NAME + repetition ? + terminal 'for' + prop_assign + prop_name memberElement + qualified_name [QualifiedName] + name RelationshipBody + nonterminal_rule + QualifiedName + sequence + expression + sequence + terminal '$' + terminal '::' + repetition ? + expression + sequence + name NAME + terminal '::' + repetition * + name NAME + line_comment // (See Note 3) + line_comment // Notes: + line_comment // 1. A root Namespace is a Namespace that has no owningNamespace (see 8.3.2.4). Every Element other than a root Namespace must be contained, directly or indirectly, within some root Namespace. Therefore, every valid KerML concrete syntax text can be parsed starting from the RootNamespace production. + line_comment // 2. PrefixMetadataMember is defined in the Kernel layer (see 8.2.5.12). + line_comment // 3. A qualified name is notated as a sequence of segment names separated by "::" punctuation, optionally with the global scope qualifier "$" as an initial segment. An unqualified name can be considered the degenerate case of a qualified name with a single segment name. A qualified name is used in the KerML textual concrete syntax to identify an Element that is being referred to in the representation of another Element. A qualified name used in this way does not appear in the corresponding abstract syntax—instead, the abstract syntax representation contains an actual reference to the identified Element. Name resolution is the process of determining the Element that is identified by a qualified name. The segment names of the qualified name other than the last identify a sequence of nested Namespaces that provide the context for resolving the final segment name (see 8.2.3.5). The notation [QualifiedName] is used in concrete syntax grammar productions to indicate the result of resolving text parsed as a QualifiedName (see also 8.2.1). + line_comment // Clause 8.2.3.4.2 Imports + nonterminal_rule + Import + sequence + prop_assign + prop_name visibility + name VisibilityIndicator + terminal 'import' + expression + boolean_prop_assign + prop_name isImportAll + terminal 'all' + repetition ? + name ImportDeclaration + name RelationshipBody + nonterminal_rule + ImportDeclaration + abstract_element Import + alternation + name MembershipImport + name NamespaceImport + nonterminal_rule + MembershipImport + sequence + prop_assign + prop_name importedMembership + qualified_name [QualifiedName] + expression + sequence + terminal '::' + boolean_prop_assign + prop_name isRecursive + terminal '**' + repetition ? + line_comment // (See Note 1) + nonterminal_rule + NamespaceImport + alternation + sequence + prop_assign + prop_name importedNamespace + qualified_name [QualifiedName] + terminal '::' + terminal '*' + expression + sequence + terminal '::' + boolean_prop_assign + prop_name isRecursive + terminal '**' + repetition ? + sequence + prop_assign + prop_name importedNamespace + name FilterPackage + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name importedNamespace + nonterminal_rule + FilterPackage + abstract_element Package + sequence + prop_list_append + prop_name ownedRelationship + name ImportDeclaration + expression + prop_list_append + prop_name ownedRelationship + name FilterPackageMember + repetition + + nonterminal_rule + FilterPackageMember + abstract_element ElementFilterMembership + sequence + terminal '[' + prop_list_append + prop_name ownedRelatedElement + name OwnedExpression + terminal ']' + line_comment // Notes: + line_comment // 1. The importedMembership of a MembershipImport is the single case in which the Element required from the resolution [QualifiedName] is the actual Membership identified by the QualifedName, not the memberElement of that Membership (see 8.2.3.5). + line_comment // Clause 8.2.3.4.3 Namespace Elements + nonterminal_rule + MemberElement + abstract_element Element + alternation + name AnnotatingElement + name NonFeatureElement + nonterminal_rule + NonFeatureElement + abstract_element Element + alternation + name Dependency + name Namespace + name Type + name Classifier + name DataType + name Class + name Structure + name Metaclass + name Association + name AssociationStructure + name Interaction + name Behavior + name Function + name Predicate + name Multiplicity + name Package + name LibraryPackage + name Specialization + name Conjugation + name Subclassification + name Disjoining + name FeatureInverting + name FeatureTyping + name Subsetting + name Redefinition + name TypeFeaturing + nonterminal_rule + FeatureElement + abstract_element Feature + alternation + name Feature + name Step + name Expression + name BooleanExpression + name Invariant + name Connector + name BindingConnector + name Succession + name Flow + name SuccessionFlow + line_comment // Clause 8.2.3.5 Name Resolution + line_comment // Clause 8.2.3.5.1 Name Resolution Overview + line_comment // Clause 8.2.3.5.2 Local and Global Namespaces + line_comment // Clause 8.2.3.5.3 Local and Visible Resolution + line_comment // Clause 8.2.3.5.4 Full Resolution + line_comment // Clause 8.2.4 Core Concrete Syntax + line_comment // Clause 8.2.4.1 Types Concrete Syntax + line_comment // Clause 8.2.4.1.1 Types + nonterminal_rule + Type + sequence + name TypePrefix + terminal 'type' + name TypeDeclaration + name TypeBody + nonterminal_rule + TypePrefix + abstract_element Type + sequence + expression + boolean_prop_assign + prop_name isAbstract + terminal 'abstract' + repetition ? + expression + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + repetition * + nonterminal_rule + TypeDeclaration + abstract_element Type + sequence + expression + boolean_prop_assign + prop_name isSufficient + terminal 'all' + repetition ? + name Identification + expression + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + repetition ? + expression + alternation + name SpecializationPart + name ConjugationPart + repetition + + expression + name TypeRelationshipPart + repetition * + nonterminal_rule + SpecializationPart + abstract_element Type + sequence + name SPECIALIZES + prop_list_append + prop_name ownedRelationship + name OwnedSpecialization + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name OwnedSpecialization + repetition * + nonterminal_rule + ConjugationPart + abstract_element Type + sequence + name CONJUGATES + prop_list_append + prop_name ownedRelationship + name OwnedConjugation + nonterminal_rule + TypeRelationshipPart + abstract_element Type + alternation + name DisjoiningPart + name UnioningPart + name IntersectingPart + name DifferencingPart + nonterminal_rule + DisjoiningPart + abstract_element Type + sequence + terminal 'disjoint' + terminal 'from' + prop_list_append + prop_name ownedRelationship + name OwnedDisjoining + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name OwnedDisjoining + repetition * + nonterminal_rule + UnioningPart + abstract_element Type + sequence + terminal 'unions' + prop_list_append + prop_name ownedRelationship + name Unioning + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name Unioning + repetition * + nonterminal_rule + IntersectingPart + abstract_element Type + sequence + terminal 'intersects' + prop_list_append + prop_name ownedRelationship + name Intersecting + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name Intersecting + repetition * + nonterminal_rule + DifferencingPart + abstract_element Type + sequence + terminal 'differences' + prop_list_append + prop_name ownedRelationship + name Differencing + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name Differencing + repetition * + nonterminal_rule + TypeBody + abstract_element Type + alternation + terminal ';' + sequence + terminal '{' + expression + name TypeBodyElement + repetition * + terminal '}' + nonterminal_rule + TypeBodyElement + abstract_element Type + alternation + prop_list_append + prop_name ownedRelationship + name NonFeatureMember + prop_list_append + prop_name ownedRelationship + name FeatureMember + prop_list_append + prop_name ownedRelationship + name AliasMember + prop_list_append + prop_name ownedRelationship + name Import + line_comment // Clause 8.2.4.1.2 Specialization + nonterminal_rule + Specialization + sequence + expression + sequence + terminal 'specialization' + name Identification + repetition ? + terminal 'subtype' + name SpecificType + name SPECIALIZES + name GeneralType + name RelationshipBody + nonterminal_rule + OwnedSpecialization + abstract_element Specialization + name GeneralType + nonterminal_rule + SpecificType + abstract_element Specialization + alternation + prop_assign + prop_name specific + qualified_name [QualifiedName] + sequence + prop_list_append + prop_name specific + name OwnedFeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name specific + nonterminal_rule + GeneralType + abstract_element Specialization + alternation + prop_assign + prop_name general + qualified_name [QualifiedName] + sequence + prop_list_append + prop_name general + name OwnedFeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name general + line_comment // Clause 8.2.4.1.3 Conjugation + nonterminal_rule + Conjugation + sequence + expression + sequence + terminal 'conjugation' + name Identification + repetition ? + terminal 'conjugate' + alternation + prop_assign + prop_name conjugatedType + qualified_name [QualifiedName] + sequence + prop_assign + prop_name conjugatedType + name FeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name conjugatedType + name CONJUGATES + alternation + prop_assign + prop_name originalType + qualified_name [QualifiedName] + sequence + prop_assign + prop_name originalType + name FeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name originalType + name RelationshipBody + nonterminal_rule + OwnedConjugation + abstract_element Conjugation + alternation + prop_assign + prop_name originalType + qualified_name [QualifiedName] + sequence + prop_assign + prop_name originalType + name FeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name originalType + line_comment // Clause 8.2.4.1.4 Disjoining + nonterminal_rule + Disjoining + sequence + expression + sequence + terminal 'disjoining' + name Identification + repetition ? + terminal 'disjoint' + alternation + prop_assign + prop_name typeDisjoined + qualified_name [QualifiedName] + sequence + prop_assign + prop_name typeDisjoined + name FeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name typeDisjoined + terminal 'from' + alternation + prop_assign + prop_name disjoiningType + qualified_name [QualifiedName] + sequence + prop_assign + prop_name disjoiningType + name FeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name disjoiningType + name RelationshipBody + nonterminal_rule + OwnedDisjoining + abstract_element Disjoining + alternation + prop_assign + prop_name disjoiningType + qualified_name [QualifiedName] + sequence + prop_assign + prop_name disjoiningType + name FeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name disjoiningType + line_comment // Clause 8.2.4.1.5 Unioning, Intersecting and Differencing + nonterminal_rule + Unioning + alternation + prop_assign + prop_name unioningType + qualified_name [QualifiedName] + prop_list_append + prop_name ownedRelatedElement + name OwnedFeatureChain + nonterminal_rule + Intersecting + alternation + prop_assign + prop_name intersectingType + qualified_name [QualifiedName] + prop_list_append + prop_name ownedRelatedElement + name OwnedFeatureChain + nonterminal_rule + Differencing + alternation + prop_assign + prop_name differencingType + qualified_name [QualifiedName] + prop_list_append + prop_name ownedRelatedElement + name OwnedFeatureChain + line_comment // Clause 8.2.4.1.6 Feature Membership + nonterminal_rule + FeatureMember + abstract_element OwningMembership + alternation + name TypeFeatureMember + name OwnedFeatureMember + nonterminal_rule + TypeFeatureMember + abstract_element OwningMembership + sequence + name MemberPrefix + terminal 'member' + prop_list_append + prop_name ownedRelatedElement + name FeatureElement + nonterminal_rule + OwnedFeatureMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name FeatureElement + line_comment // Clause 8.2.4.2 Classifiers Concrete Syntax + line_comment // Clause 8.2.4.2.1 Classifiers + nonterminal_rule + Classifier + sequence + name TypePrefix + terminal 'classifier' + name ClassifierDeclaration + name TypeBody + nonterminal_rule + ClassifierDeclaration + abstract_element Classifier + sequence + expression + boolean_prop_assign + prop_name isSufficient + terminal 'all' + repetition ? + name Identification + expression + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + repetition ? + expression + alternation + name SuperclassingPart + name ConjugationPart + repetition ? + expression + name TypeRelationshipPart + repetition * + nonterminal_rule + SuperclassingPart + abstract_element Classifier + sequence + name SPECIALIZES + prop_list_append + prop_name ownedRelationship + name OwnedSubclassification + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name OwnedSubclassification + repetition * + line_comment // Clause 8.2.4.2.2 Subclassification + nonterminal_rule + Subclassification + sequence + expression + sequence + terminal 'specialization' + name Identification + repetition ? + terminal 'subclassifier' + prop_assign + prop_name subclassifier + qualified_name [QualifiedName] + name SPECIALIZES + prop_assign + prop_name superclassifier + qualified_name [QualifiedName] + name RelationshipBody + nonterminal_rule + OwnedSubclassification + abstract_element Subclassification + prop_assign + prop_name superclassifier + qualified_name [QualifiedName] + line_comment // Clause 8.2.4.3 Features Concrete Syntax + line_comment // Clause 8.2.4.3.1 Features + nonterminal_rule + Feature + sequence + alternation + sequence + name FeaturePrefix + alternation + terminal 'feature' + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + expression + name FeatureDeclaration + repetition ? + sequence + alternation + name EndFeaturePrefix + name BasicFeaturePrefix + name FeatureDeclaration + expression + name ValuePart + repetition ? + name TypeBody + line_comment // (See Note 1) + nonterminal_rule + EndFeaturePrefix + abstract_element Feature + sequence + expression + sequence + boolean_prop_assign + prop_name isConstant + terminal 'const' + nonparsing_prop_assign + prop_name isVariable + prop_name true + repetition ? + boolean_prop_assign + prop_name isEnd + terminal 'end' + nonterminal_rule + BasicFeaturePrefix + abstract_element Feature + sequence + expression + prop_assign + prop_name direction + name FeatureDirection + repetition ? + expression + boolean_prop_assign + prop_name isDerived + terminal 'derived' + repetition ? + expression + boolean_prop_assign + prop_name isAbstract + terminal 'abstract' + repetition ? + expression + alternation + boolean_prop_assign + prop_name isComposite + terminal 'composite' + boolean_prop_assign + prop_name isPortion + terminal 'portion' + repetition ? + expression + alternation + boolean_prop_assign + prop_name isVariable + terminal 'var' + sequence + boolean_prop_assign + prop_name isConstant + terminal 'const' + nonparsing_prop_assign + prop_name isVariable + prop_name true + repetition ? + nonterminal_rule + FeaturePrefix + sequence + alternation + sequence + name EndFeaturePrefix + expression + prop_list_append + prop_name ownedRelationship + name OwnedCrossFeatureMember + repetition ? + name BasicFeaturePrefix + expression + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + repetition * + line_comment // (See Note 1) + nonterminal_rule + OwnedCrossFeatureMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name OwnedCrossFeature + nonterminal_rule + OwnedCrossFeature + abstract_element Feature + sequence + name BasicFeaturePrefix + name FeatureDeclaration + nonterminal_rule + FeatureDirection + abstract_element FeatureDirectionKind + alternation + terminal 'in' + terminal 'out' + terminal 'inout' + nonterminal_rule + FeatureDeclaration + abstract_element Feature + sequence + expression + boolean_prop_assign + prop_name isSufficient + terminal 'all' + repetition ? + alternation + sequence + name FeatureIdentification + expression + alternation + name FeatureSpecializationPart + name ConjugationPart + repetition ? + name FeatureSpecializationPart + name ConjugationPart + expression + name FeatureRelationshipPart + repetition * + nonterminal_rule + FeatureIdentification + abstract_element Feature + alternation + sequence + terminal '<' + prop_assign + prop_name declaredShortName + name NAME + terminal '>' + expression + prop_assign + prop_name declaredName + name NAME + repetition ? + prop_assign + prop_name declaredName + name NAME + nonterminal_rule + FeatureRelationshipPart + abstract_element Feature + alternation + name TypeRelationshipPart + name ChainingPart + name InvertingPart + name TypeFeaturingPart + nonterminal_rule + ChainingPart + abstract_element Feature + sequence + terminal 'chains' + alternation + prop_list_append + prop_name ownedRelationship + name OwnedFeatureChaining + name FeatureChain + nonterminal_rule + InvertingPart + abstract_element Feature + sequence + terminal 'inverse' + terminal 'of' + prop_list_append + prop_name ownedRelationship + name OwnedFeatureInverting + nonterminal_rule + TypeFeaturingPart + abstract_element Feature + sequence + terminal 'featured' + terminal 'by' + prop_list_append + prop_name ownedRelationship + name OwnedTypeFeaturing + expression + sequence + terminal ',' + prop_list_append + prop_name ownedTypeFeaturing + name OwnedTypeFeaturing + repetition * + nonterminal_rule + FeatureSpecializationPart + abstract_element Feature + alternation + sequence + expression + name FeatureSpecialization + repetition + + expression + name MultiplicityPart + repetition ? + expression + name FeatureSpecialization + repetition * + sequence + name MultiplicityPart + expression + name FeatureSpecialization + repetition * + nonterminal_rule + MultiplicityPart + abstract_element Feature + alternation + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + sequence + expression + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + repetition ? + alternation + sequence + boolean_prop_assign + prop_name isOrdered + terminal 'ordered' + expression + sequence + nonparsing_prop_assign + prop_name isUnique + prop_name false + terminal 'nonunique' + repetition ? + sequence + nonparsing_prop_assign + prop_name isUnique + prop_name false + terminal 'nonunique' + expression + boolean_prop_assign + prop_name isOrdered + terminal 'ordered' + repetition ? + nonterminal_rule + FeatureSpecialization + abstract_element Feature + alternation + name Typings + name Subsettings + name References + name Crosses + name Redefinitions + nonterminal_rule + Typings + abstract_element Feature + sequence + name TypedBy + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name OwnedFeatureTyping + repetition * + nonterminal_rule + TypedBy + abstract_element Feature + sequence + name TYPED_BY + prop_list_append + prop_name ownedRelationship + name OwnedFeatureTyping + nonterminal_rule + Subsettings + abstract_element Feature + sequence + name Subsets + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name OwnedSubsetting + repetition * + nonterminal_rule + Subsets + abstract_element Feature + sequence + name SUBSETS + prop_list_append + prop_name ownedRelationship + name OwnedSubsetting + nonterminal_rule + References + abstract_element Feature + sequence + name REFERENCES + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + nonterminal_rule + Crosses + abstract_element Feature + sequence + name CROSSES + prop_list_append + prop_name ownedRelationship + name OwnedCrossSubsetting + nonterminal_rule + Redefinitions + abstract_element Feature + sequence + name Redefines + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name OwnedRedefinition + repetition * + nonterminal_rule + Redefines + abstract_element Feature + sequence + name REDEFINES + prop_list_append + prop_name ownedRelationship + name OwnedRedefinition + line_comment // Notes: + line_comment // 1. PrefixMetadataMember is defined in the Kernel layer (see 8.3.4.12). + line_comment // Clause 8.2.4.3.2 Feature Typing + nonterminal_rule + FeatureTyping + sequence + expression + sequence + terminal 'specialization' + name Identification + repetition ? + terminal 'typing' + prop_assign + prop_name typedFeature + qualified_name [QualifiedName] + name TYPED_BY + name GeneralType + name RelationshipBody + nonterminal_rule + OwnedFeatureTyping + abstract_element FeatureTyping + name GeneralType + line_comment // Clause 8.2.4.3.3 Subsetting + nonterminal_rule + Subsetting + sequence + expression + sequence + terminal 'specialization' + name Identification + repetition ? + terminal 'subset' + name SpecificType + name SUBSETS + name GeneralType + name RelationshipBody + nonterminal_rule + OwnedSubsetting + abstract_element Subsetting + name GeneralType + nonterminal_rule + OwnedReferenceSubsetting + abstract_element ReferenceSubsetting + name GeneralType + nonterminal_rule + OwnedCrossSubsetting + abstract_element CrossSubsetting + name GeneralType + line_comment // Clause 8.2.4.3.4 Redefinition + nonterminal_rule + Redefinition + sequence + expression + sequence + terminal 'specialization' + name Identification + repetition ? + terminal 'redefinition' + name SpecificType + name REDEFINES + name GeneralType + name RelationshipBody + nonterminal_rule + OwnedRedefinition + abstract_element Redefinition + name GeneralType + line_comment // Clause 8.2.4.3.5 Feature Chaining + nonterminal_rule + OwnedFeatureChain + abstract_element Feature + name FeatureChain + nonterminal_rule + FeatureChain + abstract_element Feature + sequence + prop_list_append + prop_name ownedRelationship + name OwnedFeatureChaining + expression + sequence + terminal '.' + prop_list_append + prop_name ownedRelationship + name OwnedFeatureChaining + repetition + + nonterminal_rule + OwnedFeatureChaining + abstract_element FeatureChaining + prop_assign + prop_name chainingFeature + qualified_name [QualifiedName] + line_comment // Clause 8.2.4.3.6 Feature Inverting + nonterminal_rule + FeatureInverting + sequence + expression + sequence + terminal 'inverting' + expression + name Identification + repetition ? + repetition ? + terminal 'inverse' + alternation + prop_assign + prop_name featureInverted + qualified_name [QualifiedName] + sequence + prop_assign + prop_name featureInverted + name OwnedFeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name featureInverted + terminal 'of' + alternation + prop_assign + prop_name invertingFeature + qualified_name [QualifiedName] + sequence + prop_list_append + prop_name ownedRelatedElement + name OwnedFeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name invertingFeature + name RelationshipBody + nonterminal_rule + OwnedFeatureInverting + abstract_element FeatureInverting + alternation + prop_assign + prop_name invertingFeature + qualified_name [QualifiedName] + sequence + prop_assign + prop_name invertingFeature + name OwnedFeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name invertingFeature + line_comment // Clause 8.2.4.3.7 Type Featuring + nonterminal_rule + TypeFeaturing + sequence + terminal 'featuring' + expression + sequence + name Identification + terminal 'of' + repetition ? + prop_assign + prop_name featureOfType + qualified_name [QualifiedName] + terminal 'by' + prop_assign + prop_name featuringType + qualified_name [QualifiedName] + name RelationshipBody + nonterminal_rule + OwnedTypeFeaturing + abstract_element TypeFeaturing + prop_assign + prop_name featuringType + qualified_name [QualifiedName] + line_comment // Clause 8.2.5 Kernel Concrete Syntax + line_comment // Clause 8.2.5.1 Data Types Concrete Syntax + nonterminal_rule + DataType + sequence + name TypePrefix + terminal 'datatype' + name ClassifierDeclaration + name TypeBody + line_comment // Clause 8.2.5.2 Classes Concrete Syntax + nonterminal_rule + Class + sequence + name TypePrefix + terminal 'class' + name ClassifierDeclaration + name TypeBody + line_comment // Clause 8.2.5.3 Structures Concrete Syntax + nonterminal_rule + Structure + sequence + name TypePrefix + terminal 'struct' + name ClassifierDeclaration + name TypeBody + line_comment // Clause 8.2.5.4 Associations Concrete Syntax + nonterminal_rule + Association + sequence + name TypePrefix + terminal 'assoc' + name ClassifierDeclaration + name TypeBody + nonterminal_rule + AssociationStructure + sequence + name TypePrefix + terminal 'assoc' + terminal 'struct' + name ClassifierDeclaration + name TypeBody + line_comment // Clause 8.2.5.5 Connectors Concrete Syntax + line_comment // Clause 8.2.5.5.1 Connectors + nonterminal_rule + Connector + sequence + name FeaturePrefix + terminal 'connector' + alternation + sequence + expression + name FeatureDeclaration + repetition ? + expression + name ValuePart + repetition ? + name ConnectorDeclaration + name TypeBody + nonterminal_rule + ConnectorDeclaration + abstract_element Connector + alternation + name BinaryConnectorDeclaration + name NaryConnectorDeclaration + nonterminal_rule + BinaryConnectorDeclaration + abstract_element Connector + sequence + expression + alternation + sequence + expression + name FeatureDeclaration + repetition ? + terminal 'from' + sequence + boolean_prop_assign + prop_name isSufficient + terminal 'all' + expression + terminal 'from' + repetition ? + repetition ? + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + terminal 'to' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + nonterminal_rule + NaryConnectorDeclaration + abstract_element Connector + sequence + expression + name FeatureDeclaration + repetition ? + terminal '(' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + terminal ',' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + repetition * + terminal ')' + nonterminal_rule + ConnectorEndMember + abstract_element EndFeatureMembership + prop_list_append + prop_name ownedRelatedElement + name ConnectorEnd + nonterminal_rule + ConnectorEnd + abstract_element Feature + sequence + expression + prop_list_append + prop_name ownedRelationship + name OwnedCrossMultiplicityMember + repetition ? + expression + sequence + prop_assign + prop_name declaredName + name NAME + name REFERENCES + repetition ? + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + nonterminal_rule + OwnedCrossMultiplicityMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name OwnedCrossMultiplicity + nonterminal_rule + OwnedCrossMultiplicity + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + line_comment // Clause 8.2.5.5.2 Binding Connectors + nonterminal_rule + BindingConnector + sequence + name FeaturePrefix + terminal 'binding' + name BindingConnectorDeclaration + name TypeBody + nonterminal_rule + BindingConnectorDeclaration + abstract_element BindingConnector + alternation + sequence + name FeatureDeclaration + expression + sequence + terminal 'of' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + terminal '=' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + repetition ? + sequence + expression + boolean_prop_assign + prop_name isSufficient + terminal 'all' + repetition ? + expression + sequence + expression + terminal 'of' + repetition ? + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + terminal '=' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + repetition ? + line_comment // Clause 8.2.5.5.3 Successions + nonterminal_rule + Succession + sequence + name FeaturePrefix + terminal 'succession' + name SuccessionDeclaration + name TypeBody + nonterminal_rule + SuccessionDeclaration + abstract_element Succession + alternation + sequence + name FeatureDeclaration + expression + sequence + terminal 'first' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + terminal 'then' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + repetition ? + sequence + expression + boolean_prop_assign + prop_name + s + isSufficient + terminal 'all' + repetition ? + expression + sequence + expression + terminal 'first' + repetition ? + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + terminal 'then' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + repetition ? + line_comment // Clause 8.2.5.6 Behaviors Concrete Syntax + line_comment // Clause 8.2.5.6.1 Behaviors + nonterminal_rule + Behavior + sequence + name TypePrefix + terminal 'behavior' + name ClassifierDeclaration + name TypeBody + line_comment // Clause 8.2.5.6.2 Steps + nonterminal_rule + Step + sequence + name FeaturePrefix + terminal 'step' + name FeatureDeclaration + expression + name ValuePart + repetition ? + name TypeBody + line_comment // Clause 8.2.5.7 Functions Concrete Syntax + line_comment // Clause 8.2.5.7.1 Functions + nonterminal_rule + Function + sequence + name TypePrefix + terminal 'function' + name ClassifierDeclaration + name FunctionBody + nonterminal_rule + FunctionBody + abstract_element Type + alternation + terminal ';' + sequence + terminal '{' + name FunctionBodyPart + terminal '}' + nonterminal_rule + FunctionBodyPart + abstract_element Type + sequence + expression + alternation + name TypeBodyElement + prop_list_append + prop_name ownedRelationship + name ReturnFeatureMember + repetition * + expression + prop_list_append + prop_name ownedRelationship + name ResultExpressionMember + repetition ? + nonterminal_rule + ReturnFeatureMember + abstract_element ReturnParameterMembership + sequence + name MemberPrefix + terminal 'return' + prop_list_append + prop_name ownedRelatedElement + name FeatureElement + nonterminal_rule + ResultExpressionMember + abstract_element ResultExpressionMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name OwnedExpression + line_comment // Clause 8.2.5.7.2 Expressions + nonterminal_rule + Expression + sequence + name FeaturePrefix + terminal 'expr' + name FeatureDeclaration + expression + name ValuePart + repetition ? + name FunctionBody + line_comment // Clause 8.2.5.7.3 Predicates + nonterminal_rule + Predicate + sequence + name TypePrefix + terminal 'predicate' + name ClassifierDeclaration + name FunctionBody + line_comment // Clause 8.2.5.7.4 Boolean Expressions and Invariants + nonterminal_rule + BooleanExpression + sequence + name FeaturePrefix + terminal 'bool' + name FeatureDeclaration + expression + name ValuePart + repetition ? + name FunctionBody + nonterminal_rule + Invariant + sequence + name FeaturePrefix + terminal 'inv' + expression + alternation + terminal 'true' + boolean_prop_assign + prop_name isNegated + terminal 'false' + repetition ? + name FeatureDeclaration + expression + name ValuePart + repetition ? + name FunctionBody + line_comment // Clause 8.2.5.8 Expressions Concrete Syntax + line_comment // Clause 8.2.5.8.1 Operator Expressions + nonterminal_rule + OwnedExpressionReferenceMember + abstract_element FeatureMembership + prop_list_append + prop_name ownedRelationship + name OwnedExpressionReference + nonterminal_rule + OwnedExpressionReference + abstract_element FeatureReferenceExpression + prop_list_append + prop_name ownedRelationship + name OwnedExpressionMember + nonterminal_rule + OwnedExpressionMember + abstract_element FeatureMembership + prop_assign + prop_name ownedFeatureMember + name OwnedExpression + nonterminal_rule + OwnedExpression + abstract_element Expression + alternation + name ConditionalExpression + name ConditionalBinaryOperatorExpression + name BinaryOperatorExpression + name UnaryOperatorExpression + name ClassificationExpression + name MetaclassificationExpression + name ExtentExpression + name PrimaryExpression + nonterminal_rule + ConditionalExpression + abstract_element OperatorExpression + sequence + prop_assign + prop_name operator + terminal 'if' + prop_list_append + prop_name ownedRelationship + name ArgumentMember + terminal '?' + prop_list_append + prop_name ownedRelationship + name ArgumentExpressionMember + terminal 'else' + prop_list_append + prop_name ownedRelationship + name ArgumentExpressionMember + prop_list_append + prop_name ownedRelationship + name EmptyResultMember + nonterminal_rule + ConditionalBinaryOperatorExpression + abstract_element OperatorExpression + sequence + prop_list_append + prop_name ownedRelationship + name ArgumentMember + prop_assign + prop_name operator + name ConditionalBinaryOperator + prop_list_append + prop_name ownedRelationship + name ArgumentExpressionMember + prop_list_append + prop_name ownedRelationship + name EmptyResultMember + nonterminal_rule + ConditionalBinaryOperator + alternation + terminal '??' + terminal 'or' + terminal 'and' + terminal 'implies' + nonterminal_rule + BinaryOperatorExpression + abstract_element OperatorExpression + sequence + prop_list_append + prop_name ownedRelationship + name ArgumentMember + prop_assign + prop_name operator + name BinaryOperator + prop_list_append + prop_name ownedRelationship + name ArgumentMember + prop_list_append + prop_name ownedRelationship + name EmptyResultMember + nonterminal_rule + BinaryOperator + alternation + terminal '|' + terminal '&' + terminal 'xor' + terminal '..' + terminal '==' + terminal '!=' + terminal '===' + terminal '!==' + terminal '<' + terminal '>' + terminal '<=' + terminal '>=' + terminal '+' + terminal '-' + terminal '*' + terminal '/' + terminal '%' + terminal '^' + terminal '**' + nonterminal_rule + UnaryOperatorExpression + abstract_element OperatorExpression + sequence + prop_assign + prop_name operator + name UnaryOperator + prop_list_append + prop_name ownedRelationship + name ArgumentMember + prop_list_append + prop_name ownedRelationship + name EmptyResultMember + nonterminal_rule + UnaryOperator + alternation + terminal '+' + terminal '-' + terminal '~' + terminal 'not' + nonterminal_rule + ClassificationExpression + abstract_element OperatorExpression + sequence + expression + prop_list_append + prop_name ownedRelationship + name ArgumentMember + repetition ? + alternation + sequence + prop_assign + prop_name operator + name ClassificationTestOperator + prop_list_append + prop_name ownedRelationship + name TypeReferenceMember + sequence + prop_assign + prop_name operator + name CastOperator + prop_list_append + prop_name ownedRelationship + name TypeResultMember + prop_list_append + prop_name ownedRelationship + name EmptyResultMember + nonterminal_rule + ClassificationTestOperator + alternation + terminal 'istype' + terminal 'hastype' + terminal '@' + nonterminal_rule + CastOperator + terminal 'as' + nonterminal_rule + MetaclassificationExpression + abstract_element OperatorExpression + sequence + prop_list_append + prop_name ownedRelationship + name MetadataArgumentMember + alternation + sequence + prop_assign + prop_name operator + name ClassificationTestOperator + prop_list_append + prop_name ownedRelationship + name TypeReferenceMember + sequence + prop_assign + prop_name operator + name MetaCastOperator + prop_list_append + prop_name ownedRelationship + name TypeResultMember + prop_list_append + prop_name ownedRelationship + name EmptyResultMember + nonterminal_rule + ArgumentMember + abstract_element ParameterMembership + prop_assign + prop_name ownedMemberParameter + name Argument + nonterminal_rule + Argument + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name ArgumentValue + nonterminal_rule + ArgumentValue + abstract_element FeatureValue + prop_assign + prop_name value + name OwnedExpression + nonterminal_rule + ArgumentExpressionMember + abstract_element FeatureMembership + prop_list_append + prop_name ownedRelatedElement + name ArgumentExpression + nonterminal_rule + ArgumentExpression + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name ArgumentExpressionValue + nonterminal_rule + ArgumentExpressionValue + abstract_element FeatureValue + prop_assign + prop_name value + name OwnedExpressionReference + nonterminal_rule + MetadataArgumentMember + abstract_element ParameterMembership + prop_list_append + prop_name ownedRelatedElement + name MetadataArgument + nonterminal_rule + MetadataArgument + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name MetadataValue + nonterminal_rule + MetadataValue + abstract_element FeatureValue + prop_assign + prop_name value + name MetadataReference + nonterminal_rule + MetadataReference + abstract_element MetadataAccessExpression + prop_list_append + prop_name ownedRelationship + name ElementReferenceMember + nonterminal_rule + MetaclassificationTestOperator + terminal '@@' + nonterminal_rule + MetaCastOperator + terminal 'meta' + nonterminal_rule + ExtentExpression + abstract_element OperatorExpression + sequence + prop_assign + prop_name operator + terminal 'all' + prop_list_append + prop_name ownedRelationship + name TypeReferenceMember + nonterminal_rule + TypeReferenceMember + abstract_element ParameterMembership + prop_assign + prop_name ownedMemberFeature + name TypeReference + nonterminal_rule + TypeResultMember + abstract_element ResultParameterMembership + prop_assign + prop_name ownedMemberFeature + name TypeReference + nonterminal_rule + TypeReference + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name ReferenceTyping + nonterminal_rule + ReferenceTyping + abstract_element FeatureTyping + prop_assign + prop_name type + qualified_name [QualifiedName] + nonterminal_rule + EmptyResultMember + abstract_element ReturnParameterMembership + prop_list_append + prop_name ownedRelatedElement + name EmptyFeature + nonterminal_rule + EmptyFeature + abstract_element Feature + nonparsing_empty_value + line_comment // Notes: + line_comment // 1. OperatorExpressions provide a shorthand notation for InvocationExpressions that invoke a library Function represented as an operator symbol. Table 5 shows the mapping from operator symbols to the Functions they represent from the Kernel Model Library (see Clause 9). An OperatorExpression contains subexpressions called its operands that generally correspond to the argument Expressions of the OperatorExpression, except in the case of operators representing control Functions, in which case the evaluation of certain operands is as determined by the Function (see 8.4.4.9 for details). + line_comment // 2. Though not directly expressed in the syntactic productions given above, in any OperatorExpression containing nested OperatorExpressions, the nested OperatorExpressions shall be implicitly grouped according to the precedence of the operators involved, as given in Table 6. OperatorExpressions with higher precedence operators shall be grouped more tightly than those with lower precedence operators. Further, all BinaryOperators other than exponentiation are left-associative (i.e, they group to the left), while the exponentiation operators (^ and **) are right-associative (i.e., they group to the right). + line_comment // 3. The unary operator symbol ~ maps to the library Function DataFunctions::'~', as shown in Table 5. This abstract Function may be given a concrete definition in a domain-specific Function library, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used. + line_comment // Clause 8.2.5.8.2 Primary Expressions + nonterminal_rule + PrimaryExpression + abstract_element Expression + alternation + name FeatureChainExpression + name NonFeatureChainPrimaryExpression + nonterminal_rule + PrimaryArgumentValue + abstract_element FeatureValue + prop_assign + prop_name value + name PrimaryExpression + nonterminal_rule + PrimaryArgument + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name PrimaryArgumentValue + nonterminal_rule + PrimaryArgumentMember + abstract_element ParameterMembership + prop_assign + prop_name ownedMemberParameter + name PrimaryArgument + nonterminal_rule + NonFeatureChainPrimaryExpression + abstract_element Expression + alternation + name BracketExpression + name IndexExpression + name SequenceExpression + name SelectExpression + name CollectExpression + name FunctionOperationExpression + name BaseExpression + nonterminal_rule + NonFeatureChainPrimaryArgumentValue + abstract_element FeatureValue + prop_assign + prop_name value + name NonFeatureChainPrimaryExpression + nonterminal_rule + NonFeatureChainPrimaryArgument + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name NonFeatureChainPrimaryArgumentValue + nonterminal_rule + NonFeatureChainPrimaryArgumentMember + abstract_element ParameterMembership + prop_assign + prop_name ownedMemberParameter + name PrimaryArgument + nonterminal_rule + BracketExpression + abstract_element OperatorExpression + sequence + prop_list_append + prop_name ownedRelationship + name PrimaryArgumentMember + prop_assign + prop_name operator + terminal '[' + prop_list_append + prop_name ownedRelationship + name SequenceExpressionListMember + terminal ']' + nonterminal_rule + IndexExpression + sequence + prop_list_append + prop_name ownedRelationship + name PrimaryArgumentMember + terminal '#' + terminal '(' + prop_list_append + prop_name ownedRelationship + name SequenceExpressionListMember + terminal ')' + nonterminal_rule + SequenceExpression + abstract_element Expression + sequence + terminal '(' + name SequenceExpressionList + terminal ')' + nonterminal_rule + SequenceExpressionList + abstract_element Expression + alternation + sequence + name OwnedExpression + expression + terminal ',' + repetition ? + name SequenceOperatorExpression + nonterminal_rule + SequenceOperatorExpression + abstract_element OperatorExpression + sequence + prop_list_append + prop_name ownedRelationship + name OwnedExpressionMember + prop_assign + prop_name operator + terminal ',' + prop_list_append + prop_name ownedRelationship + name SequenceExpressionListMember + nonterminal_rule + SequenceExpressionListMember + abstract_element FeatureMembership + prop_assign + prop_name ownedMemberFeature + name SequenceExpressionList + nonterminal_rule + FeatureChainExpression + sequence + prop_list_append + prop_name ownedRelationship + name NonFeatureChainPrimaryArgumentMember + terminal '.' + prop_list_append + prop_name ownedRelationship + name FeatureChainMember + nonterminal_rule + CollectExpression + sequence + prop_list_append + prop_name ownedRelationship + name PrimaryArgumentMember + terminal '.' + prop_list_append + prop_name ownedRelationship + name BodyArgumentMember + nonterminal_rule + SelectExpression + sequence + prop_list_append + prop_name ownedRelationship + name PrimaryArgumentMember + terminal '.?' + prop_list_append + prop_name ownedRelationship + name BodyArgumentMember + nonterminal_rule + FunctionOperationExpression + abstract_element InvocationExpression + sequence + prop_list_append + prop_name ownedRelationship + name PrimaryArgumentMember + terminal '->' + prop_list_append + prop_name ownedRelationship + name InvocationTypeMember + alternation + prop_list_append + prop_name ownedRelationship + name BodyArgumentMember + prop_list_append + prop_name ownedRelationship + name FunctionReferenceArgumentMember + name ArgumentList + prop_list_append + prop_name ownedRelationship + name EmptyResultMember + nonterminal_rule + BodyArgumentMember + abstract_element ParameterMembership + prop_assign + prop_name ownedMemberParameter + name BodyArgument + nonterminal_rule + BodyArgument + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name BodyArgumentValue + nonterminal_rule + BodyArgumentValue + abstract_element FeatureValue + prop_assign + prop_name value + name BodyExpression + nonterminal_rule + FunctionReferenceArgumentMember + abstract_element ParameterMembership + prop_assign + prop_name ownedMemberParameter + name FunctionReferenceArgument + nonterminal_rule + FunctionReferenceArgument + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name FunctionReferenceArgumentValue + nonterminal_rule + FunctionReferenceArgumentValue + abstract_element FeatureValue + prop_assign + prop_name value + name FunctionReferenceExpression + nonterminal_rule + FunctionReferenceExpression + abstract_element FeatureReferenceExpression + prop_list_append + prop_name ownedRelationship + name FunctionReferenceMember + nonterminal_rule + FunctionReferenceMember + abstract_element FeatureMembership + prop_assign + prop_name ownedMemberFeature + name FunctionReference + nonterminal_rule + FunctionReference + abstract_element Expression + prop_list_append + prop_name ownedRelationship + name ReferenceTyping + nonterminal_rule + FeatureChainMember + abstract_element Membership + alternation + name FeatureReferenceMember + name OwnedFeatureChainMember + nonterminal_rule + OwnedFeatureChainMember + abstract_element OwningMembership + prop_assign + prop_name ownedMemberElement + name FeatureChain + line_comment // Notes: + line_comment // 1. Primary expressions provide additional shorthand notations for certain kinds of InvocationExpressions. For those cases in which the InvocationExpression is an OperatorExpression, its operator shall be resolved to the appropriate library function as given in Table 7. Note also that, for a CollectionExpression or SelectExpression, the abstract syntax constrains the operator to be collect and select, respectively, separately from the . and .? symbols used in their concrete syntax notation (see 8.3.4.8.2 and 8.3.4.8.18). + line_comment // 2. The grammar allows a bracket syntax [...]that parses to an invocation of the library Function BaseFunctions::'[', as shown in Table 7. This notation is available for use with domain-specific library models that given a concrete definition to the abstract base '[' Function, but no default definition is provided in the Kernel Functions Library. If no domain-specific definition is available, a tool should give a warning if this operator is used. + line_comment // Clause 8.2.5.8.3 Base Expressions + nonterminal_rule + BaseExpression + abstract_element Expression + alternation + name NullExpression + name LiteralExpression + name FeatureReferenceExpression + name MetadataAccessExpression + name InvocationExpression + name ConstructorExpression + name BodyExpression + nonterminal_rule + NullExpression + abstract_element NullExpression + alternation + terminal 'null' + sequence + terminal '(' + terminal ')' + nonterminal_rule + FeatureReferenceExpression + abstract_element FeatureReferenceExpression + sequence + prop_list_append + prop_name ownedRelationship + name FeatureReferenceMember + prop_list_append + prop_name ownedRelationship + name EmptyResultMember + nonterminal_rule + FeatureReferenceMember + abstract_element Membership + prop_assign + prop_name memberElement + name FeatureReference + nonterminal_rule + FeatureReference + abstract_element Feature + qualified_name [QualifiedName] + nonterminal_rule + MetadataAccessExpression + sequence + prop_list_append + prop_name ownedRelationship + name ElementReferenceMember + terminal '.' + terminal 'metadata' + nonterminal_rule + ElementReferenceMember + abstract_element Membership + prop_assign + prop_name memberElement + qualified_name [QualifiedName] + nonterminal_rule + InvocationExpression + abstract_element InvocationExpression + sequence + prop_list_append + prop_name ownedRelationship + name InstantiatedTypeMember + name ArgumentList + prop_list_append + prop_name ownedRelationship + name EmptyResultMember + nonterminal_rule + ConstructorExpression + sequence + terminal 'new' + prop_list_append + prop_name ownedRelationship + name InstantiatedTypeMember + prop_list_append + prop_name ownedRelationship + name ConstructorResultMember + nonterminal_rule + ConstructorResultMember + abstract_element ReturnParameterMembership + prop_list_append + prop_name ownedRelatedElement + name ConstructorResult + nonterminal_rule + ConstructorResult + abstract_element Feature + name ArgumentList + nonterminal_rule + InstantiatedTypeMember + abstract_element Membership + alternation + prop_assign + prop_name memberElement + name InstantiatedTypeReference + name OwnedFeatureChainMember + nonterminal_rule + InstantiatedTypeReference + abstract_element Type + qualified_name [QualifiedName] + nonterminal_rule + ArgumentList + abstract_element Feature + sequence + terminal '(' + expression + alternation + name PositionalArgumentList + name NamedArgumentList + repetition ? + terminal ')' + nonterminal_rule + PositionalArgumentList + abstract_element Feature + sequence + prop_list_append + prop_name + e + ownedRelationship + name ArgumentMember + expression + sequence + terminal ',' + prop_list_append + prop_name + e + ownedRelationship + name ArgumentMember + repetition * + nonterminal_rule + NamedArgumentList + abstract_element Feature + sequence + prop_list_append + prop_name ownedRelationship + name NamedArgumentMember + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name NamedArgumentMember + repetition * + nonterminal_rule + NamedArgumentMember + abstract_element FeatureMembership + prop_assign + prop_name ownedMemberFeature + name NamedArgument + nonterminal_rule + NamedArgument + abstract_element Feature + sequence + prop_list_append + prop_name ownedRelationship + name ParameterRedefinition + terminal '=' + prop_list_append + prop_name ownedRelationship + name ArgumentValue + nonterminal_rule + ParameterRedefinition + abstract_element Redefinition + prop_assign + prop_name redefinedFeature + qualified_name [QualifiedName] + nonterminal_rule + BodyExpression + abstract_element FeatureReferenceExpression + prop_list_append + prop_name ownedRelationship + name ExpressionBodyMember + nonterminal_rule + ExpressionBodyMember + abstract_element FeatureMembership + prop_assign + prop_name ownedMemberFeature + name ExpressionBody + nonterminal_rule + ExpressionBody + abstract_element Expression + sequence + terminal '{' + name FunctionBodyPart + terminal '}' + line_comment // Clause 8.2.5.8.4 Literal Expressions + nonterminal_rule + LiteralExpression + alternation + name LiteralBoolean + name LiteralString + name LiteralInteger + name LiteralReal + name LiteralInfinity + nonterminal_rule + LiteralBoolean + prop_assign + prop_name value + name BooleanValue + nonterminal_rule + BooleanValue + abstract_element Boolean + alternation + terminal 'true' + terminal 'false' + nonterminal_rule + LiteralString + prop_assign + prop_name value + name STRING_VALUE + nonterminal_rule + LiteralInteger + prop_assign + prop_name value + name DECIMAL_VALUE + nonterminal_rule + LiteralReal + prop_assign + prop_name value + name RealValue + nonterminal_rule + RealValue + abstract_element Real + alternation + sequence + expression + name DECIMAL_VALUE + repetition ? + terminal '.' + alternation + name DECIMAL_VALUE + name EXPONENTIAL_VALUE + name EXPONENTIAL_VALUE + nonterminal_rule + LiteralInfinity + terminal '*' + line_comment // Clause 8.2.5.9 Interactions Concrete Syntax + line_comment // Clause 8.2.5.9.1 Interactions + nonterminal_rule + Interaction + sequence + name TypePrefix + terminal 'interaction' + name ClassifierDeclaration + name TypeBody + line_comment // Clause 8.2.5.9.2 Flows + nonterminal_rule + Flow + sequence + name FeaturePrefix + terminal 'flow' + name FlowDeclaration + name TypeBody + nonterminal_rule + SuccessionFlow + sequence + name FeaturePrefix + terminal 'succession' + terminal 'flow' + name FlowDeclaration + name TypeBody + nonterminal_rule + FlowDeclaration + abstract_element Flow + alternation + sequence + name FeatureDeclaration + expression + name ValuePart + repetition ? + expression + sequence + terminal 'of' + prop_list_append + prop_name ownedRelationship + name PayloadFeatureMember + repetition ? + expression + sequence + terminal 'from' + prop_list_append + prop_name ownedRelationship + name FlowEndMember + terminal 'to' + prop_list_append + prop_name ownedRelationship + name FlowEndMember + repetition ? + sequence + expression + boolean_prop_assign + prop_name isSufficient + terminal 'all' + repetition ? + prop_list_append + prop_name ownedRelationship + name FlowEndMember + terminal 'to' + prop_list_append + prop_name ownedRelationship + name FlowEndMember + nonterminal_rule + PayloadFeatureMember + abstract_element FeatureMembership + prop_assign + prop_name ownedRelatedElement + name PayloadFeature + nonterminal_rule + PayloadFeature + alternation + sequence + name Identification + name PayloadFeatureSpecializationPart + expression + name ValuePart + repetition ? + sequence + name Identification + name ValuePart + sequence + prop_list_append + prop_name ownedRelationship + name OwnedFeatureTyping + expression + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + repetition ? + sequence + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + expression + prop_list_append + prop_name ownedRelationship + name OwnedFeatureTyping + repetition ? + nonterminal_rule + PayloadFeatureSpecializationPart + abstract_element Feature + alternation + sequence + expression + name FeatureSpecialization + repetition + + expression + name MultiplicityPart + repetition ? + expression + name FeatureSpecialization + repetition * + sequence + name MultiplicityPart + expression + name FeatureSpecialization + repetition + + nonterminal_rule + FlowEndMember + abstract_element EndFeatureMembership + prop_list_append + prop_name ownedRelatedElement + name FlowEnd + nonterminal_rule + FlowEnd + sequence + expression + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + terminal '.' + repetition ? + prop_list_append + prop_name ownedRelationship + name FlowFeatureMember + nonterminal_rule + FlowFeatureMember + abstract_element FeatureMembership + prop_list_append + prop_name ownedRelatedElement + name FlowFeature + nonterminal_rule + FlowFeature + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name FlowFeatureRedefinition + line_comment // (See Note 1) + nonterminal_rule + FlowFeatureRedefinition + abstract_element Redefinition + prop_assign + prop_name redefinedFeature + qualified_name [QualifiedName] + line_comment // Notes: + line_comment // 1. To ensure that an FlowFeature passes the validateRedefinitionDirectionConformance constraint (see 8.3.3.3.8), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature) + line_comment // Clause 8.2.5.10 Feature Values Concrete Syntax + nonterminal_rule + ValuePart + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name FeatureValue + nonterminal_rule + FeatureValue + sequence + alternation + terminal '=' + boolean_prop_assign + prop_name isInitial + terminal ':=' + sequence + boolean_prop_assign + prop_name isDefault + terminal 'default' + expression + alternation + terminal '=' + boolean_prop_assign + prop_name isInitial + terminal ':=' + repetition ? + prop_list_append + prop_name ownedRelatedElement + name OwnedExpression + line_comment // Clause 8.2.5.11 Multiplicities Concrete Syntax + nonterminal_rule + Multiplicity + alternation + name MultiplicitySubset + name MultiplicityRange + nonterminal_rule + MultiplicitySubset + abstract_element Multiplicity + sequence + terminal 'multiplicity' + name Identification + name Subsets + name TypeBody + nonterminal_rule + MultiplicityRange + sequence + terminal 'multiplicity' + name Identification + name MultiplicityBounds + name TypeBody + nonterminal_rule + OwnedMultiplicity + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name OwnedMultiplicityRange + nonterminal_rule + OwnedMultiplicityRange + abstract_element MultiplicityRange + name MultiplicityBounds + nonterminal_rule + MultiplicityBounds + abstract_element MultiplicityRange + sequence + terminal '[' + expression + sequence + prop_list_append + prop_name ownedRelationship + name MultiplicityExpressionMember + terminal '..' + repetition ? + prop_list_append + prop_name ownedRelationship + name MultiplicityExpressionMember + terminal ']' + nonterminal_rule + MultiplicityExpressionMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + prop_value + name LiteralExpression + name FeatureReferenceExpression + line_comment // Clause 8.2.5.12 Metadata Concrete Syntax + nonterminal_rule + Metaclass + sequence + name TypePrefix + terminal 'metaclass' + name ClassifierDeclaration + name TypeBody + nonterminal_rule + PrefixMetadataAnnotation + abstract_element Annotation + sequence + terminal '#' + prop_list_append + prop_name ownedRelatedElement + name PrefixMetadataFeature + nonterminal_rule + PrefixMetadataMember + abstract_element OwningMembership + sequence + terminal '#' + prop_list_append + prop_name ownedRelatedElement + name PrefixMetadataFeature + nonterminal_rule + PrefixMetadataFeature + abstract_element MetadataFeature + prop_list_append + prop_name ownedRelationship + name OwnedFeatureTyping + nonterminal_rule + MetadataFeature + sequence + expression + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + repetition * + alternation + terminal '@' + terminal 'metadata' + name MetadataFeatureDeclaration + expression + sequence + terminal 'about' + prop_list_append + prop_name ownedRelationship + name Annotation + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name Annotation + repetition * + repetition ? + name MetadataBody + nonterminal_rule + MetadataFeatureDeclaration + abstract_element MetadataFeature + sequence + expression + sequence + name Identification + alternation + terminal ':' + sequence + terminal 'typed' + terminal 'by' + repetition ? + prop_list_append + prop_name ownedRelationship + name OwnedFeatureTyping + nonterminal_rule + MetadataBody + abstract_element Feature + alternation + terminal ';' + sequence + terminal '{' + expression + prop_list_append + prop_name ownedRelationship + name MetadataBodyElement + repetition * + terminal '}' + nonterminal_rule + MetadataBodyElement + abstract_element Membership + alternation + name NonFeatureMember + name MetadataBodyFeatureMember + name AliasMember + name Import + nonterminal_rule + MetadataBodyFeatureMember + abstract_element FeatureMembership + prop_assign + prop_name ownedMemberFeature + name MetadataBodyFeature + nonterminal_rule + MetadataBodyFeature + abstract_element Feature + sequence + expression + terminal 'feature' + repetition ? + expression + alternation + terminal ':>>' + terminal 'redefines' + repetition ? + prop_list_append + prop_name ownedRelationship + name OwnedRedefinition + expression + name FeatureSpecializationPart + repetition ? + expression + name ValuePart + repetition ? + name MetadataBody + line_comment // Clause 8.2.5.13 Packages Concrete Syntax + nonterminal_rule + Package + sequence + expression + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + repetition * + name PackageDeclaration + name PackageBody + nonterminal_rule + LibraryPackage + sequence + boolean_prop_assign + prop_name isStandard + terminal 'standard' + terminal 'library' + expression + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + repetition * + name PackageDeclaration + name PackageBody + nonterminal_rule + PackageDeclaration + abstract_element Package + sequence + terminal 'package' + name Identification + nonterminal_rule + PackageBody + abstract_element Package + alternation + terminal ';' + sequence + terminal '{' + expression + alternation + name NamespaceBodyElement + prop_list_append + prop_name ownedRelationship + name ElementFilterMember + repetition * + terminal '}' + nonterminal_rule + ElementFilterMember + abstract_element ElementFilterMembership + sequence + name MemberPrefix + terminal 'filter' + prop_assign + prop_name condition + name OwnedExpression + terminal ';' + line_comment // End of BNF + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_file_parser--SysML-graphical-corrected.log b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_file_parser--SysML-graphical-corrected.log new file mode 100644 index 000000000..1076a6924 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_file_parser--SysML-graphical-corrected.log @@ -0,0 +1,3721 @@ +INFO : Started parsing .\tests\KerML_and_SysML_grammars\SysML-graphical-bnf-corrected.kgbnf at 2025-12-04T19:39:11Z +INFO : Parse completed successfully +INFO : The resulting (AST) parse tree is: + +start + line_comment // Source document: tests/KerML_and_SysML_grammars/SysML-graphical-bnf-corrected-marked_up.kgbnf + line_comment // Generated by bnf_grammar_processor at: 2025-12-04T19:29:18Z + line_comment // Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html + line_comment // Generated by bnf_grammar_processor at: 2025-11-28T15:06:37Z + line_comment // Corrected manually by HP de Koning + line_comment // Part 2 - Systems Modeling Language (SysML) + line_comment // Clause 8.2.3 Graphical Notation + line_comment // Clause 8.2.3.1 Graphical Notation Overview + line_comment // Clause 8.2.3.2 Elements and Relationships Graphical Notation + nonterminal_rule + element + alternation + name dependencies-and-annotations-element + name general-element + name element-inside-textual-compartment + nonterminal_rule + compartment + name general-compartment + nonterminal_rule + general-compartment + sequence + image + name general-view + nonterminal_rule + general-view + sequence + expression + name general-element + repetition * + expression + name dependencies-and-annotations-element + repetition * + expression + name ellipsis-at-lower-left-corner + repetition ? + nonterminal_rule + ellipsis-at-lower-left-corner + terminal '...' + nonterminal_rule + general-element + alternation + name general-node + name general-relationship + nonterminal_rule + element-node + alternation + name usage-node + name definition-node + name annotation-node + name namespace-node + nonterminal_rule + element-inside-textual-compartment + image + nonterminal_rule + rel-name + alternation + name Identification + name QualifiedName + line_comment // Note. An element inside a textual compartment is selected by graying out a substring containing the element. The grayed-out section must cover a single element within the textual syntax inside the compartment. + line_comment // Clause 8.2.3.3 Dependencies Graphical Notation + nonterminal_rule + dependencies-and-annotations-element + name dependencies-element + nonterminal_rule + dependencies-element + alternation + name binary-dependency + name n-ary-dependency + nonterminal_rule + binary-dependency + image + nonterminal_rule + n-ary-dependency + sequence + name &n-ary-association-dot + expression + sequence + name n-ary-dependency-client-or-supplier-link + name &element-node + repetition + + nonterminal_rule + n-ary-dependency-client-or-supplier-link + alternation + name n-ary-dependency-client-link + name n-ary-dependency-supplier-link + nonterminal_rule + n-ary-association-dot + image + nonterminal_rule + n-ary-dependency-client-link + image + nonterminal_rule + n-ary-dependency-supplier-link + image + line_comment // Note. An n-ary dependency must have two or more client elements or two or more supplier elements. + line_comment // Clause 8.2.3.4 Annotations Graphical Notation + nonterminal_rule + dependencies-and-annotations-element + alternation + name annotation-node + name annotation-link + nonterminal_rule + annotation-node + alternation + name comment-node + name documentation-node + name textual-representation-node + nonterminal_rule + text-block + expression + name LINE_TEXT + repetition * + nonterminal_rule + comment-node + alternation + name comment-without-keyword + name comment-with-keyword + nonterminal_rule + comment-without-keyword + image + nonterminal_rule + comment-with-keyword + image + nonterminal_rule + documentation-node + image + nonterminal_rule + documentation-compartment + sequence + image + name Identification + name text-block + nonterminal_rule + textual-representation-node + image + nonterminal_rule + language-string + sequence + terminal 'language' + terminal '=' + name STRING_VALUE + nonterminal_rule + annotation-link + image + nonterminal_rule + annotated-element + alternation + name element + name element-inside-textual-compartment + line_comment // Note. A comment node may be attached to zero, one, or more than one annotated elements. All other annotation nodes must be attached to one and only one annotated element. + line_comment // Clause 8.2.3.5 Namespaces and Packages Graphical Notation + nonterminal_rule + general-node + name namespace-node + nonterminal_rule + namespace-node + name package-node + nonterminal_rule + package-node + alternation + name package-with-name-inside + name package-with-name-in-tab + name imported-package-with-name-inside + name imported-package-with-name-in-tab + nonterminal_rule + package-with-name-inside + image + nonterminal_rule + package-with-name-in-tab + image + nonterminal_rule + imported-package-with-name-inside + image + nonterminal_rule + imported-package-with-name-in-tab + image + nonterminal_rule + package-compartment + alternation + name general-compartment + name documentation-compartment + name packages-compartment + name members-compartment + name relationships-compartment + nonterminal_rule + compartment + name package-compartment + nonterminal_rule + packages-compartment + sequence + image + name packages-compartment-contents + nonterminal_rule + packages-compartment-contents + sequence + expression + name packages-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + packages-compartment-element + sequence + expression + name el-prefix + repetition ? + name Identification + nonterminal_rule + members-compartment + sequence + image + name members-compartment-contents + nonterminal_rule + members-compartment-contents + sequence + expression + name members-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + members-compartment-element + sequence + expression + name el-prefix + repetition ? + alternation + name DefinitionElement + name UsageElement + nonterminal_rule + relationships-compartment + sequence + image + name relationships-compartment-contents + nonterminal_rule + relationships-compartment-contents + sequence + expression + name relationships-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + relationships-compartment-element + sequence + expression + name el-prefix + repetition ? + name relationship-name + name QualifiedName + nonterminal_rule + relationship-name + alternation + terminal 'defines' + terminal 'defined by' + terminal 'specializes' + terminal 'specialized by' + terminal 'connect to' + terminal 'subsets' + terminal 'subsetted by' + terminal 'performs' + terminal 'performed by' + terminal 'allocated' + terminal 'allocated to' + terminal 'satisfy' + terminal 'satisfied by' + nonterminal_rule + general-relationship + alternation + name import + name top-level-import + name recursive-import + name owned-membership + name unowned-membership + nonterminal_rule + import + image + nonterminal_rule + top-level-import + image + nonterminal_rule + recursive-import + image + nonterminal_rule + owned-membership + image + nonterminal_rule + unowned-membership + image + line_comment // Clause 8.2.3.6 Definition and Usage Graphical Notation + nonterminal_rule + general-node + name type-node + nonterminal_rule + type-node + alternation + name definition-node + name usage-node + nonterminal_rule + general-node + sequence + name usage-node + name definition-node + nonterminal_rule + namespace-node + name type-node + nonterminal_rule + definition-name-with-alias + sequence + name DefinitionDeclaration + expression + sequence + terminal '«alias»' + sequence + name QualifiedName + expression + sequence + terminal ',' + name QualifiedName + repetition * + repetition ? + nonterminal_rule + usage-name-with-alias + sequence + expression + terminal '^' + repetition ? + name UsageDeclaration + expression + sequence + terminal '«alias»' + sequence + name QualifiedName + expression + sequence + terminal ',' + name QualifiedName + repetition * + repetition ? + nonterminal_rule + compartment-stack + expression + name compartment + repetition * + nonterminal_rule + compartment + alternation + name features-compartment + name variants-compartment + name variant-elementusages-compartment + nonterminal_rule + features-compartment + sequence + image + name features-compartment-contents + nonterminal_rule + features-compartment-contents + sequence + expression + name features-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + features-compartment-element + sequence + expression + name el-prefix + repetition ? + name UsagePrefix + name usage-cp + nonterminal_rule + variants-compartment + sequence + image + name variants-compartment-contents + nonterminal_rule + variants-compartment-contents + name members-compartment-contents + nonterminal_rule + variant-elementusages-compartment + sequence + image + name variants-compartment-contents + nonterminal_rule + general-relationship + name type-relationship + nonterminal_rule + type-relationship + alternation + name subclassification + name subsetting + name definition + name redefinition + name composite-feature-membership + name noncomposite-feature-membership + nonterminal_rule + subclassification + image + nonterminal_rule + definition + image + nonterminal_rule + subsetting + image + nonterminal_rule + reference-subsetting + image + nonterminal_rule + redefinition + image + nonterminal_rule + composite-feature-membership + image + nonterminal_rule + noncomposite-feature-membership + image + nonterminal_rule + el-prefix + alternation + terminal '^' + terminal '/' + nonterminal_rule + usage-cp + sequence + name usage + name Declaration + expression + name ValuePart + repetition ? + nonterminal_rule + extended-def + image + nonterminal_rule + extended-def-name-compartment + sequence + terminal '«' + expression + name BasicDefinitionPrefix + repetition ? + expression + name DefinitionExtensionKeyword + repetition + + terminal 'def' + terminal '»' + name definition-name-with-alias + line_comment // Note. This production is only valid for cases where one or more + line_comment // DefinitionExtensionKeyword names a MetadataDefinition that is a direct + line_comment // or indirect specialization of KerML metaclass SemanticMetadata. + nonterminal_rule + definition-node + name extended-def + nonterminal_rule + extended-usage + image + nonterminal_rule + extended-usage-name-compartment + sequence + terminal '«' + expression + name BasicUsagePrefix + repetition ? + expression + name UsageExtensionKeyword + repetition + + terminal '»' + name usage-name-with-alias + line_comment // Note. This production is only valid for cases where one or more + line_comment // UsageExtensionKeyword names a MetadataDefinition that is a direct + line_comment // or indirect specialization of KerML metaclass SemanticMetadata. + nonterminal_rule + usage-node + name extended-usage + line_comment // Clause 8.2.3.7 Attributes Graphical Notation + nonterminal_rule + definition-node + name attribute-def + nonterminal_rule + attribute-def + image + nonterminal_rule + attribute-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'attribute' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name attribute + nonterminal_rule + attribute + image + nonterminal_rule + attribute-name-compartment + sequence + terminal '«' + name UsagePrefix + terminal 'attribute' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + name attributes-compartment + nonterminal_rule + attributes-compartment + sequence + image + name attributes-compartment-contents + nonterminal_rule + attributes-compartment-contents + sequence + expression + name attributes-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + attributes-compartment-element + sequence + expression + name el-prefix + repetition ? + name UsagePrefix + name usage-cp + line_comment // Clause 8.2.3.8 Enumerations Graphical Notation + nonterminal_rule + definition-node + name enumeration-def + nonterminal_rule + enumeration-def + image + nonterminal_rule + enumeration-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'enum' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name enumeration + nonterminal_rule + enumeration + image + nonterminal_rule + enumeration-name-compartment + sequence + terminal '«' + name UsagePrefix + terminal 'enum' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + name enums-compartment + nonterminal_rule + enums-compartment + sequence + image + name enums-compartment-contents + nonterminal_rule + enums-compartment-contents + sequence + expression + name enums-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + enums-compartment-element + sequence + expression + name el-prefix + repetition ? + name UsagePrefix + name usage-cp + line_comment // Clause 8.2.3.9 Occurrences Graphical Notation + nonterminal_rule + definition-node + name occurrence-def + nonterminal_rule + general-relationship + name portion-relationship + nonterminal_rule + occurrence-def + image + nonterminal_rule + occurrence-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'occurrence' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + alternation + name occurrence + name occurrence-ref + name timeslice-or-snapshot-node + nonterminal_rule + occurrence + image + nonterminal_rule + occurrence-ref + image + nonterminal_rule + occurrence-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'occurrence' + terminal '»' + name usage-name-with-alias + nonterminal_rule + timeslice-or-snapshot-node + alternation + name timeslice + name snapshot + nonterminal_rule + timeslice + image + nonterminal_rule + timeslice-name-compartment + sequence + terminal '«timeslice»' + name usage-name-with-alias + nonterminal_rule + snapshot + image + nonterminal_rule + snapshots-name-compartment + sequence + terminal '«snapshot»' + name usage-name-with-alias + nonterminal_rule + event-occurrence-def + image + nonterminal_rule + event-occurrence-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'event' + terminal 'occurrence' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + definition-node + name event-occurrence-def + nonterminal_rule + event-occurrence + image + nonterminal_rule + event-occurrence-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'event' + terminal 'occurrence' + terminal '»' + name usage-name-with-alias + nonterminal_rule + usage-node + name event-occurrence + nonterminal_rule + event-edge + image + nonterminal_rule + eventer + alternation + name usage-node + name definition-node + nonterminal_rule + portion-relationship + image + nonterminal_rule + compartment + alternation + name occurrences-compartment + name individuals-compartment + name timeslices-compartment + name snapshots-compartment + name sequence-compartment + nonterminal_rule + occurrences-compartment + sequence + image + name occurrences-compartment-contents + nonterminal_rule + occurrences-compartment-contents + sequence + expression + name occurrences-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + occurrences-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name usage-cp + nonterminal_rule + individuals-compartment + sequence + image + name individuals-compartment-contents + nonterminal_rule + individuals-compartment-contents + sequence + expression + name individuals-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + individuals-compartment-element + name occurrences-compartment-element + nonterminal_rule + timeslices-compartment + sequence + image + name timeslices-compartment-contents + nonterminal_rule + timeslices-compartment-contents + sequence + expression + name timeslices-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + timeslices-compartment-element + name occurrences-compartment-element + nonterminal_rule + snapshots-compartment + sequence + image + name snapshots-compartment-contents + nonterminal_rule + snapshots-compartment-contents + sequence + expression + name snapshots-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + snapshots-compartment-element + name occurrences-compartment-element + nonterminal_rule + sequence-compartment + sequence + image + name sequence-view + nonterminal_rule + sequence-view + expression + name sq-graphical-element + repetition * + nonterminal_rule + sq-graphical-element + alternation + name sq-graphical-node + name sq-graphical-relationship + name dependencies-and-annotations-element + nonterminal_rule + sq-graphical-node + alternation + name sq-head-node + name lifeline + nonterminal_rule + sq-head-node + alternation + name sq-part + name sq-port + nonterminal_rule + sq-part + image + nonterminal_rule + sq-port + image + nonterminal_rule + sq-port-label + name UsageDeclaration + nonterminal_rule + sq-l-node + alternation + name lifeline + name sq-proxy + nonterminal_rule + lifeline + image + nonterminal_rule + sq-proxy + alternation + image + image + nonterminal_rule + proxy-label + sequence + expression + terminal '.' + repetition ? + name FeatureChainMember + nonterminal_rule + sq-graphical-relationship + alternation + name message + name sq-succession + nonterminal_rule + succession-label + expression + name UsageDeclaration + repetition ? + nonterminal_rule + sq-succession + image + nonterminal_rule + succession-label + name Identification + line_comment // Note: the proxy nodes attached to a succession must refer to an event + line_comment // Clause 8.2.3.10 Items Graphical Notation + nonterminal_rule + definition-node + name item-def + nonterminal_rule + interconnection-element + alternation + name item + name item-ref + nonterminal_rule + item-def + image + nonterminal_rule + item-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'item' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name item + nonterminal_rule + item + image + nonterminal_rule + item-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'item' + terminal '»' + name usage-name-with-alias + nonterminal_rule + item-ref + image + nonterminal_rule + compartment + name items-compartment + nonterminal_rule + items-compartment + sequence + image + name items-compartment-contents + nonterminal_rule + items-compartment-contents + sequence + expression + name items-compartment-element + repetition * + terminal '…' + nonterminal_rule + items-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name usage-cp + line_comment // Clause 8.2.3.11 Parts Graphical Notation + nonterminal_rule + definition-node + name part-def + nonterminal_rule + interconnection-element + alternation + name part + name part-ref + nonterminal_rule + part-def + image + nonterminal_rule + part-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'part' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name part + nonterminal_rule + part + image + nonterminal_rule + part-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'part' + terminal '»' + name usage-name-with-alias + nonterminal_rule + part-ref + image + nonterminal_rule + compartment + alternation + name parts-compartment + name directed-features-compartment + name interconnection-compartment + nonterminal_rule + parts-compartment + sequence + image + name parts-compartment-contents + nonterminal_rule + parts-compartment-contents + sequence + expression + name parts-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + parts-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name usage-cp + nonterminal_rule + directed-features-compartment + sequence + image + name directed-features-compartment-contents + nonterminal_rule + directed-features-compartment-contents + sequence + expression + name directed-features-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + directed-features-compartment-element + sequence + name el-prefix + name FeatureDirection + expression + name DefinitionBodyItem + repetition * + nonterminal_rule + interconnection-compartment + sequence + image + name interconnection-view + nonterminal_rule + interconnection-view + sequence + expression + name interconnection-element + repetition * + expression + name dependencies-and-annotations-element + repetition * + expression + name ellipsis-at-lower-left-corner + repetition ? + nonterminal_rule + general-view + name interconnection-view + line_comment // Clause 8.2.3.12 Ports Graphical Notation + nonterminal_rule + definition-node + name port-def + nonterminal_rule + port-def + image + nonterminal_rule + port-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'port' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name port-usage + nonterminal_rule + port-usage + image + nonterminal_rule + port-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'port' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + name ports-compartment + nonterminal_rule + ports-compartment + sequence + image + name ports-compartment-contents + nonterminal_rule + ports-compartment-contents + sequence + expression + name ports-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + ports-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name usage-cp + nonterminal_rule + interconnection-element + alternation + name port-def + name port-usage + nonterminal_rule + pdh + alternation + image + image + image + nonterminal_rule + pdv + alternation + image + image + image + nonterminal_rule + port-l + alternation + image + image + image + name proxy-v + nonterminal_rule + port-r + alternation + image + image + image + name proxy-v + nonterminal_rule + port-t + alternation + image + image + image + name proxy-h + nonterminal_rule + port-b + alternation + image + image + image + name proxy-h + nonterminal_rule + port-label + sequence + name QualifiedName + expression + sequence + terminal ':' + name QualifiedName + repetition ? + nonterminal_rule + proxy-v + alternation + image + image + nonterminal_rule + proxy-h + alternation + image + image + line_comment // Note. Dotted line port productions (references) are only possible for nested ports + line_comment // Note. The proxy option of a port production is valid only on a part usage contained within an interconnection view. + line_comment // Clause 8.2.3.13 Connections Graphical Notation + nonterminal_rule + definition-node + name connection-def + nonterminal_rule + connection-def + image + nonterminal_rule + connection-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'connection' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name connection + nonterminal_rule + connection + image + nonterminal_rule + connection-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'connection' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + name connections-compartment + nonterminal_rule + connections-compartment + sequence + image + name connections-compartment-contents + nonterminal_rule + connections-compartment-contents + sequence + expression + name connections-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + connections-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name UsageDeclaration + nonterminal_rule + interconnection-element + alternation + name connection-def + name connection + name connection-relationship + name attribute + nonterminal_rule + connection-relationship + alternation + name binding-connection + name connection-graphical + name n-ary-connection + name n-ary-connection-def + name connection-definition-elaboration + name connection-usage-elaboration + name connection-def-graphical + nonterminal_rule + connection-graphical + alternation + image + image + nonterminal_rule + c-adornment + expression + alternation + name a-property + name a-direction + name a-subsetting + name a-redefinition + repetition * + nonterminal_rule + a-property + alternation + terminal 'ordered' + terminal 'nonunique' + terminal 'abstract' + terminal 'derived' + terminal 'readonly' + nonterminal_rule + a-direction + alternation + terminal 'in' + terminal 'out' + terminal 'inout' + nonterminal_rule + a-subsetting + sequence + terminal 'subsets' + name OwnedSubsetting + expression + sequence + terminal ',' + name OwnedSubsetting + repetition * + nonterminal_rule + a-redefinition + sequence + terminal 'redefines' + name OwnedRedefinition + expression + sequence + terminal ',' + name OwnedRedefinition + repetition * + nonterminal_rule + connection-end + alternation + name usage-node + name usage-edge + nonterminal_rule + usage-edge + alternation + name connection-graphical + name binding-connection + nonterminal_rule + connection-label + name UsageDeclaration + nonterminal_rule + connection-def-graphical + alternation + image + image + nonterminal_rule + general-relationship + name connection-def-graphical + nonterminal_rule + cdef-label + name Identification + nonterminal_rule + n-ary-connection-def + sequence + name n-ary-def-connection-dot + expression + name n-ary-def-segment + repetition + + nonterminal_rule + n-ary-def-connection-dot + image + nonterminal_rule + n-ary-def-segment + image + nonterminal_rule + definition-node + name n-ary-def-connection-dot + nonterminal_rule + general-relationship + name n-ary-def-segment + nonterminal_rule + n-ary-connection + sequence + name n-ary-connection-dot + expression + name n-ary-segment + repetition + + nonterminal_rule + n-ary-connection-dot + image + nonterminal_rule + usage-node + name n-ary-connection-dot + nonterminal_rule + cdot-label + name UsageDeclaration + nonterminal_rule + n-ary-segment + image + nonterminal_rule + binding-connection + image + nonterminal_rule + rolename + expression + name Identification + repetition ? + nonterminal_rule + multiplicity + expression + name MultiplicityRange + repetition ? + nonterminal_rule + connection-definition-elaboration + image + nonterminal_rule + connection-usage-elaboration + image + line_comment // Note. The usage-nodes at the ends of a binding-connection must be of compatible types. + line_comment // Clause 8.2.3.14 Interfaces Graphical Notation + nonterminal_rule + definition-node + name interface-def + nonterminal_rule + interconnection-element + name interface + nonterminal_rule + interface-def + image + nonterminal_rule + interface-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'interface' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name interface + nonterminal_rule + interface + image + nonterminal_rule + interface-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'interface' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + alternation + name interfaces-compartment + name ends-compartment + nonterminal_rule + interfaces-compartment + sequence + image + name interfaces-compartment-contents + nonterminal_rule + interfaces-compartment-contents + sequence + expression + name interfaces-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + interfaces-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name InterfaceUsageDeclaration + nonterminal_rule + ends-compartment + sequence + image + name ends-compartment-contents + nonterminal_rule + ends-compartment-contents + sequence + expression + name ends-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + ends-compartment-element + sequence + name QualifiedName + expression + sequence + terminal ':' + name QualifiedName + repetition ? + nonterminal_rule + connection-relationship + name interface-connection + nonterminal_rule + interface-connection + image + nonterminal_rule + interface-label + expression + name UsageDeclaration + repetition ? + line_comment // Clause 8.2.3.15 Allocations Graphical Notation + nonterminal_rule + definition-node + name allocation-def + nonterminal_rule + allocation-def + image + nonterminal_rule + allocation-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'allocation' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name allocation + nonterminal_rule + allocation + image + nonterminal_rule + allocation-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'allocation' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + name allocations-compartment + nonterminal_rule + allocations-compartment + sequence + image + name allocations-compartment-contents + nonterminal_rule + allocations-compartment-contents + sequence + expression + name allocations-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + allocations-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name AllocationUsageDeclaration + expression + name UsageBody + repetition * + nonterminal_rule + general-relationship + name allocate-relationship + nonterminal_rule + allocate-relationship + image + nonterminal_rule + allocation-node + alternation + name general-node + name element-in-textual-compartment + nonterminal_rule + usage-edge + name allocate-relationship + line_comment // Clause 8.2.3.16 Flows Graphical Notation + nonterminal_rule + definition-node + name flow-def + nonterminal_rule + flow-def + image + nonterminal_rule + flow-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + expression + terminal 'succession' + repetition ? + terminal 'flow' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name flow-node + nonterminal_rule + flow-node + image + nonterminal_rule + flow-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + alternation + terminal 'message' + sequence + expression + terminal 'succession' + repetition ? + terminal 'flow' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + name flows-compartment + nonterminal_rule + flows-compartment + sequence + image + name flows-compartment-contents + nonterminal_rule + flows-compartment-contents + sequence + expression + name flows-compartment-element + repetition * + expression + terminal '...' + repetition ? + nonterminal_rule + flows-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + alternation + sequence + terminal 'message' + name MessageDeclaration + sequence + expression + terminal 'succession' + repetition ? + name FlowDeclaration + nonterminal_rule + interconnection-element + alternation + name flow-def + name flow + nonterminal_rule + connection-relationship + alternation + name message-connection + name flow + name succession-flow + name flow-on-connection + nonterminal_rule + usage-edge + alternation + name message + name flow + name succession-flow + nonterminal_rule + msg-end-node + alternation + name occurrence + name sq-l-node + name item + name part + name port + name action + name state + name use-case + name verification-case + name analysis-case + name proxy + nonterminal_rule + message + image + line_comment // Note: proxy nodes and ends of messages must refer to occurrences + nonterminal_rule + message-label + alternation + sequence + expression + name UsageDeclaration + repetition ? + expression + sequence + terminal 'of' + name FlowPayloadFeatureMember + repetition ? + name FlowPayloadFeatureMember + nonterminal_rule + flow + image + nonterminal_rule + flow-label + alternation + sequence + expression + name UsageDeclaration + repetition ? + expression + sequence + terminal 'of' + name FlowPayloadFeatureMember + repetition ? + name FlowPayloadFeatureMember + nonterminal_rule + flow-end-node + alternation + name parameter + name proxy + line_comment // Note: proxy nodes at ends of flows must refer to directed features + nonterminal_rule + succession-flow + image + nonterminal_rule + succession-flow-label + name flow-label + nonterminal_rule + flow-on-connection + image + nonterminal_rule + flow-node + alternation + name flow-node-r + name flow-node-l + name sflow-node-r + name sflow-node-l + name message-node-r + name message-node-l + nonterminal_rule + flow-node-r + image + nonterminal_rule + flow-node-l + image + nonterminal_rule + sflow-node-r + image + nonterminal_rule + sflow-node-l + image + nonterminal_rule + message-node-r + image + nonterminal_rule + message-node-l + image + nonterminal_rule + flow-label + alternation + name Identification + name FlowPayloadFeatureMember + line_comment // Clause 8.2.3.17 Actions Graphical Notation + nonterminal_rule + definition-node + name action-def + nonterminal_rule + action-def + image + nonterminal_rule + action-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'action' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + alternation + name action + name perform-action-usage + nonterminal_rule + action + image + nonterminal_rule + action-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'action' + terminal '»' + name usage-name-with-alias + nonterminal_rule + perform-action-usage + image + nonterminal_rule + action-ref + image + nonterminal_rule + perform-action-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'perform' + terminal 'action' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + alternation + name actions-compartment + name perform-actions-compartment + name parameters-compartment + name action-flow-compartment + nonterminal_rule + actions-compartment + sequence + image + name actions-compartment-contents + nonterminal_rule + actions-compartment-contents + sequence + expression + name actions-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + actions-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name ActionUsageDeclaration + nonterminal_rule + perform-actions-compartment + sequence + image + name perform-actions-compartment-contents + nonterminal_rule + perform-actions-compartment-contents + sequence + expression + name perform-actions-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + perform-actions-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name PerformActionUsageDeclaration + nonterminal_rule + parameters-compartment + sequence + image + name parameters-compartment-contents + nonterminal_rule + parameters-compartment-contents + sequence + expression + name parameters-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + parameters-compartment-element + sequence + expression + name el-prefix + repetition ? + name FeatureDirection + name UsageDeclaration + expression + name ValueOrFlowPart + repetition ? + expression + name DefinitionBodyItem + repetition * + nonterminal_rule + performed-by-compartment + sequence + image + name performed-by-compartment-contents + nonterminal_rule + performed-by-compartment-contents + sequence + expression + name QualifiedName + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + action-flow-compartment + sequence + image + name action-flow-view + nonterminal_rule + action-flow-view + sequence + expression + name dependencies-and-annotations-element + repetition * + expression + name action-flow-element + repetition * + expression + name perform-action-swimlanes + repetition ? + nonterminal_rule + action-flow-element + alternation + name action-ref + name action + name action-flow-node + name action-flow-relationship + nonterminal_rule + action-flow-node + alternation + name start-node + name done-node + name terminate-node + name fork-node + name join-node + name decision-node + name merge-node + name send-action-node + name accept-action-node + name while-loop-action-node + name for-loop-action-node + name if-else-action-node + name assign-action-node + nonterminal_rule + action-flow-relationship + alternation + name flow + name aflow-succession + name binding-connection + name else-branch + nonterminal_rule + param-l + alternation + image + image + name proxy-v + nonterminal_rule + param-r + alternation + image + image + name proxy-v + nonterminal_rule + param-t + alternation + image + image + name proxy-h + nonterminal_rule + param-b + alternation + image + image + name proxy-h + nonterminal_rule + param-label + sequence + name QualifiedName + expression + sequence + terminal ':' + name QualifiedName + repetition * + nonterminal_rule + start-node + image + nonterminal_rule + done-node + image + nonterminal_rule + terminate-node + image + nonterminal_rule + fork-node + image + nonterminal_rule + join-node + image + nonterminal_rule + decision-node + image + nonterminal_rule + merge-node + image + nonterminal_rule + send-action-node + image + nonterminal_rule + send-action-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'send' + terminal 'action' + terminal '»' + name usage-name-with-alias + nonterminal_rule + send-action-expression + sequence + name NodeParameterMember + terminal 'to' + name NodeParameterMember + nonterminal_rule + accept-action-node + image + nonterminal_rule + accept-action-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'accept' + terminal 'action' + terminal '»' + name usage-name-with-alias + nonterminal_rule + accept-action-expression + name AcceptParameterPart + nonterminal_rule + while-loop-action-node + image + nonterminal_rule + while-condition + sequence + image + name condition-expression + nonterminal_rule + until-condition + sequence + image + name condition-expression + nonterminal_rule + while-loop-action-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'loop' + terminal '»' + name usage-name-with-alias + nonterminal_rule + for-loop-action-node + image + nonterminal_rule + iteration + sequence + image + name iteration-expression + nonterminal_rule + loop-body + sequence + image + name action-body + nonterminal_rule + for-loop-action-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'loop' + terminal '»' + name usage-name-with-alias + nonterminal_rule + if-else-action-node + image + nonterminal_rule + if-condition + sequence + image + name condition-expression + nonterminal_rule + then-body + sequence + image + name action-body + nonterminal_rule + else-body + sequence + image + name action-body + nonterminal_rule + ifelse-action-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'if' + terminal '»' + name usage-name-with-alias + nonterminal_rule + action-body + alternation + name action-body-textual + name action-flow-view + nonterminal_rule + condition-expression + name ExpressionParameterMember + nonterminal_rule + iteration-expression + sequence + name ForVariableDeclarationMember + terminal 'in' + name NodeParameterMember + nonterminal_rule + action-body-textual + name ActionBodyParameterMember + nonterminal_rule + assign-action-node + image + nonterminal_rule + assign-action-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'assign' + terminal '»' + name usage-name-with-alias + nonterminal_rule + perform-actions-swimlanes + expression + name swimlane + repetition * + nonterminal_rule + swimlane + image + nonterminal_rule + parameter + alternation + name param-l + name param-r + name param-t + name param-b + nonterminal_rule + aflow-succession + image + nonterminal_rule + else-branch + image + nonterminal_rule + perform-edge + image + nonterminal_rule + performer-node + alternation + name part + name action + name part-def + name action-def + name distinguished-parameter + nonterminal_rule + usage-edge + sequence + name succession + name perform-edge + nonterminal_rule + guard-expression + sequence + terminal '[' + name OwnedExpression + terminal ']' + line_comment // Note. All swimlanes are attached to each other on vertical edges and aligned along the top and bottom horizontal edges. + line_comment // Note. The proxy option of a parameter production is valid only on an action usage contained within an action flow view. + line_comment // Clause 8.2.3.18 States Graphical Notation + nonterminal_rule + definition-node + name state-def + nonterminal_rule + state-def + image + nonterminal_rule + state-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'state' + terminal 'def' + terminal '»' + name definition-name-with-alias + expression + sequence + terminal '«' + terminal 'parallel' + terminal '»' + repetition ? + nonterminal_rule + usage-node + alternation + name state + name exhibit-state-usage + nonterminal_rule + state + image + nonterminal_rule + state-ref + image + nonterminal_rule + state-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'state' + terminal '»' + name usage-name-with-alias + expression + sequence + terminal '«' + terminal 'parallel' + terminal '»' + repetition ? + nonterminal_rule + exhibit-state-usage + image + nonterminal_rule + state-subaction-body + alternation + name state-subaction-body-textual + name action-flow-view + nonterminal_rule + state-subaction-body-textual + sequence + expression + name state-subaction-declaration + repetition ? + expression + sequence + terminal '{' + expression + name ActionBodyItem + repetition * + terminal '}' + repetition ? + nonterminal_rule + state-subaction-declaration + alternation + name PerformActionUsageDeclaration + name AcceptNodeDeclaration + name SendNodeDeclaration + name AssignmentNodeDeclaration + nonterminal_rule + state-do-action + sequence + image + name state-subaction-body + nonterminal_rule + state-entry-action + sequence + image + name state-subaction-body + nonterminal_rule + state-exit-action + sequence + image + name state-subaction-body + nonterminal_rule + entry-action + alternation + image + image + nonterminal_rule + entry-action-name-comp + sequence + terminal '«' + terminal 'entry' + name OccurrenceUsagePrefix + terminal 'action' + terminal '»' + name usage-name-with-alias + nonterminal_rule + exit-action + image + nonterminal_rule + exit-action-name-comp + sequence + terminal '«' + terminal 'exit' + name OccurrenceUsagePrefix + terminal 'action' + terminal '»' + name usage-name-with-alias + nonterminal_rule + do-action + image + nonterminal_rule + do-action-name-comp + sequence + terminal '«' + terminal 'do' + name OccurrenceUsagePrefix + terminal 'action' + terminal '»' + name usage-name-with-alias + nonterminal_rule + exhibit-state-name-compartment + sequence + terminal '«exhibit-state»' + name state-name-compartment + nonterminal_rule + compartment + alternation + name states-compartment + name state-actions-compartment + name exhibit-states-compartment + name successions-compartment + name state-transition-compartment + nonterminal_rule + states-compartment + sequence + image + name states-compartment-contents + nonterminal_rule + states-compartment-contents + sequence + expression + name states-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + states-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name ActionUsageDeclaration + nonterminal_rule + state-actions-compartment + sequence + image + name state-actions-compartment-contents + nonterminal_rule + state-actions-compartment-contents + sequence + expression + name state-actions-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + state-actions-compartment-element + alternation + sequence + expression + name el-prefix + repetition ? + name EntryActionMember + name DoActionMember + name ExitActionMember + nonterminal_rule + exhibit-states-compartment + sequence + image + name exhibit-states-compartment-contents + nonterminal_rule + exhibit-states-compartment-contents + sequence + expression + name exhibit-state-scompartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + exhibit-states-compartment-element-compartment + name UsageDeclaration + nonterminal_rule + successions-compartment + sequence + image + name successions-compartment-contents + nonterminal_rule + successions-compartment-contents + sequence + expression + name QualifiedName + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + state-transition-compartment + sequence + image + name state-transition-view + nonterminal_rule + state-transition-view + sequence + expression + name state-transition-element + repetition * + expression + name dependencies-and-annotations-element + repetition * + nonterminal_rule + state-transition-element + alternation + name state-transition-node + name transition + name st-succession + nonterminal_rule + state-transition-node + alternation + name state + name state-ref + name start-node + name entry-action + name do-action + name exit-action + name done-node + name fork-node + name join-node + name decision-node + name merge-node + name terminate-node + name action + name perform-action-usage + name action-ref + nonterminal_rule + transition + alternation + image + image + nonterminal_rule + state-source + alternation + name state + name state-ref + nonterminal_rule + transition-label + sequence + name trigger-expression + terminal '/' + name ActionUsage + nonterminal_rule + trigger-expression + sequence + name AcceptParameterPart + expression + name guard-expression + repetition ? + nonterminal_rule + st-succession + alternation + image + image + nonterminal_rule + exhibit-edge + image + nonterminal_rule + exhibitor + alternation + name part + name part-def + nonterminal_rule + general-relationship + name exhibit-edge + nonterminal_rule + usage-edge + alternation + name transition + name st-succession + name exhibit-edge + line_comment // Clause 8.2.3.19 Calculations Graphical Notation + nonterminal_rule + definition-node + name calc-def + nonterminal_rule + calc-def + image + nonterminal_rule + calc-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'calc' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name calc + nonterminal_rule + calc + image + nonterminal_rule + calc-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'calc' + terminal '»' + name usage-name-with-alias + nonterminal_rule + action-flow-element + alternation + name calc-def + name calc + nonterminal_rule + compartment + alternation + name calcs-compartment + name result-compartment + nonterminal_rule + calcs-compartment + sequence + image + name calcs-compartment-contents + nonterminal_rule + calcs-compartment-contents + sequence + expression + name calcs-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + calcs-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name ActionUsageDeclaration + nonterminal_rule + result-compartment + sequence + image + name result-compartment-contents + nonterminal_rule + result-compartment-contents + name OwnedExpression + line_comment // Clause 8.2.3.20 Constraints Graphical Notation + nonterminal_rule + definition-node + name constraint-def + nonterminal_rule + constraint-def + image + nonterminal_rule + constraint-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'constraint' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + alternation + name constraint + name assert-constraint-node + nonterminal_rule + constraint + image + nonterminal_rule + constraint-ref + image + nonterminal_rule + constraint-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'constraint' + terminal '»' + name usage-name-with-alias + nonterminal_rule + assert-constraint-node + image + nonterminal_rule + assert-constraint-name-compartment + sequence + terminal '«assert constraint»' + name constraint-name-compartment + nonterminal_rule + assume-constraint-node + image + nonterminal_rule + assume-constraint-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'assume' + terminal 'constraint' + terminal '»' + name usage-name-with-alias + nonterminal_rule + usage-node + alternation + name assume-constraint-node + name assert-constraint-node + nonterminal_rule + assume-edge + image + nonterminal_rule + assumer + alternation + name requirement + name requirement-def + nonterminal_rule + general-relationship + name assume-edge + nonterminal_rule + assert-edge + image + nonterminal_rule + assertor + alternation + name usage-node + name definition-node + nonterminal_rule + general-relationship + name assert-edge + nonterminal_rule + compartment + alternation + name constraints-compartment + name assert-constraints-compartment + nonterminal_rule + constraints-compartment + sequence + image + name constraints-compartment-contents + nonterminal_rule + constraints-compartment-contents + sequence + expression + name constraints-usage-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + constraints-usage-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name ConstraintUsageDeclaration + expression + name CalculationBody + repetition * + nonterminal_rule + assert-constraints-compartment + sequence + image + name assert-constraints-compartment-contents + nonterminal_rule + assert-constraints-compartment-contents + sequence + expression + name assert-constraints-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + assert-constraints-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + expression + terminal 'not' + repetition ? + alternation + sequence + name OwnedSubsetting + expression + name FeatureSpecializationPart + repetition ? + name UsageDeclaration + name CalculationUsageParameterPart + name CalculationBody + nonterminal_rule + interconnection-element + alternation + name constraint-ref + name constraint + line_comment // Clause 8.2.3.21 Requirements Graphical Notation + nonterminal_rule + definition-node + alternation + name requirement-def + name concern-def + nonterminal_rule + requirement-def + image + nonterminal_rule + requirement-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'requirement' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + alternation + name requirement + name satisfy-requirement-usage + name concern + nonterminal_rule + requirement + image + nonterminal_rule + requirement-ref + image + nonterminal_rule + requirement-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'requirement' + terminal '»' + name usage-name-with-alias + nonterminal_rule + satisfy-requirement-usage + image + nonterminal_rule + satisfy-requirement-name-compartment + sequence + terminal '«satisfy requirement»' + name requirement-name-compartment + nonterminal_rule + concern-def + image + nonterminal_rule + concern-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'concern' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + concern + image + nonterminal_rule + concern-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'concern' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + alternation + name constraints-compartment + name assert-constraints-compartment + nonterminal_rule + compartment + alternation + name requirements-compartment + name require-constraints-compartment + name assume-constraints-compartment + name satisfy-requirements-compartment + name satisfies-compartment + name actors-compartment + name subject-compartment + name stakeholders-compartment + name frames-compartment + nonterminal_rule + requirements-compartment + sequence + image + name requirements-compartment-contents + nonterminal_rule + requirements-compartment-contents + sequence + expression + name requirements-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + requirements-compartment-element + sequence + name OccurrenceUsagePrefix + name ConstraintUsageDeclaration + nonterminal_rule + require-constraints-compartment + sequence + image + name require-constraints-compartment-contents + nonterminal_rule + require-constraints-compartment-contents + sequence + expression + name require-constraint-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + require-constraint-element + sequence + expression + name el-prefix + repetition ? + name require + expression + name MemberPrefix + repetition ? + name RequirementConstraintUsage + nonterminal_rule + assume-constraints-compartment + sequence + image + name assume-constraints-compartment-contents + nonterminal_rule + assume-constraints-compartment-contents + sequence + expression + name require-constraint-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + satisfy-requirements-compartment + sequence + image + name satisfy-requirements-compartment-contents + nonterminal_rule + satisfy-requirements-compartment-contents + name text-block + nonterminal_rule + satisfies-compartment + sequence + image + name satisfies-compartment-contents + nonterminal_rule + satisfies-compartment-contents + sequence + expression + name UsageDeclaration + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + actors-compartment + sequence + image + name actors-compartment-contents + nonterminal_rule + actors-compartment-contents + sequence + expression + name actors-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + actors-compartment-element + sequence + expression + name el-prefix + repetition ? + name MemberPrefix + name usage-cp + nonterminal_rule + subject-compartment + sequence + image + name subject-compartment-contents + nonterminal_rule + subject-compartment-contents + sequence + expression + name subject-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + subject-compartment-element + sequence + expression + name el-prefix + repetition ? + name MemberPrefix + name usage-cp + nonterminal_rule + stakeholders-compartment + sequence + image + name stakeholders-compartment-contents + nonterminal_rule + stakeholders-compartment-contents + sequence + expression + name stakeholders-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + stakeholders-compartment-element + sequence + expression + name el-prefix + repetition ? + name MemberPrefix + name usage-cp + nonterminal_rule + frames-compartment + sequence + image + name frames-compartment-contents + nonterminal_rule + frames-compartment-contents + sequence + expression + name frames-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + frames-compartment-element + sequence + expression + name el-prefix + repetition * + expression + name MemberPrefix + repetition ? + name FramedConcernUsage + nonterminal_rule + concerns-compartment + sequence + image + name concerns-compartment-contents + nonterminal_rule + interconnection-element + alternation + name requirement-ref + name requirement + name concern + name distinguished-parameter + name distinguished-parameter-link + name concern-stakeholder-link + nonterminal_rule + general-relationship + name frame-relationship + nonterminal_rule + subject-actors-stakeholders-node + name requirement + nonterminal_rule + distinguished-parameter + alternation + name subject + name actor + name stakeholder + nonterminal_rule + subject + image + nonterminal_rule + actor + alternation + image + image + nonterminal_rule + stakeholder + image + nonterminal_rule + subject-name + name UsageDeclaration + nonterminal_rule + actor-name + name UsageDeclaration + nonterminal_rule + stakeholder-name + name UsageDeclaration + nonterminal_rule + distinguished-parameter-link + image + nonterminal_rule + frame-relationship + image + nonterminal_rule + concern-stakeholder-link + image + nonterminal_rule + satisfy-edge + image + nonterminal_rule + satisfier + alternation + name usage-node + name definition-node + nonterminal_rule + general-relationship + name satisfy-edge + nonterminal_rule + require-edge + image + nonterminal_rule + requirer + alternation + name usage-node + name definition-node + nonterminal_rule + general-relationship + name require-edge + nonterminal_rule + require-constraint-node + image + nonterminal_rule + require-constraint-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'require' + terminal 'constraint' + terminal '»' + name usage-name-with-alias + nonterminal_rule + usage-node + name require-constraint-node + nonterminal_rule + frame-concern-node + image + nonterminal_rule + frame-concern-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'frame' + terminal 'concern' + terminal '»' + name usage-name-with-alias + nonterminal_rule + usage-node + name frame-concern-node + nonterminal_rule + frame-edge + image + nonterminal_rule + framer + alternation + name requirement + name requirement-def + name viewpoint + name viewpoint-def + nonterminal_rule + general-relationship + name frame-edge + line_comment // Clause 8.2.3.22 Cases Graphical Notation + nonterminal_rule + compartment + name objective-compartment + nonterminal_rule + objective-compartment + sequence + image + name objective-compartment-contents + nonterminal_rule + objective-compartment-contents + sequence + expression + name objective-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + objective-compartment-element + sequence + expression + name comp-prefix + repetition ? + name MemberPrefix + name ConstraintUsageDeclaration + name RequirementBody + line_comment // Clause 8.2.3.23 Analysis Cases Graphical Notation + nonterminal_rule + definition-node + name analysis-def + nonterminal_rule + analysis-def + image + nonterminal_rule + analysis-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'analysis' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name analysis + nonterminal_rule + analysis + image + nonterminal_rule + analysis-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'analysis' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + name analyses-compartment + nonterminal_rule + analyses-compartment + sequence + image + name analyses-compartment-contents + nonterminal_rule + analyses-compartment-contents + sequence + expression + name analyses-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + analyses-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name ConstraintUsageDeclaration + name CaseBody + nonterminal_rule + action-flow-element + alternation + name analysis-def + name analysis + nonterminal_rule + subject-actors-stakeholders-node + alternation + name analysis + name analysis-def + line_comment // Clause 8.2.3.24 Verification Cases Graphical Notation + nonterminal_rule + definition-node + name verification-def + nonterminal_rule + verification-def + image + nonterminal_rule + verification-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'verification' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + name verification + nonterminal_rule + verification + image + nonterminal_rule + verification-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'verification' + terminal '»' + name usage-name-with-alias + nonterminal_rule + verify-requirement-node + image + nonterminal_rule + verify-requirement-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'verify' + terminal 'requirement' + terminal '»' + name usage-name-with-alias + nonterminal_rule + usage-node + name verify-requirement-node + nonterminal_rule + compartment + alternation + name verifications-compartment + name verifies-compartment + name verification-methods-compartment + nonterminal_rule + verifications-compartment + sequence + image + name verifications-compartment-contents + nonterminal_rule + verifications-compartment-contents + sequence + expression + name verifications-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + verifications-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name ConstraintUsageDeclaration + name CaseBody + terminal '…' + nonterminal_rule + verifies-compartment + sequence + image + name verifies-compartment-contents + nonterminal_rule + verifies-compartment-contents + sequence + expression + name verifies-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + verifies-compartment-element + sequence + expression + name el-prefix + repetition ? + name MemberPrefix + name RequirementVerificationUsage + terminal '…' + nonterminal_rule + verification-methods-compartment + sequence + image + name verification-methods-compartment-contents + nonterminal_rule + verification-methods-compartment-contents + sequence + expression + name verification-methods-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + verification-methods-compartment-element + name MetadataBody + nonterminal_rule + action-flow-element + alternation + name verification-def + name verification + nonterminal_rule + general-relationship + name verify-relationship + nonterminal_rule + verify-relationship + image + nonterminal_rule + subject-actors-stakeholders-node + alternation + name verification + name verification-def + line_comment // Clause 8.2.3.25 Use Cases Graphical Notation + nonterminal_rule + definition-node + name use-case-def + nonterminal_rule + use-case-def + image + nonterminal_rule + use-case-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'use' + terminal 'case' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + alternation + name use-case + name include-use-case-usage + nonterminal_rule + use-case + image + nonterminal_rule + use-case-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'use' + terminal 'case' + terminal '»' + name usage-name-with-alias + nonterminal_rule + include-use-case-usage + image + nonterminal_rule + include-use-case-name-compartment + sequence + terminal '«include use case»' + name requirement-name-compartment + nonterminal_rule + compartment + alternation + name use-cases-compartment + name include-actions-compartment + name includes-compartment + nonterminal_rule + use-cases-compartment + sequence + image + name use-cases-compartment-contents + nonterminal_rule + use-cases-compartment-contents + sequence + expression + name use-cases-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + use-cases-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name ConstraintUsageDeclaration + nonterminal_rule + include-use-cases-compartment + sequence + image + name include-use-cases-compartment-contents + nonterminal_rule + include-use-cases-compartment-contents + sequence + expression + name include-use-cases-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + include-use-cases-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + alternation + sequence + name OwnedSubsetting + expression + name FeatureSpecializationPart + repetition ? + name UsageDeclaration + expression + alternation + name ValuePart + name ActionUsageParameterList + repetition ? + name CaseBody + nonterminal_rule + includes-compartment + sequence + image + name includes-compartment-contents + nonterminal_rule + includes-compartment-contents + sequence + expression + name includes-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + includes-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + alternation + sequence + name OwnedSubsetting + expression + name FeatureSpecializationPart + repetition ? + name UsageDeclaration + nonterminal_rule + action-flow-element + alternation + name use-case-def + name use-case + nonterminal_rule + general-relationship + name include-use-case-relationship + nonterminal_rule + include-use-case-relationship + image + nonterminal_rule + subject-actors-stakeholders-node + alternation + name use-case + name use-case-def + line_comment // Clause 8.2.3.26 Views and Viewpoints Graphical Notation + nonterminal_rule + root-view + name framed-view + nonterminal_rule + definition-node + alternation + name viewpoint-def + name view-def + nonterminal_rule + viewpoint-def + image + nonterminal_rule + viewpoint-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'viewpoint' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + view-def + image + nonterminal_rule + view-def-name-compartment + sequence + terminal '«' + name DefinitionPrefix + terminal 'view' + terminal 'def' + terminal '»' + name definition-name-with-alias + nonterminal_rule + usage-node + alternation + name viewpoint + name view + name framed-view + nonterminal_rule + viewpoint + image + nonterminal_rule + viewpoint-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'viewpoint' + terminal '»' + name usage-name-with-alias + nonterminal_rule + view + image + nonterminal_rule + view-name-compartment + sequence + terminal '«' + name OccurrenceUsagePrefix + terminal 'view' + terminal '»' + name usage-name-with-alias + nonterminal_rule + compartment + alternation + name views-compartment + name viewpoints-compartment + name exposes-compartment + name filters-compartment + name rendering-compartment + nonterminal_rule + views-compartment + sequence + image + name views-compartment-contents + nonterminal_rule + views-compartment-contents + sequence + expression + name views-compartment-element + repetition * + terminal '…' + nonterminal_rule + views-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + expression + name UsageDeclaration + repetition ? + expression + name ValueOrFlowPart + repetition ? + name ViewBody + nonterminal_rule + viewpoints-compartment + sequence + image + name viewpoints-compartment-contents + nonterminal_rule + viewpoints-compartment-contents + sequence + expression + name viewpoints-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + viewpoints-compartment-element + sequence + expression + name el-prefix + repetition ? + name OccurrenceUsagePrefix + name ConstraintUsageDeclaration + name RequirementBody + nonterminal_rule + exposes-compartment + sequence + image + name exposes-compartment-contents + nonterminal_rule + exposes-compartment-contents + sequence + expression + name exposes-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + exposes-compartment-element + alternation + name MembershipExpose + name NamespaceExpose + nonterminal_rule + filters-compartment + sequence + image + name filters-compartment-contents + nonterminal_rule + filters-compartment-contents + sequence + expression + name filters-compartment-element + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + filters-compartment-element + sequence + expression + name el-prefix + repetition ? + name MemberPrefix + name OwnedExpression + nonterminal_rule + rendering-compartment + sequence + image + name rendering-compartment-contents + nonterminal_rule + rendering-compartment-contents + sequence + expression + name usage-cp + repetition * + expression + terminal '…' + repetition ? + nonterminal_rule + interconnection-element + alternation + name viewpoint-def + name viewpoint + name view-def + name view + nonterminal_rule + framed-view + image + nonterminal_rule + frameless-view + alternation + name general-view + name interconnection-view + name action-flow-view + name state-transition-view + name sequence-view + nonterminal_rule + view-frame-name-compartment + sequence + terminal '«view»' + name QualifiedName + expression + sequence + terminal ':' + name QualifiedName + repetition ? + nonterminal_rule + view-frame-info-contents + sequence + expression + name Expose + repetition ? + expression + name ElementFilterMember + repetition ? + expression + name AnnotatingElement + repetition * + nonterminal_rule + view-frame-info-compartment-tr + image + nonterminal_rule + view-frame-info-compartment-bl + image + nonterminal_rule + view-frame-info-compartment-br + image + nonterminal_rule + general-relationship + name expose-relationship + nonterminal_rule + expose-relationship + alternation + name expose-r + name toplevel-expose-r + name recursive-expose-r + nonterminal_rule + expose-r + image + nonterminal_rule + toplevel-expose-r + image + nonterminal_rule + recursive-expose-r + image + line_comment // Note. The view frame info compartments are optional elements. The AnnotatingElement* enables adding any relevant supporting information related to a view, possibly using a configurable rendering. + line_comment // Note. A model library in Section 9.2.18 defines standard graphical view definitions for SysML. These may be supplemented by further, customized view definitions specific to a model. + line_comment // Clause 8.2.3.27 Metadata Graphical Notation + nonterminal_rule + annotation-node + name metadata-feature-annotation-node + nonterminal_rule + metadata-feature-annotation-node + image + nonterminal_rule + metadata-feature-decl + name Identification + nonterminal_rule + metadata-feature-name-value-list + expression + sequence + name metadata-feature-name + terminal '=' + name expression-text + repetition * + nonterminal_rule + metadata-feature-name + name Identification + nonterminal_rule + expression-text + name text-block + nonterminal_rule + metadata-def + image + nonterminal_rule + metadata-def-name-compartment + sequence + terminal '«' + expression + name BasicUsagePrefix + repetition ? + expression + name keyword + repetition * + terminal 'metadata' + terminal 'def' + terminal '»' + name definition-name-with-alias + line_comment // End of BNF + line_comment // Consolidated partial productions: + line_comment // action-flow-element = + line_comment // action | action-flow-node | action-flow-relationship | action-ref | analysis | analysis-def | calc | calc-def + line_comment // | use-case | use-case-def | verification | verification-def + line_comment // annotation-node = + line_comment // metadata-feature-annotation-node + line_comment // compartment = + line_comment // action-flow-compartment | actions-compartment | actors-compartment | allocations-compartment | analyses-compartment + line_comment // | assert-constraints-compartment | assert-constraints-compartment | assume-constraints-compartment + line_comment // | attributes-compartment | calcs-compartment | connections-compartment | constraints-compartment + line_comment // | constraints-compartment | directed-features-compartment | ends-compartment | enums-compartment + line_comment // | exhibit-states-compartment | exposes-compartment | features-compartment | filters-compartment | flows-compartment + line_comment // | frames-compartment | general-compartment | include-actions-compartment | includes-compartment + line_comment // | individuals-compartment | interconnection-compartment | interfaces-compartment | items-compartment + line_comment // | objective-compartment | occurrences-compartment | package-compartment | parameters-compartment | parts-compartment + line_comment // | perform-actions-compartment | ports-compartment | rendering-compartment | require-constraints-compartment + line_comment // | requirements-compartment | result-compartment | satisfies-compartment | satisfy-requirements-compartment + line_comment // | sequence-compartment | snapshots-compartment | stakeholders-compartment | state-actions-compartment + line_comment // | state-transition-compartment | states-compartment | subject-compartment | successions-compartment + line_comment // | timeslices-compartment | use-cases-compartment | variant-elementusages-compartment | variants-compartment + line_comment // | verification-methods-compartment | verifications-compartment | verifies-compartment | viewpoints-compartment + line_comment // | views-compartment + line_comment // connection-relationship = + line_comment // flow | flow-on-connection | interface-connection | message-connection | succession-flow + line_comment // definition-node = + line_comment // action-def | allocation-def | analysis-def | attribute-def | calc-def | concern-def | connection-def + line_comment // | constraint-def | enumeration-def | event-occurrence-def | extended-def | flow-def | interface-def | item-def + line_comment // | n-ary-def-connection-dot | occurrence-def | part-def | port-def | requirement-def | state-def | use-case-def + line_comment // | verification-def | view-def | viewpoint-def + line_comment // dependencies-and-annotations-element = + line_comment // annotation-link | annotation-node | dependencies-element + line_comment // dependencies-element = + line_comment // binary-dependency | n-ary-dependency + line_comment // general-node = + line_comment // definition-node | namespace-node | type-node | usage-node + line_comment // general-relationship = + line_comment // allocate-relationship | assert-edge | assume-edge | connection-def-graphical | exhibit-edge | expose-relationship + line_comment // | frame-edge | frame-relationship | import | include-use-case-relationship | n-ary-def-segment | owned-membership + line_comment // | portion-relationship | recursive-import | require-edge | satisfy-edge | top-level-import | type-relationship + line_comment // | unowned-membership | verify-relationship + line_comment // general-view = + line_comment // interconnection-view + line_comment // interconnection-element = + line_comment // attribute | concern | concern-stakeholder-link | connection | connection-def | connection-relationship | constraint + line_comment // | constraint-ref | distinguished-parameter | distinguished-parameter-link | flow | flow-def | interface | item + line_comment // | item-ref | part | part-ref | port-def | port-usage | requirement | requirement-ref | view | view-def | viewpoint + line_comment // | viewpoint-def + line_comment // interconnection-view = + line_comment // dependencies-and-annotations-element | ellipsis-at-lower-left-corner | interconnection-element + line_comment // namespace-node = + line_comment // package-node | type-node + line_comment // subject-actors-stakeholders-node = + line_comment // analysis | analysis-def | requirement | use-case | use-case-def | verification | verification-def + line_comment // usage-edge = + line_comment // allocate-relationship | binding-connection | connection-graphical | exhibit-edge | flow | message | perform-edge + line_comment // | st-succession | succession | succession-flow | transition + line_comment // usage-node = + line_comment // action | allocation | analysis | assert-constraint-node | assume-constraint-node | attribute | calc | connection + line_comment // | enumeration | event-occurrence | exhibit-state-usage | extended-usage | flow-node | frame-concern-node | framed-view + line_comment // | include-use-case-usage | interface | item | n-ary-connection-dot | occurrence | occurrence-ref | part + line_comment // | perform-action-usage | port-usage | require-constraint-node | state | timeslice-or-snapshot-node | use-case + line_comment // | verification | verify-requirement-node | view | viewpoint + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_file_parser--SysML-textual-corrected.log b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_file_parser--SysML-textual-corrected.log new file mode 100644 index 000000000..a75f47c72 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_file_parser--SysML-textual-corrected.log @@ -0,0 +1,4147 @@ +INFO : Started parsing .\tests\KerML_and_SysML_grammars\SysML-textual-bnf-corrected.kebnf at 2025-12-04T19:37:29Z +INFO : Parse completed successfully +INFO : The resulting (AST) parse tree is: + +start + line_comment // Source document: tests/KerML_and_SysML_grammars/SysML-textual-bnf-corrected-marked_up.kebnf + line_comment // Generated by bnf_grammar_processor at: 2025-12-04T19:29:18Z + line_comment // Source document: tests/KerML_and_SysML_spec_sources/SysML-spec.html + line_comment // Generated by bnf_grammar_processor at: 2025-11-28T15:06:37Z + line_comment // Manual corrections by HP de Koning + line_comment // Part 2 - Systems Modeling Language (SysML) + line_comment // Clause 8.2.2 Textual Notation + line_comment // Clause 8.2.2.1 Textual Notation Overview + line_comment // Clause 8.2.2.1.1 EBNF Conventions + line_comment // Clause 8.2.2.1.2 Lexical Structure + lexical_rule + RESERVED_KEYWORD + alternation + terminal 'about' + terminal 'abstract' + terminal 'accept' + terminal 'action' + terminal 'actor' + terminal 'after' + terminal 'alias' + terminal 'all' + terminal 'allocate' + terminal 'allocation' + terminal 'analysis' + terminal 'and' + terminal 'as' + terminal 'assert' + terminal 'assign' + terminal 'assume' + terminal 'at' + terminal 'attribute' + terminal 'bind' + terminal 'binding' + terminal 'by' + terminal 'calc' + terminal 'case' + terminal 'comment' + terminal 'concern' + terminal 'connect' + terminal 'connection' + terminal 'constant' + terminal 'constraint' + terminal 'crosses' + terminal 'decide' + terminal 'def' + terminal 'default' + terminal 'defined' + terminal 'dependency' + terminal 'derived' + terminal 'do' + terminal 'doc' + terminal 'else' + terminal 'end' + terminal 'entry' + terminal 'enum' + terminal 'event' + terminal 'exhibit' + terminal 'exit' + terminal 'expose' + terminal 'false' + terminal 'filter' + terminal 'first' + terminal 'flow' + terminal 'for' + terminal 'fork' + terminal 'frame' + terminal 'from' + terminal 'hastype' + terminal 'if' + terminal 'implies' + terminal 'import' + terminal 'in' + terminal 'include' + terminal 'individual' + terminal 'inout' + terminal 'interface' + terminal 'istype' + terminal 'item' + terminal 'join' + terminal 'language' + terminal 'library' + terminal 'locale' + terminal 'loop' + terminal 'merge' + terminal 'message' + terminal 'meta' + terminal 'metadata' + terminal 'nonunique' + terminal 'not' + terminal 'null' + terminal 'objective' + terminal 'occurrence' + terminal 'of' + terminal 'or' + terminal 'ordered' + terminal 'out' + terminal 'package' + terminal 'parallel' + terminal 'part' + terminal 'perform' + terminal 'port' + terminal 'private' + terminal 'protected' + terminal 'public' + terminal 'redefines' + terminal 'ref' + terminal 'references' + terminal 'render' + terminal 'rendering' + terminal 'rep' + terminal 'require' + terminal 'requirement' + terminal 'return' + terminal 'satisfy' + terminal 'send' + terminal 'snapshot' + terminal 'specializes' + terminal 'stakeholder' + terminal 'standard' + terminal 'state' + terminal 'subject' + terminal 'subsets' + terminal 'succession' + terminal 'terminate' + terminal 'then' + terminal 'timeslice' + terminal 'to' + terminal 'transition' + terminal 'true' + terminal 'until' + terminal 'use' + terminal 'variant' + terminal 'variation' + terminal 'verification' + terminal 'verify' + terminal 'via' + terminal 'view' + terminal 'viewpoint' + terminal 'when' + terminal 'while' + terminal 'xor' + lexical_rule + DEFINED_BY + alternation + terminal ':' + sequence + terminal 'defined' + terminal 'by' + lexical_rule + SPECIALIZES + alternation + terminal ':>' + terminal 'specializes' + lexical_rule + SUBSETS + alternation + terminal ':>' + terminal 'subsets' + lexical_rule + REFERENCES + alternation + terminal '::>' + terminal 'references' + lexical_rule + CROSSES + alternation + terminal '=>' + terminal 'crosses' + lexical_rule + REDEFINES + alternation + terminal ':>>' + terminal 'redefines' + line_comment // Clause 8.2.2.2 Elements and Relationships Textual Notation + nonterminal_rule + Identification + abstract_element Element + sequence + expression + sequence + terminal '<' + prop_assign + prop_name declaredShortName + name NAME + terminal '>' + repetition ? + expression + prop_assign + prop_name declaredName + name NAME + repetition ? + nonterminal_rule + RelationshipBody + abstract_element Relationship + alternation + terminal ';' + sequence + terminal '{' + expression + prop_list_append + prop_name ownedRelationship + name OwnedAnnotation + repetition * + terminal '}' + line_comment // Clause 8.2.2.3 Dependencies Textual Notation + nonterminal_rule + Dependency + sequence + expression + prop_list_append + prop_name ownedRelationship + name PrefixMetadataAnnotation + repetition * + terminal 'dependency' + name DependencyDeclaration + name RelationshipBody + nonterminal_rule + DependencyDeclaration + sequence + expression + sequence + name Identification + terminal 'from' + repetition ? + prop_list_append + prop_name client + qualified_name [QualifiedName] + expression + sequence + terminal ',' + prop_list_append + prop_name client + qualified_name [QualifiedName] + repetition * + terminal 'to' + prop_list_append + prop_name supplier + qualified_name [QualifiedName] + expression + sequence + terminal ',' + prop_list_append + prop_name supplier + qualified_name [QualifiedName] + repetition * + line_comment // Clause 8.2.2.4 Annotations Textual Notation + line_comment // Clause 8.2.2.4.1 Annotations + nonterminal_rule + Annotation + prop_assign + prop_name annotatedElement + qualified_name [QualifiedName] + nonterminal_rule + OwnedAnnotation + abstract_element Annotation + prop_list_append + prop_name ownedRelatedElement + name AnnotatingElement + nonterminal_rule + AnnotatingMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name AnnotatingElement + nonterminal_rule + AnnotatingElement + alternation + name Comment + name Documentation + name TextualRepresentation + name MetadataFeature + line_comment // Clause 8.2.2.4.2 Comments and Documentation + nonterminal_rule + Comment + sequence + expression + sequence + terminal 'comment' + name Identification + expression + sequence + terminal 'about' + prop_list_append + prop_name ownedRelationship + name Annotation + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name Annotation + repetition * + repetition ? + repetition ? + expression + sequence + terminal 'locale' + prop_assign + prop_name locale + name STRING_VALUE + repetition ? + prop_assign + prop_name body + name REGULAR_COMMENT + nonterminal_rule + Documentation + sequence + terminal 'doc' + name Identification + expression + sequence + terminal 'locale' + prop_assign + prop_name locale + name STRING_VALUE + repetition ? + prop_assign + prop_name body + name REGULAR_COMMENT + line_comment // Clause 8.2.2.4.3 Textual Representation + nonterminal_rule + TextualRepresentation + sequence + expression + sequence + terminal 'rep' + name Identification + repetition ? + terminal 'language' + prop_assign + prop_name language + name STRING_VALUE + prop_assign + prop_name body + name REGULAR_COMMENT + line_comment // Clause 8.2.2.5 Namespaces and Packages Textual Notation + line_comment // Clause 8.2.2.5.1 Packages + nonterminal_rule + RootNamespace + abstract_element Namespace + expression + name PackageBodyElement + repetition * + nonterminal_rule + Package + sequence + expression + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + repetition * + name PackageDeclaration + name PackageBody + nonterminal_rule + LibraryPackage + sequence + boolean_prop_assign + prop_name isStandard + terminal 'standard' + terminal 'library' + expression + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + repetition * + name PackageDeclaration + name PackageBody + nonterminal_rule + PackageDeclaration + abstract_element Package + sequence + terminal 'package' + name Identification + nonterminal_rule + PackageBody + abstract_element Package + alternation + terminal ';' + sequence + terminal '{' + expression + name PackageBodyElement + repetition * + terminal '}' + nonterminal_rule + PackageBodyElement + abstract_element Package + alternation + prop_list_append + prop_name ownedRelationship + name PackageMember + prop_list_append + prop_name ownedRelationship + name ElementFilterMember + prop_list_append + prop_name ownedRelationship + name AliasMember + prop_list_append + prop_name ownedRelationship + name Import + nonterminal_rule + MemberPrefix + abstract_element Membership + expression + prop_assign + prop_name visibility + name VisibilityIndicator + repetition ? + nonterminal_rule + PackageMember + abstract_element OwningMembership + sequence + name MemberPrefix + alternation + prop_list_append + prop_name ownedRelatedElement + name DefinitionElement + prop_assign + prop_name ownedRelatedElement + name UsageElement + nonterminal_rule + ElementFilterMember + abstract_element ElementFilterMembership + sequence + name MemberPrefix + terminal 'filter' + prop_list_append + prop_name ownedRelatedElement + name OwnedExpression + terminal ';' + nonterminal_rule + AliasMember + abstract_element Membership + sequence + name MemberPrefix + terminal 'alias' + expression + sequence + terminal '<' + prop_assign + prop_name memberShortName + name NAME + terminal '>' + repetition ? + expression + prop_assign + prop_name memberName + name NAME + repetition ? + terminal 'for' + prop_assign + prop_name memberElement + qualified_name [QualifiedName] + name RelationshipBody + nonterminal_rule + Import + sequence + prop_assign + prop_name visibility + name VisibilityIndicator + terminal 'import' + expression + boolean_prop_assign + prop_name isImportAll + terminal 'all' + repetition ? + name ImportDeclaration + name RelationshipBody + nonterminal_rule + ImportDeclaration + abstract_element Import + alternation + name MembershipImport + name NamespaceImport + nonterminal_rule + MembershipImport + sequence + prop_assign + prop_name importedMembership + qualified_name [QualifiedName] + expression + sequence + terminal '::' + boolean_prop_assign + prop_name isRecursive + terminal '**' + repetition ? + nonterminal_rule + NamespaceImport + alternation + sequence + prop_assign + prop_name importedNamespace + qualified_name [QualifiedName] + terminal '::' + terminal '*' + expression + sequence + terminal '::' + boolean_prop_assign + prop_name isRecursive + terminal '**' + repetition ? + sequence + prop_assign + prop_name importedNamespace + name FilterPackage + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name importedNamespace + nonterminal_rule + FilterPackage + abstract_element Package + sequence + prop_list_append + prop_name ownedRelationship + name FilterPackageImport + expression + prop_list_append + prop_name ownedRelationship + name FilterPackageMember + repetition + + nonterminal_rule + FilterPackageMember + abstract_element ElementFilterMembership + sequence + terminal '[' + prop_list_append + prop_name ownedRelatedElement + name OwnedExpression + terminal ']' + nonterminal_rule + VisibilityIndicator + abstract_element VisibilityKind + alternation + terminal 'public' + terminal 'private' + terminal 'protected' + line_comment // Clause 8.2.2.5.2 Package Elements + nonterminal_rule + DefinitionElement + abstract_element Element + alternation + name Package + name LibraryPackage + name AnnotatingElement + name Dependency + name AttributeDefinition + name EnumerationDefinition + name OccurrenceDefinition + name IndividualDefinition + name ItemDefinition + name PartDefinition + name ConnectionDefinition + name FlowDefinition + name InterfaceDefinition + name PortDefinition + name ActionDefinition + name CalculationDefinition + name StateDefinition + name ConstraintDefinition + name RequirementDefinition + name ConcernDefinition + name CaseDefinition + name AnalysisCaseDefinition + name VerificationCaseDefinition + name UseCaseDefinition + name ViewDefinition + name ViewpointDefinition + name RenderingDefinition + name MetadataDefinition + name ExtendedDefinition + nonterminal_rule + UsageElement + abstract_element Usage + alternation + name NonOccurrenceUsageElement + name OccurrenceUsageElement + line_comment // Clause 8.2.2.6 Definition and Usage Textual Notation + line_comment // Clause 8.2.2.6.1 Definitions + nonterminal_rule + BasicDefinitionPrefix + alternation + boolean_prop_assign + prop_name isAbstract + terminal 'abstract' + boolean_prop_assign + prop_name isVariation + terminal 'variation' + nonterminal_rule + DefinitionExtensionKeyword + abstract_element Definition + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + nonterminal_rule + DefinitionPrefix + abstract_element Definition + sequence + expression + name BasicDefinitionPrefix + repetition ? + expression + name DefinitionExtensionKeyword + repetition * + nonterminal_rule + Definition + sequence + name DefinitionDeclaration + name DefinitionBody + nonterminal_rule + DefinitionDeclaration + abstract_element Definition + sequence + name Identification + expression + name SubclassificationPart + repetition ? + nonterminal_rule + DefinitionBody + abstract_element Type + alternation + terminal ';' + sequence + terminal '{' + expression + name DefinitionBodyItem + repetition * + terminal '}' + nonterminal_rule + DefinitionBodyItem + abstract_element Type + alternation + prop_list_append + prop_name ownedRelationship + name DefinitionMember + prop_list_append + prop_name ownedRelationship + name VariantUsageMember + prop_list_append + prop_name ownedRelationship + name NonOccurrenceUsageMember + sequence + expression + prop_list_append + prop_name ownedRelationship + name SourceSuccessionMember + repetition ? + prop_list_append + prop_name ownedRelationship + name OccurrenceUsageMember + prop_list_append + prop_name ownedRelationship + name AliasMember + prop_list_append + prop_name ownedRelationship + name Import + nonterminal_rule + DefinitionMember + abstract_element OwningMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name DefinitionElement + nonterminal_rule + VariantUsageMember + abstract_element VariantMembership + sequence + name MemberPrefix + terminal 'variant' + prop_assign + prop_name ownedVariantUsage + name VariantUsageElement + nonterminal_rule + NonOccurrenceUsageMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name NonOccurrenceUsageElement + nonterminal_rule + OccurrenceUsageMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name OccurrenceUsageElement + nonterminal_rule + StructureUsageMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name StructureUsageElement + nonterminal_rule + BehaviorUsageMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name BehaviorUsageElement + line_comment // Clause 8.2.2.6.2 Usages + nonterminal_rule + FeatureDirection + abstract_element FeatureDirectionKind + alternation + terminal 'in' + terminal 'out' + terminal 'inout' + nonterminal_rule + RefPrefix + abstract_element Usage + sequence + expression + prop_assign + prop_name direction + name FeatureDirection + repetition ? + expression + boolean_prop_assign + prop_name isDerived + terminal 'derived' + repetition ? + expression + alternation + boolean_prop_assign + prop_name isAbstract + terminal 'abstract' + boolean_prop_assign + prop_name isVariation + terminal 'variation' + repetition ? + expression + boolean_prop_assign + prop_name isConstant + terminal 'constant' + repetition ? + nonterminal_rule + BasicUsagePrefix + abstract_element Usage + sequence + name RefPrefix + expression + boolean_prop_assign + prop_name isReference + terminal 'ref' + repetition ? + nonterminal_rule + EndUsagePrefix + abstract_element Usage + sequence + boolean_prop_assign + prop_name isEnd + terminal 'end' + expression + prop_list_append + prop_name ownedRelationship + name OwnedCrossFeatureMember + repetition ? + line_comment // (See Note 1) + nonterminal_rule + OwnedCrossFeatureMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name OwnedCrossFeature + nonterminal_rule + OwnedCrossFeature + abstract_element ReferenceUsage + sequence + name BasicUsagePrefix + name UsageDeclaration + nonterminal_rule + UsageExtensionKeyword + abstract_element Usage + prop_list_append + prop_name ownedRelationship + name PrefixMetadataMember + nonterminal_rule + UnextendedUsagePrefix + abstract_element Usage + alternation + name EndUsagePrefix + name BasicUsagePrefix + nonterminal_rule + UsagePrefix + abstract_element Usage + sequence + name UnextendedUsagePrefix + expression + name UsageExtensionKeyword + repetition * + nonterminal_rule + Usage + sequence + name UsageDeclaration + name UsageCompletion + nonterminal_rule + UsageDeclaration + abstract_element Usage + sequence + name Identification + expression + name FeatureSpecializationPart + repetition ? + nonterminal_rule + UsageCompletion + abstract_element Usage + sequence + expression + name ValuePart + repetition ? + name UsageBody + nonterminal_rule + UsageBody + abstract_element Usage + name DefinitionBody + nonterminal_rule + ValuePart + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name FeatureValue + nonterminal_rule + FeatureValue + sequence + alternation + terminal '=' + boolean_prop_assign + prop_name isInitial + terminal ':=' + sequence + boolean_prop_assign + prop_name isDefault + terminal 'default' + expression + alternation + terminal '=' + boolean_prop_assign + prop_name isInitial + terminal ':=' + repetition ? + prop_list_append + prop_name ownedRelatedElement + name OwnedExpression + line_comment // Notes: + line_comment // 1. A Usage parsed with isEnd = true for which mayTimeVary = true must also have isConstant set to true, even though this is not explicitly notated in the textual notation, in order to satisfy the KerML constraint checkFeatureEndIsConstant. + line_comment // Clause 8.2.2.6.3 Reference Usages + nonterminal_rule + DefaultReferenceUsage + abstract_element ReferenceUsage + sequence + name RefPrefix + name Usage + nonterminal_rule + ReferenceUsage + sequence + alternation + name EndUsagePrefix + name RefPrefix + terminal 'ref' + name Usage + nonterminal_rule + VariantReference + abstract_element ReferenceUsage + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecialization + repetition * + name UsageBody + line_comment // Clause 8.2.2.6.4 Body Elements + nonterminal_rule + NonOccurrenceUsageElement + abstract_element Usage + alternation + name DefaultReferenceUsage + name ReferenceUsage + name AttributeUsage + name EnumerationUsage + name BindingConnectorAsUsage + name SuccessionAsUsage + name ExtendedUsage + nonterminal_rule + OccurrenceUsageElement + abstract_element Usage + alternation + name StructureUsageElement + name BehaviorUsageElement + nonterminal_rule + StructureUsageElement + abstract_element Usage + alternation + name OccurrenceUsage + name IndividualUsage + name PortionUsage + name EventOccurrenceUsage + name ItemUsage + name PartUsage + name ViewUsage + name RenderingUsage + name PortUsage + name ConnectionUsage + name InterfaceUsage + name AllocationUsage + name Message + name FlowUsage + name SuccessionFlowUsage + nonterminal_rule + BehaviorUsageElement + abstract_element Usage + alternation + name ActionUsage + name CalculationUsage + name StateUsage + name ConstraintUsage + name RequirementUsage + name ConcernUsage + name CaseUsage + name AnalysisCaseUsage + name VerificationCaseUsage + name UseCaseUsage + name ViewpointUsage + name PerformActionUsage + name ExhibitStateUsage + name IncludeUseCaseUsage + name AssertConstraintUsage + name SatisfyRequirementUsage + nonterminal_rule + VariantUsageElement + abstract_element Usage + alternation + name VariantReference + name ReferenceUsage + name AttributeUsage + name BindingConnectorAsUsage + name SuccessionAsUsage + name OccurrenceUsage + name IndividualUsage + name PortionUsage + name EventOccurrenceUsage + name ItemUsage + name PartUsage + name ViewUsage + name RenderingUsage + name PortUsage + name ConnectionUsage + name InterfaceUsage + name AllocationUsage + name Message + name FlowUsage + name SuccessionFlowUsage + name BehaviorUsageElement + line_comment // Clause 8.2.2.6.5 Specialization + nonterminal_rule + SubclassificationPart + abstract_element Classifier + sequence + name SPECIALIZES + prop_list_append + prop_name ownedRelationship + name OwnedSubclassification + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name OwnedSubclassification + repetition * + nonterminal_rule + OwnedSubclassification + abstract_element Subclassification + prop_assign + prop_name superClassifier + qualified_name [QualifiedName] + nonterminal_rule + FeatureSpecializationPart + abstract_element Feature + alternation + sequence + expression + name FeatureSpecialization + repetition + + expression + name MultiplicityPart + repetition ? + expression + name FeatureSpecialization + repetition * + sequence + name MultiplicityPart + expression + name FeatureSpecialization + repetition * + nonterminal_rule + FeatureSpecialization + abstract_element Feature + alternation + name Typings + name Subsettings + name References + name Crosses + name Redefinitions + nonterminal_rule + Typings + abstract_element Feature + sequence + name TypedBy + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name FeatureTyping + repetition * + nonterminal_rule + TypedBy + abstract_element Feature + sequence + name DEFINED_BY + prop_list_append + prop_name ownedRelationship + name FeatureTyping + nonterminal_rule + FeatureTyping + alternation + name OwnedFeatureTyping + name ConjugatedPortTyping + nonterminal_rule + OwnedFeatureTyping + abstract_element FeatureTyping + alternation + prop_assign + prop_name type + qualified_name [QualifiedName] + sequence + prop_assign + prop_name type + name OwnedFeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name type + nonterminal_rule + Subsettings + abstract_element Feature + sequence + name Subsets + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name OwnedSubsetting + repetition * + nonterminal_rule + Subsets + abstract_element Feature + sequence + name SUBSETS + prop_list_append + prop_name ownedRelationship + name OwnedSubsetting + nonterminal_rule + OwnedSubsetting + abstract_element Subsetting + alternation + prop_assign + prop_name subsettedFeature + qualified_name [QualifiedName] + sequence + prop_assign + prop_name subsettedFeature + name OwnedFeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name subsettedFeature + nonterminal_rule + References + abstract_element Feature + sequence + name REFERENCES + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + nonterminal_rule + OwnedReferenceSubsetting + abstract_element ReferenceSubsetting + alternation + prop_assign + prop_name referencedFeature + qualified_name [QualifiedName] + sequence + prop_assign + prop_name referencedFeature + name OwnedFeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name referenceFeature + nonterminal_rule + Crosses + abstract_element Feature + sequence + name CROSSES + prop_list_append + prop_name ownedRelationship + name OwnedCrossSubsetting + nonterminal_rule + OwnedCrossSubsetting + abstract_element CrossSubsetting + alternation + prop_assign + prop_name crossedFeature + qualified_name [QualifiedName] + sequence + prop_assign + prop_name crossedFeature + name OwnedFeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name crossedFeature + nonterminal_rule + Redefinitions + abstract_element Feature + sequence + name Redefines + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name OwnedRedefinition + repetition * + nonterminal_rule + Redefines + abstract_element Feature + sequence + name REDEFINES + prop_list_append + prop_name ownedRelationship + name OwnedRedefinition + nonterminal_rule + OwnedRedefinition + abstract_element Redefinition + alternation + prop_assign + prop_name redefinedFeature + qualified_name [QualifiedName] + sequence + prop_assign + prop_name redefinedFeature + name OwnedFeatureChain + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name redefinedFeature + nonterminal_rule + OwnedFeatureChain + abstract_element Feature + sequence + prop_list_append + prop_name ownedRelationship + name OwnedFeatureChaining + expression + sequence + terminal '.' + prop_list_append + prop_name ownedRelationship + name OwnedFeatureChaining + repetition + + nonterminal_rule + OwnedFeatureChaining + abstract_element FeatureChaining + prop_assign + prop_name chainingFeature + qualified_name [QualifiedName] + line_comment // Clause 8.2.2.6.6 Multiplicity + nonterminal_rule + MultiplicityPart + abstract_element Feature + alternation + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + sequence + expression + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + repetition ? + alternation + sequence + boolean_prop_assign + prop_name isOrdered + terminal 'ordered' + expression + sequence + nonparsing_prop_assign + prop_name isUnique + prop_name false + terminal 'nonunique' + repetition ? + sequence + nonparsing_prop_assign + prop_name isUnique + prop_name false + terminal 'nonunique' + expression + boolean_prop_assign + prop_name isOrdered + terminal 'ordered' + repetition ? + nonterminal_rule + OwnedMultiplicity + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name MultiplicityRange + nonterminal_rule + MultiplicityRange + sequence + terminal '[' + expression + sequence + prop_list_append + prop_name ownedRelationship + name MultiplicityExpressionMember + terminal '..' + repetition ? + prop_list_append + prop_name ownedRelationship + name MultiplicityExpressionMember + terminal ']' + nonterminal_rule + MultiplicityExpressionMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + prop_value + name LiteralExpression + name FeatureReferenceExpression + line_comment // Clause 8.2.2.7 Attributes Textual Notation + nonterminal_rule + AttributeDefinition + abstract_element AttributeDefinition + sequence + name DefinitionPrefix + terminal 'attribute' + terminal 'def' + name Definition + nonterminal_rule + AttributeUsage + abstract_element AttributeUsage + sequence + name UsagePrefix + terminal 'attribute' + name Usage + line_comment // Clause 8.2.2.8 Enumerations Textual Notation + nonterminal_rule + EnumerationDefinition + sequence + expression + name DefinitionExtensionKeyword + repetition * + terminal 'enum' + terminal 'def' + name DefinitionDeclaration + name EnumerationBody + nonterminal_rule + EnumerationBody + abstract_element EnumerationDefinition + alternation + terminal ';' + sequence + terminal '{' + expression + alternation + prop_list_append + prop_name ownedRelationship + name AnnotatingMember + prop_list_append + prop_name ownedRelationship + name EnumerationUsageMember + repetition * + terminal '}' + nonterminal_rule + EnumerationUsageMember + abstract_element VariantMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name EnumeratedValue + nonterminal_rule + EnumeratedValue + abstract_element EnumerationUsage + sequence + expression + terminal 'enum' + repetition ? + name Usage + nonterminal_rule + EnumerationUsage + abstract_element EnumerationUsage + sequence + name UsagePrefix + terminal 'enum' + name Usage + line_comment // Clause 8.2.2.9 Occurrences Textual Notation + line_comment // Clause 8.2.2.9.1 Occurrence Definitions + nonterminal_rule + OccurrenceDefinitionPrefix + abstract_element OccurrenceDefinition + sequence + expression + name BasicDefinitionPrefix + repetition ? + expression + sequence + boolean_prop_assign + prop_name isIndividual + terminal 'individual' + prop_list_append + prop_name ownedRelationship + name EmptyMultiplicityMember + repetition ? + expression + name DefinitionExtensionKeyword + repetition * + nonterminal_rule + OccurrenceDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'occurrence' + terminal 'def' + name Definition + nonterminal_rule + IndividualDefinition + abstract_element OccurrenceDefinition + sequence + expression + name BasicDefinitionPrefix + repetition ? + boolean_prop_assign + prop_name isIndividual + terminal 'individual' + expression + name DefinitionExtensionKeyword + repetition * + terminal 'def' + name Definition + prop_list_append + prop_name ownedRelationship + name EmptyMultiplicityMember + nonterminal_rule + EmptyMultiplicityMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name EmptyMultiplicity + nonterminal_rule + EmptyMultiplicity + abstract_element Multiplicity + nonparsing_empty_value + line_comment // Clause 8.2.2.9.2 Occurrence Usages + nonterminal_rule + OccurrenceUsagePrefix + abstract_element OccurrenceUsage + sequence + name BasicUsagePrefix + expression + boolean_prop_assign + prop_name isIndividual + terminal 'individual' + repetition ? + expression + sequence + prop_assign + prop_name portionKind + name PortionKind + nonparsing_prop_assign + prop_name isPortion + prop_name true + repetition ? + expression + name UsageExtensionKeyword + repetition * + nonterminal_rule + OccurrenceUsage + sequence + name OccurrenceUsagePrefix + terminal 'occurrence' + name Usage + nonterminal_rule + IndividualUsage + abstract_element OccurrenceUsage + sequence + name BasicUsagePrefix + boolean_prop_assign + prop_name isIndividual + terminal 'individual' + expression + name UsageExtensionKeyword + repetition * + name Usage + nonterminal_rule + PortionUsage + abstract_element OccurrenceUsage + sequence + name BasicUsagePrefix + expression + boolean_prop_assign + prop_name isIndividual + terminal 'individual' + repetition ? + prop_assign + prop_name portionKind + name PortionKind + expression + name UsageExtensionKeyword + repetition * + name Usage + nonparsing_prop_assign + prop_name isPortion + prop_name true + nonterminal_rule + PortionKind + alternation + terminal 'snapshot' + terminal 'timeslice' + nonterminal_rule + EventOccurrenceUsage + sequence + name OccurrenceUsagePrefix + terminal 'event' + alternation + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecializationPart + repetition ? + sequence + terminal 'occurrence' + expression + name UsageDeclaration + repetition ? + name UsageCompletion + line_comment // Clause 8.2.2.9.3 Occurrence Successions + nonterminal_rule + SourceSuccessionMember + abstract_element FeatureMembership + sequence + terminal 'then' + prop_list_append + prop_name ownedRelatedElement + name SourceSuccession + nonterminal_rule + SourceSuccession + abstract_element SuccessionAsUsage + prop_list_append + prop_name ownedRelationship + name SourceEndMember + nonterminal_rule + SourceEndMember + abstract_element EndFeatureMembership + prop_list_append + prop_name ownedRelatedElement + name SourceEnd + nonterminal_rule + SourceEnd + abstract_element ReferenceUsage + expression + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + repetition ? + line_comment // Clause 8.2.2.10 Items Textual Notation + nonterminal_rule + ItemDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'item' + terminal 'def' + name Definition + nonterminal_rule + ItemUsage + sequence + name OccurrenceUsagePrefix + terminal 'item' + name Usage + line_comment // Clause 8.2.2.11 Parts Textual Notation + nonterminal_rule + PartDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'part' + terminal 'def' + name Definition + nonterminal_rule + PartUsage + sequence + name OccurrenceUsagePrefix + terminal 'part' + name Usage + line_comment // Clause 8.2.2.12 Ports Textual Notation + nonterminal_rule + PortDefinition + sequence + name DefinitionPrefix + terminal 'port' + terminal 'def' + name Definition + prop_list_append + prop_name ownedRelationship + name ConjugatedPortDefinitionMember + nonparsing_prop_assign + prop_name + conjugatedPortDefinition + ownedPortConjugator + originalPortDefinition + this + line_comment // (See Note 1) + nonterminal_rule + ConjugatedPortDefinitionMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name ConjugatedPortDefinition + nonterminal_rule + ConjugatedPortDefinition + prop_list_append + prop_name ownedRelationship + name PortConjugation + nonterminal_rule + PortConjugation + nonparsing_empty_value + nonterminal_rule + PortUsage + sequence + name OccurrenceUsagePrefix + terminal 'port' + name Usage + nonterminal_rule + ConjugatedPortTyping + abstract_element ConjugatedPortTyping + sequence + terminal '~' + prop_assign + prop_name originalPortDefinition + qualified_name [QualifiedName] + line_comment // (See Note 2) + line_comment // Notes: + line_comment // 1. Even though it is not explicitly represented in the text, a PortDefinition is always parsed as containing a nested ConjugatedPortDefinition with a PortDefinition Relationship pointing back to the containing PortDefinition. The abstract syntax for ConjugatedPortDefinition sets its effectiveName to the name of its originalPortDefinition with the symbol ~ prepended to it (see 8.3.12.2). (See also 8.4.8.1.) + line_comment // 2. The notation ~[QualifiedName] indicates that a QualifiedName shall be parsed from the input text, but that it shall be resolved as if it was the qualified name constructed as follows: + line_comment // • Extract the last segment name of the given QualifiedName and prepend the symbol ~ to it. + line_comment // • Append the name so constructed to the end of the entire original QualifiedName. + line_comment // For example, if the ConjugatedPortTyping is ~A::B::C, then the given QualifiedName is A::B::C, and ~[QualifiedName] is resolved as A::B::C::'~C'. Alternatively, a conforming tool may first resolve the given QualifiedName as usual to a PortDefinition and then use the conjugatedPortDefinition of this PortDefinition as the resolution of ~[QualifiedName]. + line_comment // Clause 8.2.2.13 Connections Textual Notation + line_comment // Clause 8.2.2.13.1 Connection Definition and Usage + nonterminal_rule + ConnectionDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'connection' + terminal 'def' + name Definition + nonterminal_rule + ConnectionUsage + sequence + name OccurrenceUsagePrefix + alternation + sequence + terminal 'connection' + name UsageDeclaration + expression + name ValuePart + repetition ? + expression + sequence + terminal 'connect' + name ConnectorPart + repetition ? + sequence + terminal 'connect' + name ConnectorPart + name UsageBody + nonterminal_rule + ConnectorPart + abstract_element ConnectionUsage + alternation + name BinaryConnectorPart + name NaryConnectorPart + nonterminal_rule + BinaryConnectorPart + abstract_element ConnectionUsage + sequence + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + terminal 'to' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + nonterminal_rule + NaryConnectorPart + abstract_element ConnectionUsage + sequence + terminal '(' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + terminal ',' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + repetition * + terminal ')' + nonterminal_rule + ConnectorEndMember + abstract_element EndFeatureMembership + prop_list_append + prop_name ownedRelatedElement + name ConnectorEnd + nonterminal_rule + ConnectorEnd + abstract_element ReferenceUsage + sequence + expression + prop_list_append + prop_name ownedRelationship + name OwnedCrossMultiplicityMember + repetition ? + expression + sequence + prop_assign + prop_name declaredName + name NAME + name REFERENCES + repetition ? + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + nonterminal_rule + OwnedCrossMultiplicityMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name OwnedCrossMultiplicity + nonterminal_rule + OwnedCrossMultiplicity + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + line_comment // Clause 8.2.2.13.2 Binding Connectors + nonterminal_rule + BindingConnectorAsUsage + sequence + name UsagePrefix + expression + sequence + terminal 'binding' + name UsageDeclaration + repetition ? + terminal 'bind' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + terminal '=' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + name UsageBody + line_comment // Clause 8.2.2.13.3 Successions + nonterminal_rule + SuccessionAsUsage + sequence + name UsagePrefix + expression + sequence + terminal 'succession' + name UsageDeclaration + repetition ? + terminal 'first' + prop_list_append + prop_name + s + ownedRelationship + name ConnectorEndMember + terminal 'then' + prop_list_append + prop_name + s + ownedRelationship + name ConnectorEndMember + name UsageBody + line_comment // Clause 8.2.2.14 Interfaces Textual Notation + line_comment // Clause 8.2.2.14.1 Interface Definitions + nonterminal_rule + InterfaceDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'interface' + terminal 'def' + name DefinitionDeclaration + name InterfaceBody + nonterminal_rule + InterfaceBody + abstract_element Type + alternation + terminal ';' + sequence + terminal '{' + expression + name InterfaceBodyItem + repetition * + terminal '}' + nonterminal_rule + InterfaceBodyItem + abstract_element Type + alternation + prop_list_append + prop_name ownedRelationship + name DefinitionMember + prop_list_append + prop_name ownedRelationship + name VariantUsageMember + prop_list_append + prop_name ownedRelationship + name InterfaceNonOccurrenceUsageMember + sequence + expression + prop_list_append + prop_name ownedRelationship + name SourceSuccessionMember + repetition ? + prop_list_append + prop_name ownedRelationship + name InterfaceOccurrenceUsageMember + prop_list_append + prop_name ownedRelationship + name AliasMember + prop_list_append + prop_name ownedRelationship + name Import + nonterminal_rule + InterfaceNonOccurrenceUsageMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name InterfaceNonOccurrenceUsageElement + nonterminal_rule + InterfaceNonOccurrenceUsageElement + abstract_element Usage + alternation + name ReferenceUsage + name AttributeUsage + name EnumerationUsage + name BindingConnectorAsUsage + name SuccessionAsUsage + nonterminal_rule + InterfaceOccurrenceUsageMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name InterfaceOccurrenceUsageElement + nonterminal_rule + InterfaceOccurrenceUsageElement + abstract_element Usage + alternation + name DefaultInterfaceEnd + name StructureUsageElement + name BehaviorUsageElement + nonterminal_rule + DefaultInterfaceEnd + abstract_element PortUsage + sequence + boolean_prop_assign + prop_name isEnd + terminal 'end' + name Usage + line_comment // Clause 8.2.2.14.2 Interface Usages + nonterminal_rule + InterfaceUsage + sequence + name OccurrenceUsagePrefix + terminal 'interface' + name InterfaceUsageDeclaration + name InterfaceBody + nonterminal_rule + InterfaceUsageDeclaration + abstract_element InterfaceUsage + alternation + sequence + name UsageDeclaration + expression + name ValuePart + repetition ? + expression + sequence + terminal 'connect' + name InterfacePart + repetition ? + name InterfacePart + nonterminal_rule + InterfacePart + abstract_element InterfaceUsage + alternation + name BinaryInterfacePart + name NaryInterfacePart + nonterminal_rule + BinaryInterfacePart + abstract_element InterfaceUsage + sequence + prop_list_append + prop_name ownedRelationship + name InterfaceEndMember + terminal 'to' + prop_list_append + prop_name ownedRelationship + name InterfaceEndMember + nonterminal_rule + NaryInterfacePart + abstract_element InterfaceUsage + sequence + terminal '(' + prop_list_append + prop_name ownedRelationship + name InterfaceEndMember + terminal ',' + prop_list_append + prop_name ownedRelationship + name InterfaceEndMember + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name InterfaceEndMember + repetition * + terminal ')' + nonterminal_rule + InterfaceEndMember + abstract_element EndFeatureMembership + prop_list_append + prop_name ownedRelatedElement + name InterfaceEnd + nonterminal_rule + InterfaceEnd + abstract_element PortUsage + sequence + expression + prop_list_append + prop_name ownedRelationship + name OwnedCrossMultiplicityMember + repetition ? + expression + sequence + prop_assign + prop_name declaredName + name NAME + name REFERENCES + repetition ? + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + line_comment // Clause 8.2.2.15 Allocations Textual Notation + nonterminal_rule + AllocationDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'allocation' + terminal 'def' + name Definition + nonterminal_rule + AllocationUsage + sequence + name OccurrenceUsagePrefix + name AllocationUsageDeclaration + name UsageBody + nonterminal_rule + AllocationUsageDeclaration + abstract_element AllocationUsage + alternation + sequence + terminal 'allocation' + name UsageDeclaration + expression + sequence + terminal 'allocate' + name ConnectorPart + repetition ? + sequence + terminal 'allocate' + name ConnectorPart + line_comment // Clause 8.2.2.16 Flows Textual Notation + nonterminal_rule + FlowDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'flow' + terminal 'def' + name Definition + nonterminal_rule + Message + abstract_element FlowUsage + sequence + name OccurrenceUsagePrefix + terminal 'message' + name MessageDeclaration + name DefinitionBody + nonparsing_prop_assign + prop_name isAbstract + prop_name true + nonterminal_rule + MessageDeclaration + abstract_element FlowUsage + alternation + sequence + name UsageDeclaration + expression + name ValuePart + repetition ? + expression + sequence + terminal 'of' + prop_list_append + prop_name ownedRelationship + name FlowPayloadFeatureMember + repetition ? + expression + sequence + terminal 'from' + prop_list_append + prop_name ownedRelationship + name MessageEventMember + terminal 'to' + prop_list_append + prop_name ownedRelationship + name MessageEventMember + repetition ? + sequence + prop_list_append + prop_name ownedRelationship + name MessageEventMember + terminal 'to' + prop_list_append + prop_name ownedRelationship + name MessageEventMember + nonterminal_rule + MessageEventMember + abstract_element ParameterMembership + prop_list_append + prop_name ownedRelatedElement + name MessageEvent + nonterminal_rule + MessageEvent + abstract_element EventOccurrenceUsage + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + nonterminal_rule + FlowUsage + sequence + name OccurrenceUsagePrefix + terminal 'flow' + name FlowDeclaration + name DefinitionBody + nonterminal_rule + SuccessionFlowUsage + sequence + name OccurrenceUsagePrefix + terminal 'succession' + terminal 'flow' + name FlowDeclaration + name DefinitionBody + nonterminal_rule + FlowDeclaration + abstract_element FlowUsage + alternation + sequence + name UsageDeclaration + expression + name ValuePart + repetition ? + expression + sequence + terminal 'of' + prop_list_append + prop_name ownedRelationship + name FlowPayloadFeatureMember + repetition ? + expression + sequence + terminal 'from' + prop_list_append + prop_name ownedRelationship + name FlowEndMember + terminal 'to' + prop_list_append + prop_name ownedRelationship + name FlowEndMember + repetition ? + sequence + prop_list_append + prop_name ownedRelationship + name FlowEndMember + terminal 'to' + prop_list_append + prop_name ownedRelationship + name FlowEndMember + nonterminal_rule + FlowPayloadFeatureMember + abstract_element FeatureMembership + prop_list_append + prop_name ownedRelatedElement + name FlowPayloadFeature + nonterminal_rule + FlowPayloadFeature + abstract_element PayloadFeature + name PayloadFeature + nonterminal_rule + PayloadFeature + abstract_element Feature + alternation + sequence + expression + name Identification + repetition ? + name PayloadFeatureSpecializationPart + expression + name ValuePart + repetition ? + sequence + prop_list_append + prop_name ownedRelationship + name OwnedFeatureTyping + expression + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + repetition ? + sequence + prop_list_append + prop_name ownedRelationship + name OwnedMultiplicity + prop_list_append + prop_name ownedRelationship + name OwnedFeatureTyping + nonterminal_rule + PayloadFeatureSpecializationPart + abstract_element Feature + alternation + sequence + expression + name FeatureSpecialization + repetition + + expression + name MultiplicityPart + repetition ? + expression + name FeatureSpecialization + repetition * + sequence + name MultiplicityPart + expression + name FeatureSpecialization + repetition + + nonterminal_rule + FlowEndMember + abstract_element EndFeatureMembership + prop_list_append + prop_name ownedRelatedElement + name FlowEnd + nonterminal_rule + FlowEnd + sequence + expression + prop_list_append + prop_name ownedRelationship + name FlowEndSubsetting + repetition ? + prop_list_append + prop_name ownedRelationship + name FlowFeatureMember + nonterminal_rule + FlowEndSubsetting + abstract_element ReferenceSubsetting + alternation + prop_assign + prop_name referencedFeature + qualified_name [QualifiedName] + sequence + prop_assign + prop_name referencedFeature + name FeatureChainPrefix + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name referencedFeature + nonterminal_rule + FeatureChainPrefix + abstract_element Feature + sequence + expression + sequence + prop_list_append + prop_name ownedRelationship + name OwnedFeatureChaining + terminal '.' + repetition + + prop_list_append + prop_name ownedRelationship + name OwnedFeatureChaining + terminal '.' + nonterminal_rule + FlowFeatureMember + abstract_element FeatureMembership + prop_list_append + prop_name ownedRelatedElement + name FlowFeature + nonterminal_rule + FlowFeature + abstract_element ReferenceUsage + prop_list_append + prop_name ownedRelationship + name FlowFeatureRedefinition + line_comment // (See Note 1) + nonterminal_rule + FlowFeatureRedefinition + abstract_element Redefinition + prop_assign + prop_name redefinedFeature + qualified_name [QualifiedName] + line_comment // Notes: + line_comment // 1. To ensure that a FlowFeature passes the validateRedefinitionDirectionConformance constraint (see [KerML, 8.3.3.3.8]), its direction must be set to the direction of its redefinedFeature, relative to its owning FlowEnd, that is, the result of the following OCL expression: owningType.directionOf(ownedRedefinition->at(1).redefinedFeature) + line_comment // Clause 8.2.2.17 Actions Textual Notation + line_comment // Clause 8.2.2.17.1 Action Definitions + nonterminal_rule + ActionDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'action' + terminal 'def' + name DefinitionDeclaration + name ActionBody + nonterminal_rule + ActionBody + abstract_element Type + alternation + terminal ';' + sequence + terminal '{' + expression + name ActionBodyItem + repetition * + terminal '}' + nonterminal_rule + ActionBodyItem + abstract_element Type + alternation + name NonBehaviorBodyItem + sequence + prop_list_append + prop_name ownedRelationship + name InitialNodeMember + expression + prop_list_append + prop_name ownedRelationship + name ActionTargetSuccessionMember + repetition * + sequence + expression + prop_list_append + prop_name ownedRelationship + name SourceSuccessionMember + repetition ? + prop_list_append + prop_name ownedRelationship + name ActionBehaviorMember + expression + prop_list_append + prop_name ownedRelationship + name ActionTargetSuccessionMember + repetition * + prop_list_append + prop_name ownedRelationship + name GuardedSuccessionMember + nonterminal_rule + NonBehaviorBodyItem + alternation + prop_list_append + prop_name ownedRelationship + name Import + prop_list_append + prop_name ownedRelationship + name AliasMember + prop_list_append + prop_name ownedRelationship + name DefinitionMember + prop_list_append + prop_name ownedRelationship + name VariantUsageMember + prop_list_append + prop_name ownedRelationship + name NonOccurrenceUsageMember + sequence + expression + prop_list_append + prop_name ownedRelationship + name SourceSuccessionMember + repetition ? + prop_list_append + prop_name ownedRelationship + name StructureUsageMember + nonterminal_rule + ActionBehaviorMember + abstract_element FeatureMembership + alternation + name BehaviorUsageMember + name ActionNodeMember + nonterminal_rule + InitialNodeMember + abstract_element FeatureMembership + sequence + name MemberPrefix + terminal 'first' + prop_assign + prop_name memberFeature + qualified_name [QualifiedName] + name RelationshipBody + nonterminal_rule + ActionNodeMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name ActionNode + nonterminal_rule + ActionTargetSuccessionMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name ActionTargetSuccession + nonterminal_rule + GuardedSuccessionMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name GuardedSuccession + line_comment // Clause 8.2.2.17.2 Action Usages + nonterminal_rule + ActionUsage + sequence + name OccurrenceUsagePrefix + terminal 'action' + name ActionUsageDeclaration + name ActionBody + nonterminal_rule + ActionUsageDeclaration + abstract_element ActionUsage + sequence + name UsageDeclaration + expression + name ValuePart + repetition ? + nonterminal_rule + PerformActionUsage + sequence + name OccurrenceUsagePrefix + terminal 'perform' + name PerformActionUsageDeclaration + name ActionBody + nonterminal_rule + PerformActionUsageDeclaration + abstract_element PerformActionUsage + sequence + alternation + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecializationPart + repetition ? + sequence + terminal 'action' + name UsageDeclaration + expression + name ValuePart + repetition ? + nonterminal_rule + ActionNode + abstract_element ActionUsage + alternation + name ControlNode + name SendNode + name AcceptNode + name AssignmentNode + name TerminateNode + name IfNode + name WhileLoopNode + name ForLoopNode + nonterminal_rule + ActionNodeUsageDeclaration + abstract_element ActionUsage + sequence + terminal 'action' + expression + name UsageDeclaration + repetition ? + nonterminal_rule + ActionNodePrefix + abstract_element ActionUsage + sequence + name OccurrenceUsagePrefix + expression + name ActionNodeUsageDeclaration + repetition ? + line_comment // Clause 8.2.2.17.3 Control Nodes + nonterminal_rule + ControlNode + alternation + name MergeNode + name DecisionNode + name JoinNode + name ForkNode + nonterminal_rule + ControlNodePrefix + abstract_element OccurrenceUsage + sequence + name RefPrefix + expression + boolean_prop_assign + prop_name isIndividual + terminal 'individual' + repetition ? + expression + sequence + prop_assign + prop_name portionKind + name PortionKind + nonparsing_prop_assign + prop_name isPortion + prop_name true + repetition ? + expression + name UsageExtensionKeyword + repetition * + nonterminal_rule + MergeNode + sequence + name ControlNodePrefix + boolean_prop_assign + prop_name isComposite + terminal 'merge' + name UsageDeclaration + name ActionBody + nonterminal_rule + DecisionNode + sequence + name ControlNodePrefix + boolean_prop_assign + prop_name isComposite + terminal 'decide' + name UsageDeclaration + name ActionBody + nonterminal_rule + JoinNode + sequence + name ControlNodePrefix + boolean_prop_assign + prop_name isComposite + terminal 'join' + name UsageDeclaration + name ActionBody + nonterminal_rule + ForkNode + sequence + name ControlNodePrefix + boolean_prop_assign + prop_name isComposite + terminal 'fork' + name UsageDeclaration + name ActionBody + line_comment // Clause 8.2.2.17.4 Send and Accept Action Usages + nonterminal_rule + AcceptNode + abstract_element AcceptActionUsage + sequence + name OccurrenceUsagePrefix + name AcceptNodeDeclaration + name ActionBody + nonterminal_rule + AcceptNodeDeclaration + abstract_element AcceptActionUsage + sequence + expression + name ActionNodeUsageDeclaration + repetition ? + terminal 'accept' + name AcceptParameterPart + nonterminal_rule + AcceptParameterPart + abstract_element AcceptActionUsage + sequence + prop_list_append + prop_name ownedRelationship + name PayloadParameterMember + expression + sequence + terminal 'via' + prop_list_append + prop_name ownedRelationship + name NodeParameterMember + repetition ? + nonterminal_rule + PayloadParameterMember + abstract_element ParameterMembership + prop_list_append + prop_name ownedRelatedElement + name PayloadParameter + nonterminal_rule + PayloadParameter + abstract_element ReferenceUsage + alternation + name PayloadFeature + sequence + name Identification + expression + name PayloadFeatureSpecializationPart + repetition ? + name TriggerValuePart + nonterminal_rule + TriggerValuePart + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name TriggerFeatureValue + nonterminal_rule + TriggerFeatureValue + abstract_element FeatureValue + prop_list_append + prop_name ownedRelatedElement + name TriggerExpression + nonterminal_rule + TriggerExpression + abstract_element TriggerInvocationExpression + alternation + sequence + prop_assign + prop_name kind + prop_value + terminal 'at' + terminal 'after' + prop_list_append + prop_name ownedRelationship + name ArgumentMember + sequence + prop_assign + prop_name kind + terminal 'when' + prop_list_append + prop_name ownedRelationship + name ArgumentExpressionMember + nonterminal_rule + ArgumentMember + abstract_element ParameterMembership + prop_assign + prop_name ownedMemberParameter + name Argument + nonterminal_rule + Argument + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name ArgumentValue + nonterminal_rule + ArgumentValue + abstract_element FeatureValue + prop_assign + prop_name value + name OwnedExpression + nonterminal_rule + ArgumentExpressionMember + abstract_element ParameterMembership + prop_list_append + prop_name ownedRelatedElement + name ArgumentExpression + nonterminal_rule + ArgumentExpression + abstract_element Feature + prop_list_append + prop_name ownedRelationship + name ArgumentExpressionValue + nonterminal_rule + ArgumentExpressionValue + abstract_element FeatureValue + prop_list_append + prop_name ownedRelatedElement + name OwnedExpressionReference + nonterminal_rule + SendNode + abstract_element SendActionUsage + sequence + name OccurrenceUsagePrefix + expression + name ActionUsageDeclaration + repetition ? + terminal 'send' + expression + alternation + sequence + prop_list_append + prop_name ownedRelationship + name NodeParameterMember + expression + name SenderReceiverPart + repetition ? + sequence + prop_list_append + prop_name ownedRelationship + name EmptyParameterMember + name SenderReceiverPart + repetition ? + name ActionBody + nonterminal_rule + SendNodeDeclaration + abstract_element SendActionUsage + sequence + expression + name ActionNodeUsageDeclaration + repetition ? + terminal 'send' + prop_list_append + prop_name ownedRelationship + name NodeParameterMember + expression + name SenderReceiverPart + repetition ? + nonterminal_rule + SenderReceiverPart + abstract_element SendActionUsage + alternation + sequence + terminal 'via' + prop_list_append + prop_name ownedRelationship + name NodeParameterMember + expression + sequence + terminal 'to' + prop_list_append + prop_name ownedRelationship + name NodeParameterMember + repetition ? + sequence + prop_list_append + prop_name ownedRelationship + name EmptyParameterMember + terminal 'to' + prop_list_append + prop_name ownedRelationship + name NodeParameterMember + nonterminal_rule + NodeParameterMember + abstract_element ParameterMembership + prop_list_append + prop_name ownedRelatedElement + name NodeParameter + nonterminal_rule + NodeParameter + abstract_element ReferenceUsage + prop_list_append + prop_name ownedRelationship + name FeatureBinding + nonterminal_rule + FeatureBinding + abstract_element FeatureValue + prop_list_append + prop_name ownedRelatedElement + name OwnedExpression + nonterminal_rule + EmptyParameterMember + abstract_element ParameterMembership + prop_list_append + prop_name ownedRelatedElement + name EmptyUsage + nonterminal_rule + EmptyUsage + abstract_element ReferenceUsage + nonparsing_empty_value + line_comment // Notes: + line_comment // 1. The productions for ArgumentMember, Argument, ArgumentValue, ArgumentExpressionMember, ArgumentExpression and ArgumentExpressionValue are the same as given in [KerML, 8.2.5.8.1]. + line_comment // Clause 8.2.2.17.5 Assignment Action Usages + nonterminal_rule + AssignmentNode + abstract_element AssignmentActionUsage + sequence + name OccurrenceUsagePrefix + name AssignmentNodeDeclaration + name ActionBody + nonterminal_rule + AssignmentNodeDeclaration + abstract_element ActionUsage + sequence + expression + name ActionNodeUsageDeclaration + repetition ? + terminal 'assign' + prop_list_append + prop_name ownedRelationship + name AssignmentTargetMember + prop_list_append + prop_name ownedRelationship + name FeatureChainMember + terminal ':=' + prop_list_append + prop_name ownedRelationship + name NodeParameterMember + nonterminal_rule + AssignmentTargetMember + abstract_element ParameterMembership + prop_list_append + prop_name ownedRelatedElement + name AssignmentTargetParameter + nonterminal_rule + AssignmentTargetParameter + abstract_element ReferenceUsage + expression + sequence + prop_list_append + prop_name ownedRelationship + name AssignmentTargetBinding + terminal '.' + repetition ? + nonterminal_rule + AssignmentTargetBinding + abstract_element FeatureValue + prop_list_append + prop_name ownedRelatedElement + name NonFeatureChainPrimaryExpression + nonterminal_rule + FeatureChainMember + abstract_element Membership + alternation + prop_assign + prop_name memberElement + qualified_name [QualifiedName] + name OwnedFeatureChainMember + nonterminal_rule + OwnedFeatureChainMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name OwnedFeatureChain + line_comment // Clause 8.2.2.17.6 Terminate Action Usages + nonterminal_rule + TerminateNode + abstract_element TerminateActionUsage + sequence + name OccurrenceUsagePrefix + expression + name ActionNodeUsageDeclaration + repetition ? + terminal 'terminate' + expression + prop_list_append + prop_name ownedRelationship + name NodeParameterMember + repetition ? + name ActionBody + line_comment // Clause 8.2.2.17.7 Structured Control Action Usages + nonterminal_rule + IfNode + abstract_element IfActionUsage + sequence + name ActionNodePrefix + terminal 'if' + prop_list_append + prop_name ownedRelationship + name ExpressionParameterMember + prop_list_append + prop_name ownedRelationship + name ActionBodyParameterMember + expression + sequence + terminal 'else' + prop_list_append + prop_name ownedRelationship + prop_value + name ActionBodyParameterMember + name IfNodeParameterMember + repetition ? + nonterminal_rule + ExpressionParameterMember + abstract_element ParameterMembership + prop_list_append + prop_name ownedRelatedElement + name OwnedExpression + nonterminal_rule + ActionBodyParameterMember + abstract_element ParameterMembership + prop_list_append + prop_name ownedRelatedElement + name ActionBodyParameter + nonterminal_rule + ActionBodyParameter + abstract_element ActionUsage + sequence + expression + sequence + terminal 'action' + expression + name UsageDeclaration + repetition ? + repetition ? + terminal '{' + expression + name ActionBodyItem + repetition * + terminal '}' + nonterminal_rule + IfNodeParameterMember + abstract_element ParameterMembership + prop_list_append + prop_name ownedRelatedElement + name IfNode + nonterminal_rule + WhileLoopNode + abstract_element WhileLoopActionUsage + sequence + name ActionNodePrefix + alternation + sequence + terminal 'while' + prop_list_append + prop_name ownedRelationship + name ExpressionParameterMember + sequence + terminal 'loop' + prop_list_append + prop_name ownedRelationship + name EmptyParameterMember + prop_list_append + prop_name ownedRelationship + name ActionBodyParameterMember + expression + sequence + terminal 'until' + prop_list_append + prop_name ownedRelationship + name ExpressionParameterMember + terminal ';' + repetition ? + nonterminal_rule + ForLoopNode + abstract_element ForLoopActionUsage + sequence + name ActionNodePrefix + terminal 'for' + prop_list_append + prop_name ownedRelationship + name ForVariableDeclarationMember + terminal 'in' + prop_list_append + prop_name ownedRelationship + name NodeParameterMember + prop_list_append + prop_name ownedRelationship + name ActionBodyParameterMember + nonterminal_rule + ForVariableDeclarationMember + abstract_element FeatureMembership + prop_list_append + prop_name ownedRelatedElement + name UsageDeclaration + nonterminal_rule + ForVariableDeclaration + abstract_element ReferenceUsage + name UsageDeclaration + line_comment // Clause 8.2.2.17.8 Action Successions + nonterminal_rule + ActionTargetSuccession + abstract_element Usage + sequence + alternation + name TargetSuccession + name GuardedTargetSuccession + name DefaultTargetSuccession + name UsageBody + nonterminal_rule + TargetSuccession + abstract_element SuccessionAsUsage + sequence + prop_list_append + prop_name ownedRelationship + name SourceEndMember + terminal 'then' + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + nonterminal_rule + GuardedTargetSuccession + abstract_element TransitionUsage + sequence + prop_list_append + prop_name ownedRelationship + name GuardExpressionMember + terminal 'then' + prop_list_append + prop_name ownedRelationship + name TransitionSuccessionMember + nonterminal_rule + DefaultTargetSuccession + abstract_element TransitionUsage + sequence + terminal 'else' + prop_list_append + prop_name ownedRelationship + name TransitionSuccessionMember + nonterminal_rule + GuardedSuccession + abstract_element TransitionUsage + sequence + expression + sequence + terminal 'succession' + name UsageDeclaration + repetition ? + terminal 'first' + prop_list_append + prop_name ownedRelationship + name FeatureChainMember + prop_list_append + prop_name ownedRelationship + name GuardExpressionMember + terminal 'then' + prop_list_append + prop_name ownedRelationship + name TransitionSuccessionMember + name UsageBody + line_comment // Clause 8.2.2.18 States Textual Notation + line_comment // Clause 8.2.2.18.1 State Definitions + nonterminal_rule + StateDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'state' + terminal 'def' + name DefinitionDeclaration + name StateDefBody + nonterminal_rule + StateDefBody + abstract_element StateDefinition + alternation + terminal ';' + sequence + expression + boolean_prop_assign + prop_name isParallel + terminal 'parallel' + repetition ? + terminal '{' + expression + name StateBodyItem + repetition * + terminal '}' + nonterminal_rule + StateBodyItem + abstract_element Type + alternation + name NonBehaviorBodyItem + sequence + expression + prop_list_append + prop_name ownedRelationship + name SourceSuccessionMember + repetition ? + prop_list_append + prop_name ownedRelationship + name BehaviorUsageMember + expression + prop_list_append + prop_name ownedRelationship + name TargetTransitionUsageMember + repetition * + prop_list_append + prop_name ownedRelationship + name TransitionUsageMember + sequence + prop_list_append + prop_name ownedRelationship + name EntryActionMember + expression + prop_list_append + prop_name ownedRelationship + name EntryTransitionMember + repetition * + prop_list_append + prop_name ownedRelationship + name DoActionMember + prop_list_append + prop_name ownedRelationship + name ExitActionMember + nonterminal_rule + EntryActionMember + abstract_element StateSubactionMembership + sequence + name MemberPrefix + prop_assign + prop_name kind + terminal 'entry' + prop_list_append + prop_name ownedRelatedElement + name StateActionUsage + nonterminal_rule + DoActionMember + abstract_element StateSubactionMembership + sequence + name MemberPrefix + prop_assign + prop_name kind + terminal 'do' + prop_list_append + prop_name ownedRelatedElement + name StateActionUsage + nonterminal_rule + ExitActionMember + abstract_element StateSubactionMembership + sequence + name MemberPrefix + prop_assign + prop_name kind + terminal 'exit' + prop_list_append + prop_name ownedRelatedElement + name StateActionUsage + nonterminal_rule + EntryTransitionMember + abstract_element FeatureMembership + sequence + name MemberPrefix + alternation + prop_list_append + prop_name ownedRelatedElement + name GuardedTargetSuccession + sequence + terminal 'then' + prop_list_append + prop_name ownedRelatedElement + name TargetSuccession + terminal ';' + nonterminal_rule + StateActionUsage + abstract_element ActionUsage + alternation + sequence + name EmptyActionUsage + terminal ';' + name StatePerformActionUsage + name StateAcceptActionUsage + name StateSendActionUsage + name StateAssignmentActionUsage + nonterminal_rule + EmptyActionUsage + abstract_element ActionUsage + nonparsing_empty_value + nonterminal_rule + StatePerformActionUsage + abstract_element PerformActionUsage + sequence + name PerformActionUsageDeclaration + name ActionBody + nonterminal_rule + StateAcceptActionUsage + abstract_element AcceptActionUsage + sequence + name AcceptNodeDeclaration + name ActionBody + nonterminal_rule + StateSendActionUsage + abstract_element SendActionUsage + sequence + name SendNodeDeclaration + name ActionBody + nonterminal_rule + StateAssignmentActionUsage + abstract_element AssignmentActionUsage + sequence + name AssignmentNodeDeclaration + name ActionBody + nonterminal_rule + TransitionUsageMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name TransitionUsage + nonterminal_rule + TargetTransitionUsageMember + abstract_element FeatureMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name TargetTransitionUsage + line_comment // Clause 8.2.2.18.2 State Usages + nonterminal_rule + StateUsage + sequence + name OccurrenceUsagePrefix + terminal 'state' + name ActionUsageDeclaration + name StateUsageBody + nonterminal_rule + StateUsageBody + abstract_element StateUsage + alternation + terminal ';' + sequence + expression + boolean_prop_assign + prop_name isParallel + terminal 'parallel' + repetition ? + terminal '{' + expression + name StateBodyItem + repetition * + terminal '}' + nonterminal_rule + ExhibitStateUsage + sequence + name OccurrenceUsagePrefix + terminal 'exhibit' + alternation + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecializationPart + repetition ? + sequence + terminal 'state' + name UsageDeclaration + expression + name ValuePart + repetition ? + name StateUsageBody + line_comment // Clause 8.2.2.18.3 Transition Usages + nonterminal_rule + TransitionUsage + sequence + terminal 'transition' + expression + sequence + name UsageDeclaration + terminal 'first' + repetition ? + prop_list_append + prop_name ownedRelationship + name FeatureChainMember + prop_list_append + prop_name ownedRelationship + name EmptyParameterMember + expression + sequence + prop_list_append + prop_name ownedRelationship + name EmptyParameterMember + prop_list_append + prop_name ownedRelationship + name TriggerActionMember + repetition ? + expression + prop_list_append + prop_name ownedRelationship + name GuardExpressionMember + repetition ? + expression + prop_list_append + prop_name ownedRelationship + name EffectBehaviorMember + repetition ? + terminal 'then' + prop_list_append + prop_name ownedRelationship + name TransitionSuccessionMember + name ActionBody + nonterminal_rule + TargetTransitionUsage + abstract_element TransitionUsage + sequence + prop_list_append + prop_name ownedRelationship + name EmptyParameterMember + expression + alternation + sequence + terminal 'transition' + expression + sequence + prop_list_append + prop_name ownedRelationship + name EmptyParameterMember + prop_list_append + prop_name ownedRelationship + name TriggerActionMember + repetition ? + expression + prop_list_append + prop_name ownedRelationship + name GuardExpressionMember + repetition ? + expression + prop_list_append + prop_name ownedRelationship + name EffectBehaviorMember + repetition ? + sequence + prop_list_append + prop_name ownedRelationship + name EmptyParameterMember + prop_list_append + prop_name ownedRelationship + name TriggerActionMember + expression + prop_list_append + prop_name ownedRelationship + name GuardExpressionMember + repetition ? + expression + prop_list_append + prop_name ownedRelationship + name EffectBehaviorMember + repetition ? + sequence + prop_list_append + prop_name ownedRelationship + name GuardExpressionMember + expression + prop_list_append + prop_name ownedRelationship + name EffectBehaviorMember + repetition ? + repetition ? + terminal 'then' + prop_list_append + prop_name ownedRelationship + name TransitionSuccessionMember + name ActionBody + nonterminal_rule + TriggerActionMember + abstract_element TransitionFeatureMembership + sequence + terminal 'accept' + nonparsing_prop_assign + prop_name kind + terminal 'trigger' + prop_list_append + prop_name ownedRelatedElement + name TriggerAction + nonterminal_rule + TriggerAction + abstract_element AcceptActionUsage + name AcceptParameterPart + nonterminal_rule + GuardExpressionMember + abstract_element TransitionFeatureMembership + sequence + terminal 'if' + nonparsing_prop_assign + prop_name kind + terminal 'guard' + prop_list_append + prop_name ownedRelatedElement + name OwnedExpression + nonterminal_rule + EffectBehaviorMember + abstract_element TransitionFeatureMembership + sequence + terminal 'do' + nonparsing_prop_assign + prop_name kind + terminal 'effect' + prop_list_append + prop_name ownedRelatedElement + name EffectBehaviorUsage + nonterminal_rule + EffectBehaviorUsage + abstract_element ActionUsage + alternation + name EmptyActionUsage + name TransitionPerformActionUsage + name TransitionAcceptActionUsage + name TransitionSendActionUsage + name TransitionAssignmentActionUsage + nonterminal_rule + TransitionPerformActionUsage + abstract_element PerformActionUsage + sequence + name PerformActionUsageDeclaration + expression + sequence + terminal '{' + expression + name ActionBodyItem + repetition * + terminal '}' + repetition ? + nonterminal_rule + TransitionAcceptActionUsage + abstract_element AcceptActionUsage + sequence + name AcceptNodeDeclaration + expression + sequence + terminal '{' + expression + name ActionBodyItem + repetition * + terminal '}' + repetition ? + nonterminal_rule + TransitionSendActionUsage + abstract_element SendActionUsage + sequence + name SendNodeDeclaration + expression + sequence + terminal '{' + expression + name ActionBodyItem + repetition * + terminal '}' + repetition ? + nonterminal_rule + TransitionAssignmentActionUsage + abstract_element AssignmentActionUsage + sequence + name AssignmentNodeDeclaration + expression + sequence + terminal '{' + expression + name ActionBodyItem + repetition * + terminal '}' + repetition ? + nonterminal_rule + TransitionSuccessionMember + abstract_element OwningMembership + prop_list_append + prop_name ownedRelatedElement + name TransitionSuccession + nonterminal_rule + TransitionSuccession + abstract_element Succession + sequence + prop_list_append + prop_name ownedRelationship + name EmptyEndMember + prop_list_append + prop_name ownedRelationship + name ConnectorEndMember + nonterminal_rule + EmptyEndMember + abstract_element EndFeatureMembership + prop_list_append + prop_name ownedRelatedElement + name EmptyFeature + nonterminal_rule + EmptyFeature + abstract_element ReferenceUsage + nonparsing_empty_value + line_comment // Clause 8.2.2.19 Calculations Textual Notation + nonterminal_rule + CalculationDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'calc' + terminal 'def' + name DefinitionDeclaration + name CalculationBody + nonterminal_rule + CalculationUsage + abstract_element CalculationUsage + sequence + name OccurrenceUsagePrefix + terminal 'calc' + name ActionUsageDeclaration + name CalculationBody + nonterminal_rule + CalculationBody + abstract_element Type + alternation + terminal ';' + sequence + terminal '{' + name CalculationBodyPart + terminal '}' + nonterminal_rule + CalculationBodyPart + abstract_element Type + sequence + expression + name CalculationBodyItem + repetition * + expression + prop_list_append + prop_name ownedRelationship + name ResultExpressionMember + repetition ? + nonterminal_rule + CalculationBodyItem + abstract_element Type + alternation + name ActionBodyItem + prop_list_append + prop_name ownedRelationship + name ReturnParameterMember + nonterminal_rule + ReturnParameterMember + abstract_element ReturnParameterMembership + sequence + expression + name MemberPrefix + repetition ? + terminal 'return' + prop_list_append + prop_name ownedRelatedElement + name UsageElement + nonterminal_rule + ResultExpressionMember + abstract_element ResultExpressionMembership + sequence + expression + name MemberPrefix + repetition ? + prop_list_append + prop_name ownedRelatedElement + name OwnedExpression + line_comment // Clause 8.2.2.20 Constraints Textual Notation + nonterminal_rule + ConstraintDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'constraint' + terminal 'def' + name DefinitionDeclaration + name CalculationBody + nonterminal_rule + ConstraintUsage + sequence + name OccurrenceUsagePrefix + terminal 'constraint' + name ConstraintUsageDeclaration + name CalculationBody + nonterminal_rule + AssertConstraintUsage + sequence + name OccurrenceUsagePrefix + terminal 'assert' + expression + boolean_prop_assign + prop_name isNegated + terminal 'not' + repetition ? + alternation + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecializationPart + repetition ? + sequence + terminal 'constraint' + name ConstraintUsageDeclaration + name CalculationBody + nonterminal_rule + ConstraintUsageDeclaration + abstract_element ConstraintUsage + sequence + name UsageDeclaration + expression + name ValuePart + repetition ? + line_comment // Clause 8.2.2.21 Requirements Textual Notation + line_comment // Clause 8.2.2.21.1 Requirement Definitions + nonterminal_rule + RequirementDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'requirement' + terminal 'def' + name DefinitionDeclaration + name RequirementBody + nonterminal_rule + RequirementBody + abstract_element Type + alternation + terminal ';' + sequence + terminal '{' + expression + name RequirementBodyItem + repetition * + terminal '}' + nonterminal_rule + RequirementBodyItem + abstract_element Type + alternation + name DefinitionBodyItem + prop_list_append + prop_name ownedRelationship + name SubjectMember + prop_list_append + prop_name ownedRelationship + name RequirementConstraintMember + prop_list_append + prop_name ownedRelationship + name FramedConcernMember + prop_list_append + prop_name ownedRelationship + name RequirementVerificationMember + prop_list_append + prop_name ownedRelationship + name ActorMember + prop_list_append + prop_name ownedRelationship + name StakeholderMember + nonterminal_rule + SubjectMember + abstract_element SubjectMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name SubjectUsage + nonterminal_rule + SubjectUsage + abstract_element ReferenceUsage + sequence + terminal 'subject' + expression + name UsageExtensionKeyword + repetition * + name Usage + nonterminal_rule + RequirementConstraintMember + abstract_element RequirementConstraintMembership + sequence + expression + name MemberPrefix + repetition ? + name RequirementKind + prop_list_append + prop_name ownedRelatedElement + name RequirementConstraintUsage + nonterminal_rule + RequirementKind + abstract_element RequirementConstraintMembership + alternation + sequence + terminal 'assume' + nonparsing_prop_assign + prop_name kind + terminal 'assumption' + sequence + terminal 'require' + nonparsing_prop_assign + prop_name kind + terminal 'requirement' + nonterminal_rule + RequirementConstraintUsage + abstract_element ConstraintUsage + alternation + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecializationPart + repetition ? + name RequirementBody + sequence + alternation + sequence + expression + name UsageExtensionKeyword + repetition * + terminal 'constraint' + expression + name UsageExtensionKeyword + repetition + + name ConstraintUsageDeclaration + name CalculationBody + nonterminal_rule + FramedConcernMember + abstract_element FramedConcernMembership + sequence + expression + name MemberPrefix + repetition ? + terminal 'frame' + prop_list_append + prop_name ownedRelatedElement + name FramedConcernUsage + nonterminal_rule + FramedConcernUsage + abstract_element ConcernUsage + alternation + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecializationPart + repetition ? + name CalculationBody + sequence + alternation + sequence + expression + name UsageExtensionKeyword + repetition * + terminal 'concern' + expression + name UsageExtensionKeyword + repetition + + name CalculationUsageDeclaration + name CalculationBody + nonterminal_rule + ActorMember + abstract_element ActorMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name ActorUsage + nonterminal_rule + ActorUsage + abstract_element PartUsage + sequence + terminal 'actor' + expression + name UsageExtensionKeyword + repetition * + name Usage + nonterminal_rule + StakeholderMember + abstract_element StakeholderMembership + sequence + name MemberPrefix + prop_list_append + prop_name ownedRelatedElement + name StakeholderUsage + nonterminal_rule + StakeholderUsage + abstract_element PartUsage + sequence + terminal 'stakeholder' + expression + name UsageExtensionKeyword + repetition * + name Usage + line_comment // Clause 8.2.2.21.2 Requirement Usages + nonterminal_rule + RequirementUsage + sequence + name OccurrenceUsagePrefix + terminal 'requirement' + name ConstraintUsageDeclaration + name RequirementBody + nonterminal_rule + SatisfyRequirementUsage + sequence + name OccurrenceUsagePrefix + terminal 'assert' + boolean_prop_assign + prop_name isNegated + terminal 'not' + terminal 'satisfy' + alternation + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecializationPart + repetition ? + sequence + terminal 'requirement' + name UsageDeclaration + expression + name ValuePart + repetition ? + expression + sequence + terminal 'by' + prop_list_append + prop_name ownedRelationship + name SatisfactionSubjectMember + repetition ? + name RequirementBody + nonterminal_rule + SatisfactionSubjectMember + abstract_element SubjectMembership + prop_list_append + prop_name ownedRelatedElement + name SatisfactionParameter + nonterminal_rule + SatisfactionParameter + abstract_element ReferenceUsage + prop_list_append + prop_name ownedRelationship + name SatisfactionFeatureValue + nonterminal_rule + SatisfactionFeatureValue + abstract_element FeatureValue + prop_list_append + prop_name ownedRelatedElement + name SatisfactionReferenceExpression + nonterminal_rule + SatisfactionReferenceExpression + abstract_element FeatureReferenceExpression + prop_list_append + prop_name ownedRelationship + name FeatureChainMember + line_comment // Clause 8.2.2.21.3 Concerns + nonterminal_rule + ConcernDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'concern' + terminal 'def' + name DefinitionDeclaration + name RequirementBody + nonterminal_rule + ConcernUsage + sequence + name OccurrenceUsagePrefix + terminal 'concern' + name ConstraintUsageDeclaration + name RequirementBody + line_comment // Clause 8.2.2.22 Cases Textual Notation + nonterminal_rule + CaseDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'case' + terminal 'def' + name DefinitionDeclaration + name CaseBody + nonterminal_rule + CaseUsage + sequence + name OccurrenceUsagePrefix + terminal 'case' + name ConstraintUsageDeclaration + name CaseBody + nonterminal_rule + CaseBody + abstract_element Type + alternation + terminal ';' + sequence + terminal '{' + expression + name CaseBodyItem + repetition * + expression + prop_list_append + prop_name ownedRelationship + name ResultExpressionMember + repetition ? + terminal '}' + nonterminal_rule + CaseBodyItem + abstract_element Type + alternation + name ActionBodyItem + prop_list_append + prop_name ownedRelationship + name SubjectMember + prop_list_append + prop_name ownedRelationship + name ActorMember + prop_list_append + prop_name ownedRelationship + name ObjectiveMember + nonterminal_rule + ObjectiveMember + abstract_element ObjectiveMembership + sequence + name MemberPrefix + terminal 'objective' + prop_list_append + prop_name ownedRelatedElement + name ObjectiveRequirementUsage + nonterminal_rule + ObjectiveRequirementUsage + abstract_element RequirementUsage + sequence + expression + name UsageExtensionKeyword + repetition * + name ConstraintUsageDeclaration + name RequirementBody + line_comment // Clause 8.2.2.23 Analysis Cases Textual Notation + nonterminal_rule + AnalysisCaseDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'analysis' + terminal 'def' + name DefinitionDeclaration + name CaseBody + nonterminal_rule + AnalysisCaseUsage + sequence + name OccurrenceUsagePrefix + terminal 'analysis' + name ConstraintUsageDeclaration + name CaseBody + line_comment // Clause 8.2.2.24 Verification Cases Textual Notation + nonterminal_rule + VerificationCaseDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'verification' + terminal 'def' + name DefinitionDeclaration + name CaseBody + nonterminal_rule + VerificationCaseUsage + sequence + name OccurrenceUsagePrefix + terminal 'verification' + name ConstraintUsageDeclaration + name CaseBody + nonterminal_rule + RequirementVerificationMember + abstract_element RequirementVerificationMembership + sequence + name MemberPrefix + terminal 'verify' + nonparsing_prop_assign + prop_name kind + terminal 'requirement' + prop_list_append + prop_name ownedRelatedElement + name RequirementVerificationUsage + nonterminal_rule + RequirementVerificationUsage + abstract_element RequirementUsage + alternation + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecialization + repetition * + name RequirementBody + sequence + alternation + sequence + expression + name UsageExtensionKeyword + repetition * + terminal 'requirement' + expression + name UsageExtensionKeyword + repetition + + name ConstraintUsageDeclaration + name RequirementBody + line_comment // Clause 8.2.2.25 Use Cases Textual Notation + nonterminal_rule + UseCaseDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'use' + terminal 'case' + terminal 'def' + name DefinitionDeclaration + name CaseBody + nonterminal_rule + UseCaseUsage + sequence + name OccurrenceUsagePrefix + terminal 'use' + terminal 'case' + name ConstraintUsageDeclaration + name CaseBody + nonterminal_rule + IncludeUseCaseUsage + sequence + name OccurrenceUsagePrefix + terminal 'include' + alternation + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecializationPart + repetition ? + sequence + terminal 'use' + terminal 'case' + name UsageDeclaration + expression + name ValuePart + repetition ? + name CaseBody + line_comment // Clause 8.2.2.26 Views and Viewpoints Textual Notation + line_comment // Clause 8.2.2.26.1 View Definitions + nonterminal_rule + ViewDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'view' + terminal 'def' + name DefinitionDeclaration + name ViewDefinitionBody + nonterminal_rule + ViewDefinitionBody + abstract_element ViewDefinition + alternation + terminal ';' + sequence + terminal '{' + expression + name ViewDefinitionBodyItem + repetition * + terminal '}' + nonterminal_rule + ViewDefinitionBodyItem + abstract_element ViewDefinition + alternation + name DefinitionBodyItem + prop_list_append + prop_name ownedRelationship + name ElementFilterMember + prop_list_append + prop_name ownedRelationship + name ViewRenderingMember + nonterminal_rule + ViewRenderingMember + abstract_element ViewRenderingMembership + sequence + name MemberPrefix + terminal 'render' + prop_list_append + prop_name ownedRelatedElement + name ViewRenderingUsage + nonterminal_rule + ViewRenderingUsage + abstract_element RenderingUsage + alternation + sequence + prop_list_append + prop_name ownedRelationship + name OwnedReferenceSubsetting + expression + name FeatureSpecializationPart + repetition ? + name UsageBody + sequence + alternation + sequence + expression + name UsageExtensionKeyword + repetition * + terminal 'rendering' + expression + name UsageExtensionKeyword + repetition + + name Usage + line_comment // Clause 8.2.2.26.2 View Usages + nonterminal_rule + ViewUsage + sequence + name OccurrenceUsagePrefix + terminal 'view' + expression + name UsageDeclaration + repetition ? + expression + name ValuePart + repetition ? + name ViewBody + nonterminal_rule + ViewBody + abstract_element ViewUsage + alternation + terminal ';' + sequence + terminal '{' + expression + name ViewBodyItem + repetition * + terminal '}' + nonterminal_rule + ViewBodyItem + abstract_element ViewUsage + alternation + name DefinitionBodyItem + prop_list_append + prop_name ownedRelationship + name ElementFilterMember + prop_list_append + prop_name ownedRelationship + name ViewRenderingMember + prop_list_append + prop_name ownedRelationship + name Expose + nonterminal_rule + Expose + sequence + terminal 'expose' + alternation + name MembershipExpose + name NamespaceExpose + name RelationshipBody + nonterminal_rule + MembershipExpose + name MembershipImport + nonterminal_rule + NamespaceExpose + name NamespaceImport + line_comment // Clause 8.2.2.26.3 Viewpoints + nonterminal_rule + ViewpointDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'viewpoint' + terminal 'def' + name DefinitionDeclaration + name RequirementBody + nonterminal_rule + ViewpointUsage + sequence + name OccurrenceUsagePrefix + terminal 'viewpoint' + name ConstraintUsageDeclaration + name RequirementBody + line_comment // Clause 8.2.2.26.4 Renderings + nonterminal_rule + RenderingDefinition + sequence + name OccurrenceDefinitionPrefix + terminal 'rendering' + terminal 'def' + name Definition + nonterminal_rule + RenderingUsage + sequence + name OccurrenceUsagePrefix + terminal 'rendering' + name Usage + line_comment // Clause 8.2.2.27 Metadata Textual Notation + nonterminal_rule + MetadataDefinition + sequence + expression + boolean_prop_assign + prop_name isAbstract + terminal 'abstract' + repetition ? + expression + name DefinitionExtensionKeyword + repetition * + terminal 'metadata' + terminal 'def' + name Definition + nonterminal_rule + PrefixMetadataAnnotation + abstract_element Annotation + sequence + terminal '#' + prop_assign + prop_name annotatingElement + name PrefixMetadataUsage + nonparsing_prop_list_append + prop_name ownedRelatedElement + prop_name annotatingElement + nonterminal_rule + PrefixMetadataMember + abstract_element OwningMembership + sequence + terminal '#' + prop_assign + prop_name ownedRelatedElement + name PrefixMetadataUsage + nonterminal_rule + PrefixMetadataUsage + abstract_element MetadataUsage + prop_list_append + prop_name ownedRelationship + name OwnedFeatureTyping + nonterminal_rule + MetadataUsage + sequence + expression + name UsageExtensionKeyword + repetition * + alternation + terminal '@' + terminal 'metadata' + name MetadataUsageDeclaration + expression + sequence + terminal 'about' + prop_list_append + prop_name ownedRelationship + name Annotation + expression + sequence + terminal ',' + prop_list_append + prop_name ownedRelationship + name Annotation + repetition * + repetition ? + name MetadataBody + nonterminal_rule + MetadataUsageDeclaration + abstract_element MetadataUsage + sequence + expression + sequence + name Identification + alternation + terminal ':' + sequence + terminal 'typed' + terminal 'by' + repetition ? + prop_list_append + prop_name ownedRelationship + name OwnedFeatureTyping + nonterminal_rule + MetadataBody + abstract_element Type + alternation + terminal ';' + sequence + terminal '{' + expression + alternation + prop_list_append + prop_name ownedRelationship + name DefinitionMember + prop_list_append + prop_name ownedRelationship + name MetadataBodyUsageMember + prop_list_append + prop_name ownedRelationship + name AliasMember + prop_list_append + prop_name ownedRelationship + name Import + repetition * + terminal '}' + nonterminal_rule + MetadataBodyUsageMember + abstract_element FeatureMembership + prop_assign + prop_name ownedMemberFeature + name MetadataBodyUsage + nonterminal_rule + MetadataBodyUsage + abstract_element ReferenceUsage + sequence + expression + terminal 'ref' + repetition ? + expression + alternation + terminal ':>>' + terminal 'redefines' + repetition ? + prop_list_append + prop_name ownedRelationship + name OwnedRedefinition + expression + name FeatureSpecializationPart + repetition ? + expression + name ValuePart + repetition ? + name MetadataBody + nonterminal_rule + ExtendedDefinition + abstract_element Definition + sequence + expression + name BasicDefinitionPrefix + repetition ? + expression + name DefinitionExtensionKeyword + repetition + + terminal 'def' + name Definition + nonterminal_rule + ExtendedUsage + abstract_element Usage + sequence + name UnextendedUsagePrefix + expression + name UsageExtensionKeyword + repetition + + name Usage + line_comment // End of BNF + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_grammar_processor--corrected.log b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_grammar_processor--corrected.log new file mode 100644 index 000000000..0c96b2598 --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_grammar_processor--corrected.log @@ -0,0 +1,256 @@ +WARNING : Processing syntax_kind=kerml-library for ../../sysml.library/Kernel Libraries/Kernel Semantic Library/KerML.kerml clause=None is not yet implemented +WARNING : Processing syntax_kind=sysml-library for ../../sysml.library/Systems Library/SysML.sysml clause=None is not yet implemented +INFO : ==================== +INFO : Processing BNF from tests\KerML_and_SysML_grammars\KerML-textual-bnf-corrected-marked_up.kebnf syntax-kind=textual-bnf clause=8.2 at 2025-12-04T19:29:18Z +INFO : ==================== +INFO : Processing clause id= title=- Kernel Modeling Language (KerML) +INFO : Processing clause id=8.2 title=Concrete Syntax +INFO : Processing clause id=8.2.1 title=Concrete Syntax Overview +INFO : Processing clause id=8.2.2 title=Lexical Structure +INFO : Processing clause id=8.2.2.1 title=Line Terminators and White Space +INFO : Processing clause id=8.2.2.2 title=Notes and Comments +INFO : Processing clause id=8.2.2.3 title=Names +INFO : Processing clause id=8.2.2.4 title=Numeric Values +INFO : Processing clause id=8.2.2.5 title=String Value +INFO : Processing clause id=8.2.2.6 title=Reserved Words +INFO : Processing clause id=8.2.2.7 title=Symbols +INFO : Processing clause id=8.2.3 title=Root Concrete Syntax +INFO : Processing clause id=8.2.3.1 title=Elements and Relationships Concrete Syntax +INFO : Processing clause id=8.2.3.2 title=Dependencies Concrete Syntax +INFO : Processing clause id=8.2.3.3 title=Annotations Concrete Syntax +INFO : Processing clause id=8.2.3.3.1 title=Annotations +INFO : Processing clause id=8.2.3.3.2 title=Comments and Documentation +INFO : Processing clause id=8.2.3.3.3 title=Textual Representation +INFO : Processing clause id=8.2.3.4 title=Namespaces Concrete Syntax +INFO : Processing clause id=8.2.3.4.1 title=Namespaces +INFO : Processing clause id=8.2.3.4.2 title=Imports +INFO : Processing clause id=8.2.3.4.3 title=Namespace Elements +INFO : Processing clause id=8.2.3.5 title=Name Resolution +INFO : Processing clause id=8.2.3.5.1 title=Name Resolution Overview +INFO : Processing clause id=8.2.3.5.2 title=Local and Global Namespaces +INFO : Processing clause id=8.2.3.5.3 title=Local and Visible Resolution +INFO : Processing clause id=8.2.3.5.4 title=Full Resolution +INFO : Processing clause id=8.2.4 title=Core Concrete Syntax +INFO : Processing clause id=8.2.4.1 title=Types Concrete Syntax +INFO : Processing clause id=8.2.4.1.1 title=Types +INFO : Processing clause id=8.2.4.1.2 title=Specialization +INFO : Processing clause id=8.2.4.1.3 title=Conjugation +INFO : Processing clause id=8.2.4.1.4 title=Disjoining +INFO : Processing clause id=8.2.4.1.5 title=Unioning, Intersecting and Differencing +INFO : Processing clause id=8.2.4.1.6 title=Feature Membership +INFO : Processing clause id=8.2.4.2 title=Classifiers Concrete Syntax +INFO : Processing clause id=8.2.4.2.1 title=Classifiers +INFO : Processing clause id=8.2.4.2.2 title=Subclassification +INFO : Processing clause id=8.2.4.3 title=Features Concrete Syntax +INFO : Processing clause id=8.2.4.3.1 title=Features +INFO : Processing clause id=8.2.4.3.2 title=Feature Typing +INFO : Processing clause id=8.2.4.3.3 title=Subsetting +INFO : Processing clause id=8.2.4.3.4 title=Redefinition +INFO : Processing clause id=8.2.4.3.5 title=Feature Chaining +INFO : Processing clause id=8.2.4.3.6 title=Feature Inverting +INFO : Processing clause id=8.2.4.3.7 title=Type Featuring +INFO : Processing clause id=8.2.5 title=Kernel Concrete Syntax +INFO : Processing clause id=8.2.5.1 title=Data Types Concrete Syntax +INFO : Processing clause id=8.2.5.2 title=Classes Concrete Syntax +INFO : Processing clause id=8.2.5.3 title=Structures Concrete Syntax +INFO : Processing clause id=8.2.5.4 title=Associations Concrete Syntax +INFO : Processing clause id=8.2.5.5 title=Connectors Concrete Syntax +INFO : Processing clause id=8.2.5.5.1 title=Connectors +INFO : Processing clause id=8.2.5.5.2 title=Binding Connectors +INFO : Processing clause id=8.2.5.5.3 title=Successions +INFO : Processing clause id=8.2.5.6 title=Behaviors Concrete Syntax +INFO : Processing clause id=8.2.5.6.1 title=Behaviors +INFO : Processing clause id=8.2.5.6.2 title=Steps +INFO : Processing clause id=8.2.5.7 title=Functions Concrete Syntax +INFO : Processing clause id=8.2.5.7.1 title=Functions +INFO : Processing clause id=8.2.5.7.2 title=Expressions +INFO : Processing clause id=8.2.5.7.3 title=Predicates +INFO : Processing clause id=8.2.5.7.4 title=Boolean Expressions and Invariants +INFO : Processing clause id=8.2.5.8 title=Expressions Concrete Syntax +INFO : Processing clause id=8.2.5.8.1 title=Operator Expressions +INFO : Processing clause id=8.2.5.8.2 title=Primary Expressions +INFO : Processing clause id=8.2.5.8.3 title=Base Expressions +INFO : Processing clause id=8.2.5.8.4 title=Literal Expressions +INFO : Processing clause id=8.2.5.9 title=Interactions Concrete Syntax +INFO : Processing clause id=8.2.5.9.1 title=Interactions +INFO : Processing clause id=8.2.5.9.2 title=Flows +INFO : Processing clause id=8.2.5.10 title=Feature Values Concrete Syntax +INFO : Processing clause id=8.2.5.11 title=Multiplicities Concrete Syntax +INFO : Processing clause id=8.2.5.12 title=Metadata Concrete Syntax +INFO : Processing clause id=8.2.5.13 title=Packages Concrete Syntax +INFO : Completed parsing tests\KerML_and_SysML_grammars\KerML-textual-bnf-corrected-marked_up.kebnf +INFO : Dumping BNF grammar elements into tests\KerML_and_SysML_grammars\KerML-textual-bnf-corrected-elements.json +INFO : Writing BNF grammar file tests\KerML_and_SysML_grammars\KerML-textual-bnf-corrected.kebnf +INFO : Writing BNF HTML file tests\KerML_and_SysML_grammars\KerML-textual-bnf-corrected.html +WARNING : Tokenize: Space inside TERMINAL ' ' in line ' ' | '\t' | '\f' | LINE_TERMINATOR +WARNING : Tokenize: Space inside TERMINAL 'any printable character other than backslash or single_quote' in line 'any printable character other than backslash or single_quote' +WARNING : Tokenize: Space inside TERMINAL 'any printable character other than backslash or "' in line 'any printable character other than backslash or "' +WARNING : Grammar KerML-textual-bnf-corrected contains 1 unresolved non-terminal(s) ... +ERROR : Cannot resolve InvocationTypeMember in + 8.2.5.8.2: ownedRelationship += InvocationTypeMember +INFO : ==================== +INFO : Processing BNF from tests\KerML_and_SysML_grammars\SysML-textual-bnf-corrected-marked_up.kebnf syntax-kind=textual-bnf clause=8.2.2 at 2025-12-04T19:29:18Z +INFO : ==================== +INFO : Processing clause id= title=- Systems Modeling Language (SysML) +INFO : Processing clause id=8.2.2 title=Textual Notation +INFO : Processing clause id=8.2.2.1 title=Textual Notation Overview +INFO : Processing clause id=8.2.2.1.1 title=EBNF Conventions +INFO : Processing clause id=8.2.2.1.2 title=Lexical Structure +INFO : Processing clause id=8.2.2.2 title=Elements and Relationships Textual Notation +INFO : Processing clause id=8.2.2.3 title=Dependencies Textual Notation +INFO : Processing clause id=8.2.2.4 title=Annotations Textual Notation +INFO : Processing clause id=8.2.2.4.1 title=Annotations +INFO : Processing clause id=8.2.2.4.2 title=Comments and Documentation +INFO : Processing clause id=8.2.2.4.3 title=Textual Representation +INFO : Processing clause id=8.2.2.5 title=Namespaces and Packages Textual Notation +INFO : Processing clause id=8.2.2.5.1 title=Packages +INFO : Processing clause id=8.2.2.5.2 title=Package Elements +INFO : Processing clause id=8.2.2.6 title=Definition and Usage Textual Notation +INFO : Processing clause id=8.2.2.6.1 title=Definitions +INFO : Processing clause id=8.2.2.6.2 title=Usages +INFO : Processing clause id=8.2.2.6.3 title=Reference Usages +INFO : Processing clause id=8.2.2.6.4 title=Body Elements +INFO : Processing clause id=8.2.2.6.5 title=Specialization +INFO : Processing clause id=8.2.2.6.6 title=Multiplicity +INFO : Processing clause id=8.2.2.7 title=Attributes Textual Notation +INFO : Processing clause id=8.2.2.8 title=Enumerations Textual Notation +INFO : Processing clause id=8.2.2.9 title=Occurrences Textual Notation +INFO : Processing clause id=8.2.2.9.1 title=Occurrence Definitions +INFO : Processing clause id=8.2.2.9.2 title=Occurrence Usages +INFO : Processing clause id=8.2.2.9.3 title=Occurrence Successions +INFO : Processing clause id=8.2.2.10 title=Items Textual Notation +INFO : Processing clause id=8.2.2.11 title=Parts Textual Notation +INFO : Processing clause id=8.2.2.12 title=Ports Textual Notation +INFO : Processing clause id=8.2.2.13 title=Connections Textual Notation +INFO : Processing clause id=8.2.2.13.1 title=Connection Definition and Usage +INFO : Processing clause id=8.2.2.13.2 title=Binding Connectors +INFO : Processing clause id=8.2.2.13.3 title=Successions +INFO : Processing clause id=8.2.2.14 title=Interfaces Textual Notation +INFO : Processing clause id=8.2.2.14.1 title=Interface Definitions +INFO : Processing clause id=8.2.2.14.2 title=Interface Usages +INFO : Processing clause id=8.2.2.15 title=Allocations Textual Notation +INFO : Processing clause id=8.2.2.16 title=Flows Textual Notation +INFO : Processing clause id=8.2.2.17 title=Actions Textual Notation +INFO : Processing clause id=8.2.2.17.1 title=Action Definitions +INFO : Processing clause id=8.2.2.17.2 title=Action Usages +INFO : Processing clause id=8.2.2.17.3 title=Control Nodes +INFO : Processing clause id=8.2.2.17.4 title=Send and Accept Action Usages +INFO : Processing clause id=8.2.2.17.5 title=Assignment Action Usages +INFO : Processing clause id=8.2.2.17.6 title=Terminate Action Usages +INFO : Processing clause id=8.2.2.17.7 title=Structured Control Action Usages +INFO : Processing clause id=8.2.2.17.8 title=Action Successions +INFO : Processing clause id=8.2.2.18 title=States Textual Notation +INFO : Processing clause id=8.2.2.18.1 title=State Definitions +INFO : Processing clause id=8.2.2.18.2 title=State Usages +INFO : Processing clause id=8.2.2.18.3 title=Transition Usages +INFO : Processing clause id=8.2.2.19 title=Calculations Textual Notation +INFO : Processing clause id=8.2.2.20 title=Constraints Textual Notation +INFO : Processing clause id=8.2.2.21 title=Requirements Textual Notation +INFO : Processing clause id=8.2.2.21.1 title=Requirement Definitions +INFO : Processing clause id=8.2.2.21.2 title=Requirement Usages +INFO : Processing clause id=8.2.2.21.3 title=Concerns +INFO : Processing clause id=8.2.2.22 title=Cases Textual Notation +INFO : Processing clause id=8.2.2.23 title=Analysis Cases Textual Notation +INFO : Processing clause id=8.2.2.24 title=Verification Cases Textual Notation +INFO : Processing clause id=8.2.2.25 title=Use Cases Textual Notation +INFO : Processing clause id=8.2.2.26 title=Views and Viewpoints Textual Notation +INFO : Processing clause id=8.2.2.26.1 title=View Definitions +INFO : Processing clause id=8.2.2.26.2 title=View Usages +INFO : Processing clause id=8.2.2.26.3 title=Viewpoints +INFO : Processing clause id=8.2.2.26.4 title=Renderings +INFO : Processing clause id=8.2.2.27 title=Metadata Textual Notation +INFO : Completed parsing tests\KerML_and_SysML_grammars\SysML-textual-bnf-corrected-marked_up.kebnf +INFO : Dumping BNF grammar elements into tests\KerML_and_SysML_grammars\SysML-textual-bnf-corrected-elements.json +INFO : Writing BNF grammar file tests\KerML_and_SysML_grammars\SysML-textual-bnf-corrected.kebnf +INFO : Writing BNF HTML file tests\KerML_and_SysML_grammars\SysML-textual-bnf-corrected.html +WARNING : Grammar SysML-textual-bnf-corrected contains 2 unresolved non-terminal(s) ... +ERROR : Cannot resolve CalculationUsageDeclaration in + 8.2.2.21.1: CalculationUsageDeclaration CalculationBody +ERROR : Cannot resolve FilterPackageImport in + 8.2.2.5.1: ownedRelationship += FilterPackageImport +INFO : ==================== +INFO : Processing BNF from tests\KerML_and_SysML_grammars\SysML-graphical-bnf-corrected-marked_up.kgbnf syntax-kind=graphical-bnf clause=8.2.3 at 2025-12-04T19:29:18Z +INFO : ==================== +INFO : Processing clause id= title=- Systems Modeling Language (SysML) +INFO : Processing clause id=8.2.3 title=Graphical Notation +INFO : Processing clause id=8.2.3.1 title=Graphical Notation Overview +INFO : Processing clause id=8.2.3.2 title=Elements and Relationships Graphical Notation +INFO : Processing clause id=8.2.3.3 title=Dependencies Graphical Notation +INFO : Processing clause id=8.2.3.4 title=Annotations Graphical Notation +INFO : Processing clause id=8.2.3.5 title=Namespaces and Packages Graphical Notation +INFO : Processing clause id=8.2.3.6 title=Definition and Usage Graphical Notation +INFO : Processing clause id=8.2.3.7 title=Attributes Graphical Notation +INFO : Processing clause id=8.2.3.8 title=Enumerations Graphical Notation +INFO : Processing clause id=8.2.3.9 title=Occurrences Graphical Notation +ERROR : Non-unique production name: succession-label in {'general-node', 'event-occurrence', 'individuals-compartment-element', 'n-ary-dependency-supplier-link', 'timeslice-or-snapshot-node', 'comment-node', 'extended-usage-name-compartment', 'n-ary-dependency-client-link', 'definition-node', 'sq-port-label', 'attribute-def', 'package-with-name-in-tab', 'subsetting', 'relationships-compartment', 'element-inside-textual-compartment', 'members-compartment-contents', 'annotated-element', 'unowned-membership', 'succession-label', 'annotation-node', 'sq-graphical-node', 'imported-package-with-name-inside', 'text-block', 'usage-cp', 'individuals-compartment-contents', 'relationships-compartment-element', 'definition', 'features-compartment-contents', 'timeslices-compartment-contents', 'snapshots-name-compartment', 'sq-head-node', 'members-compartment-element', 'definition-name-with-alias', 'reference-subsetting', 'timeslices-compartment', 'sq-part', 'dependencies-and-annotations-element', 'event-occurrence-def-name-compartment', 'el-prefix', 'annotation-link', 'n-ary-dependency-client-or-supplier-link', 'occurrence-def', 'textual-representation-node', 'timeslice', 'snapshots-compartment-contents', 'subclassification', 'snapshots-compartment', 'extended-def-name-compartment', 'sequence-compartment', 'enumeration-def', 'n-ary-dependency', 'enums-compartment-element', 'binary-dependency', 'type-node', 'package-with-name-inside', 'sequence-view', 'features-compartment-element', 'ellipsis-at-lower-left-corner', 'members-compartment', 'sq-l-node', 'enums-compartment', 'documentation-compartment', 'general-compartment', 'occurrence-name-compartment', 'snapshot', 'import', 'variants-compartment-contents', 'occurrences-compartment-contents', 'attribute', 'documentation-node', 'comment-without-keyword', 'timeslices-compartment-element', 'comment-with-keyword', 'packages-compartment-element', 'attribute-def-name-compartment', 'rel-name', 'general-element', 'general-view', 'element-node', 'general-relationship', 'variant-elementusages-compartment', 'event-occurrence-name-compartment', 'variants-compartment', 'sq-graphical-element', 'element', 'occurrence-ref', 'sq-port', 'owned-membership', 'features-compartment', 'attributes-compartment-contents', 'timeslice-name-compartment', 'namespace-node', 'type-relationship', 'attributes-compartment-element', 'snapshots-compartment-element', 'occurrence', 'lifeline', 'sq-succession', 'recursive-import', 'individuals-compartment', 'occurrences-compartment', 'usage-name-with-alias', 'extended-def', 'noncomposite-feature-membership', 'enums-compartment-contents', 'enumeration-def-name-compartment', 'n-ary-association-dot', 'compartment', 'redefinition', 'sq-proxy', 'eventer', 'compartment-stack', 'attributes-compartment', 'package-compartment', 'occurrence-def-name-compartment', 'proxy-label', 'language-string', 'package-node', 'usage-node', 'portion-relationship', 'relationship-name', 'composite-feature-membership', 'event-edge', 'packages-compartment', 'enumeration', 'extended-usage', 'imported-package-with-name-in-tab', 'enumeration-name-compartment', 'sq-graphical-relationship', 'top-level-import', 'dependencies-element', 'attribute-name-compartment', 'relationships-compartment-contents', 'event-occurrence-def', 'packages-compartment-contents', 'occurrences-compartment-element'} +INFO : Processing clause id=8.2.3.10 title=Items Graphical Notation +INFO : Processing clause id=8.2.3.11 title=Parts Graphical Notation +INFO : Processing clause id=8.2.3.12 title=Ports Graphical Notation +INFO : Processing clause id=8.2.3.13 title=Connections Graphical Notation +INFO : Processing clause id=8.2.3.14 title=Interfaces Graphical Notation +INFO : Processing clause id=8.2.3.15 title=Allocations Graphical Notation +INFO : Processing clause id=8.2.3.16 title=Flows Graphical Notation +ERROR : Non-unique production name: flow-node in {'items-compartment-element', 'proxy-h', 'general-node', 'event-occurrence', 'connection-usage-elaboration', 'individuals-compartment-element', 'message-label', 'n-ary-segment', 'binding-connection', 'n-ary-dependency-supplier-link', 'timeslice-or-snapshot-node', 'connection-def-graphical', 'comment-node', 'extended-usage-name-compartment', 'multiplicity', 'n-ary-dependency-client-link', 'n-ary-connection-dot', 'definition-node', 'a-redefinition', 'sq-port-label', 'attribute-def', 'ports-compartment-contents', 'item', 'parts-compartment-element', 'connection-def-name-compartment', 'package-with-name-in-tab', 'parts-compartment-contents', 'message', 'subsetting', 'relationships-compartment', 'connections-compartment-element', 'ports-compartment-element', 'element-inside-textual-compartment', 'connection-def', 'members-compartment-contents', 'part-def', 'directed-features-compartment-element', 'annotated-element', 'unowned-membership', 'succession-label', 'annotation-node', 'part-name-compartment', 'sq-graphical-node', 'imported-package-with-name-inside', 'text-block', 'usage-cp', 'individuals-compartment-contents', 'port-def-name-compartment', 'interface-label', 'relationships-compartment-element', 'definition', 'features-compartment-contents', 'timeslices-compartment-contents', 'snapshots-name-compartment', 'sq-head-node', 'members-compartment-element', 'n-ary-def-segment', 'definition-name-with-alias', 'connections-compartment', 'msg-end-node', 'reference-subsetting', 'flow', 'timeslices-compartment', 'flows-compartment-element', 'allocation-def-name-compartment', 'connection-name-compartment', 'sq-part', 'interfaces-compartment-contents', 'flow-label', 'n-ary-connection', 'dependencies-and-annotations-element', 'event-occurrence-def-name-compartment', 'proxy-v', 'connection-label', 'el-prefix', 'pdv', 'port-l', 'annotation-link', 'n-ary-dependency-client-or-supplier-link', 'succession-flow', 'occurrence-def', 'textual-representation-node', 'timeslice', 'snapshots-compartment-contents', 'port-usage', 'subclassification', 'ports-compartment', 'flow-def', 'interface', 'snapshots-compartment', 'extended-def-name-compartment', 'sequence-compartment', 'enumeration-def', 'n-ary-dependency', 'connection-graphical', 'enums-compartment-element', 'binary-dependency', 'allocations-compartment', 'interfaces-compartment', 'type-node', 'package-with-name-inside', 'n-ary-def-connection-dot', 'sequence-view', 'features-compartment-element', 'allocations-compartment-element', 'flow-on-connection', 'parts-compartment', 'ellipsis-at-lower-left-corner', 'port-b', 'members-compartment', 'item-ref', 'sq-l-node', 'enums-compartment', 'allocation-name-compartment', 'documentation-compartment', 'general-compartment', 'occurrence-name-compartment', 'snapshot', 'import', 'variants-compartment-contents', 'occurrences-compartment-contents', 'attribute', 'documentation-node', 'comment-without-keyword', 'part', 'interface-def', 'allocate-relationship', 'timeslices-compartment-element', 'comment-with-keyword', 'packages-compartment-element', 'a-property', 'attribute-def-name-compartment', 'port-r', 'rel-name', 'general-element', 'general-view', 'element-node', 'general-relationship', 'variant-elementusages-compartment', 'interface-def-name-compartment', 'ends-compartment', 'event-occurrence-name-compartment', 'directed-features-compartment', 'variants-compartment', 'a-direction', 'sq-graphical-element', 'connection-relationship', 'flow-name-compartment', 'element', 'occurrence-ref', 'sq-port', 'cdot-label', 'interfaces-compartment-element', 'part-ref', 'items-compartment-contents', 'owned-membership', 'allocation-node', 'flows-compartment', 'features-compartment', 'flow-node', 'attributes-compartment-contents', 'timeslice-name-compartment', 'interconnection-view', 'namespace-node', 'allocation', 'type-relationship', 'succession-flow-label', 'item-name-compartment', 'attributes-compartment-element', 'connection', 'cdef-label', 'flow-def-name-compartment', 'pdh', 'snapshots-compartment-element', 'occurrence', 'lifeline', 'sq-succession', 'recursive-import', 'individuals-compartment', 'allocations-compartment-contents', 'occurrences-compartment', 'usage-name-with-alias', 'extended-def', 'noncomposite-feature-membership', 'enums-compartment-contents', 'enumeration-def-name-compartment', 'c-adornment', 'allocation-def', 'n-ary-association-dot', 'n-ary-connection-def', 'connections-compartment-contents', 'compartment', 'redefinition', 'directed-features-compartment-contents', 'sq-proxy', 'eventer', 'part-def-name-compartment', 'ends-compartment-contents', 'item-def', 'interconnection-element', 'compartment-stack', 'attributes-compartment', 'connection-end', 'package-compartment', 'port-label', 'a-subsetting', 'occurrence-def-name-compartment', 'proxy-label', 'usage-edge', 'language-string', 'port-t', 'package-node', 'flows-compartment-contents', 'usage-node', 'items-compartment', 'portion-relationship', 'relationship-name', 'composite-feature-membership', 'port-name-compartment', 'port-def', 'event-edge', 'rolename', 'item-def-name-compartment', 'interconnection-compartment', 'packages-compartment', 'ends-compartment-element', 'enumeration', 'extended-usage', 'imported-package-with-name-in-tab', 'enumeration-name-compartment', 'sq-graphical-relationship', 'connection-definition-elaboration', 'top-level-import', 'interface-name-compartment', 'interface-connection', 'dependencies-element', 'attribute-name-compartment', 'flow-end-node', 'relationships-compartment-contents', 'event-occurrence-def', 'packages-compartment-contents', 'occurrences-compartment-element'} +ERROR : Non-unique production name: flow-label in {'items-compartment-element', 'proxy-h', 'general-node', 'event-occurrence', 'connection-usage-elaboration', 'individuals-compartment-element', 'message-label', 'n-ary-segment', 'binding-connection', 'n-ary-dependency-supplier-link', 'timeslice-or-snapshot-node', 'connection-def-graphical', 'comment-node', 'extended-usage-name-compartment', 'multiplicity', 'n-ary-dependency-client-link', 'n-ary-connection-dot', 'definition-node', 'a-redefinition', 'sq-port-label', 'attribute-def', 'ports-compartment-contents', 'item', 'parts-compartment-element', 'connection-def-name-compartment', 'package-with-name-in-tab', 'parts-compartment-contents', 'message', 'sflow-node-r', 'subsetting', 'relationships-compartment', 'connections-compartment-element', 'ports-compartment-element', 'element-inside-textual-compartment', 'connection-def', 'members-compartment-contents', 'part-def', 'directed-features-compartment-element', 'annotated-element', 'unowned-membership', 'succession-label', 'annotation-node', 'part-name-compartment', 'sq-graphical-node', 'imported-package-with-name-inside', 'text-block', 'usage-cp', 'individuals-compartment-contents', 'port-def-name-compartment', 'interface-label', 'relationships-compartment-element', 'definition', 'features-compartment-contents', 'timeslices-compartment-contents', 'snapshots-name-compartment', 'sq-head-node', 'members-compartment-element', 'n-ary-def-segment', 'definition-name-with-alias', 'connections-compartment', 'msg-end-node', 'reference-subsetting', 'flow', 'timeslices-compartment', 'flows-compartment-element', 'allocation-def-name-compartment', 'connection-name-compartment', 'sq-part', 'interfaces-compartment-contents', 'flow-label', 'n-ary-connection', 'dependencies-and-annotations-element', 'event-occurrence-def-name-compartment', 'proxy-v', 'connection-label', 'el-prefix', 'pdv', 'port-l', 'annotation-link', 'n-ary-dependency-client-or-supplier-link', 'succession-flow', 'occurrence-def', 'sflow-node-l', 'textual-representation-node', 'timeslice', 'snapshots-compartment-contents', 'port-usage', 'subclassification', 'ports-compartment', 'flow-def', 'interface', 'snapshots-compartment', 'extended-def-name-compartment', 'sequence-compartment', 'enumeration-def', 'n-ary-dependency', 'connection-graphical', 'message-node-r', 'enums-compartment-element', 'binary-dependency', 'allocations-compartment', 'interfaces-compartment', 'type-node', 'package-with-name-inside', 'n-ary-def-connection-dot', 'sequence-view', 'features-compartment-element', 'allocations-compartment-element', 'flow-on-connection', 'parts-compartment', 'ellipsis-at-lower-left-corner', 'port-b', 'members-compartment', 'item-ref', 'sq-l-node', 'enums-compartment', 'allocation-name-compartment', 'documentation-compartment', 'general-compartment', 'occurrence-name-compartment', 'snapshot', 'import', 'variants-compartment-contents', 'occurrences-compartment-contents', 'attribute', 'documentation-node', 'comment-without-keyword', 'part', 'interface-def', 'allocate-relationship', 'timeslices-compartment-element', 'comment-with-keyword', 'packages-compartment-element', 'a-property', 'attribute-def-name-compartment', 'port-r', 'rel-name', 'general-element', 'general-view', 'element-node', 'general-relationship', 'variant-elementusages-compartment', 'interface-def-name-compartment', 'ends-compartment', 'event-occurrence-name-compartment', 'directed-features-compartment', 'variants-compartment', 'a-direction', 'sq-graphical-element', 'connection-relationship', 'flow-name-compartment', 'element', 'occurrence-ref', 'sq-port', 'cdot-label', 'interfaces-compartment-element', 'part-ref', 'items-compartment-contents', 'owned-membership', 'allocation-node', 'flows-compartment', 'features-compartment', 'flow-node', 'attributes-compartment-contents', 'timeslice-name-compartment', 'interconnection-view', 'namespace-node', 'allocation', 'flow-node-l', 'type-relationship', 'succession-flow-label', 'item-name-compartment', 'attributes-compartment-element', 'connection', 'cdef-label', 'flow-def-name-compartment', 'pdh', 'snapshots-compartment-element', 'occurrence', 'message-node-l', 'lifeline', 'sq-succession', 'recursive-import', 'individuals-compartment', 'allocations-compartment-contents', 'occurrences-compartment', 'usage-name-with-alias', 'extended-def', 'noncomposite-feature-membership', 'enums-compartment-contents', 'enumeration-def-name-compartment', 'c-adornment', 'allocation-def', 'n-ary-association-dot', 'n-ary-connection-def', 'connections-compartment-contents', 'compartment', 'redefinition', 'directed-features-compartment-contents', 'sq-proxy', 'eventer', 'part-def-name-compartment', 'ends-compartment-contents', 'item-def', 'interconnection-element', 'compartment-stack', 'attributes-compartment', 'flow-node-r', 'connection-end', 'package-compartment', 'port-label', 'a-subsetting', 'occurrence-def-name-compartment', 'proxy-label', 'usage-edge', 'language-string', 'port-t', 'package-node', 'flows-compartment-contents', 'usage-node', 'items-compartment', 'portion-relationship', 'relationship-name', 'composite-feature-membership', 'port-name-compartment', 'port-def', 'event-edge', 'rolename', 'item-def-name-compartment', 'interconnection-compartment', 'packages-compartment', 'ends-compartment-element', 'enumeration', 'extended-usage', 'imported-package-with-name-in-tab', 'enumeration-name-compartment', 'sq-graphical-relationship', 'connection-definition-elaboration', 'top-level-import', 'interface-name-compartment', 'interface-connection', 'dependencies-element', 'attribute-name-compartment', 'flow-end-node', 'relationships-compartment-contents', 'event-occurrence-def', 'packages-compartment-contents', 'occurrences-compartment-element'} +INFO : Processing clause id=8.2.3.17 title=Actions Graphical Notation +INFO : Processing clause id=8.2.3.18 title=States Graphical Notation +INFO : Processing clause id=8.2.3.19 title=Calculations Graphical Notation +INFO : Processing clause id=8.2.3.20 title=Constraints Graphical Notation +ERROR : Non-unique production name: usage-node in {'state-exit-action', 'proxy-h', 'general-node', 'event-occurrence', 'exit-action', 'binding-connection', 'n-ary-dependency-supplier-link', 'guard-expression', 'exhibit-edge', 'send-action-expression', 'state-actions-compartment-element', 'n-ary-connection-dot', 'sq-port-label', 'attribute-def', 'item', 'connection-def-name-compartment', 'message', 'sflow-node-r', 'subsetting', 'parameters-compartment-element', 'relationships-compartment', 'directed-features-compartment-element', 'perform-action-name-compartment', 'relationships-compartment-element', 'members-compartment-element', 'for-loop-action-name-compartment', 'connections-compartment', 'msg-end-node', 'reference-subsetting', 'flow', 'perform-action-usage', 'timeslices-compartment', 'allocation-def-name-compartment', 'parameters-compartment-contents', 'flow-label', 'n-ary-connection', 'dependencies-and-annotations-element', 'port-l', 'param-b', 'succession-flow', 'ports-compartment', 'else-branch', 'sequence-compartment', 'fork-node', 'enumeration-def', 'state-entry-action', 'action-ref', 'exhibit-states-compartment-contents', 'state', 'state-name-compartment', 'members-compartment', 'allocation-name-compartment', 'interface-def', 'comment-with-keyword', 'state-transition-element', 'attribute-def-name-compartment', 'general-relationship', 'ends-compartment', 'sq-graphical-element', 'perform-actions-compartment-contents', 'terminate-node', 'actions-compartment-contents', 'param-r', 'element', 'occurrence-ref', 'calc', 'cdot-label', 'constraint-def', 'allocation', 'succession-flow-label', 'performer-node', 'pdh', 'occurrence', 'action-body-textual', 'action-flow-relationship', 'allocations-compartment-contents', 'states-compartment-element', 'enums-compartment-contents', 'allocation-def', 'directed-features-compartment-contents', 'sq-proxy', 'eventer', 'compartment-stack', 'attributes-compartment', 'accept-action-node', 'proxy-label', 'relationship-name', 'port-name-compartment', 'enumeration-name-compartment', 'top-level-import', 'compartment', 'individuals-compartment-element', 'definition-node', 'ports-compartment-contents', 'action-flow-compartment', 'state-ref', 'ports-compartment-element', 'param-l', 'part-def', 'annotated-element', 'annotation-node', 'state-def', 'part-name-compartment', 'sq-graphical-node', 'imported-package-with-name-inside', 'text-block', 'usage-cp', 'interface-label', 'send-action-node', 'exhibit-state-name-compartment', 'definition', 'sq-head-node', 'flows-compartment-element', 'connection-label', 'n-ary-dependency-client-or-supplier-link', 'state-do-action', 'occurrence-def', 'sflow-node-l', 'subclassification', 'interface', 'n-ary-dependency', 'binary-dependency', 'join-node', 'entry-action', 'state-actions-compartment-contents', 'type-node', 'performed-by-compartment-contents', 'n-ary-def-connection-dot', 'features-compartment-element', 'allocations-compartment-element', 'ellipsis-at-lower-left-corner', 'port-b', 'else-body', 'documentation-compartment', 'iteration-expression', 'occurrence-name-compartment', 'variants-compartment-contents', 'allocate-relationship', 'documentation-node', 'part', 'state-source', 'condition-expression', 'port-r', 'directed-features-compartment', 'a-direction', 'param-t', 'exhibit-states-compartment', 'perform-actions-swimlanes', 'flows-compartment', 'items-compartment-contents', 'owned-membership', 'features-compartment', 'action-def-name-compartment', 'flow-node', 'performed-by-compartment', 'calcs-compartment-element', 'flow-node-l', 'type-relationship', 'attributes-compartment-element', 'calcs-compartment-contents', 'individuals-compartment', 'if-condition', 'extended-def', 'st-succession', 'enumeration-def-name-compartment', 'c-adornment', 'ends-compartment-contents', 'transition', 'package-compartment', 'transition-label', 'iteration', 'items-compartment', 'calc-def', 'port-def', 'event-edge', 'rolename', 'enumeration', 'exit-action-name-comp', 'extended-usage', 'imported-package-with-name-in-tab', 'items-compartment-element', 'actions-compartment', 'n-ary-segment', 'connection-def-graphical', 'multiplicity', 'state-actions-compartment', 'a-redefinition', 'parts-compartment-element', 'accept-action-name-compartment', 'parts-compartment-contents', 'send-action-name-compartment', 'constraint-def-name-compartment', 'aflow-succession', 'members-compartment-contents', 'while-loop-action-node', 'state-subaction-body-textual', 'for-loop-action-node', 'unowned-membership', 'succession-label', 'port-def-name-compartment', 'do-action', 'features-compartment-contents', 'snapshots-name-compartment', 'definition-name-with-alias', 'connection-name-compartment', 'interfaces-compartment-contents', 'event-occurrence-def-name-compartment', 'action-body', 'el-prefix', 'exhibitor', 'action-flow-node', 'snapshots-compartment', 'result-compartment', 'connection-graphical', 'enums-compartment-element', 'package-with-name-inside', 'flow-on-connection', 'parts-compartment', 'until-condition', 'swimlane', 'item-ref', 'sq-l-node', 'general-compartment', 'attribute', 'merge-node', 'general-view', 'connection-relationship', 'flow-name-compartment', 'assign-action-name-compartment', 'sq-port', 'interfaces-compartment-element', 'part-ref', 'attributes-compartment-contents', 'timeslice-name-compartment', 'interconnection-view', 'item-name-compartment', 'connection', 'message-node-l', 'state-transition-view', 'lifeline', 'sq-succession', 'recursive-import', 'state-def-name-compartment', 'n-ary-connection-def', 'redefinition', 'part-def-name-compartment', 'states-compartment-contents', 'action-def', 'item-def', 'interconnection-element', 'while-loop-action-name-compartment', 'while-condition', 'port-label', 'a-subsetting', 'usage-edge', 'language-string', 'result-compartment-contents', 'package-node', 'flows-compartment-contents', 'usage-node', 'portion-relationship', 'composite-feature-membership', 'packages-compartment', 'state-transition-compartment', 'connection-definition-elaboration', 'sq-graphical-relationship', 'interface-name-compartment', 'interface-connection', 'attribute-name-compartment', 'flow-end-node', 'event-occurrence-def', 'trigger-expression', 'packages-compartment-contents', 'occurrences-compartment-element', 'start-node', 'connection-usage-elaboration', 'message-label', 'do-action-name-comp', 'timeslice-or-snapshot-node', 'comment-node', 'action-flow-view', 'extended-usage-name-compartment', 'n-ary-dependency-client-link', 'state-transition-node', 'exhibit-states-compartment-element-compartment', 'package-with-name-in-tab', 'assign-action-node', 'connections-compartment-element', 'element-inside-textual-compartment', 'connection-def', 'individuals-compartment-contents', 'timeslices-compartment-contents', 'if-else-action-node', 'n-ary-def-segment', 'sq-part', 'proxy-v', 'pdv', 'calc-def-name-compartment', 'annotation-link', 'textual-representation-node', 'timeslice', 'snapshots-compartment-contents', 'port-usage', 'flow-def', 'extended-def-name-compartment', 'message-node-r', 'allocations-compartment', 'interfaces-compartment', 'done-node', 'perform-actions-compartment-element', 'sequence-view', 'action', 'action-name-compartment', 'state-subaction-declaration', 'enums-compartment', 'loop-body', 'snapshot', 'import', 'occurrences-compartment-contents', 'comment-without-keyword', 'timeslices-compartment-element', 'param-label', 'exhibit-state-usage', 'packages-compartment-element', 'a-property', 'rel-name', 'general-element', 'variant-elementusages-compartment', 'element-node', 'states-compartment', 'action-flow-element', 'interface-def-name-compartment', 'event-occurrence-name-compartment', 'variants-compartment', 'entry-action-name-comp', 'allocation-node', 'decision-node', 'perform-actions-compartment', 'namespace-node', 'actions-compartment-element', 'successions-compartment-contents', 'successions-compartment', 'cdef-label', 'flow-def-name-compartment', 'ifelse-action-name-compartment', 'snapshots-compartment-element', 'calc-name-compartment', 'occurrences-compartment', 'usage-name-with-alias', 'noncomposite-feature-membership', 'parameters-compartment', 'calcs-compartment', 'n-ary-association-dot', 'connections-compartment-contents', 'state-subaction-body', 'accept-action-expression', 'flow-node-r', 'connection-end', 'perform-edge', 'occurrence-def-name-compartment', 'port-t', 'ends-compartment-element', 'item-def-name-compartment', 'interconnection-compartment', 'parameter', 'dependencies-element', 'relationships-compartment-contents', 'then-body'} +INFO : Processing clause id=8.2.3.21 title=Requirements Graphical Notation +ERROR : Non-unique production name: usage-node in {'state-exit-action', 'proxy-h', 'general-node', 'event-occurrence', 'exit-action', 'binding-connection', 'n-ary-dependency-supplier-link', 'guard-expression', 'exhibit-edge', 'send-action-expression', 'state-actions-compartment-element', 'n-ary-connection-dot', 'sq-port-label', 'attribute-def', 'item', 'connection-def-name-compartment', 'message', 'sflow-node-r', 'subsetting', 'parameters-compartment-element', 'relationships-compartment', 'directed-features-compartment-element', 'perform-action-name-compartment', 'relationships-compartment-element', 'members-compartment-element', 'for-loop-action-name-compartment', 'connections-compartment', 'msg-end-node', 'reference-subsetting', 'flow', 'perform-action-usage', 'timeslices-compartment', 'allocation-def-name-compartment', 'parameters-compartment-contents', 'assert-constraints-compartment-element', 'flow-label', 'n-ary-connection', 'dependencies-and-annotations-element', 'port-l', 'param-b', 'succession-flow', 'ports-compartment', 'else-branch', 'sequence-compartment', 'fork-node', 'assumer', 'enumeration-def', 'state-entry-action', 'action-ref', 'exhibit-states-compartment-contents', 'state', 'state-name-compartment', 'constraint-ref', 'members-compartment', 'allocation-name-compartment', 'interface-def', 'comment-with-keyword', 'state-transition-element', 'attribute-def-name-compartment', 'general-relationship', 'ends-compartment', 'sq-graphical-element', 'perform-actions-compartment-contents', 'terminate-node', 'actions-compartment-contents', 'param-r', 'element', 'occurrence-ref', 'calc', 'cdot-label', 'constraint-def', 'allocation', 'succession-flow-label', 'performer-node', 'pdh', 'occurrence', 'action-body-textual', 'action-flow-relationship', 'allocations-compartment-contents', 'states-compartment-element', 'enums-compartment-contents', 'constraints-usage-compartment-element', 'allocation-def', 'directed-features-compartment-contents', 'sq-proxy', 'eventer', 'compartment-stack', 'attributes-compartment', 'accept-action-node', 'proxy-label', 'relationship-name', 'port-name-compartment', 'enumeration-name-compartment', 'top-level-import', 'compartment', 'assume-constraint-node', 'individuals-compartment-element', 'definition-node', 'ports-compartment-contents', 'action-flow-compartment', 'state-ref', 'assert-constraint-node', 'ports-compartment-element', 'param-l', 'part-def', 'assume-constraint-name-compartment', 'annotated-element', 'annotation-node', 'state-def', 'part-name-compartment', 'sq-graphical-node', 'imported-package-with-name-inside', 'text-block', 'usage-cp', 'interface-label', 'send-action-node', 'exhibit-state-name-compartment', 'definition', 'sq-head-node', 'constraints-compartment-contents', 'flows-compartment-element', 'assertor', 'connection-label', 'assert-constraints-compartment', 'n-ary-dependency-client-or-supplier-link', 'state-do-action', 'occurrence-def', 'sflow-node-l', 'subclassification', 'interface', 'n-ary-dependency', 'binary-dependency', 'join-node', 'entry-action', 'state-actions-compartment-contents', 'type-node', 'performed-by-compartment-contents', 'n-ary-def-connection-dot', 'features-compartment-element', 'allocations-compartment-element', 'ellipsis-at-lower-left-corner', 'port-b', 'else-body', 'documentation-compartment', 'iteration-expression', 'occurrence-name-compartment', 'variants-compartment-contents', 'allocate-relationship', 'documentation-node', 'part', 'state-source', 'constraint-name-compartment', 'condition-expression', 'port-r', 'directed-features-compartment', 'a-direction', 'param-t', 'exhibit-states-compartment', 'perform-actions-swimlanes', 'flows-compartment', 'items-compartment-contents', 'owned-membership', 'features-compartment', 'action-def-name-compartment', 'flow-node', 'performed-by-compartment', 'calcs-compartment-element', 'flow-node-l', 'type-relationship', 'attributes-compartment-element', 'calcs-compartment-contents', 'individuals-compartment', 'if-condition', 'extended-def', 'st-succession', 'enumeration-def-name-compartment', 'c-adornment', 'constraint', 'ends-compartment-contents', 'transition', 'assert-constraints-compartment-contents', 'package-compartment', 'transition-label', 'iteration', 'items-compartment', 'calc-def', 'port-def', 'event-edge', 'rolename', 'enumeration', 'exit-action-name-comp', 'extended-usage', 'imported-package-with-name-in-tab', 'items-compartment-element', 'actions-compartment', 'n-ary-segment', 'connection-def-graphical', 'multiplicity', 'state-actions-compartment', 'a-redefinition', 'parts-compartment-element', 'accept-action-name-compartment', 'parts-compartment-contents', 'send-action-name-compartment', 'constraint-def-name-compartment', 'aflow-succession', 'members-compartment-contents', 'while-loop-action-node', 'state-subaction-body-textual', 'for-loop-action-node', 'unowned-membership', 'succession-label', 'port-def-name-compartment', 'do-action', 'features-compartment-contents', 'snapshots-name-compartment', 'definition-name-with-alias', 'connection-name-compartment', 'interfaces-compartment-contents', 'event-occurrence-def-name-compartment', 'action-body', 'el-prefix', 'exhibitor', 'action-flow-node', 'snapshots-compartment', 'result-compartment', 'connection-graphical', 'constraints-compartment', 'enums-compartment-element', 'package-with-name-inside', 'flow-on-connection', 'parts-compartment', 'until-condition', 'swimlane', 'item-ref', 'sq-l-node', 'general-compartment', 'attribute', 'merge-node', 'general-view', 'connection-relationship', 'flow-name-compartment', 'assign-action-name-compartment', 'sq-port', 'interfaces-compartment-element', 'part-ref', 'attributes-compartment-contents', 'timeslice-name-compartment', 'interconnection-view', 'item-name-compartment', 'connection', 'message-node-l', 'state-transition-view', 'lifeline', 'sq-succession', 'recursive-import', 'state-def-name-compartment', 'n-ary-connection-def', 'redefinition', 'part-def-name-compartment', 'states-compartment-contents', 'action-def', 'item-def', 'interconnection-element', 'while-loop-action-name-compartment', 'while-condition', 'port-label', 'a-subsetting', 'usage-edge', 'language-string', 'result-compartment-contents', 'package-node', 'flows-compartment-contents', 'usage-node', 'portion-relationship', 'composite-feature-membership', 'packages-compartment', 'state-transition-compartment', 'connection-definition-elaboration', 'sq-graphical-relationship', 'interface-name-compartment', 'interface-connection', 'attribute-name-compartment', 'flow-end-node', 'event-occurrence-def', 'trigger-expression', 'packages-compartment-contents', 'occurrences-compartment-element', 'start-node', 'connection-usage-elaboration', 'assert-constraint-name-compartment', 'message-label', 'do-action-name-comp', 'timeslice-or-snapshot-node', 'comment-node', 'action-flow-view', 'extended-usage-name-compartment', 'n-ary-dependency-client-link', 'state-transition-node', 'exhibit-states-compartment-element-compartment', 'package-with-name-in-tab', 'assign-action-node', 'connections-compartment-element', 'element-inside-textual-compartment', 'connection-def', 'assume-edge', 'individuals-compartment-contents', 'timeslices-compartment-contents', 'if-else-action-node', 'n-ary-def-segment', 'assert-edge', 'sq-part', 'proxy-v', 'pdv', 'calc-def-name-compartment', 'annotation-link', 'textual-representation-node', 'timeslice', 'snapshots-compartment-contents', 'port-usage', 'flow-def', 'extended-def-name-compartment', 'message-node-r', 'allocations-compartment', 'interfaces-compartment', 'done-node', 'perform-actions-compartment-element', 'sequence-view', 'action', 'action-name-compartment', 'state-subaction-declaration', 'enums-compartment', 'loop-body', 'snapshot', 'import', 'occurrences-compartment-contents', 'comment-without-keyword', 'timeslices-compartment-element', 'param-label', 'exhibit-state-usage', 'packages-compartment-element', 'a-property', 'rel-name', 'general-element', 'variant-elementusages-compartment', 'element-node', 'states-compartment', 'action-flow-element', 'interface-def-name-compartment', 'event-occurrence-name-compartment', 'variants-compartment', 'entry-action-name-comp', 'requirement-def-name-compartment', 'allocation-node', 'decision-node', 'perform-actions-compartment', 'requirement-def', 'namespace-node', 'actions-compartment-element', 'successions-compartment-contents', 'successions-compartment', 'cdef-label', 'flow-def-name-compartment', 'ifelse-action-name-compartment', 'snapshots-compartment-element', 'calc-name-compartment', 'occurrences-compartment', 'usage-name-with-alias', 'noncomposite-feature-membership', 'parameters-compartment', 'calcs-compartment', 'n-ary-association-dot', 'connections-compartment-contents', 'state-subaction-body', 'accept-action-expression', 'flow-node-r', 'connection-end', 'perform-edge', 'occurrence-def-name-compartment', 'port-t', 'ends-compartment-element', 'item-def-name-compartment', 'interconnection-compartment', 'parameter', 'dependencies-element', 'relationships-compartment-contents', 'then-body'} +INFO : Processing clause id=8.2.3.22 title=Cases Graphical Notation +INFO : Processing clause id=8.2.3.23 title=Analysis Cases Graphical Notation +INFO : Processing clause id=8.2.3.24 title=Verification Cases Graphical Notation +INFO : Processing clause id=8.2.3.25 title=Use Cases Graphical Notation +INFO : Processing clause id=8.2.3.26 title=Views and Viewpoints Graphical Notation +INFO : Processing clause id=8.2.3.27 title=Metadata Graphical Notation +INFO : Completed parsing tests\KerML_and_SysML_grammars\SysML-graphical-bnf-corrected-marked_up.kgbnf +INFO : Dumping BNF grammar elements into tests\KerML_and_SysML_grammars\SysML-graphical-bnf-corrected-elements.json +INFO : Writing BNF grammar file tests\KerML_and_SysML_grammars\SysML-graphical-bnf-corrected.kgbnf +INFO : Writing BNF HTML file tests\KerML_and_SysML_grammars\SysML-graphical-bnf-corrected.html +WARNING : Tokenize: Space inside TERMINAL 'defined by' in line 'defines' | 'defined by' | 'specializes' | 'specialized by' | 'connect to' +WARNING : Tokenize: Space inside TERMINAL 'specialized by' in line 'defines' | 'defined by' | 'specializes' | 'specialized by' | 'connect to' +WARNING : Tokenize: Space inside TERMINAL 'connect to' in line 'defines' | 'defined by' | 'specializes' | 'specialized by' | 'connect to' +WARNING : Tokenize: Space inside TERMINAL 'subsetted by' in line | 'subsets' | 'subsetted by' | 'performs' | 'performed by' | 'allocated' | 'allocated to' +WARNING : Tokenize: Space inside TERMINAL 'performed by' in line | 'subsets' | 'subsetted by' | 'performs' | 'performed by' | 'allocated' | 'allocated to' +WARNING : Tokenize: Space inside TERMINAL 'allocated to' in line | 'subsets' | 'subsetted by' | 'performs' | 'performed by' | 'allocated' | 'allocated to' +WARNING : Tokenize: Space inside TERMINAL 'satisfied by' in line | 'satisfy' | 'satisfied by' +WARNING : Tokenize: Space inside TERMINAL '«assert constraint»' in line '«assert constraint»' +WARNING : Tokenize: Space inside TERMINAL '«satisfy requirement»' in line '«satisfy requirement»' +WARNING : Tokenize: Space inside TERMINAL '«include use case»' in line '«include use case»' +WARNING : Grammar SysML-graphical-bnf-corrected contains 16 unresolved non-terminal(s) ... +ERROR : Cannot resolve ActionUsageParameterList in + 8.2.3.25: ( ValuePart | ActionUsageParameterList )? CaseBody +ERROR : Cannot resolve CalculationUsageParameterPart in + 8.2.3.20: CalculationUsageParameterPart CalculationBody +ERROR : Cannot resolve ValueOrFlowPart in + 8.2.3.17: el-prefix? FeatureDirection UsageDeclaration ValueOrFlowPart? DefinitionBodyItem* + 8.2.3.26: el-prefix? OccurrenceUsagePrefix UsageDeclaration? ValueOrFlowPart? ViewBody +ERROR : Cannot resolve analysis-case in + 8.2.3.16: | use-case | verification-case | analysis-case | proxy +ERROR : Cannot resolve comp-prefix in + 8.2.3.22: comp-prefix? MemberPrefix ConstraintUsageDeclaration RequirementBody +ERROR : Cannot resolve concerns-compartment-contents in + 8.2.3.21: concerns-compartment-contents +ERROR : Cannot resolve element-in-textual-compartment in + 8.2.3.15: | element-in-textual-compartment +ERROR : Cannot resolve exhibit-state-scompartment-element in + 8.2.3.18: exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'? +ERROR : Cannot resolve include-actions-compartment in + 8.2.3.25: | include-actions-compartment +ERROR : Cannot resolve keyword in + 8.2.3.27: '«' BasicUsagePrefix? keyword* 'metadata' 'def' '»' +ERROR : Cannot resolve message-connection in + 8.2.3.16: message-connection +ERROR : Cannot resolve perform-action-swimlanes in + 8.2.3.17: (perform-action-swimlanes)? +ERROR : Cannot resolve port in + 8.2.3.16: occurrence| sq-l-node| item | part | port | action | state +ERROR : Cannot resolve proxy in + 8.2.3.16: | use-case | verification-case | analysis-case | proxy + 8.2.3.16: parameter | proxy +ERROR : Cannot resolve succession in + 8.2.3.17: usage-edge =| succession perform-edge +ERROR : Cannot resolve verification-case in + 8.2.3.16: | use-case | verification-case | analysis-case | proxy diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_grammar_processor--extracted.log b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_grammar_processor--extracted.log new file mode 100644 index 000000000..a152133fe --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_grammar_processor--extracted.log @@ -0,0 +1,3001 @@ +WARNING : Processing syntax_kind=kerml-library for ../../sysml.library/Kernel Libraries/Kernel Semantic Library/KerML.kerml clause=None is not yet implemented +WARNING : Processing syntax_kind=sysml-library for ../../sysml.library/Systems Library/SysML.sysml clause=None is not yet implemented +INFO : ==================== +INFO : Extract BNF from tests\KerML_and_SysML_spec_sources\KerML-spec.html syntax-kind=textual-bnf clause=8.2 at 2025-12-04T19:31:35Z +INFO : ==================== +INFO : PROCESSING Part 1 - Kernel Modeling Language (KerML) +INFO : PROCESSING Clause 8.2 Concrete Syntax +INFO : PROCESSING Clause 8.2.1 Concrete Syntax Overview +INFO : PROCESSING Clause 8.2.2 Lexical Structure +INFO : PROCESSING Clause 8.2.2.1 Line Terminators and White Space +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.2.1 in production: +LINE_TERMINATOR = + implementation defined character sequence + +Unexpected token Token('PROPERTY_NAME', 'defined') at line 2, column 20. +Expected one of: + * DOT + * EQUAL + * "+=" + * "?=" +Previous tokens: [Token('PROPERTY_NAME', 'implementation')] + +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.2.1 in production: +LINE_TEXT = + character sequence excluding LINE_TERMINATORs + +Unexpected token Token('PROPERTY_NAME', 'sequence') at line 2, column 15. +Expected one of: + * DOT + * EQUAL + * "+=" + * "?=" +Previous tokens: [Token('PROPERTY_NAME', 'character')] + +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.2.1 in production: +WHITE_SPACE = + space | tab | form_feed | LINE_TERMINATOR + +Unexpected token Token('VBAR', '|') at line 2, column 11. +Expected one of: + * DOT + * EQUAL + * "+=" + * "?=" +Previous tokens: [Token('PROPERTY_NAME', 'space')] + +ERROR : Unexpected tag inside
         element: tag=implementation defined character sequence
        +ERROR   : Unexpected tag inside 
         element: tag=character sequence excluding
        +INFO    : PROCESSING Clause 8.2.2.2 Notes and Comments
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.2.2 in production:
        +COMMENT_LINE_TEXT =
        +    LINE_TEXT excluding the sequence '*/'
        +
        +Unexpected token Token('PROPERTY_NAME', 'the') at line 2, column 25.
        +Expected one of: 
        +	* DOT
        +	* EQUAL
        +	* "+="
        +	* "?="
        +Previous tokens: [Token('PROPERTY_NAME', 'excluding')]
        +
        +ERROR   : Unexpected tag inside 
         element: tag=excluding the sequence
        +INFO    : PROCESSING Clause 8.2.2.3 Names
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.2.3 in production:
        +UNRESTRICTED_NAME =
        +    single_quote ( NAME_CHARACTER | ESCAPE_SEQUENCE )* single_quote
        +
        +No terminal matches '_' in the current parser context, at line 2 col 11
        +
        +    single_quote ( NAME_CHARACTER | ESCAPE_SEQUENC
        +          ^
        +Expected one of: 
        +	* "+="
        +	* DOT
        +	* "?="
        +	* EQUAL
        +	* RBRACE
        +
        +Previous tokens: Token('PROPERTY_NAME', 'single')
        +
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.2.3 in production:
        +ALPHABETIC_CHARACTER =
        +    any character 'a' through 'z' or 'A' through 'Z'
        +
        +Unexpected token Token('PROPERTY_NAME', 'character') at line 2, column 9.
        +Expected one of: 
        +	* DOT
        +	* EQUAL
        +	* "+="
        +	* "?="
        +Previous tokens: [Token('PROPERTY_NAME', 'any')]
        +
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.2.3 in production:
        +DECIMAL_DIGIT =
        +    any character '0' through '9'
        +
        +Unexpected token Token('PROPERTY_NAME', 'character') at line 2, column 9.
        +Expected one of: 
        +	* DOT
        +	* EQUAL
        +	* "+="
        +	* "?="
        +Previous tokens: [Token('PROPERTY_NAME', 'any')]
        +
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.2.3 in production:
        +NAME_CHARACTER =
        +    any printable character other than backslash or single_quote
        +
        +Unexpected token Token('PROPERTY_NAME', 'printable') at line 2, column 9.
        +Expected one of: 
        +	* DOT
        +	* EQUAL
        +	* "+="
        +	* "?="
        +Previous tokens: [Token('PROPERTY_NAME', 'any')]
        +
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.2.3 in production:
        +ESCAPE_SEQUENCE =
        +
        +Unexpected token Token('_NON_CONTINUATION_LINE', '\n') at line 1, column 18.
        +Expected one of: 
        +	* PROPERTY_NAME
        +	* NONTERMINAL_NAME
        +	* LBRACE
        +	* QUALIFIED_NAME
        +	* LPAR
        +	* TERMINAL
        +	* LEXICAL_NAME
        +	* TILDE
        +Previous tokens: [Token('EQUAL', '=')]
        +
        +ERROR   : Unexpected tag inside 
         element: tag=(see Note 1
        +ERROR   : Unexpected tag inside 
         element: tag=any character 
        +ERROR   : Unexpected tag inside 
         element: tag=through
        +ERROR   : Unexpected tag inside 
         element: tag=or
        +ERROR   : Unexpected tag inside 
         element: tag=through
        +ERROR   : Unexpected tag inside 
         element: tag=any character
        +ERROR   : Unexpected tag inside 
         element: tag=through
        +ERROR   : Unexpected tag inside 
         element: tag=any printable character other than backslash or single_quote
        +ERROR   : Unexpected tag inside 
         element: tag=see Note 2
        +INFO    : PROCESSING Clause 8.2.2.4 Numeric Values
        +INFO    : PROCESSING Clause 8.2.2.5 String Value
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.2.5 in production:
        +STRING_CHARACTER =
        +    any printable character other than backslash or '"'
        +
        +Unexpected token Token('PROPERTY_NAME', 'printable') at line 2, column 9.
        +Expected one of: 
        +	* DOT
        +	* EQUAL
        +	* "+="
        +	* "?="
        +Previous tokens: [Token('PROPERTY_NAME', 'any')]
        +
        +INFO    : PROCESSING Clause 8.2.2.6 Reserved Words
        +ERROR   : Unexpected tag inside 
         element: tag=about abstract alias all and as assoc behavior binding bool by chains class 
        +classifier comment composite conjugate conjugates conjugation connector const 
        +crosses datatype default dependency derived differences disjoining disjoint doc 
        +else end expr false feature featured featuring filter first flow for from 
        +function hastype if implies import in inout interaction intersects inv inverse 
        +inverting istype language library locale member meta metaclass metadata 
        +multiplicity namespace nonunique not null of or ordered out package portion 
        +predicate private protected public redefines redefinition references rep return 
        +specialization specializes standard step struct subclassifier subset subsets 
        +subtype succession then to true type typed typing unions var xor
        +INFO    : PROCESSING Clause 8.2.2.7 Symbols
        +INFO    : PROCESSING Clause 8.2.3 Root Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.3.1 Elements and Relationships Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.3.2 Dependencies Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.3.3 Annotations Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.3.3.1 Annotations
        +INFO    : PROCESSING Clause 8.2.3.3.2 Comments and Documentation
        +INFO    : PROCESSING Clause 8.2.3.3.3 Textual Representation
        +INFO    : PROCESSING Clause 8.2.3.4 Namespaces Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.3.4.1 Namespaces
        +ERROR   : Unexpected tag inside 
         element: tag=(See Note 1)
        +ERROR   : Unexpected tag inside 
         element: tag=(See Note 2)
        +ERROR   : Unexpected tag inside 
         element: tag=(See Note 3)
        +INFO    : PROCESSING Clause 8.2.3.4.2 Imports
        +WARNING : Production start line does not contain exactly one '=': ImportDeclaration : Import
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.3.4.2 in production:
        +ImportDeclaration : Import
        +    MembershipImport | NamespaceImport
        +
        +Unexpected token Token('NONTERMINAL_NAME', 'MembershipImport') at line 2, column 5.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'Import')]
        +
        +ERROR   : Unexpected tag inside 
         element: tag=(see Note 1)
        +INFO    : PROCESSING Clause 8.2.3.4.3 Namespace Elements
        +INFO    : PROCESSING Clause 8.2.3.5 Name Resolution
        +INFO    : PROCESSING Clause 8.2.3.5.1 Name Resolution Overview
        +INFO    : PROCESSING Clause 8.2.3.5.2 Local and Global Namespaces
        +INFO    : PROCESSING Clause 8.2.3.5.3 Local and Visible Resolution
        +INFO    : PROCESSING Clause 8.2.3.5.4 Full Resolution
        +INFO    : PROCESSING Clause 8.2.4 Core Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.4.1 Types Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.4.1.1 Types
        +INFO    : PROCESSING Clause 8.2.4.1.2 Specialization
        +WARNING : Production start line does not contain exactly one '=': SpecificType : Specialization :
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.4.1.2 in production:
        +SpecificType : Specialization :
        +      specific = [QualifiedName]
        +    | specific += OwnedFeatureChain
        +      { ownedRelatedElement += specific }
        +
        +Unexpected token Token('COLON', ':') at line 1, column 31.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'Specialization')]
        +
        +INFO    : PROCESSING Clause 8.2.4.1.3 Conjugation
        +INFO    : PROCESSING Clause 8.2.4.1.4 Disjoining
        +INFO    : PROCESSING Clause 8.2.4.1.5 Unioning, Intersecting and Differencing
        +INFO    : PROCESSING Clause 8.2.4.1.6 Feature Membership
        +INFO    : PROCESSING Clause 8.2.4.2 Classifiers Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.4.2.1 Classifiers
        +INFO    : PROCESSING Clause 8.2.4.2.2 Subclassification
        +INFO    : PROCESSING Clause 8.2.4.3 Features Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.4.3.1 Features
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.4.3.1 in production:
        +Feature =
        +    ( FeaturePrefix
        +      ( 'feature' | ownedRelationship += PrefixMetadataMember )
        +      FeatureDeclaration?
        +      )
        +    | ( EndFeaturePrefix | BasicFeaturePrefix )
        +      FeatureDeclaration
        +    )
        +    ValuePart? TypeBody
        +
        +Unexpected token Token('RPAR', ')') at line 8, column 5.
        +Expected one of: 
        +	* _NON_CONTINUATION_LINE
        +
        +WARNING : Production start line does not contain exactly one '=': BasicFeaturePrefix : Feature :
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.4.3.1 in production:
        +BasicFeaturePrefix : Feature :
        +    ( direction = FeatureDirection )?
        +    ( isDerived ?= 'derived' )?
        +    ( isAbstract ?= 'abstract' )?
        +    ( isComposite ?= 'composite' | isPortion ?= 'portion' )?
        +    ( isVariable ?= 'var' | isConstant ?= 'const' { isVariable = true } )?
        +
        +Unexpected token Token('COLON', ':') at line 1, column 30.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'Feature')]
        +
        +WARNING : Production start line does not contain exactly one '=': FeaturePrefix :
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.4.3.1 in production:
        +FeaturePrefix :
        +    ( EndFeaturePrefix ( ownedRelationship += OwnedCrossFeatureMember )?
        +    | BasicFeaturePrefix
        +    )
        +    ( ownedRelationship += PrefixMetadataMember )*
        +
        +Unexpected token Token('LPAR', '(') at line 2, column 5.
        +Expected one of: 
        +	* NONTERMINAL_NAME
        +Previous tokens: [Token('COLON', ':')]
        +
        +ERROR   : Unexpected tag inside 
         element: tag=(See Note 1)
        +ERROR   : Unexpected tag inside 
         element: tag=(see Note 1)
        +INFO    : PROCESSING Clause 8.2.4.3.2 Feature Typing
        +INFO    : PROCESSING Clause 8.2.4.3.3 Subsetting
        +INFO    : PROCESSING Clause 8.2.4.3.4 Redefinition
        +INFO    : PROCESSING Clause 8.2.4.3.5 Feature Chaining
        +INFO    : PROCESSING Clause 8.2.4.3.6 Feature Inverting
        +INFO    : PROCESSING Clause 8.2.4.3.7 Type Featuring
        +INFO    : PROCESSING Clause 8.2.5 Kernel Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.1 Data Types Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.2 Classes Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.3 Structures Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.4 Associations Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.5 Connectors Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.5.1 Connectors
        +INFO    : PROCESSING Clause 8.2.5.5.2 Binding Connectors
        +INFO    : PROCESSING Clause 8.2.5.5.3 Successions
        +INFO    : PROCESSING Clause 8.2.5.6 Behaviors Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.6.1 Behaviors
        +INFO    : PROCESSING Clause 8.2.5.6.2 Steps
        +INFO    : PROCESSING Clause 8.2.5.7 Functions Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.7.1 Functions
        +INFO    : PROCESSING Clause 8.2.5.7.2 Expressions
        +INFO    : PROCESSING Clause 8.2.5.7.3 Predicates
        +INFO    : PROCESSING Clause 8.2.5.7.4 Boolean Expressions and Invariants
        +INFO    : PROCESSING Clause 8.2.5.8 Expressions Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.8.1 Operator Expressions
        +INFO    : PROCESSING Clause 8.2.5.8.2 Primary Expressions
        +INFO    : PROCESSING Clause 8.2.5.8.3 Base Expressions
        +INFO    : PROCESSING Clause 8.2.5.8.4 Literal Expressions
        +INFO    : PROCESSING Clause 8.2.5.9 Interactions Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.9.1 Interactions
        +INFO    : PROCESSING Clause 8.2.5.9.2 Flows
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.5.9.2 in production:
        +PayloadFeature =
        +      Identification PayloadFeatureSpecializationPart ValuePart?
        +    | Identification ValuePart
        +    | ( ownedRelationship += OwnedFeatureTyping
        +      ( ownedRelationship += OwnedMultiplicity )?
        +    | ownedRelationship += OwnedMultiplicity
        +      ( ownedRelationship += OwnedFeatureTyping )?
        +
        +Unexpected token Token('_NON_CONTINUATION_LINE', '\n') at line 7, column 51.
        +Expected one of: 
        +	* RPAR
        +
        +ERROR   : Unexpected tag inside 
         element: tag=(See Note 1)
        +INFO    : PROCESSING Clause 8.2.5.10 Feature Values Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.11 Multiplicities Concrete Syntax
        +INFO    : PROCESSING Clause 8.2.5.12 Metadata Concrete Syntax
        +WARNING : Production start line does not contain exactly one '=': PrefixMetadataFeature : MetadataFeature :
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\KerML-spec.html 8.2.5.12 in production:
        +PrefixMetadataFeature : MetadataFeature :
        +    ownedRelationship += OwnedFeatureTyping
        +
        +Unexpected token Token('COLON', ':') at line 1, column 41.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'MetadataFeature')]
        +
        +INFO    : PROCESSING Clause 8.2.5.13 Packages Concrete Syntax
        +INFO    : ===== Start of Textual Notation Grammar Checks
        +INFO    : Keywords extracted from textual BNF grammar scan:
        +    about abstract alias all and as assoc behavior binding bool by chains class classifier comment composite conjugate
        +    conjugates conjugation connector const crosses datatype default dependency derived differences disjoining disjoint
        +    doc else end expr false feature featured featuring filter first flow for from function hastype if implies import in
        +    inout interaction intersects inv inverse inverting istype language library locale member meta metaclass metadata
        +    multiplicity namespace new nonunique not null of or ordered out package portion predicate private protected public
        +    redefines redefinition references rep return specialization specializes standard step struct subclassifier subset
        +    subsets subtype succession then to true type typed typing unions var xor
        +INFO    : Comparison of declared reserved keywords versus extracted keywords
        +INFO    : Declared reserved keywords not in extracted keywords:
        +
        +WARNING : Extracted keywords not in declared reserved keywords:
        +    new
        +INFO    : ===== End of Textual Notation Grammar Checks
        +INFO    : ===== Start of Textual Notation Grammar Checks
        +INFO    : Keywords extracted from textual BNF grammar scan:
        +    about abstract alias all and as assoc behavior binding bool by chains class classifier comment composite conjugate
        +    conjugates conjugation connector const crosses datatype default dependency derived differences disjoining disjoint
        +    doc else end expr false feature featured featuring filter first flow for from function hastype if implies import in
        +    inout interaction intersects inv inverse inverting istype language library locale member meta metaclass metadata
        +    multiplicity namespace new nonunique not null of or ordered out package portion predicate private protected public
        +    redefines redefinition references rep return specialization specializes standard step struct subclassifier subset
        +    subsets subtype succession then to true type typed typing unions var xor
        +INFO    : Comparison of declared reserved keywords versus extracted keywords
        +INFO    : Declared reserved keywords not in extracted keywords:
        +
        +WARNING : Extracted keywords not in declared reserved keywords:
        +    new
        +INFO    : ===== End of Textual Notation Grammar Checks
        +INFO    : Dumping BNF grammar elements into tests\KerML_and_SysML_grammars\KerML-textual-bnf-elements.json
        +INFO    : Writing BNF grammar file tests\KerML_and_SysML_grammars\KerML-textual-bnf-marked_up.kebnf
        +INFO    : Writing BNF grammar file tests\KerML_and_SysML_grammars\KerML-textual-bnf.kebnf
        +INFO    : Writing BNF HTML file tests\KerML_and_SysML_grammars\KerML-textual-bnf.html
        +WARNING : Grammar KerML-textual-bnf contains 4 unresolved non-terminal(s) ...
        +ERROR   : Cannot resolve InstatiatedTypeMember in
        +    8.2.5.8.3:     ownedRelationship += InstatiatedTypeMember
        +ERROR   : Cannot resolve InvocationTypeMember in
        +    8.2.5.8.2:     ownedRelationship += InvocationTypeMember
        +ERROR   : Cannot resolve ItemFlowDeclaration in
        +    8.2.5.9.2:     ItemFlowDeclaration TypeBody
        +    8.2.5.9.2:     ItemFlowDeclaration TypeBody
        +ERROR   : Cannot resolve MetaClassificationTestOperator in
        +    8.2.5.8.1:     ( operator = MetaClassificationTestOperator
        +INFO    : ====================
        +INFO    : Extract BNF from tests\KerML_and_SysML_spec_sources\SysML-spec.html syntax-kind=textual-bnf clause=8.2.2 at 2025-12-04T19:31:35Z
        +INFO    : ====================
        +INFO    : PROCESSING Part 2 - Systems Modeling Language (SysML)
        +INFO    : PROCESSING Clause 8.2.2 Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.1 Textual Notation Overview
        +INFO    : PROCESSING Clause 8.2.2.1.1 EBNF Conventions
        +INFO    : PROCESSING Clause 8.2.2.1.2 Lexical Structure
        +WARNING : 
         appearing inside 
      • element: +
        about abstract accept action actor after alias all allocate allocation analysis 
        +and as assert assign assume at attribute bind binding by calc case comment 
        +concern connect connection constant constraint crosses decide def default 
        +defined dependency derived do doc else end entry enum event exhibit exit expose 
        +false filter first flow for fork frame from hastype if implies import in include 
        +individual inout interface istype item join language library locale loop merge 
        +message meta metadata nonunique not null objective occurrence of or ordered out 
        +package parallel part perform port private protected public redefines ref 
        +references render rendering rep require requirement return satisfy send snapshot 
        +specializes stakeholder standard state subject subsets succession terminate then 
        +timeslice to transition true until use variant variation verification verify via 
        +view viewpoint when while xor
        +ERROR : Unexpected tag inside
         element: tag=about abstract accept action actor after alias all allocate allocation analysis 
        +and as assert assign assume at attribute bind binding by calc case comment 
        +concern connect connection constant constraint crosses decide def default 
        +defined dependency derived do doc else end entry enum event exhibit exit expose 
        +false filter first flow for fork frame from hastype if implies import in include 
        +individual inout interface istype item join language library locale loop merge 
        +message meta metadata nonunique not null objective occurrence of or ordered out 
        +package parallel part perform port private protected public redefines ref 
        +references render rendering rep require requirement return satisfy send snapshot 
        +specializes stakeholder standard state subject subsets succession terminate then 
        +timeslice to transition true until use variant variation verification verify via 
        +view viewpoint when while xor
        +WARNING : 
         appearing inside 
      • element: +
        DEFINED_BY  = ':'   | 'defined' 'by'
        +SPECIALIZES = ':>'  | 'specializes'
        +SUBSETS     = ':>'  | 'subsets'
        +REFERENCES  = '::>' | 'references'
        +CROSSES     = '=>'  | 'crosses'
        +REDEFINES   = ':>>' | 'redefines'
        +
        +INFO : PROCESSING Clause 8.2.2.2 Elements and Relationships Textual Notation +INFO : PROCESSING Clause 8.2.2.3 Dependencies Textual Notation +INFO : PROCESSING Clause 8.2.2.4 Annotations Textual Notation +INFO : PROCESSING Clause 8.2.2.4.1 Annotations +INFO : PROCESSING Clause 8.2.2.4.2 Comments and Documentation +INFO : PROCESSING Clause 8.2.2.4.3 Textual Representation +INFO : PROCESSING Clause 8.2.2.5 Namespaces and Packages Textual Notation +INFO : PROCESSING Clause 8.2.2.5.1 Packages +WARNING : Production start line does not contain exactly one '=': PackageMember : OwningMembership +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.5.1 in production: +PackageMember : OwningMembership + MemberPrefix + ( ownedRelatedElement += DefinitionElement + | ownedRelatedElement = UsageElement ) + +Unexpected token Token('NONTERMINAL_NAME', 'MemberPrefix') at line 2, column 5. +Expected one of: + * EQUAL +Previous tokens: [Token('NONTERMINAL_NAME', 'OwningMembership')] + +INFO : PROCESSING Clause 8.2.2.5.2 Package Elements +INFO : PROCESSING Clause 8.2.2.6 Definition and Usage Textual Notation +INFO : PROCESSING Clause 8.2.2.6.1 Definitions +WARNING : Production start line does not contain exactly one '=': DefinitionDeclaration : Definition +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.6.1 in production: +DefinitionDeclaration : Definition + Identification SubclassificationPart? + +Unexpected token Token('NONTERMINAL_NAME', 'Identification') at line 2, column 5. +Expected one of: + * EQUAL +Previous tokens: [Token('NONTERMINAL_NAME', 'Definition')] + +INFO : PROCESSING Clause 8.2.2.6.2 Usages +WARNING : Production start line does not contain exactly one '=': UsagePrefix : Usage +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.6.2 in production: +UsagePrefix : Usage + UnextendedUsagePrefix UsageExtensionKeyword* + +Unexpected token Token('NONTERMINAL_NAME', 'UnextendedUsagePrefix') at line 2, column 5. +Expected one of: + * EQUAL +Previous tokens: [Token('NONTERMINAL_NAME', 'Usage')] + +ERROR : Unexpected tag inside
         element: tag=(see Note 1)  
        +INFO    : PROCESSING Clause 8.2.2.6.3 Reference Usages
        +INFO    : PROCESSING Clause 8.2.2.6.4 Body Elements
        +INFO    : PROCESSING Clause 8.2.2.6.5 Specialization
        +INFO    : PROCESSING Clause 8.2.2.6.6 Multiplicity
        +INFO    : PROCESSING Clause 8.2.2.7 Attributes Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.8 Enumerations Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.9 Occurrences Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.9.1 Occurrence Definitions
        +INFO    : PROCESSING Clause 8.2.2.9.2 Occurrence Usages
        +INFO    : PROCESSING Clause 8.2.2.9.3 Occurrence Successions
        +INFO    : PROCESSING Clause 8.2.2.10 Items Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.11 Parts Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.12 Ports Textual Notation
        +ERROR   : Unexpected tag inside 
         element: tag=(See Note 1)
        +
        +ERROR   : Unexpected tag inside 
         element: tag=(See Note 2)
        +INFO    : PROCESSING Clause 8.2.2.13 Connections Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.13.1 Connection Definition and Usage
        +WARNING : Production start line does not contain exactly one '=': ConnectorEndMember : EndFeatureMembership :
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.13.1 in production:
        +ConnectorEndMember : EndFeatureMembership :
        +    ownedRelatedElement += ConnectorEnd
        +
        +Unexpected token Token('COLON', ':') at line 1, column 43.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'EndFeatureMembership')]
        +
        +INFO    : PROCESSING Clause 8.2.2.13.2 Binding Connectors
        +INFO    : PROCESSING Clause 8.2.2.13.3 Successions
        +INFO    : PROCESSING Clause 8.2.2.14 Interfaces Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.14.1 Interface Definitions
        +INFO    : PROCESSING Clause 8.2.2.14.2 Interface Usages
        +WARNING : Production start line does not contain exactly one '=': InterfaceEnd : PortUsage :
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.14.2 in production:
        +InterfaceEnd : PortUsage :
        +    ( ownedRelationship += OwnedCrossMultiplicityMember )?
        +    ( declaredName = NAME REFERENCES )?
        +    ownedRelationship += OwnedReferenceSubsetting
        +
        +Unexpected token Token('COLON', ':') at line 1, column 26.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'PortUsage')]
        +
        +INFO    : PROCESSING Clause 8.2.2.15 Allocations Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.16 Flows Textual Notation
        +WARNING : Production start line does not contain exactly one '=': FlowDefinition :
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.16 in production:
        +FlowDefinition :
        +    OccurrenceDefinitionPrefix 'flow' 'def' Definition
        +
        +Unexpected token Token('TERMINAL', "'flow'") at line 2, column 32.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'OccurrenceDefinitionPrefix')]
        +
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.16 in production:
        +PayloadFeatureSpecializationPart : Feature =
        +      ( -> FeatureSpecialization )+ MultiplicityPart?
        +      FeatureSpecialization*
        +    | MultiplicityPart FeatureSpecialization+
        +
        +No terminal matches '-' in the current parser context, at line 2 col 9
        +
        +      ( -> FeatureSpecialization )+ Multiplicity
        +        ^
        +Expected one of: 
        +	* PROPERTY_NAME
        +	* LEXICAL_NAME
        +	* LBRACE
        +	* QUALIFIED_NAME
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +	* TILDE
        +
        +Previous tokens: Token('LPAR', '(')
        +
        +ERROR   : Unexpected tag inside 
         element: tag=(See Note 1)
        +INFO    : PROCESSING Clause 8.2.2.17 Actions Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.17.1 Action Definitions
        +INFO    : PROCESSING Clause 8.2.2.17.2 Action Usages
        +INFO    : PROCESSING Clause 8.2.2.17.3 Control Nodes
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.17.3 in production:
        +ControlNodePrefix : OccurrenceUsage =
        +    RefPrefix
        +    ( isIndividual ?= 'individual )?
        +    ( portionKind = PortionKind
        +      { isPortion = true }
        +    )?
        +    UsageExtensionKeyword*
        +
        +No terminal matches ''' in the current parser context, at line 3 col 23
        +
        +    ( isIndividual ?= 'individual )?
        +                      ^
        +Expected one of: 
        +	* BOOLEAN_VALUE
        +	* LEXICAL_NAME
        +	* QUALIFIED_NAME
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +	* TILDE
        +
        +Previous tokens: Token('__ANON_1', '?=')
        +
        +INFO    : PROCESSING Clause 8.2.2.17.4 Send and Accept Action Usages
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.17.4 in production:
        +TriggerExpression : TriggerInvocationExpression =
        +      kind = ( 'at | 'after' )
        +      ownedRelationship += ArgumentMember
        +    | kind = 'when'
        +      ownedRelationship += ArgumentExpressionMember
        +
        +Unexpected token Token('PROPERTY_NAME', 'after') at line 2, column 23.
        +Expected one of: 
        +	* VBAR
        +
        +INFO    : PROCESSING Clause 8.2.2.17.5 Assignment Action Usages
        +INFO    : PROCESSING Clause 8.2.2.17.6 Terminate Action Usages
        +INFO    : PROCESSING Clause 8.2.2.17.7 Structured Control Action Usages
        +INFO    : PROCESSING Clause 8.2.2.17.8 Action Successions
        +INFO    : PROCESSING Clause 8.2.2.18 States Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.18.1 State Definitions
        +WARNING : Production start line does not contain exactly one '=': EntryTransitionMember : FeatureMembership :
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.18.1 in production:
        +EntryTransitionMember : FeatureMembership :
        +    MemberPrefix
        +    ( ownedRelatedElement += GuardedTargetSuccession
        +    | 'then' ownedRelatedElement += TargetSuccession
        +    ) ';'
        +
        +Unexpected token Token('COLON', ':') at line 1, column 43.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'FeatureMembership')]
        +
        +WARNING : Production start line does not contain exactly one '=': StateSendActionUsage : SendActionUsage
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.18.1 in production:
        +StateSendActionUsage : SendActionUsage
        +    SendNodeDeclaration ActionBody
        +
        +Unexpected token Token('NONTERMINAL_NAME', 'SendNodeDeclaration') at line 2, column 5.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'SendActionUsage')]
        +
        +INFO    : PROCESSING Clause 8.2.2.18.2 State Usages
        +INFO    : PROCESSING Clause 8.2.2.18.3 Transition Usages
        +INFO    : PROCESSING Clause 8.2.2.19 Calculations Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.20 Constraints Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.21 Requirements Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.21.1 Requirement Definitions
        +INFO    : PROCESSING Clause 8.2.2.21.2 Requirement Usages
        +INFO    : PROCESSING Clause 8.2.2.21.3 Concerns
        +INFO    : PROCESSING Clause 8.2.2.22 Cases Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.23 Analysis Cases Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.24 Verification Cases Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.25 Use Cases Textual Notation
        +WARNING : Production start line does not contain exactly one '=': IncludeUseCaseUsage :
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.25 in production:
        +IncludeUseCaseUsage :
        +    OccurrenceUsagePrefix 'include'
        +    ( ownedRelationship += OwnedReferenceSubsetting
        +      FeatureSpecializationPart?
        +    | 'use' 'case' UsageDeclaration )
        +    ValuePart?
        +    CaseBody
        +
        +Unexpected token Token('TERMINAL', "'include'") at line 2, column 27.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'OccurrenceUsagePrefix')]
        +
        +INFO    : PROCESSING Clause 8.2.2.26 Views and Viewpoints Textual Notation
        +INFO    : PROCESSING Clause 8.2.2.26.1 View Definitions
        +INFO    : PROCESSING Clause 8.2.2.26.2 View Usages
        +INFO    : PROCESSING Clause 8.2.2.26.3 Viewpoints
        +INFO    : PROCESSING Clause 8.2.2.26.4 Renderings
        +INFO    : PROCESSING Clause 8.2.2.27 Metadata Textual Notation
        +WARNING : Production start line does not contain exactly one '=': MetadataBodyUsage : ReferenceUsage :
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.2.27 in production:
        +MetadataBodyUsage : ReferenceUsage :
        +    'ref'? ( ':>>' | 'redefines' )? ownedRelationship += OwnedRedefinition
        +    FeatureSpecializationPart? ValuePart?
        +    MetadataBody
        +
        +Unexpected token Token('COLON', ':') at line 1, column 36.
        +Expected one of: 
        +	* EQUAL
        +Previous tokens: [Token('NONTERMINAL_NAME', 'ReferenceUsage')]
        +
        +INFO    : ===== Start of Textual Notation Grammar Checks
        +INFO    : Keywords extracted from textual BNF grammar scan:
        +    about abstract accept action actor after alias all allocate allocation analysis and as assert assign assume
        +    assumption at attribute bind binding by calc case comment concern connect connection constant constraint crosses
        +    decide def default defined dependency derived do doc effect else end entry enum event exhibit exit expose false
        +    filter first flow for fork frame from guard hastype if implies import in include individual inout interface istype
        +    item join language library locale loop merge message meta metadata nonunique not null objective occurrence of or
        +    ordered out package parallel part perform port private protected public redefines ref references render rendering
        +    rep require requirement return satisfy send snapshot specializes stakeholder standard state subject subsets
        +    succession terminate then timeslice to transition trigger true typed until use variant variation verification verify
        +    via view viewpoint when while xor
        +INFO    : Comparison of declared reserved keywords versus extracted keywords
        +INFO    : Declared reserved keywords not in extracted keywords:
        +
        +WARNING : Extracted keywords not in declared reserved keywords:
        +    assumption effect guard trigger typed
        +INFO    : ===== End of Textual Notation Grammar Checks
        +INFO    : ===== Start of Textual Notation Grammar Checks
        +INFO    : Keywords extracted from textual BNF grammar scan:
        +    about abstract accept action actor after alias all allocate allocation analysis and as assert assign assume
        +    assumption at attribute bind binding by calc case comment concern connect connection constant constraint crosses
        +    decide def default defined dependency derived do doc effect else end entry enum event exhibit exit expose false
        +    filter first flow for fork frame from guard hastype if implies import in include individual inout interface istype
        +    item join language library locale loop merge message meta metadata nonunique not null objective occurrence of or
        +    ordered out package parallel part perform port private protected public redefines ref references render rendering
        +    rep require requirement return satisfy send snapshot specializes stakeholder standard state subject subsets
        +    succession terminate then timeslice to transition trigger true typed until use variant variation verification verify
        +    via view viewpoint when while xor
        +INFO    : Comparison of declared reserved keywords versus extracted keywords
        +INFO    : Declared reserved keywords not in extracted keywords:
        +
        +WARNING : Extracted keywords not in declared reserved keywords:
        +    assumption effect guard trigger typed
        +INFO    : ===== End of Textual Notation Grammar Checks
        +INFO    : Dumping BNF grammar elements into tests\KerML_and_SysML_grammars\SysML-textual-bnf-elements.json
        +INFO    : Writing BNF grammar file tests\KerML_and_SysML_grammars\SysML-textual-bnf-marked_up.kebnf
        +INFO    : Writing BNF grammar file tests\KerML_and_SysML_grammars\SysML-textual-bnf.kebnf
        +INFO    : Writing BNF HTML file tests\KerML_and_SysML_grammars\SysML-textual-bnf.html
        +WARNING : Tokenize: Unexpected character '-' in state None at position 8 in line:       ( -> FeatureSpecialization )+ MultiplicityPart? 
        +WARNING : Tokenize: Missing single quote -> incomplete TERMINAL in line:     ( isIndividual ?= 'individual )?
        +WARNING : Tokenize: Space inside TERMINAL 'at | ' in line       kind = ( 'at | 'after' )
        +WARNING : Tokenize: Unexpected character ''' in state TokenKind.NON_TERMINAL at position 27 in line:       kind = ( 'at | 'after' )
        +WARNING : Grammar SysML-textual-bnf contains 6 unresolved non-terminal(s) ...
        +ERROR   : Cannot resolve CalculationUsageDeclaration in
        +    8.2.2.21.1:       CalculationUsageDeclaration CalculationBody
        +ERROR   : Cannot resolve DefinitionExtensionKeyWord in
        +    8.2.2.27:     ( isAbstract ?= 'abstract')? DefinitionExtensionKeyWord*
        +ERROR   : Cannot resolve EndFeatureMembership in
        +    8.2.2.13.1: ConnectorEndMember : EndFeatureMembership :
        +ERROR   : Cannot resolve FeatureMembership in
        +    8.2.2.18.1: EntryTransitionMember : FeatureMembership :
        +ERROR   : Cannot resolve FilterPackageImport in
        +    8.2.2.5.1:     ownedRelationship += FilterPackageImport
        +ERROR   : Cannot resolve SendReceiverPart in
        +    8.2.2.17.4:     | ownedRelationship += EmptyParameterMember SendReceiverPart )?
        +INFO    : ====================
        +INFO    : Extract BNF from tests\KerML_and_SysML_spec_sources\SysML-spec.html syntax-kind=graphical-bnf clause=8.2.3 at 2025-12-04T19:31:35Z
        +INFO    : ====================
        +INFO    : PROCESSING Part 2 - Systems Modeling Language (SysML)
        +INFO    : PROCESSING Clause 8.2.3 Graphical Notation
        +INFO    : PROCESSING Clause 8.2.3.1 Graphical Notation Overview
        +INFO    : PROCESSING Clause 8.2.3.2 Elements and Relationships Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': compartment =| general-compartment
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Production start line starts with a space or tab:  element-inside-textual-compartment =
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.3 Dependencies Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': dependencies-and-annotations-element =| dependencies-element
        +WARNING : Production start line does not contain exactly one '=': dependencies-element =|
        +ERROR   : Non-unique production name: element-node in {'element-inside-textual-compartment', 'binary-dependency', 'general-compartment', 'n-ary-dependency-client-or-supplier-link', 'n-ary-dependency-supplier-link', 'rel-name', 'element', 'general-view', 'element-node', 'n-ary-dependency', 'ellipsis-at-lower-left-corner', 'n-ary-association-dot', 'n-ary-dependency-client-link', 'general-element'}
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.4 Annotations Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': dependencies-and-annotations-element =|
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.5 Namespaces and Packages Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': general-node =| namespace-node
        +WARNING : Production start line does not contain exactly one '=': namespace-node =| package-node
        +WARNING : Production start line does not contain exactly one '=': compartment =| package-compartment
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.5 in production:
        +relationship-name = 'defines', 'defined by', 'specializes', 'specialized by', 'connect to',
        +      'subsets', 'subsetted by', 'performs', 'performed by', 'allocated', 'allocated to',
        +      'satisfy', 'satisfied by'
        +
        +No terminal matches ',' in the current parser context, at line 1 col 30
        +
        +relationship-name = 'defines', 'defined by', 'specializes', 'speciali
        +                             ^
        +Expected one of: 
        +	* VBAR
        +	* IMAGE
        +	* REPETITION_SYMBOL
        +	* LEXICAL_NAME
        +	* GRAPHICAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* RPAR
        +	* _NON_CONTINUATION_LINE
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +
        +Previous tokens: Token('TERMINAL', "'defines'")
        +
        +WARNING : Production start line does not contain exactly one '=': general-relationship =|
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.6 Definition and Usage Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': general-node =| type-node
        +INFO    : Parsed successfully 8.2.3.6:
        +general-node =| type-node
        +
        +start
        +  nonterminal_rule
        +    general-node
        +    name	type-node
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +type-node =
        +      definition-node
        +    | usage-node
        +
        +start
        +  nonterminal_rule
        +    type-node
        +    alternation
        +      name	definition-node
        +      name	usage-node
        +
        +WARNING : Production start line does not contain exactly one '=': general-node |= usage-node definition-node<
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.6 in production:
        +general-node |= usage-node definition-node<
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 14.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'general-node')]
        +
        +WARNING : Production start line does not contain exactly one '=': namespace-node =| type-node
        +INFO    : Parsed successfully 8.2.3.6:
        +namespace-node =| type-node
        +
        +start
        +  nonterminal_rule
        +    namespace-node
        +    name	type-node
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +definition-name-with-alias =
        +    DefinitionDeclaration
        +    ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?
        +
        +start
        +  nonterminal_rule
        +    definition-name-with-alias
        +    sequence
        +      name	DefinitionDeclaration
        +      expression
        +        sequence
        +          terminal	'«alias»'
        +          sequence
        +            name	QualifiedName
        +            expression
        +              sequence
        +                terminal	','
        +                name	QualifiedName
        +              repetition	*
        +        repetition	?
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +usage-name-with-alias =
        +    '^'? UsageDeclaration
        +    ( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?
        +
        +start
        +  nonterminal_rule
        +    usage-name-with-alias
        +    sequence
        +      expression
        +        terminal	'^'
        +        repetition	?
        +      name	UsageDeclaration
        +      expression
        +        sequence
        +          terminal	'«alias»'
        +          sequence
        +            name	QualifiedName
        +            expression
        +              sequence
        +                terminal	','
        +                name	QualifiedName
        +              repetition	*
        +        repetition	?
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +compartment-stack = (compartment)*
        +
        +start
        +  nonterminal_rule
        +    compartment-stack
        +    expression
        +      name	compartment
        +      repetition	*
        +
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.6 in production:
        +compartment =|
        +    | features-compartment
        +    | variants-compartment
        +    | variant-elementusages-compartment
        +
        +Unexpected token Token('VBAR', '|') at line 2, column 5.
        +Expected one of: 
        +	* IMAGE
        +	* NONTERMINAL_NAME
        +	* LBRACE
        +	* QUALIFIED_NAME
        +	* GRAPHICAL_NAME
        +	* LPAR
        +	* TERMINAL
        +	* LEXICAL_NAME
        +Previous tokens: [Token('__ANON_0', '=|')]
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +features-compartment =
        +      
        +      features-compartment-contents
        +
        +start
        +  nonterminal_rule
        +    features-compartment
        +    sequence
        +      image	
        +      name	features-compartment-contents
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +features-compartment-contents = (features-compartment-element)* '…'?
        +
        +start
        +  nonterminal_rule
        +    features-compartment-contents
        +    sequence
        +      expression
        +        name	features-compartment-element
        +        repetition	*
        +      expression
        +        terminal	'…'
        +        repetition	?
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +features-compartment-element = el-prefix? UsagePrefix usage-cp
        +
        +start
        +  nonterminal_rule
        +    features-compartment-element
        +    sequence
        +      expression
        +        name	el-prefix
        +        repetition	?
        +      name	UsagePrefix
        +      name	usage-cp
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +variants-compartment =
        +      
        +      variants-compartment-contents
        +
        +start
        +  nonterminal_rule
        +    variants-compartment
        +    sequence
        +      image	
        +      name	variants-compartment-contents
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +variants-compartment-contents = members-compartment-contents
        +
        +start
        +  nonterminal_rule
        +    variants-compartment-contents
        +    name	members-compartment-contents
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +variant-elementusages-compartment =
        +      
        +      variants-compartment-contents
        +
        +start
        +  nonterminal_rule
        +    variant-elementusages-compartment
        +    sequence
        +      image	
        +      name	variants-compartment-contents
        +
        +WARNING : Production start line does not contain exactly one '=': general-relationship =|
        +INFO    : Parsed successfully 8.2.3.6:
        +general-relationship =|
        +      type-relationship
        +
        +start
        +  nonterminal_rule
        +    general-relationship
        +    name	type-relationship
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +type-relationship =
        +      subclassification
        +    | subsetting
        +    | definition
        +    | redefinition
        +    | composite-feature-membership
        +    | noncomposite-feature-membership
        +
        +start
        +  nonterminal_rule
        +    type-relationship
        +    alternation
        +      name	subclassification
        +      name	subsetting
        +      name	definition
        +      name	redefinition
        +      name	composite-feature-membership
        +      name	noncomposite-feature-membership
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +subclassification =
        +      
        +
        +start
        +  nonterminal_rule
        +    subclassification
        +    image	
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +definition =
        +      
        +
        +start
        +  nonterminal_rule
        +    definition
        +    image	
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +subsetting =
        +      
        +
        +start
        +  nonterminal_rule
        +    subsetting
        +    image	
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +reference-subsetting =
        +      
        +
        +start
        +  nonterminal_rule
        +    reference-subsetting
        +    image	
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +redefinition =
        +      
        +
        +start
        +  nonterminal_rule
        +    redefinition
        +    image	
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +composite-feature-membership =
        +      
        +
        +start
        +  nonterminal_rule
        +    composite-feature-membership
        +    image	
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +noncomposite-feature-membership =
        +      
        +
        +start
        +  nonterminal_rule
        +    noncomposite-feature-membership
        +    image	
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +el-prefix = '^' | '/'
        +
        +start
        +  nonterminal_rule
        +    el-prefix
        +    alternation
        +      terminal	'^'
        +      terminal	'/'
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +usage-cp = usageDeclaration ValuePart?
        +
        +start
        +  nonterminal_rule
        +    usage-cp
        +    sequence
        +      name	usage
        +      name	Declaration
        +      expression
        +        name	ValuePart
        +        repetition	?
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +extended-def =
        +      
        +
        +start
        +  nonterminal_rule
        +    extended-def
        +    image	
        +
        +INFO    : Parsed successfully 8.2.3.6:
        +extended-def-name-compartment =
        +     '«' BasicDefinitionPrefix? DefinitionExtensionKeyword+ 'def' '»'
        +     definition-name-with-alias
        +
        +start
        +  nonterminal_rule
        +    extended-def-name-compartment
        +    sequence
        +      terminal	'«'
        +      expression
        +        name	BasicDefinitionPrefix
        +        repetition	?
        +      expression
        +        name	DefinitionExtensionKeyword
        +        repetition	+
        +      terminal	'def'
        +      terminal	'»'
        +      name	definition-name-with-alias
        +
        +WARNING : Graphical note found in 
        , but should be 

        element: Note. This production is only valid for cases where one or more +WARNING : Production start line does not contain exactly one '=': DefinitionExtensionKeyword names a MetadataDefinition that is a direct +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.6 in production: +DefinitionExtensionKeyword names a MetadataDefinition that is a direct + +Unexpected token Token('NONTERMINAL_NAME', 'DefinitionExtensionKeyword') at line 1, column 1. +Expected one of: + * LEXICAL_NAME + * LINE_COMMENT + * GRAPHICAL_NAME +Previous tokens: [None] + +WARNING : Production start line does not contain exactly one '=': or indirect specialization of KerML metaclass SemanticMetadata. +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.6 in production: +or indirect specialization of KerML metaclass SemanticMetadata. + +Unexpected token Token('GRAPHICAL_NAME', 'indirect') at line 1, column 4. +Expected one of: + * EQUAL + * "=|" +Previous tokens: [Token('GRAPHICAL_NAME', 'or')] + +WARNING : Production start line does not contain exactly one '=': definition-node |= extended-def +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.6 in production: +definition-node |= extended-def + +Unexpected token Token('VBAR', '|') at line 1, column 17. +Expected one of: + * EQUAL + * "=|" +Previous tokens: [Token('GRAPHICAL_NAME', 'definition-node')] + +INFO : Parsed successfully 8.2.3.6: +extended-usage = + + +start + nonterminal_rule + extended-usage + image + +INFO : Parsed successfully 8.2.3.6: +extended-usage-name-compartment = + '«' BasicUsagePrefix? UsageExtensionKeyword+ '»' + usage-name-with-alias + +start + nonterminal_rule + extended-usage-name-compartment + sequence + terminal '«' + expression + name BasicUsagePrefix + repetition ? + expression + name UsageExtensionKeyword + repetition + + terminal '»' + name usage-name-with-alias + +WARNING : Graphical note found in

        , but should be 

        element: Note. This production is only valid for cases where one or more +WARNING : Production start line does not contain exactly one '=': UsageExtensionKeyword names a MetadataDefinition that is a direct +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.6 in production: +UsageExtensionKeyword names a MetadataDefinition that is a direct + +Unexpected token Token('NONTERMINAL_NAME', 'UsageExtensionKeyword') at line 1, column 1. +Expected one of: + * LEXICAL_NAME + * LINE_COMMENT + * GRAPHICAL_NAME +Previous tokens: [None] + +ERROR : Non-unique production name: or indirect specialization of KerML metaclass SemanticMetadata. in {'language-string', 'comment-without-keyword', 'annotation-link', 'unowned-membership', 'features-compartment', 'composite-feature-membership', 'members-compartment-element', 'package-node', 'noncomposite-feature-membership', 'features-compartment-contents', 'extended-def-name-compartment', 'rel-name', 'definition-name-with-alias', 'general-view', 'element-node', 'comment-node', 'recursive-import', 'n-ary-association-dot', 'relationships-compartment-contents', 'subsetting', 'text-block', 'n-ary-dependency-client-link', 'element-inside-textual-compartment', 'package-compartment', 'packages-compartment', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'type-relationship', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'extended-usage-name-compartment', 'n-ary-dependency-supplier-link', 'variants-compartment', 'relationships-compartment', 'extended-def', 'redefinition', 'features-compartment-element', 'documentation-compartment', 'package-with-name-in-tab', 'relationships-compartment-element', 'definition', 'import', 'general-compartment', 'annotation-node', 'packages-compartment-element', 'members-compartment', 'type-node', 'top-level-import', 'documentation-node', 'element', 'textual-representation-node', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'extended-usage', 'imported-package-with-name-inside', 'reference-subsetting', 'comment-with-keyword', 'ellipsis-at-lower-left-corner', 'subclassification', 'usage-name-with-alias', 'general-element', 'owned-membership', 'packages-compartment-contents', 'n-ary-dependency-client-or-supplier-link', 'members-compartment-contents', 'el-prefix', 'definition-node |', 'general-node |', 'package-with-name-inside', 'n-ary-dependency', 'variants-compartment-contents', 'usage-cp', 'compartment-stack', 'annotated-element', 'relationship-name', 'imported-package-with-name-in-tab'} +WARNING : Production start line does not contain exactly one '=': or indirect specialization of KerML metaclass SemanticMetadata. +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.6 in production: +or indirect specialization of KerML metaclass SemanticMetadata. + +Unexpected token Token('GRAPHICAL_NAME', 'indirect') at line 1, column 4. +Expected one of: + * EQUAL + * "=|" +Previous tokens: [Token('GRAPHICAL_NAME', 'or')] + +WARNING : Production start line does not contain exactly one '=': usage-node |= extended-usage +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.6 in production: +usage-node |= extended-usage + +Unexpected token Token('VBAR', '|') at line 1, column 12. +Expected one of: + * EQUAL + * "=|" +Previous tokens: [Token('GRAPHICAL_NAME', 'usage-node')] + +ERROR : Unexpected tag inside

         element: tag=features
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.7 Attributes Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| attribute-def
        +WARNING : Production start line does not contain exactly one '=': usage-node =| attribute
        +WARNING : Production start line does not contain exactly one '=': compartment =| attributes-compartment
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.8 Enumerations Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| enumeration-def
        +WARNING : Production start line does not contain exactly one '=': usage-node =| enumeration
        +WARNING : Production start line does not contain exactly one '=': compartment =| enums-compartment
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.8 in production:
        +enums-compartment_contents = (enums-compartment-element)* '…'?
        +
        +No terminal matches '_' in the current parser context, at line 1 col 18
        +
        +enums-compartment_contents = (enums-compartment-element)*
        +                 ^
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +
        +Previous tokens: Token('GRAPHICAL_NAME', 'enums-compartment')
        +
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.9 Occurrences Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| occurrence-def
        +WARNING : Production start line does not contain exactly one '=': general-relationship =| portion-relationship
        +WARNING : Production start line does not contain exactly one '=': usage-node =|
        +WARNING : Production start line does not contain exactly one '=': snapshots-name-compartment
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.9 in production:
        +snapshots-name-compartment
        +      '«snapshot»'
        +      usage-name-with-alias
        +
        +Unexpected token Token('TERMINAL', "'«snapshot»'") at line 2, column 7.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'snapshots-name-compartment')]
        +
        +ERROR   : Non-unique production name: definition-node | in {'comment-without-keyword', 'annotation-link', 'members-compartment-element', 'attributes-compartment-contents', 'features-compartment-contents', 'relationships-compartment-contents', 'n-ary-dependency-client-link', 'packages-compartment', 'enums-compartment', 'n-ary-dependency-supplier-link', 'relationships-compartment', 'features-compartment-element', 'documentation-compartment', 'relationships-compartment-element', 'usage-node |', 'definition', 'general-compartment', 'packages-compartment-element', 'type-node', 'top-level-import', 'imported-package-with-name-inside', 'reference-subsetting', 'packages-compartment-contents', 'timeslice', 'general-node |', 'snapshots-name-compartment', 'event-occurrence-def-name-compartment', 'package-compartment', 'variants-compartment', 'features-compartment', 'noncomposite-feature-membership', 'snapshot', 'element-node', 'text-block', 'enums-compartment_contents', 'element-inside-textual-compartment', 'enumeration-def-name-compartment', 'attributes-compartment', 'redefinition', 'attribute-def', 'annotation-node', 'occurrence-name-compartment', 'element', 'textual-representation-node', 'definition-node |', 'occurrence-def', 'variants-compartment-contents', 'enumeration-def', 'annotated-element', 'unowned-membership', 'package-node', 'extended-def-name-compartment', 'definition-name-with-alias', 'attributes-compartment-element', 'general-view', 'comment-node', 'subsetting', 'extended-usage-name-compartment', 'occurrence-def-name-compartment', 'timeslice-name-compartment', 'occurrence', 'package-with-name-in-tab', 'import', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'extended-usage', 'ellipsis-at-lower-left-corner', 'general-element', 'enumeration', 'attribute', 'usage-cp', 'members-compartment', 'subclassification', 'relationship-name', 'imported-package-with-name-in-tab', 'language-string', 'composite-feature-membership', 'rel-name', 'recursive-import', 'n-ary-association-dot', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'type-relationship', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'extended-def', 'occurrence-ref', 'enums-compartment-element', 'event-occurrence-def', 'documentation-node', 'attribute-def-name-compartment', 'comment-with-keyword', 'usage-name-with-alias', 'owned-membership', 'n-ary-dependency-client-or-supplier-link', 'members-compartment-contents', 'el-prefix', 'attribute-name-compartment', 'package-with-name-inside', 'n-ary-dependency', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'compartment-stack'}
        +WARNING : Production start line does not contain exactly one '=': definition-node |= event-occurrence-def
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.9 in production:
        +definition-node |= event-occurrence-def
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 17.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'definition-node')]
        +
        +ERROR   : Non-unique production name: usage-node | in {'comment-without-keyword', 'annotation-link', 'members-compartment-element', 'attributes-compartment-contents', 'features-compartment-contents', 'relationships-compartment-contents', 'n-ary-dependency-client-link', 'packages-compartment', 'enums-compartment', 'n-ary-dependency-supplier-link', 'relationships-compartment', 'features-compartment-element', 'documentation-compartment', 'relationships-compartment-element', 'usage-node |', 'definition', 'general-compartment', 'packages-compartment-element', 'type-node', 'top-level-import', 'imported-package-with-name-inside', 'reference-subsetting', 'packages-compartment-contents', 'timeslice', 'general-node |', 'snapshots-name-compartment', 'event-occurrence-def-name-compartment', 'package-compartment', 'variants-compartment', 'features-compartment', 'noncomposite-feature-membership', 'snapshot', 'element-node', 'text-block', 'enums-compartment_contents', 'element-inside-textual-compartment', 'enumeration-def-name-compartment', 'attributes-compartment', 'redefinition', 'attribute-def', 'annotation-node', 'occurrence-name-compartment', 'element', 'textual-representation-node', 'definition-node |', 'occurrence-def', 'variants-compartment-contents', 'enumeration-def', 'annotated-element', 'unowned-membership', 'package-node', 'extended-def-name-compartment', 'definition-name-with-alias', 'attributes-compartment-element', 'general-view', 'comment-node', 'subsetting', 'extended-usage-name-compartment', 'occurrence-def-name-compartment', 'timeslice-name-compartment', 'occurrence', 'package-with-name-in-tab', 'import', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'extended-usage', 'event-occurrence', 'ellipsis-at-lower-left-corner', 'general-element', 'enumeration', 'attribute', 'usage-cp', 'members-compartment', 'subclassification', 'relationship-name', 'imported-package-with-name-in-tab', 'language-string', 'composite-feature-membership', 'rel-name', 'recursive-import', 'n-ary-association-dot', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'type-relationship', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'extended-def', 'occurrence-ref', 'enums-compartment-element', 'event-occurrence-def', 'documentation-node', 'attribute-def-name-compartment', 'comment-with-keyword', 'usage-name-with-alias', 'owned-membership', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'members-compartment-contents', 'el-prefix', 'attribute-name-compartment', 'package-with-name-inside', 'n-ary-dependency', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'compartment-stack'}
        +WARNING : Production start line does not contain exactly one '=': usage-node |= event-occurrence
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.9 in production:
        +usage-node |= event-occurrence
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 12.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'usage-node')]
        +
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.9 in production:
        +eventer = usage-node | definition-node<
        +
        +No terminal matches '<' in the current parser context, at line 1 col 39
        +
        +eventer = usage-node | definition-node<
        +                                      ^
        +Expected one of: 
        +	* VBAR
        +	* IMAGE
        +	* REPETITION_SYMBOL
        +	* LEXICAL_NAME
        +	* GRAPHICAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* RPAR
        +	* _NON_CONTINUATION_LINE
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +
        +Previous tokens: Token('GRAPHICAL_NAME', 'definition-node')
        +
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +ERROR   : Non-unique production name: succession-label in {'sq-succession', 'comment-without-keyword', 'annotation-link', 'members-compartment-element', 'attributes-compartment-contents', 'features-compartment-contents', 'relationships-compartment-contents', 'eventer', 'n-ary-dependency-client-link', 'packages-compartment', 'enums-compartment', 'n-ary-dependency-supplier-link', 'relationships-compartment', 'sq-graphical-relationship', 'features-compartment-element', 'documentation-compartment', 'relationships-compartment-element', 'usage-node |', 'definition', 'general-compartment', 'packages-compartment-element', 'type-node', 'top-level-import', 'sq-part', 'imported-package-with-name-inside', 'reference-subsetting', 'event-edge', 'individuals-compartment-contents', 'packages-compartment-contents', 'timeslice', 'general-node |', 'snapshots-name-compartment', 'event-occurrence-def-name-compartment', 'package-compartment', 'variants-compartment', 'features-compartment', 'noncomposite-feature-membership', 'snapshot', 'snapshots-compartment-element', 'snapshots-compartment-contents', 'element-node', 'occurrences-compartment-element', 'text-block', 'enums-compartment_contents', 'element-inside-textual-compartment', 'enumeration-def-name-compartment', 'attributes-compartment', 'redefinition', 'portion-relationship', 'attribute-def', 'individuals-compartment-element', 'annotation-node', 'occurrence-name-compartment', 'element', 'textual-representation-node', 'sq-l-node', 'timeslices-compartment-contents', 'individuals-compartment', 'definition-node |', 'occurrence-def', 'variants-compartment-contents', 'enumeration-def', 'annotated-element', 'unowned-membership', 'sq-graphical-element', 'package-node', 'extended-def-name-compartment', 'definition-name-with-alias', 'attributes-compartment-element', 'general-view', 'comment-node', 'sequence-compartment', 'subsetting', 'extended-usage-name-compartment', 'occurrence-def-name-compartment', 'succession-label', 'timeslice-name-compartment', 'occurrence', 'package-with-name-in-tab', 'proxy-label', 'import', 'occurrences-compartment-contents', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'extended-usage', 'event-occurrence', 'lifeline', 'ellipsis-at-lower-left-corner', 'general-element', 'enumeration', 'attribute', 'timeslices-compartment-element', 'sq-port', 'usage-cp', 'members-compartment', 'subclassification', 'relationship-name', 'imported-package-with-name-in-tab', 'language-string', 'composite-feature-membership', 'snapshots-compartment', 'rel-name', 'sq-proxy', 'recursive-import', 'n-ary-association-dot', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'type-relationship', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'occurrences-compartment', 'extended-def', 'occurrence-ref', 'enums-compartment-element', 'sequence-view', 'sq-graphical-node', 'timeslices-compartment', 'event-occurrence-def', 'documentation-node', 'sq-head-node', 'attribute-def-name-compartment', 'comment-with-keyword', 'usage-name-with-alias', 'owned-membership', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'members-compartment-contents', 'el-prefix', 'attribute-name-compartment', 'sq-port-label', 'package-with-name-inside', 'n-ary-dependency', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'compartment-stack'}
        +WARNING : Graphical note found in 
        , but should be 

        element: Note: the proxy nodes attached to a succession must refer to an event +ERROR : Unexpected tag inside

         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.10 Items Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| item-def
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.10 in production:
        +interconnection-element = | item| item-ref
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 27.
        +Expected one of: 
        +	* IMAGE
        +	* NONTERMINAL_NAME
        +	* LBRACE
        +	* QUALIFIED_NAME
        +	* GRAPHICAL_NAME
        +	* LPAR
        +	* TERMINAL
        +	* LEXICAL_NAME
        +Previous tokens: [Token('EQUAL', '=')]
        +
        +WARNING : Production start line does not contain exactly one '=': usage-node =| item
        +WARNING : Production start line does not contain exactly one '=': compartment =| items-compartment
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.11 Parts Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| part-def
        +ERROR   : Non-unique production name: interconnection-element in {'sq-succession', 'comment-without-keyword', 'annotation-link', 'members-compartment-element', 'attributes-compartment-contents', 'features-compartment-contents', 'relationships-compartment-contents', 'eventer', 'items-compartment-contents', 'n-ary-dependency-client-link', 'packages-compartment', 'enums-compartment', 'n-ary-dependency-supplier-link', 'relationships-compartment', 'sq-graphical-relationship', 'features-compartment-element', 'documentation-compartment', 'relationships-compartment-element', 'usage-node |', 'definition', 'general-compartment', 'packages-compartment-element', 'type-node', 'top-level-import', 'sq-part', 'imported-package-with-name-inside', 'reference-subsetting', 'event-edge', 'individuals-compartment-contents', 'packages-compartment-contents', 'timeslice', 'general-node |', 'snapshots-name-compartment', 'event-occurrence-def-name-compartment', 'package-compartment', 'variants-compartment', 'features-compartment', 'noncomposite-feature-membership', 'snapshot', 'snapshots-compartment-element', 'snapshots-compartment-contents', 'element-node', 'occurrences-compartment-element', 'text-block', 'enums-compartment_contents', 'element-inside-textual-compartment', 'enumeration-def-name-compartment', 'item-ref', 'attributes-compartment', 'redefinition', 'portion-relationship', 'attribute-def', 'individuals-compartment-element', 'annotation-node', 'interconnection-element', 'items-compartment', 'occurrence-name-compartment', 'element', 'textual-representation-node', 'sq-l-node', 'timeslices-compartment-contents', 'individuals-compartment', 'definition-node |', 'occurrence-def', 'variants-compartment-contents', 'enumeration-def', 'annotated-element', 'unowned-membership', 'item-def-name-compartment', 'sq-graphical-element', 'package-node', 'extended-def-name-compartment', 'definition-name-with-alias', 'attributes-compartment-element', 'general-view', 'comment-node', 'sequence-compartment', 'item', 'subsetting', 'extended-usage-name-compartment', 'occurrence-def-name-compartment', 'succession-label', 'timeslice-name-compartment', 'occurrence', 'package-with-name-in-tab', 'proxy-label', 'import', 'occurrences-compartment-contents', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'extended-usage', 'event-occurrence', 'lifeline', 'ellipsis-at-lower-left-corner', 'general-element', 'enumeration', 'attribute', 'timeslices-compartment-element', 'sq-port', 'usage-cp', 'members-compartment', 'subclassification', 'relationship-name', 'imported-package-with-name-in-tab', 'language-string', 'composite-feature-membership', 'snapshots-compartment', 'rel-name', 'sq-proxy', 'recursive-import', 'n-ary-association-dot', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'type-relationship', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'occurrences-compartment', 'extended-def', 'occurrence-ref', 'enums-compartment-element', 'sequence-view', 'sq-graphical-node', 'timeslices-compartment', 'event-occurrence-def', 'item-name-compartment', 'documentation-node', 'sq-head-node', 'items-compartment-element', 'attribute-def-name-compartment', 'comment-with-keyword', 'usage-name-with-alias', 'owned-membership', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'members-compartment-contents', 'el-prefix', 'attribute-name-compartment', 'sq-port-label', 'package-with-name-inside', 'n-ary-dependency', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'compartment-stack', 'item-def'}
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.11 in production:
        +interconnection-element = | part | part-ref
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 27.
        +Expected one of: 
        +	* IMAGE
        +	* NONTERMINAL_NAME
        +	* LBRACE
        +	* QUALIFIED_NAME
        +	* GRAPHICAL_NAME
        +	* LPAR
        +	* TERMINAL
        +	* LEXICAL_NAME
        +Previous tokens: [Token('EQUAL', '=')]
        +
        +WARNING : Production start line does not contain exactly one '=': usage-node =| part
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.11 in production:
        +directed-features-compartment-element =
        +  el-prefix FeatureDirection Definition-Body-Item*
        +
        +No terminal matches '-' in the current parser context, at line 2 col 40
        +
        +  el-prefix FeatureDirection Definition-Body-Item*
        +                                       ^
        +Expected one of: 
        +	* VBAR
        +	* IMAGE
        +	* REPETITION_SYMBOL
        +	* LEXICAL_NAME
        +	* GRAPHICAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* RPAR
        +	* _NON_CONTINUATION_LINE
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +
        +Previous tokens: Token('NONTERMINAL_NAME', 'Definition')
        +
        +WARNING : Production start line does not contain exactly one '=': interconnection-view =|
        +WARNING : Production start line does not contain exactly one '=': general-view =| interconnection-view
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.12 Ports Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| port-def
        +WARNING : Production start line does not contain exactly one '=': usage-node =| port-usage
        +WARNING : Production start line does not contain exactly one '=': compartment =| ports-compartment
        +WARNING : Production start line does not contain exactly one '=': interconnection-element =| port-def | port
        +ERROR   : Unexpected empty line in candidate production: 
        +    |
        +      
        +    |
        +      proxy-v
        +ERROR   : Production start line starts with a space or tab:     |
        +WARNING : Production start line does not contain exactly one '=': |
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.12 in production:
        +    |
        +      
        +    |
        +      proxy-v
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 5.
        +Expected one of: 
        +	* LEXICAL_NAME
        +	* LINE_COMMENT
        +	* GRAPHICAL_NAME
        +Previous tokens: [None]
        +
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.13 Connections Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| connection-def
        +WARNING : Production start line does not contain exactly one '=': usage-node =| connection
        +WARNING : Production start line does not contain exactly one '=': compartment =| connections-compartment
        +WARNING : Production start line does not contain exactly one '=': interconnection-element =|
        +WARNING : Production start line does not contain exactly one '=': usage-edge =| connection-graphical | binding-connection
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.13 in production:
        +connection-def-graphical =
        +      
        +    |
        +       general-relationship |= connection-def-graphical
        +
        +Unexpected token Token('EQUAL', '=') at line 4, column 98.
        +Expected one of: 
        +	* IMAGE
        +	* NONTERMINAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* GRAPHICAL_NAME
        +	* LPAR
        +	* TERMINAL
        +	* LEXICAL_NAME
        +Previous tokens: [Token('VBAR', '|')]
        +
        +ERROR   : Non-unique production name: definition-node | in {'sq-succession', 'comment-without-keyword', 'annotation-link', 'connection-def-name-compartment', 'members-compartment-element', 'attributes-compartment-contents', 'features-compartment-contents', 'part-name-compartment', 'relationships-compartment-contents', 'eventer', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'packages-compartment', 'a-property', 'enums-compartment', 'port-def', 'n-ary-dependency-supplier-link', 'relationships-compartment', 'sq-graphical-relationship', 'features-compartment-element', 'documentation-compartment', 'relationships-compartment-element', 'usage-node |', 'definition', 'general-compartment', 'packages-compartment-element', 'type-node', 'port-t', 'top-level-import', 'part-def', 'sq-part', 'imported-package-with-name-inside', 'reference-subsetting', 'event-edge', 'port-label', 'individuals-compartment-contents', 'connection-def-graphical', 'packages-compartment-contents', 'timeslice', 'connections-compartment-contents', 'general-node |', 'snapshots-name-compartment', 'event-occurrence-def-name-compartment', 'package-compartment', 'variants-compartment', 'features-compartment', 'a-direction', 'connection-relationship', 'noncomposite-feature-membership', 'snapshot', 'snapshots-compartment-element', 'snapshots-compartment-contents', 'element-node', 'occurrences-compartment-element', 'directed-features-compartment', 'pdv', 'text-block', 'enums-compartment_contents', 'element-inside-textual-compartment', 'enumeration-def-name-compartment', 'item-ref', 'attributes-compartment', 'redefinition', 'portion-relationship', 'port-usage', 'proxy-v', 'attribute-def', 'individuals-compartment-element', 'annotation-node', 'interconnection-element', 'items-compartment', 'port-r', 'occurrence-name-compartment', 'element', 'textual-representation-node', '|', 'sq-l-node', 'timeslices-compartment-contents', 'directed-features-compartment-contents', 'connection-name-compartment', 'individuals-compartment', 'n-ary-def-segment', 'definition-node |', 'occurrence-def', 'connection-label', 'variants-compartment-contents', 'enumeration-def', 'annotated-element', 'unowned-membership', 'item-def-name-compartment', 'sq-graphical-element', 'package-node', 'extended-def-name-compartment', 'definition-name-with-alias', 'attributes-compartment-element', 'general-view', 'parts-compartment', 'comment-node', 'sequence-compartment', 'item', 'subsetting', 'extended-usage-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'timeslice-name-compartment', 'parts-compartment-contents', 'occurrence', 'connection', 'package-with-name-in-tab', 'port-l', 'proxy-label', 'import', 'n-ary-def-connection-dot', 'occurrences-compartment-contents', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'extended-usage', 'event-occurrence', 'lifeline', 'ellipsis-at-lower-left-corner', 'part', 'parts-compartment-element', 'part-def-name-compartment', 'general-element', 'enumeration', 'directed-features-compartment-element', 'connection-graphical', 'attribute', 'connection-def', 'timeslices-compartment-element', 'ports-compartment-contents', 'cdef-label', 'c-adornment', 'n-ary-connection-def', 'sq-port', 'connection-end', 'usage-cp', 'members-compartment', 'subclassification', 'relationship-name', 'imported-package-with-name-in-tab', 'language-string', 'composite-feature-membership', 'snapshots-compartment', 'rel-name', 'sq-proxy', 'ports-compartment-element', 'recursive-import', 'n-ary-association-dot', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'type-relationship', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'occurrences-compartment', 'extended-def', 'interconnection-compartment', 'port-def-name-compartment', 'occurrence-ref', 'enums-compartment-element', 'port-b', 'ports-compartment', 'sequence-view', 'sq-graphical-node', 'timeslices-compartment', 'event-occurrence-def', 'item-name-compartment', 'documentation-node', 'a-subsetting', 'sq-head-node', 'items-compartment-element', 'attribute-def-name-compartment', 'comment-with-keyword', 'part-ref', 'usage-name-with-alias', 'owned-membership', 'event-occurrence-name-compartment', 'pdh', 'n-ary-dependency-client-or-supplier-link', 'members-compartment-contents', 'el-prefix', 'attribute-name-compartment', 'sq-port-label', 'package-with-name-inside', 'n-ary-dependency', 'port-name-compartment', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'connections-compartment', 'compartment-stack', 'proxy-h', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': definition-node |= n-ary-def-connection-dot
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.13 in production:
        +definition-node |= n-ary-def-connection-dot
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 17.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'definition-node')]
        +
        +WARNING : Production start line does not contain exactly one '=': general-relationship |= n-ary-def-segment
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.13 in production:
        +general-relationship |= n-ary-def-segment
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 22.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'general-relationship')]
        +
        +ERROR   : Non-unique production name: usage-node | in {'sq-succession', 'comment-without-keyword', 'annotation-link', 'connection-def-name-compartment', 'members-compartment-element', 'attributes-compartment-contents', 'features-compartment-contents', 'part-name-compartment', 'relationships-compartment-contents', 'eventer', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'n-ary-connection', 'packages-compartment', 'a-property', 'enums-compartment', 'port-def', 'n-ary-dependency-supplier-link', 'n-ary-connection-dot', 'relationships-compartment', 'sq-graphical-relationship', 'features-compartment-element', 'documentation-compartment', 'relationships-compartment-element', 'usage-node |', 'definition', 'general-compartment', 'packages-compartment-element', 'type-node', 'port-t', 'top-level-import', 'part-def', 'sq-part', 'imported-package-with-name-inside', 'reference-subsetting', 'event-edge', 'port-label', 'individuals-compartment-contents', 'connection-def-graphical', 'packages-compartment-contents', 'timeslice', 'general-relationship |', 'connections-compartment-contents', 'general-node |', 'snapshots-name-compartment', 'event-occurrence-def-name-compartment', 'package-compartment', 'variants-compartment', 'features-compartment', 'a-direction', 'connection-relationship', 'noncomposite-feature-membership', 'snapshot', 'snapshots-compartment-element', 'snapshots-compartment-contents', 'element-node', 'occurrences-compartment-element', 'directed-features-compartment', 'pdv', 'text-block', 'enums-compartment_contents', 'element-inside-textual-compartment', 'enumeration-def-name-compartment', 'item-ref', 'attributes-compartment', 'redefinition', 'portion-relationship', 'port-usage', 'proxy-v', 'attribute-def', 'individuals-compartment-element', 'annotation-node', 'interconnection-element', 'items-compartment', 'port-r', 'occurrence-name-compartment', 'element', 'textual-representation-node', '|', 'sq-l-node', 'timeslices-compartment-contents', 'directed-features-compartment-contents', 'connection-name-compartment', 'individuals-compartment', 'n-ary-def-segment', 'definition-node |', 'occurrence-def', 'connection-label', 'variants-compartment-contents', 'enumeration-def', 'annotated-element', 'unowned-membership', 'item-def-name-compartment', 'sq-graphical-element', 'package-node', 'extended-def-name-compartment', 'definition-name-with-alias', 'attributes-compartment-element', 'general-view', 'parts-compartment', 'comment-node', 'sequence-compartment', 'item', 'subsetting', 'extended-usage-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'timeslice-name-compartment', 'parts-compartment-contents', 'occurrence', 'connection', 'package-with-name-in-tab', 'port-l', 'proxy-label', 'import', 'n-ary-def-connection-dot', 'occurrences-compartment-contents', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'extended-usage', 'event-occurrence', 'lifeline', 'ellipsis-at-lower-left-corner', 'part', 'parts-compartment-element', 'part-def-name-compartment', 'general-element', 'enumeration', 'directed-features-compartment-element', 'connection-graphical', 'attribute', 'connection-def', 'timeslices-compartment-element', 'ports-compartment-contents', 'cdef-label', 'c-adornment', 'n-ary-connection-def', 'sq-port', 'connection-end', 'usage-cp', 'members-compartment', 'subclassification', 'relationship-name', 'imported-package-with-name-in-tab', 'language-string', 'composite-feature-membership', 'snapshots-compartment', 'rel-name', 'sq-proxy', 'ports-compartment-element', 'recursive-import', 'n-ary-association-dot', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'type-relationship', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'occurrences-compartment', 'extended-def', 'interconnection-compartment', 'port-def-name-compartment', 'occurrence-ref', 'enums-compartment-element', 'port-b', 'ports-compartment', 'sequence-view', 'sq-graphical-node', 'timeslices-compartment', 'event-occurrence-def', 'item-name-compartment', 'documentation-node', 'a-subsetting', 'sq-head-node', 'items-compartment-element', 'attribute-def-name-compartment', 'comment-with-keyword', 'part-ref', 'usage-name-with-alias', 'owned-membership', 'event-occurrence-name-compartment', 'pdh', 'n-ary-dependency-client-or-supplier-link', 'members-compartment-contents', 'el-prefix', 'attribute-name-compartment', 'sq-port-label', 'package-with-name-inside', 'n-ary-dependency', 'port-name-compartment', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'connections-compartment', 'compartment-stack', 'proxy-h', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': usage-node |= n-ary-connection-dot
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.13 in production:
        +usage-node |= n-ary-connection-dot
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 12.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'usage-node')]
        +
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.14 Interfaces Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| interface-def
        +WARNING : Production start line does not contain exactly one '=': interconnection-element =| interface
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.14 in production:
        +interface-def-name-compartment =
        +      '«' DefinitionPrefix 'interface' 'def' '»'
        +      definition-name-with-alias<
        +
        +No terminal matches '<' in the current parser context, at line 3 col 33
        +
        +      definition-name-with-alias<
        +                                ^
        +Expected one of: 
        +	* VBAR
        +	* IMAGE
        +	* REPETITION_SYMBOL
        +	* LEXICAL_NAME
        +	* GRAPHICAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* RPAR
        +	* _NON_CONTINUATION_LINE
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +
        +Previous tokens: Token('GRAPHICAL_NAME', 'definition-name-with-alias')
        +
        +WARNING : Production start line does not contain exactly one '=': usage-node =| interface
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +ERROR   : Non-unique production name: connection-relationship in {'sq-succession', 'comment-without-keyword', 'annotation-link', 'connection-def-name-compartment', 'connection-usage-elaboration', 'members-compartment-element', 'attributes-compartment-contents', 'interface', 'features-compartment-contents', 'part-name-compartment', 'relationships-compartment-contents', 'eventer', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'n-ary-connection', 'interfaces-compartment-element', 'packages-compartment', 'a-property', 'ends-compartment', 'enums-compartment', 'port-def', 'n-ary-dependency-supplier-link', 'n-ary-connection-dot', 'relationships-compartment', 'sq-graphical-relationship', 'features-compartment-element', 'binding-connection', 'documentation-compartment', 'relationships-compartment-element', 'usage-node |', 'definition', 'general-compartment', 'packages-compartment-element', 'type-node', 'port-t', 'top-level-import', 'part-def', 'sq-part', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'event-edge', 'port-label', 'individuals-compartment-contents', 'connection-def-graphical', 'packages-compartment-contents', 'timeslice', 'general-relationship |', 'connections-compartment-contents', 'general-node |', 'snapshots-name-compartment', 'event-occurrence-def-name-compartment', 'package-compartment', 'variants-compartment', 'features-compartment', 'a-direction', 'connection-relationship', 'noncomposite-feature-membership', 'snapshot', 'snapshots-compartment-element', 'snapshots-compartment-contents', 'element-node', 'occurrences-compartment-element', 'directed-features-compartment', 'pdv', 'text-block', 'enums-compartment_contents', 'element-inside-textual-compartment', 'interfaces-compartment', 'enumeration-def-name-compartment', 'item-ref', 'attributes-compartment', 'redefinition', 'portion-relationship', 'interface-def-name-compartment', 'port-usage', 'proxy-v', 'attribute-def', 'individuals-compartment-element', 'annotation-node', 'interconnection-element', 'items-compartment', 'port-r', 'occurrence-name-compartment', 'element', 'textual-representation-node', '|', 'sq-l-node', 'timeslices-compartment-contents', 'directed-features-compartment-contents', 'connection-name-compartment', 'individuals-compartment', 'n-ary-def-segment', 'definition-node |', 'occurrence-def', 'connection-label', 'variants-compartment-contents', 'enumeration-def', 'annotated-element', 'unowned-membership', 'item-def-name-compartment', 'ends-compartment-element', 'sq-graphical-element', 'package-node', 'extended-def-name-compartment', 'definition-name-with-alias', 'attributes-compartment-element', 'general-view', 'parts-compartment', 'comment-node', 'sequence-compartment', 'item', 'subsetting', 'extended-usage-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'n-ary-segment', 'timeslice-name-compartment', 'parts-compartment-contents', 'occurrence', 'connection', 'interfaces-compartment-contents', 'package-with-name-in-tab', 'port-l', 'proxy-label', 'import', 'n-ary-def-connection-dot', 'occurrences-compartment-contents', 'timeslice-or-snapshot-node', 'interface-name-compartment', 'enumeration-name-compartment', 'extended-usage', 'event-occurrence', 'lifeline', 'ellipsis-at-lower-left-corner', 'part', 'parts-compartment-element', 'part-def-name-compartment', 'general-element', 'enumeration', 'directed-features-compartment-element', 'connection-graphical', 'attribute', 'connection-def', 'cdot-label', 'timeslices-compartment-element', 'ports-compartment-contents', 'cdef-label', 'c-adornment', 'n-ary-connection-def', 'sq-port', 'connection-end', 'usage-cp', 'members-compartment', 'subclassification', 'relationship-name', 'imported-package-with-name-in-tab', 'language-string', 'composite-feature-membership', 'snapshots-compartment', 'rel-name', 'sq-proxy', 'ports-compartment-element', 'recursive-import', 'n-ary-association-dot', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'type-relationship', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'occurrences-compartment', 'extended-def', 'interconnection-compartment', 'port-def-name-compartment', 'occurrence-ref', 'enums-compartment-element', 'port-b', 'ports-compartment', 'sequence-view', 'sq-graphical-node', 'timeslices-compartment', 'event-occurrence-def', 'item-name-compartment', 'documentation-node', 'a-subsetting', 'sq-head-node', 'items-compartment-element', 'attribute-def-name-compartment', 'interface-def', 'comment-with-keyword', 'part-ref', 'usage-name-with-alias', 'owned-membership', 'event-occurrence-name-compartment', 'pdh', 'n-ary-dependency-client-or-supplier-link', 'members-compartment-contents', 'el-prefix', 'rolename', 'attribute-name-compartment', 'connection-definition-elaboration', 'ends-compartment-contents', 'sq-port-label', 'package-with-name-inside', 'n-ary-dependency', 'port-name-compartment', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'connections-compartment', 'compartment-stack', 'proxy-h', 'item-def'}
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.14 in production:
        +connection-relationship =
        +    | interface-connection
        +
        +Unexpected token Token('VBAR', '|') at line 2, column 5.
        +Expected one of: 
        +	* IMAGE
        +	* NONTERMINAL_NAME
        +	* LBRACE
        +	* QUALIFIED_NAME
        +	* GRAPHICAL_NAME
        +	* LPAR
        +	* TERMINAL
        +	* LEXICAL_NAME
        +Previous tokens: [Token('EQUAL', '=')]
        +
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.15 Allocations Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| allocation-def
        +WARNING : Production start line does not contain exactly one '=': usage-node =| allocation
        +WARNING : Production start line does not contain exactly one '=': compartment =| allocations-compartment
        +WARNING : Production start line does not contain exactly one '=': general-relationship =| allocate-relationship
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.15 in production:
        +usage-edge = |allocate-relationship
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 14.
        +Expected one of: 
        +	* IMAGE
        +	* NONTERMINAL_NAME
        +	* LBRACE
        +	* QUALIFIED_NAME
        +	* GRAPHICAL_NAME
        +	* LPAR
        +	* TERMINAL
        +	* LEXICAL_NAME
        +Previous tokens: [Token('EQUAL', '=')]
        +
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.16 Flows Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| flow-def
        +WARNING : Production start line does not contain exactly one '=': usage-node =| flow-node
        +WARNING : Production start line does not contain exactly one '=': compartment =| flows-compartment
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.16 in production:
        +flows-compartment =
        +      ________________________________________
        +                      'flows'
        +      flows-compartment-contents
        +
        +No terminal matches '_' in the current parser context, at line 2 col 7
        +
        +      ________________________________________
        +      ^
        +Expected one of: 
        +	* IMAGE
        +	* LEXICAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* GRAPHICAL_NAME
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +
        +Previous tokens: Token('EQUAL', '=')
        +
        +WARNING : Production start line does not contain exactly one '=': interconnection-element =|
        +WARNING : Production start line does not contain exactly one '=': connection-relationship =|
        +WARNING : Production start line does not contain exactly one '=': usage-edge =| message | flow | succession-flow
        +WARNING : Graphical note found in 
        , but should be 

        element: Note: proxy nodes and ends of messages must refer to occurrences +WARNING : Graphical note found in

        , but should be 

        element: Note: proxy nodes at ends of flows must refer to directed features +ERROR : Non-unique production name: flow-node in {'sq-succession', 'comment-without-keyword', 'annotation-link', 'connection-def-name-compartment', 'connection-usage-elaboration', 'members-compartment-element', 'attributes-compartment-contents', 'interface', 'allocation-def', 'features-compartment-contents', 'succession-flow', 'flow-def', 'part-name-compartment', 'relationships-compartment-contents', 'eventer', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'n-ary-connection', 'interfaces-compartment-element', 'packages-compartment', 'a-property', 'ends-compartment', 'enums-compartment', 'port-def', 'n-ary-dependency-supplier-link', 'n-ary-connection-dot', 'relationships-compartment', 'allocate-relationship', 'sq-graphical-relationship', 'features-compartment-element', 'binding-connection', 'flow-end-node', 'documentation-compartment', 'relationships-compartment-element', 'usage-node |', 'definition', 'general-compartment', 'packages-compartment-element', 'type-node', 'port-t', 'top-level-import', 'interface-connection', 'allocations-compartment-contents', 'part-def', 'sq-part', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'event-edge', 'port-label', 'flows-compartment', 'individuals-compartment-contents', 'connection-def-graphical', 'packages-compartment-contents', 'timeslice', 'general-relationship |', 'connections-compartment-contents', 'general-node |', 'snapshots-name-compartment', 'event-occurrence-def-name-compartment', 'package-compartment', 'allocations-compartment', 'variants-compartment', 'features-compartment', 'a-direction', 'connection-relationship', 'noncomposite-feature-membership', 'snapshot', 'snapshots-compartment-element', 'snapshots-compartment-contents', 'element-node', 'occurrences-compartment-element', 'flow-def-name-compartment', 'directed-features-compartment', 'pdv', 'flows-compartment-contents', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'element-inside-textual-compartment', 'interfaces-compartment', 'enumeration-def-name-compartment', 'item-ref', 'attributes-compartment', 'allocation-def-name-compartment', 'redefinition', 'portion-relationship', 'interface-def-name-compartment', 'port-usage', 'proxy-v', 'attribute-def', 'individuals-compartment-element', 'annotation-node', 'interconnection-element', 'items-compartment', 'port-r', 'occurrence-name-compartment', 'element', 'message', 'textual-representation-node', '|', 'sq-l-node', 'timeslices-compartment-contents', 'allocations-compartment-element', 'directed-features-compartment-contents', 'connection-name-compartment', 'flow-name-compartment', 'allocation', 'individuals-compartment', 'msg-end-node', 'n-ary-def-segment', 'message-label', 'definition-node |', 'occurrence-def', 'connection-label', 'variants-compartment-contents', 'enumeration-def', 'annotated-element', 'allocation-node', 'unowned-membership', 'item-def-name-compartment', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'package-node', 'extended-def-name-compartment', 'definition-name-with-alias', 'attributes-compartment-element', 'general-view', 'parts-compartment', 'comment-node', 'sequence-compartment', 'item', 'subsetting', 'flow-node', 'extended-usage-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'n-ary-segment', 'timeslice-name-compartment', 'parts-compartment-contents', 'occurrence', 'connection', 'interfaces-compartment-contents', 'package-with-name-in-tab', 'port-l', 'proxy-label', 'import', 'n-ary-def-connection-dot', 'occurrences-compartment-contents', 'timeslice-or-snapshot-node', 'interface-name-compartment', 'enumeration-name-compartment', 'extended-usage', 'event-occurrence', 'lifeline', 'ellipsis-at-lower-left-corner', 'part', 'parts-compartment-element', 'part-def-name-compartment', 'general-element', 'enumeration', 'directed-features-compartment-element', 'connection-graphical', 'attribute', 'connection-def', 'cdot-label', 'timeslices-compartment-element', 'ports-compartment-contents', 'cdef-label', 'c-adornment', 'n-ary-connection-def', 'sq-port', 'connection-end', 'usage-cp', 'members-compartment', 'subclassification', 'relationship-name', 'imported-package-with-name-in-tab', 'language-string', 'composite-feature-membership', 'snapshots-compartment', 'rel-name', 'sq-proxy', 'ports-compartment-element', 'recursive-import', 'n-ary-association-dot', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'type-relationship', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'occurrences-compartment', 'extended-def', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'enums-compartment-element', 'port-b', 'flow-label', 'ports-compartment', 'sequence-view', 'sq-graphical-node', 'timeslices-compartment', 'event-occurrence-def', 'interface-label', 'item-name-compartment', 'documentation-node', 'a-subsetting', 'sq-head-node', 'items-compartment-element', 'attribute-def-name-compartment', 'interface-def', 'usage-edge', 'comment-with-keyword', 'part-ref', 'flows-compartment-element', 'usage-name-with-alias', 'owned-membership', 'event-occurrence-name-compartment', 'pdh', 'n-ary-dependency-client-or-supplier-link', 'members-compartment-contents', 'el-prefix', 'rolename', 'attribute-name-compartment', 'connection-definition-elaboration', 'ends-compartment-contents', 'sq-port-label', 'package-with-name-inside', 'n-ary-dependency', 'port-name-compartment', 'flow', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'connections-compartment', 'compartment-stack', 'proxy-h', 'item-def'} +ERROR : Non-unique production name: flow-label in {'sq-succession', 'comment-without-keyword', 'annotation-link', 'connection-def-name-compartment', 'connection-usage-elaboration', 'members-compartment-element', 'attributes-compartment-contents', 'interface', 'allocation-def', 'features-compartment-contents', 'succession-flow', 'flow-def', 'message-node-r', 'part-name-compartment', 'relationships-compartment-contents', 'eventer', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'n-ary-connection', 'interfaces-compartment-element', 'sflow-node-r', 'packages-compartment', 'a-property', 'ends-compartment', 'enums-compartment', 'port-def', 'n-ary-dependency-supplier-link', 'n-ary-connection-dot', 'relationships-compartment', 'allocate-relationship', 'sq-graphical-relationship', 'features-compartment-element', 'binding-connection', 'flow-end-node', 'documentation-compartment', 'relationships-compartment-element', 'usage-node |', 'definition', 'general-compartment', 'packages-compartment-element', 'type-node', 'port-t', 'top-level-import', 'interface-connection', 'allocations-compartment-contents', 'part-def', 'sq-part', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'event-edge', 'port-label', 'flows-compartment', 'individuals-compartment-contents', 'connection-def-graphical', 'packages-compartment-contents', 'timeslice', 'general-relationship |', 'connections-compartment-contents', 'general-node |', 'snapshots-name-compartment', 'event-occurrence-def-name-compartment', 'package-compartment', 'allocations-compartment', 'variants-compartment', 'features-compartment', 'a-direction', 'connection-relationship', 'noncomposite-feature-membership', 'snapshot', 'snapshots-compartment-element', 'snapshots-compartment-contents', 'element-node', 'occurrences-compartment-element', 'flow-def-name-compartment', 'directed-features-compartment', 'pdv', 'flows-compartment-contents', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'element-inside-textual-compartment', 'interfaces-compartment', 'enumeration-def-name-compartment', 'item-ref', 'attributes-compartment', 'allocation-def-name-compartment', 'redefinition', 'portion-relationship', 'interface-def-name-compartment', 'port-usage', 'proxy-v', 'attribute-def', 'individuals-compartment-element', 'annotation-node', 'interconnection-element', 'items-compartment', 'port-r', 'occurrence-name-compartment', 'element', 'message', 'textual-representation-node', '|', 'sq-l-node', 'timeslices-compartment-contents', 'allocations-compartment-element', 'directed-features-compartment-contents', 'connection-name-compartment', 'flow-name-compartment', 'allocation', 'individuals-compartment', 'msg-end-node', 'n-ary-def-segment', 'message-label', 'definition-node |', 'occurrence-def', 'connection-label', 'variants-compartment-contents', 'enumeration-def', 'annotated-element', 'allocation-node', 'unowned-membership', 'item-def-name-compartment', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'package-node', 'extended-def-name-compartment', 'definition-name-with-alias', 'attributes-compartment-element', 'general-view', 'parts-compartment', 'comment-node', 'sequence-compartment', 'item', 'subsetting', 'flow-node', 'extended-usage-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'n-ary-segment', 'timeslice-name-compartment', 'parts-compartment-contents', 'occurrence', 'connection', 'interfaces-compartment-contents', 'package-with-name-in-tab', 'port-l', 'proxy-label', 'import', 'n-ary-def-connection-dot', 'occurrences-compartment-contents', 'timeslice-or-snapshot-node', 'sflow-node-l', 'interface-name-compartment', 'enumeration-name-compartment', 'extended-usage', 'event-occurrence', 'lifeline', 'ellipsis-at-lower-left-corner', 'part', 'parts-compartment-element', 'part-def-name-compartment', 'general-element', 'enumeration', 'directed-features-compartment-element', 'connection-graphical', 'attribute', 'connection-def', 'cdot-label', 'timeslices-compartment-element', 'ports-compartment-contents', 'cdef-label', 'c-adornment', 'n-ary-connection-def', 'sq-port', 'connection-end', 'flow-node-l', 'usage-cp', 'members-compartment', 'subclassification', 'relationship-name', 'imported-package-with-name-in-tab', 'language-string', 'composite-feature-membership', 'snapshots-compartment', 'rel-name', 'sq-proxy', 'ports-compartment-element', 'recursive-import', 'message-node-l', 'n-ary-association-dot', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'type-relationship', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'occurrences-compartment', 'extended-def', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'enums-compartment-element', 'port-b', 'flow-label', 'ports-compartment', 'sequence-view', 'sq-graphical-node', 'timeslices-compartment', 'event-occurrence-def', 'interface-label', 'item-name-compartment', 'documentation-node', 'a-subsetting', 'sq-head-node', 'items-compartment-element', 'attribute-def-name-compartment', 'interface-def', 'usage-edge', 'comment-with-keyword', 'part-ref', 'flows-compartment-element', 'usage-name-with-alias', 'owned-membership', 'event-occurrence-name-compartment', 'pdh', 'n-ary-dependency-client-or-supplier-link', 'members-compartment-contents', 'el-prefix', 'rolename', 'attribute-name-compartment', 'connection-definition-elaboration', 'ends-compartment-contents', 'sq-port-label', 'package-with-name-inside', 'n-ary-dependency', 'port-name-compartment', 'flow', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'connections-compartment', 'compartment-stack', 'proxy-h', 'item-def'} +ERROR : Unexpected tag inside

         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.17 Actions Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| action-def
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.17 in production:
        +action-def-name-compartment =
        +      '«' DefinitionPrefix 'action' 'def' '»'
        +      definition-name-with-alias<
        +
        +No terminal matches '<' in the current parser context, at line 3 col 33
        +
        +      definition-name-with-alias<
        +                                ^
        +Expected one of: 
        +	* VBAR
        +	* IMAGE
        +	* REPETITION_SYMBOL
        +	* LEXICAL_NAME
        +	* GRAPHICAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* RPAR
        +	* _NON_CONTINUATION_LINE
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +
        +Previous tokens: Token('GRAPHICAL_NAME', 'definition-name-with-alias')
        +
        +WARNING : Production start line does not contain exactly one '=': usage-node =|
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.17 in production:
        +action-name-compartment =
        +      '«' OccurrenceUsagePrefix 'action' '»'
        +      usage-name-with-alias<
        +
        +No terminal matches '<' in the current parser context, at line 3 col 28
        +
        +      usage-name-with-alias<
        +                           ^
        +Expected one of: 
        +	* VBAR
        +	* IMAGE
        +	* REPETITION_SYMBOL
        +	* LEXICAL_NAME
        +	* GRAPHICAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* RPAR
        +	* _NON_CONTINUATION_LINE
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +
        +Previous tokens: Token('GRAPHICAL_NAME', 'usage-name-with-alias')
        +
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +WARNING : Production start line does not contain exactly one '=': action-flow-element =|
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.17 in production:
        +param-label = QualifiedName (‘:’ QualifiedName)*
        +
        +No terminal matches '‘' in the current parser context, at line 1 col 30
        +
        +param-label = QualifiedName (‘:’ QualifiedName)*
        +                             ^
        +Expected one of: 
        +	* IMAGE
        +	* LEXICAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* GRAPHICAL_NAME
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +
        +Previous tokens: Token('LPAR', '(')
        +
        +ERROR   : Non-unique production name: usage-edge in {'members-compartment-element', 'message-node-r', 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', 'connection-def-graphical', 'until-condition', 'noncomposite-feature-membership', 'snapshots-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'allocation', 'loop-body', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'occurrences-compartment', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'packages-compartment', 'port-def', 'relationships-compartment', 'action-name-compartment', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'allocations-compartment-contents', 'sq-part', 'event-edge', 'perform-actions-compartment', 'general-node |', 'snapshots-name-compartment', 'connection-relationship', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'flow-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'variants-compartment-contents', 'enumeration-def', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'connection', 'package-with-name-in-tab', 'sflow-node-l', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'rel-name', 'action-def', 'while-loop-action-node', 'parameters-compartment-contents', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'a-subsetting', 'sq-head-node', 'interface-def', 'comment-with-keyword', 'part-ref', 'while-loop-action-name-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'documentation-compartment', 'definition', 'general-compartment', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'flows-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'element', 'message', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'individuals-compartment', 'for-loop-action-name-compartment', 'terminate-node', 'occurrence-def', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'package-node', 'parts-compartment', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'occurrences-compartment-contents', 'lifeline', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'timeslices-compartment-element', 'start-node', 'subclassification', 'recursive-import', 'n-ary-association-dot', 'assign-action-name-compartment', 'fork-node', 'accept-action-expression', 'event-occurrence-def', 'owned-membership', 'pdh', 'rolename', 'connections-compartment', 'features-compartment-contents', 'action-body', 'for-loop-action-node', 'action', 'enums-compartment', 'sq-graphical-relationship', 'parameters-compartment', 'binding-connection', 'packages-compartment-element', 'type-node', 'interface-connection', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'param-b', 'package-compartment', 'variants-compartment', 'features-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'message-label', 'connection-label', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actions-compartment-element', 'item-def'}
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.17 in production:
        +usage-edge = |succession perform-edge
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 14.
        +Expected one of: 
        +	* IMAGE
        +	* NONTERMINAL_NAME
        +	* LBRACE
        +	* QUALIFIED_NAME
        +	* GRAPHICAL_NAME
        +	* LPAR
        +	* TERMINAL
        +	* LEXICAL_NAME
        +Previous tokens: [Token('EQUAL', '=')]
        +
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.18 States Graphical Notation
        +ERROR   :  element appears at start of line:
        +
        definition-node =| state-def
        +
        +state-def =
        +
        +       ​ 
        +
        +state-def-name-compartment =
        +      '«' DefinitionPrefix 'state' 'def' '»'
        +      definition-name-with-alias
        +      ('«' 'parallel' '»')?
        +
        +usage-node =|
        +      state-node
        +    | exhibit-state-usage
        +
        +state =
        +
        +      ​ 
        +
        +state-ref = 
        +
        +       
        +
        +state-name-compartment =
        +      '«' OccurrenceUsagePrefix 'state' '»'
        +      usage-name-with-alias
        +      ('«' 'parallel' '»')?
        +
        +exhibit-state-usage =
        +       
        +
        +state-subaction-body = state-subaction-body-textual | action-flow-view
        +
        +state-subaction-body-textual = state-subaction-declaration? ( '{' ActionBodyItem* '}' )?
        +
        +state-subaction-declaration =
        +      PerformActionUsageDeclaration
        +    | AcceptNodeDeclaration
        +    | SendNodeDeclaration
        +    | AssignmentNodeDeclaration
        +
        +
        +state-do-action = 
        +   
        +  state-subaction-body
        +
        +state-entry-action =
        +
        +  
        +  state-subaction-body
        +
        +state-exit-action = 
        +  
        +  state-subaction-body
        +
        +entry-action =
        +          |
        +
        +       
        +
        +entry-action-name-comp =
        +'«' 'entry' OccurrenceUsagePrefix 'action' '»'
        +   usage-name-with-alias
        +
        +exit-action =
        + 
        +
        +exit-action-name-comp =
        +'«' 'exit' OccurrenceUsagePrefix 'action' '»'
        +   usage-name-with-alias
        +
        +do-action =
        + 
        +
        +do-action-name-comp =
        +'«' 'do' OccurrenceUsagePrefix 'action' '»'
        +   usage-name-with-alias
        +
        +exhibit-state-name-compartment =
        +       '«exhibit-state»'
        +       state-name-compartment
        +
        +compartment =|
        +      states-compartment
        +    | states-actions-compartment
        +    | exhibit-states-compartment
        +    | successions-compartment
        +    | state-transition-compartment
        +
        +states-compartment =
        +
        +       
        +      states-compartment-contents
        +
        +states-compartment-contents = (states-compartment-element)* '…'?
        +states-compartment-element = 
        +    el-prefix? OccurrencePrefix ActionUsageDeclaration
        +
        +state-actions-compartment =
        +
        +       
        +      state-actions-compartment-contents
        +
        +state-actions-compartment-contents = (state-actions-compartment-element)* '…'?
        +state-actions-compartment-element = 
        +    el-prefix? EntryActionMember | DoActionMember | ExitActionMember
        +
        +exhibit-states-compartment =
        +
        +       
        +      exhibit-states-compartment-contents
        +
        +exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'?
        +exhibit-states-compartment-element-compartment = UsageDeclaration
        +
        +succession-compartment =
        +
        +       
        +      succession-compartment-contents
        +
        +succession-compartment-contents = QualifiedName* '…'?
        +
        +state-transition-compartment =
        +
        +       
        +      state-transition-view
        +
        +state-transition-view =
        +      (state-transition-element)*
        +      (dependencies-and-annotations-element)*
        +
        +
        +state-transition-element =
        +    state-transition-node
        +  | transition
        +  | st-succession
        +
        +state-transition-node =
        +    state-node
        +  | state-ref-node
        +  | start-node
        +  | entry-action
        +  | do-action
        +  | exit-action
        +  | done-node
        +  | fork-node
        +  | join-node
        +  | decision-node
        +  | merge-node
        +  | terminate-node
        +  | action
        +  | perform-action-usage
        +  | action-ref
        +
        +transition =
        +     
        +    |
        +     
        +
        +state-source = 
        +   state-node | state-ref-node
        +
        +transition-label = trigger-expression '/' ActionUsage
        +
        +trigger-expression = AcceptParameterPart (guard-expression)?
        +
        +st-succession =
        +      
        +   |
        +      
        +
        +exhibit-edge = 
        +   
        +
        +exhibitor = part | part-def
        +
        +general-relationship |= exhibit-edge
        +
        +usage-edge = |transition | st-succession  | exhibit-edge
        +WARNING : Production start line does not contain exactly one '=': definition-node =| state-def +WARNING : Production start line does not contain exactly one '=': usage-node =| +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.18 in production: +entry-action-name-comp = + +Unexpected token Token('_NON_CONTINUATION_LINE', '\n') at line 1, column 25. +Expected one of: + * IMAGE + * NONTERMINAL_NAME + * LBRACE + * QUALIFIED_NAME + * GRAPHICAL_NAME + * LPAR + * TERMINAL + * LEXICAL_NAME +Previous tokens: [Token('EQUAL', '=')] + +WARNING : Production start line does not contain exactly one '=': '«' 'entry' OccurrenceUsagePrefix 'action' '»' +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.18 in production: +'«' 'entry' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +Unexpected token Token('TERMINAL', "'«'") at line 1, column 1. +Expected one of: + * LEXICAL_NAME + * LINE_COMMENT + * GRAPHICAL_NAME +Previous tokens: [None] + +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.18 in production: +exit-action-name-comp = + +Unexpected token Token('_NON_CONTINUATION_LINE', '\n') at line 1, column 24. +Expected one of: + * IMAGE + * NONTERMINAL_NAME + * LBRACE + * QUALIFIED_NAME + * GRAPHICAL_NAME + * LPAR + * TERMINAL + * LEXICAL_NAME +Previous tokens: [Token('EQUAL', '=')] + +WARNING : Production start line does not contain exactly one '=': '«' 'exit' OccurrenceUsagePrefix 'action' '»' +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.18 in production: +'«' 'exit' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +Unexpected token Token('TERMINAL', "'«'") at line 1, column 1. +Expected one of: + * LEXICAL_NAME + * LINE_COMMENT + * GRAPHICAL_NAME +Previous tokens: [None] + +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.18 in production: +do-action-name-comp = + +Unexpected token Token('_NON_CONTINUATION_LINE', '\n') at line 1, column 22. +Expected one of: + * IMAGE + * NONTERMINAL_NAME + * LBRACE + * QUALIFIED_NAME + * GRAPHICAL_NAME + * LPAR + * TERMINAL + * LEXICAL_NAME +Previous tokens: [Token('EQUAL', '=')] + +WARNING : Production start line does not contain exactly one '=': '«' 'do' OccurrenceUsagePrefix 'action' '»' +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.18 in production: +'«' 'do' OccurrenceUsagePrefix 'action' '»' + usage-name-with-alias + +Unexpected token Token('TERMINAL', "'«'") at line 1, column 1. +Expected one of: + * LEXICAL_NAME + * LINE_COMMENT + * GRAPHICAL_NAME +Previous tokens: [None] + +WARNING : Production start line does not contain exactly one '=': compartment =| +ERROR : Non-unique production name: general-relationship | in {'members-compartment-element', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'until-condition', 'noncomposite-feature-membership', 'snapshots-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'succession-compartment', 'occurrences-compartment', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'packages-compartment', 'port-def', 'relationships-compartment', 'action-name-compartment', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'allocations-compartment-contents', 'sq-part', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'flow-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'enumeration-def', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'comment-with-keyword', 'part-ref', 'while-loop-action-name-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'definition', 'general-compartment', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'flows-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'element', 'message', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'individuals-compartment', 'for-loop-action-name-compartment', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'package-node', 'parts-compartment', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'occurrences-compartment-contents', 'lifeline', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'timeslices-compartment-element', 'start-node', 'subclassification', 'recursive-import', 'n-ary-association-dot', 'assign-action-name-compartment', 'fork-node', 'state-do-action', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'state-actions-compartment-contents', 'owned-membership', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'param-b', 'package-compartment', 'variants-compartment', 'features-compartment', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'message-label', 'connection-label', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'state-actions-compartment-element', 'state', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actions-compartment-element', 'item-def'} +WARNING : Production start line does not contain exactly one '=': general-relationship |= exhibit-edge +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.18 in production: +general-relationship |= exhibit-edge + +Unexpected token Token('VBAR', '|') at line 1, column 22. +Expected one of: + * EQUAL + * "=|" +Previous tokens: [Token('GRAPHICAL_NAME', 'general-relationship')] + +ERROR : Non-unique production name: usage-edge in {'members-compartment-element', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'until-condition', 'noncomposite-feature-membership', 'snapshots-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'succession-compartment', 'occurrences-compartment', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'packages-compartment', 'port-def', 'relationships-compartment', 'action-name-compartment', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'allocations-compartment-contents', 'sq-part', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'flow-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'enumeration-def', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'comment-with-keyword', 'part-ref', 'while-loop-action-name-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'definition', 'general-compartment', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'flows-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'element', 'message', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'individuals-compartment', 'for-loop-action-name-compartment', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'package-node', 'parts-compartment', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'occurrences-compartment-contents', 'lifeline', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'timeslices-compartment-element', 'start-node', 'subclassification', 'recursive-import', 'n-ary-association-dot', 'assign-action-name-compartment', 'fork-node', 'state-do-action', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'state-actions-compartment-contents', 'owned-membership', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'param-b', 'package-compartment', 'variants-compartment', 'features-compartment', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'message-label', 'connection-label', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'state-actions-compartment-element', 'state', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actions-compartment-element', 'item-def'} +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.18 in production: +usage-edge = |transition | st-succession | exhibit-edge + +Unexpected token Token('VBAR', '|') at line 1, column 14. +Expected one of: + * IMAGE + * NONTERMINAL_NAME + * LBRACE + * QUALIFIED_NAME + * GRAPHICAL_NAME + * LPAR + * TERMINAL + * LEXICAL_NAME +Previous tokens: [Token('EQUAL', '=')] + +ERROR : Unexpected tag inside
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.19 Calculations Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| calc-def
        +WARNING : Production start line does not contain exactly one '=': usage-node =| calc
        +ERROR   : Non-unique production name: calc-name-compartment in {'members-compartment-element', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'until-condition', 'noncomposite-feature-membership', 'snapshots-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'succession-compartment', 'occurrences-compartment', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'packages-compartment', 'port-def', 'relationships-compartment', 'action-name-compartment', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'allocations-compartment-contents', 'sq-part', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'flow-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'enumeration-def', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'comment-with-keyword', 'part-ref', 'while-loop-action-name-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'flows-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'element', 'message', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'individuals-compartment', 'for-loop-action-name-compartment', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'package-node', 'parts-compartment', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'occurrences-compartment-contents', 'lifeline', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'subclassification', 'recursive-import', 'n-ary-association-dot', 'assign-action-name-compartment', 'fork-node', 'state-do-action', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'state-actions-compartment-contents', 'owned-membership', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'param-b', 'package-compartment', 'variants-compartment', 'features-compartment', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'message-label', 'connection-label', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'state-actions-compartment-element', 'state', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actions-compartment-element', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': action-flow-element =|
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.20 Constraints Graphical Notation
        +ERROR   :  element appears at start of line:
        +
        definition-node =| constraint-def
        +
        +constraint-def =
        +
        +       
        +
        +constraint-def-name-compartment =
        +      '«' DefinitionPrefix 'constraint' 'def' '»'
        +      definition-name-with-alias
        +
        +usage-node =
        +      constraint
        +    | assert-constraint-usage
        +
        +constraint =
        +
        +       
        +     
        +constraint-ref =
        +
        +       
        +
        +constraint-name-compartment =
        +      '«' OccurrenceUsagePrefix 'constraint' '»'
        +      usage-name-with-alias
        +
        +assert-constraint-node =
        +
        +       
        +
        +assert-constraint-name-compartment =
        +       '«assert constraint»'
        +       constraint-name-compartment
        +
        +assume-constraint-node = 
        +   
        +
        +assume-constraint-name-compartment =
        +      '«' OccurrenceUsagePrefix 'assume' 'constraint' '»'
        +      usage-name-with-alias
        +
        +usage-node =| assume-constraint-node assert-constraint-node<
        +
        +assume-edge = 
        +   
        +assumer = requirement | requirement-def
        +
        +general-relationship |= assume-edge
        +
        +assert-edge = 
        +
        +assertor = usage-node | definition-node
        +
        +general-relationship |= assert-edge
        +
        +compartment =|
        +      constraints-compartment
        +    | assert-constraints-compartment
        +
        +constraints-compartment =
        +
        +       
        +      constraints-compartment-contents
        +
        +constraints-compartment-contents = (constraints-usage-compartment-element)* '…'?
        +constraints-usage-compartment-element = 
        +      el-prefix? OccurrenceUsagePrefix ConstraintUsageDeclaration CalculationBody*
        +
        +assert-constraints-compartment =
        +
        +       
        +      assert-constraints-compartment-contents
        +
        +assert-constraints-compartment-contents = (assert-constraints-compartment-element)* '…'?
        +assert-constraints-compartment-element =
        +      el-prefix? OccurrenceUsagePrefix ( 'not' )? 
        +      ( OwnedSubsetting FeatureSpecializationPart? | UsageDeclaration )
        +      CalculationUsageParameterPart CalculationBody
        +
        +interconnection-element =|
        +      constraint-ref
        +    | constraint
        +
        +WARNING : Production start line does not contain exactly one '=': definition-node =| constraint-def +WARNING : Production start line does not contain exactly one '=': usage-node =| assume-constraint-node assert-constraint-node< +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.20 in production: +usage-node =| assume-constraint-node assert-constraint-node< + +No terminal matches '<' in the current parser context, at line 1 col 60 + +e-constraint-node assert-constraint-node< + ^ +Expected one of: + * VBAR + * IMAGE + * REPETITION_SYMBOL + * LEXICAL_NAME + * GRAPHICAL_NAME + * QUALIFIED_NAME + * LBRACE + * RPAR + * _NON_CONTINUATION_LINE + * LPAR + * TERMINAL + * NONTERMINAL_NAME + +Previous tokens: Token('GRAPHICAL_NAME', 'assert-constraint-node') + +ERROR : Non-unique production name: general-relationship | in {'members-compartment-element', 'results-compartment', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'until-condition', 'noncomposite-feature-membership', 'snapshots-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'assume-edge', 'succession-compartment', 'occurrences-compartment', 'constraint-def', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'assert-constraint-name-compartment', 'packages-compartment', 'port-def', 'relationships-compartment', 'action-name-compartment', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'allocations-compartment-contents', 'sq-part', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'constraint-def-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'flow-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'enumeration-def', 'assumer', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'usage-node', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'calcs-compartment-element', 'comment-with-keyword', 'part-ref', 'while-loop-action-name-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'flows-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'element', 'message', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'calcs-compartment-contents', 'individuals-compartment', 'for-loop-action-name-compartment', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'package-node', 'parts-compartment', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'calcs-compartment', 'occurrences-compartment-contents', 'lifeline', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'subclassification', 'assume-constraint-name-compartment', 'recursive-import', 'n-ary-association-dot', 'assign-action-name-compartment', 'constraint', 'fork-node', 'state-do-action', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'state-actions-compartment-contents', 'owned-membership', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'constraint-ref', 'assume-constraint-node', 'constraint-name-compartment', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'param-b', 'package-compartment', 'variants-compartment', 'assert-constraint-node', 'features-compartment', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'result-compartment-contents', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'message-label', 'connection-label', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'state-actions-compartment-element', 'state', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actions-compartment-element', 'item-def'} +WARNING : Production start line does not contain exactly one '=': general-relationship |= assume-edge +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.20 in production: +general-relationship |= assume-edge + +Unexpected token Token('VBAR', '|') at line 1, column 22. +Expected one of: + * EQUAL + * "=|" +Previous tokens: [Token('GRAPHICAL_NAME', 'general-relationship')] + +ERROR : Non-unique production name: general-relationship | in {'members-compartment-element', 'results-compartment', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'assertor', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'until-condition', 'noncomposite-feature-membership', 'snapshots-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'assume-edge', 'succession-compartment', 'occurrences-compartment', 'constraint-def', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'assert-constraint-name-compartment', 'packages-compartment', 'port-def', 'relationships-compartment', 'action-name-compartment', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'allocations-compartment-contents', 'sq-part', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'constraint-def-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'flow-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'enumeration-def', 'assumer', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'usage-node', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'calcs-compartment-element', 'comment-with-keyword', 'part-ref', 'while-loop-action-name-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'flows-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'assert-edge', 'element', 'message', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'calcs-compartment-contents', 'individuals-compartment', 'for-loop-action-name-compartment', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'package-node', 'parts-compartment', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'calcs-compartment', 'occurrences-compartment-contents', 'lifeline', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'subclassification', 'assume-constraint-name-compartment', 'recursive-import', 'n-ary-association-dot', 'assign-action-name-compartment', 'constraint', 'fork-node', 'state-do-action', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'state-actions-compartment-contents', 'owned-membership', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'constraint-ref', 'assume-constraint-node', 'constraint-name-compartment', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'param-b', 'package-compartment', 'variants-compartment', 'assert-constraint-node', 'features-compartment', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'result-compartment-contents', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'message-label', 'connection-label', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'state-actions-compartment-element', 'state', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actions-compartment-element', 'item-def'} +WARNING : Production start line does not contain exactly one '=': general-relationship |= assert-edge +ERROR : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.20 in production: +general-relationship |= assert-edge + +Unexpected token Token('VBAR', '|') at line 1, column 22. +Expected one of: + * EQUAL + * "=|" +Previous tokens: [Token('GRAPHICAL_NAME', 'general-relationship')] + +WARNING : Production start line does not contain exactly one '=': compartment =| +WARNING : Production start line does not contain exactly one '=': interconnection-element =| +ERROR : Unexpected tag inside
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.21 Requirements Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =|
        +ERROR   : Non-unique production name: usage-node in {'members-compartment-element', 'results-compartment', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'assertor', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'assert-constraints-compartment-contents', 'until-condition', 'noncomposite-feature-membership', 'snapshots-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'assert-constraints-compartment', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'assume-edge', 'succession-compartment', 'occurrences-compartment', 'constraint-def', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'assert-constraint-name-compartment', 'packages-compartment', 'port-def', 'relationships-compartment', 'action-name-compartment', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'allocations-compartment-contents', 'sq-part', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'constraint-def-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'flow-def-name-compartment', 'constraints-usage-compartment-element', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'requirement-def-name-compartment', 'enumeration-def', 'assumer', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'usage-node', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'calcs-compartment-element', 'comment-with-keyword', 'part-ref', 'while-loop-action-name-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'constraints-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'flows-compartment-contents', 'constraints-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'assert-edge', 'element', 'message', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'calcs-compartment-contents', 'individuals-compartment', 'for-loop-action-name-compartment', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'package-node', 'parts-compartment', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'calcs-compartment', 'occurrences-compartment-contents', 'lifeline', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'assert-constraints-compartment-element', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'subclassification', 'assume-constraint-name-compartment', 'recursive-import', 'n-ary-association-dot', 'assign-action-name-compartment', 'constraint', 'fork-node', 'state-do-action', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'state-actions-compartment-contents', 'owned-membership', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'constraint-ref', 'assume-constraint-node', 'constraint-name-compartment', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'param-b', 'package-compartment', 'variants-compartment', 'assert-constraint-node', 'features-compartment', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'result-compartment-contents', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'message-label', 'connection-label', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'state-actions-compartment-element', 'state', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'requirement-def', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actions-compartment-element', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +WARNING : Production start line does not contain exactly one '=': interconnection-element =|
        +WARNING : Production start line does not contain exactly one '=': general-relationship =| frame-relationship
        +WARNING : Production start line does not contain exactly one '=': subject-actors-stakeholders-node =| requirement
        +ERROR   : Non-unique production name: general-relationship | in {'members-compartment-element', 'results-compartment', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'stakeholder', 'assertor', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'assert-constraints-compartment-contents', 'until-condition', 'noncomposite-feature-membership', 'snapshots-compartment-contents', 'frames-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'actors-compartment-element', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'assert-constraints-compartment', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'assume-edge', 'succession-compartment', 'requirement-name-compartment', 'assume-constraints-compartment', 'occurrences-compartment', 'requirements-compartment-element', 'constraint-def', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'assert-constraint-name-compartment', 'packages-compartment', 'actor', 'port-def', 'relationships-compartment', 'action-name-compartment', 'stakeholders-compartment-contents', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'satisfy-requirements-compartment', 'allocations-compartment-contents', 'sq-part', 'satisfy-requirement-usage', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'constraint-def-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'distinguished-parameter-link', 'flow-def-name-compartment', 'constraints-usage-compartment-element', 'concern-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'frames-compartment', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'requirement-def-name-compartment', 'enumeration-def', 'assumer', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'satisfy-edge', 'require-constraints-compartment-contents', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'usage-node', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'assume-constraints-compartment-contents', 'subject-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'satisfier', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'calcs-compartment-element', 'comment-with-keyword', 'part-ref', 'subject', 'while-loop-action-name-compartment', 'require-constraints-compartment', 'requirements-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'concerns-compartment', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'subject-name', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'constraints-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'stakeholders-compartment', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'satisfies-compartment', 'flows-compartment-contents', 'constraints-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'assert-edge', 'element', 'message', 'requirement-ref', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'calcs-compartment-contents', 'individuals-compartment', 'for-loop-action-name-compartment', 'satisfy-requirements-compartment-contents', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'subject-compartment-contents', 'package-node', 'parts-compartment', 'concern', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'stakeholders-compartment-element', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'concern-def', 'distinguished-parameter', 'satisfy-requirement-name-compartment', 'calcs-compartment', 'occurrences-compartment-contents', 'lifeline', 'concern-name-compartment', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'assert-constraints-compartment-element', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'subclassification', 'assume-constraint-name-compartment', 'recursive-import', 'requirement', 'n-ary-association-dot', 'assign-action-name-compartment', 'constraint', 'fork-node', 'state-do-action', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'actor-name', 'state-actions-compartment-contents', 'owned-membership', 'frame-relationship', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'constraint-ref', 'assume-constraint-node', 'constraint-name-compartment', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'param-b', 'package-compartment', 'variants-compartment', 'assert-constraint-node', 'features-compartment', 'requirements-compartment-contents', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'result-compartment-contents', 'subject-compartment', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'concern-stakeholder-link', 'message-label', 'connection-label', 'satisfies-compartment-contents', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'frames-compartment-element', 'state-actions-compartment-element', 'state', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'requirement-def', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'require-constraint-element', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'actors-compartment-contents', 'stakeholder-name', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actors-compartment', 'actions-compartment-element', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': general-relationship |= satisfy-edge
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.21 in production:
        +general-relationship |= satisfy-edge
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 22.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'general-relationship')]
        +
        +ERROR   : Non-unique production name: general-relationship | in {'members-compartment-element', 'results-compartment', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'stakeholder', 'assertor', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'assert-constraints-compartment-contents', 'until-condition', 'noncomposite-feature-membership', 'snapshots-compartment-contents', 'frames-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'actors-compartment-element', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'assert-constraints-compartment', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'assume-edge', 'succession-compartment', 'requirement-name-compartment', 'assume-constraints-compartment', 'occurrences-compartment', 'requirements-compartment-element', 'constraint-def', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'assert-constraint-name-compartment', 'packages-compartment', 'actor', 'port-def', 'relationships-compartment', 'action-name-compartment', 'stakeholders-compartment-contents', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'satisfy-requirements-compartment', 'allocations-compartment-contents', 'sq-part', 'satisfy-requirement-usage', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'constraint-def-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'distinguished-parameter-link', 'flow-def-name-compartment', 'constraints-usage-compartment-element', 'concern-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'frames-compartment', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'requirement-def-name-compartment', 'enumeration-def', 'assumer', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'satisfy-edge', 'require-constraints-compartment-contents', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'usage-node', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'assume-constraints-compartment-contents', 'subject-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'satisfier', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'calcs-compartment-element', 'comment-with-keyword', 'part-ref', 'subject', 'while-loop-action-name-compartment', 'require-constraints-compartment', 'requirements-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'concerns-compartment', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'subject-name', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'constraints-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'stakeholders-compartment', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'satisfies-compartment', 'flows-compartment-contents', 'constraints-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'assert-edge', 'element', 'message', 'requirement-ref', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'calcs-compartment-contents', 'individuals-compartment', 'for-loop-action-name-compartment', 'satisfy-requirements-compartment-contents', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'subject-compartment-contents', 'package-node', 'parts-compartment', 'concern', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'stakeholders-compartment-element', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'concern-def', 'distinguished-parameter', 'satisfy-requirement-name-compartment', 'calcs-compartment', 'occurrences-compartment-contents', 'lifeline', 'concern-name-compartment', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'assert-constraints-compartment-element', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'subclassification', 'assume-constraint-name-compartment', 'recursive-import', 'requirement', 'n-ary-association-dot', 'assign-action-name-compartment', 'constraint', 'fork-node', 'state-do-action', 'require-edge', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'actor-name', 'state-actions-compartment-contents', 'owned-membership', 'frame-relationship', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'constraint-ref', 'assume-constraint-node', 'constraint-name-compartment', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'requirer', 'param-b', 'package-compartment', 'variants-compartment', 'assert-constraint-node', 'features-compartment', 'requirements-compartment-contents', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'result-compartment-contents', 'subject-compartment', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'concern-stakeholder-link', 'message-label', 'connection-label', 'satisfies-compartment-contents', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'frames-compartment-element', 'state-actions-compartment-element', 'state', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'requirement-def', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'require-constraint-element', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'actors-compartment-contents', 'stakeholder-name', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actors-compartment', 'actions-compartment-element', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': general-relationship |= require-edge
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.21 in production:
        +general-relationship |= require-edge
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 22.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'general-relationship')]
        +
        +ERROR   : Non-unique production name: usage-node | in {'members-compartment-element', 'results-compartment', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'stakeholder', 'assertor', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'assert-constraints-compartment-contents', 'until-condition', 'noncomposite-feature-membership', 'snapshots-compartment-contents', 'frames-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'actors-compartment-element', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'assert-constraints-compartment', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'assume-edge', 'succession-compartment', 'requirement-name-compartment', 'assume-constraints-compartment', 'occurrences-compartment', 'requirements-compartment-element', 'constraint-def', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'assert-constraint-name-compartment', 'packages-compartment', 'actor', 'port-def', 'relationships-compartment', 'action-name-compartment', 'stakeholders-compartment-contents', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'satisfy-requirements-compartment', 'allocations-compartment-contents', 'sq-part', 'satisfy-requirement-usage', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'constraint-def-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'distinguished-parameter-link', 'flow-def-name-compartment', 'constraints-usage-compartment-element', 'concern-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'frames-compartment', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'require-constraint-node', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'requirement-def-name-compartment', 'enumeration-def', 'assumer', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'satisfy-edge', 'require-constraints-compartment-contents', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'usage-node', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'assume-constraints-compartment-contents', 'subject-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'satisfier', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'calcs-compartment-element', 'comment-with-keyword', 'part-ref', 'subject', 'while-loop-action-name-compartment', 'require-constraints-compartment', 'requirements-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'concerns-compartment', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'subject-name', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'constraints-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'stakeholders-compartment', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'satisfies-compartment', 'flows-compartment-contents', 'constraints-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'assert-edge', 'element', 'message', 'requirement-ref', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'calcs-compartment-contents', 'individuals-compartment', 'for-loop-action-name-compartment', 'satisfy-requirements-compartment-contents', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'subject-compartment-contents', 'package-node', 'parts-compartment', 'concern', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'stakeholders-compartment-element', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'concern-def', 'distinguished-parameter', 'satisfy-requirement-name-compartment', 'calcs-compartment', 'occurrences-compartment-contents', 'lifeline', 'concern-name-compartment', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'assert-constraints-compartment-element', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'subclassification', 'assume-constraint-name-compartment', 'recursive-import', 'requirement', 'n-ary-association-dot', 'assign-action-name-compartment', 'constraint', 'fork-node', 'state-do-action', 'require-edge', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'actor-name', 'state-actions-compartment-contents', 'owned-membership', 'frame-relationship', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'constraint-ref', 'assume-constraint-node', 'constraint-name-compartment', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'requirer', 'param-b', 'package-compartment', 'variants-compartment', 'assert-constraint-node', 'features-compartment', 'requirements-compartment-contents', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'result-compartment-contents', 'subject-compartment', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'concern-stakeholder-link', 'message-label', 'connection-label', 'satisfies-compartment-contents', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'frames-compartment-element', 'state-actions-compartment-element', 'state', 'require-constraint-name-compartment', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'requirement-def', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'require-constraint-element', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'actors-compartment-contents', 'stakeholder-name', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actors-compartment', 'actions-compartment-element', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': usage-node |= require-constraint-node
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.21 in production:
        +usage-node |= require-constraint-node
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 12.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'usage-node')]
        +
        +ERROR   : Non-unique production name: usage-node | in {'members-compartment-element', 'results-compartment', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'stakeholder', 'assertor', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'assert-constraints-compartment-contents', 'until-condition', 'noncomposite-feature-membership', 'frame-concern-name-compartment', 'snapshots-compartment-contents', 'frames-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'actors-compartment-element', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'assert-constraints-compartment', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'assume-edge', 'succession-compartment', 'requirement-name-compartment', 'assume-constraints-compartment', 'occurrences-compartment', 'requirements-compartment-element', 'constraint-def', 'frame-concern-node', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'assert-constraint-name-compartment', 'packages-compartment', 'actor', 'port-def', 'relationships-compartment', 'action-name-compartment', 'stakeholders-compartment-contents', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'satisfy-requirements-compartment', 'allocations-compartment-contents', 'sq-part', 'satisfy-requirement-usage', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'constraint-def-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'distinguished-parameter-link', 'flow-def-name-compartment', 'constraints-usage-compartment-element', 'concern-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'frames-compartment', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'require-constraint-node', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'requirement-def-name-compartment', 'enumeration-def', 'assumer', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'satisfy-edge', 'require-constraints-compartment-contents', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'usage-node', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'assume-constraints-compartment-contents', 'subject-compartment-element', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'satisfier', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'calcs-compartment-element', 'comment-with-keyword', 'part-ref', 'subject', 'while-loop-action-name-compartment', 'require-constraints-compartment', 'requirements-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'concerns-compartment', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'subject-name', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'constraints-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'stakeholders-compartment', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'satisfies-compartment', 'flows-compartment-contents', 'constraints-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'assert-edge', 'element', 'message', 'requirement-ref', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'calcs-compartment-contents', 'individuals-compartment', 'for-loop-action-name-compartment', 'satisfy-requirements-compartment-contents', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'subject-compartment-contents', 'package-node', 'parts-compartment', 'concern', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'stakeholders-compartment-element', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'concern-def', 'distinguished-parameter', 'satisfy-requirement-name-compartment', 'calcs-compartment', 'occurrences-compartment-contents', 'lifeline', 'concern-name-compartment', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'assert-constraints-compartment-element', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'subclassification', 'assume-constraint-name-compartment', 'recursive-import', 'requirement', 'n-ary-association-dot', 'assign-action-name-compartment', 'constraint', 'fork-node', 'state-do-action', 'require-edge', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'actor-name', 'state-actions-compartment-contents', 'owned-membership', 'frame-relationship', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'constraint-ref', 'assume-constraint-node', 'constraint-name-compartment', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'requirer', 'param-b', 'package-compartment', 'variants-compartment', 'assert-constraint-node', 'features-compartment', 'requirements-compartment-contents', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'result-compartment-contents', 'subject-compartment', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'concern-stakeholder-link', 'message-label', 'connection-label', 'satisfies-compartment-contents', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'frames-compartment-element', 'state-actions-compartment-element', 'state', 'require-constraint-name-compartment', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'requirement-def', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'require-constraint-element', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'actors-compartment-contents', 'stakeholder-name', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actors-compartment', 'actions-compartment-element', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': usage-node |= frame-concern-node
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.21 in production:
        +usage-node |= frame-concern-node
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 12.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'usage-node')]
        +
        +ERROR   : Non-unique production name: general-relationship | in {'members-compartment-element', 'results-compartment', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'stakeholder', 'assertor', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'usage-node |', 'part-def', 'perform-edge', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'assert-constraints-compartment-contents', 'until-condition', 'noncomposite-feature-membership', 'frame-concern-name-compartment', 'snapshots-compartment-contents', 'frames-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'actors-compartment-element', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'assert-constraints-compartment', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'assume-edge', 'succession-compartment', 'requirement-name-compartment', 'assume-constraints-compartment', 'occurrences-compartment', 'requirements-compartment-element', 'constraint-def', 'frame-concern-node', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'assert-constraint-name-compartment', 'packages-compartment', 'actor', 'port-def', 'relationships-compartment', 'action-name-compartment', 'stakeholders-compartment-contents', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'satisfy-requirements-compartment', 'allocations-compartment-contents', 'sq-part', 'satisfy-requirement-usage', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'constraint-def-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'distinguished-parameter-link', 'flow-def-name-compartment', 'constraints-usage-compartment-element', 'concern-def-name-compartment', 'swimlane', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'frames-compartment', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'require-constraint-node', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'requirement-def-name-compartment', 'enumeration-def', 'assumer', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'satisfy-edge', 'require-constraints-compartment-contents', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'usage-node', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'assume-constraints-compartment-contents', 'subject-compartment-element', 'frame-edge', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'satisfier', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'calcs-compartment-element', 'comment-with-keyword', 'part-ref', 'subject', 'while-loop-action-name-compartment', 'require-constraints-compartment', 'requirements-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'concerns-compartment', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'subject-name', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'constraints-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'stakeholders-compartment', 'individuals-compartment-contents', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'satisfies-compartment', 'flows-compartment-contents', 'constraints-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'assert-edge', 'element', 'message', 'requirement-ref', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'calcs-compartment-contents', 'individuals-compartment', 'for-loop-action-name-compartment', 'satisfy-requirements-compartment-contents', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'subject-compartment-contents', 'package-node', 'parts-compartment', 'concern', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'stakeholders-compartment-element', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'concern-def', 'distinguished-parameter', 'satisfy-requirement-name-compartment', 'calcs-compartment', 'occurrences-compartment-contents', 'lifeline', 'concern-name-compartment', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'assert-constraints-compartment-element', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'subclassification', 'assume-constraint-name-compartment', 'recursive-import', 'requirement', 'n-ary-association-dot', 'assign-action-name-compartment', 'constraint', 'fork-node', 'state-do-action', 'require-edge', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'actor-name', 'state-actions-compartment-contents', 'owned-membership', 'frame-relationship', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'constraint-ref', 'assume-constraint-node', 'constraint-name-compartment', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'requirer', 'param-b', 'package-compartment', 'variants-compartment', 'assert-constraint-node', 'features-compartment', 'requirements-compartment-contents', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'result-compartment-contents', 'subject-compartment', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'concern-stakeholder-link', 'message-label', 'connection-label', 'satisfies-compartment-contents', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'frames-compartment-element', 'state-actions-compartment-element', 'state', 'require-constraint-name-compartment', 'n-ary-segment', 'proxy-label', 'extended-usage', 'cdef-label', 'framer', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'requirement-def', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'require-constraint-element', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'actors-compartment-contents', 'stakeholder-name', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actors-compartment', 'actions-compartment-element', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': general-relationship |= frame-edge
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.21 in production:
        +general-relationship |= frame-edge
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 22.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'general-relationship')]
        +
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.22 Cases Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': compartment =| objective-compartment
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.23 Analysis Cases Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| analysis-def
        +WARNING : Production start line does not contain exactly one '=': usage-node =| analysis
        +WARNING : Production start line does not contain exactly one '=': compartment =| analyses-compartment
        +WARNING : Production start line does not contain exactly one '=': action-flow-element =|
        +WARNING : Production start line does not contain exactly one '=': subject-actors-stakeholders-node =| analysis  | analysis-def
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.24 Verification Cases Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| verification-def
        +WARNING : Production start line does not contain exactly one '=': usage-node =| verification
        +ERROR   : Non-unique production name: usage-node | in {'members-compartment-element', 'results-compartment', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'verification-def-name-compartment', 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'stakeholder', 'assertor', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'verification-name-compartment', 'usage-node |', 'part-def', 'perform-edge', 'objective-compartment', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'assert-constraints-compartment-contents', 'analysis', 'until-condition', 'noncomposite-feature-membership', 'frame-concern-name-compartment', 'snapshots-compartment-contents', 'frames-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'actors-compartment-element', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'verification', 'assert-constraints-compartment', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'entry-action', 'assume-edge', 'succession-compartment', 'requirement-name-compartment', 'assume-constraints-compartment', 'occurrences-compartment', 'requirements-compartment-element', 'constraint-def', 'frame-concern-node', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'analysis-def-name-compartment', 'allocation-def', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'assert-constraint-name-compartment', 'packages-compartment', 'actor', 'analyses-compartment-element', 'port-def', 'relationships-compartment', 'action-name-compartment', 'stakeholders-compartment-contents', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'satisfy-requirements-compartment', 'analyses-compartment-contents', 'allocations-compartment-contents', 'sq-part', 'satisfy-requirement-usage', 'event-edge', 'perform-actions-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'constraint-def-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'distinguished-parameter-link', 'flow-def-name-compartment', 'constraints-usage-compartment-element', 'concern-def-name-compartment', 'swimlane', 'analysis-def', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'frames-compartment', 'attribute-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'require-constraint-node', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'requirement-def-name-compartment', 'enumeration-def', 'assumer', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'flow-node', 'extended-usage-name-compartment', 'satisfy-edge', 'require-constraints-compartment-contents', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'sflow-node-l', 'usage-node', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'assume-constraints-compartment-contents', 'subject-compartment-element', 'frame-edge', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'verify-requirement-node', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'satisfier', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'calcs-compartment-element', 'comment-with-keyword', 'part-ref', 'subject', 'while-loop-action-name-compartment', 'require-constraints-compartment', 'requirements-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'concerns-compartment', 'succession-flow', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'subject-name', 'analyses-compartment', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'constraints-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'stakeholders-compartment', 'individuals-compartment-contents', 'verification-def', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'satisfies-compartment', 'flows-compartment-contents', 'constraints-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'portion-relationship', 'interface-def-name-compartment', 'annotation-node', 'states-compartment-contents', 'assert-edge', 'element', 'message', 'requirement-ref', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'calcs-compartment-contents', 'individuals-compartment', 'for-loop-action-name-compartment', 'satisfy-requirements-compartment-contents', 'analysis-name-compartment', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'subject-compartment-contents', 'package-node', 'parts-compartment', 'concern', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'stakeholders-compartment-element', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'concern-def', 'distinguished-parameter', 'satisfy-requirement-name-compartment', 'calcs-compartment', 'occurrences-compartment-contents', 'lifeline', 'concern-name-compartment', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'assert-constraints-compartment-element', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'subclassification', 'assume-constraint-name-compartment', 'recursive-import', 'requirement', 'n-ary-association-dot', 'assign-action-name-compartment', 'constraint', 'fork-node', 'state-do-action', 'verify-requirement-name-compartment', 'require-edge', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'actor-name', 'state-actions-compartment-contents', 'owned-membership', 'frame-relationship', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'constraint-ref', 'assume-constraint-node', 'constraint-name-compartment', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'requirer', 'param-b', 'package-compartment', 'variants-compartment', 'assert-constraint-node', 'features-compartment', 'requirements-compartment-contents', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'result-compartment-contents', 'subject-compartment', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'concern-stakeholder-link', 'message-label', 'connection-label', 'objective-compartment-element', 'satisfies-compartment-contents', 'action-ref', 'attributes-compartment-element', 'item', 'subsetting', 'frames-compartment-element', 'state-actions-compartment-element', 'state', 'require-constraint-name-compartment', 'n-ary-segment', 'objective-compartment-contents', 'proxy-label', 'extended-usage', 'cdef-label', 'framer', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'requirement-def', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'require-constraint-element', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'actors-compartment-contents', 'stakeholder-name', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actors-compartment', 'actions-compartment-element', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': usage-node |= verify-requirement-node
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.24 in production:
        +usage-node |= verify-requirement-node
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 12.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'usage-node')]
        +
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +WARNING : Production start line does not contain exactly one '=': action-flow-element =|
        +WARNING : Production start line does not contain exactly one '=': general-relationship =| verify-relationship
        +WARNING : Production start line does not contain exactly one '=': subject-actors-stakeholders-node =| verification | verification-def
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.25 Use Cases Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': definition-node =| use-case-def
        +WARNING : Production start line does not contain exactly one '=': usage-node =|
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.25 in production:
        +include-use-cases-compartment-contents = (include-use-cases-compartment-element* '…'?
        +
        +Unexpected token Token('_NON_CONTINUATION_LINE', '\n') at line 1, column 86.
        +Expected one of: 
        +	* RPAR
        +
        +WARNING : Production start line does not contain exactly one '=': action-flow-element =|
        +WARNING : Production start line does not contain exactly one '=': general-relationship =| include-use-case-relationship
        +WARNING : Production start line does not contain exactly one '=': subject-actors-stakeholders-node =| use-case | use-case-def
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.26 Views and Viewpoints Graphical Notation
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.26 in production:
        +root-view =
        +	framed-view<
        +
        +No terminal matches '<' in the current parser context, at line 2 col 13
        +
        +	framed-view<
        +                   ^
        +Expected one of: 
        +	* VBAR
        +	* IMAGE
        +	* REPETITION_SYMBOL
        +	* LEXICAL_NAME
        +	* GRAPHICAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* RPAR
        +	* _NON_CONTINUATION_LINE
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +
        +Previous tokens: Token('GRAPHICAL_NAME', 'framed-view')
        +
        +WARNING : Production start line does not contain exactly one '=': definition-node =|
        +ERROR   : Non-unique production name: usage-node | in {'members-compartment-element', 'viewpoint-def', 'results-compartment', 'message-node-r', "'«' 'entry' OccurrenceUsagePrefix 'action' '»'", 'verification-def-name-compartment', 'param-label', 'part-name-compartment', 'a-redefinition', 'items-compartment-contents', 'n-ary-dependency-client-link', 'interfaces-compartment-element', 'guard-expression', 'stakeholder', 'assertor', 'n-ary-connection-dot', 'allocate-relationship', 'iteration', 'verification-name-compartment', 'usage-node |', 'part-def', 'perform-edge', 'objective-compartment', "'«' 'exit' OccurrenceUsagePrefix 'action' '»'", 'connection-def-graphical', 'assert-constraints-compartment-contents', 'analysis', 'until-condition', 'noncomposite-feature-membership', 'frame-concern-name-compartment', 'snapshots-compartment-contents', 'frames-compartment-contents', 'element-inside-textual-compartment', 'attributes-compartment', 'viewpoint-def-name-compartment', 'redefinition', 'parameter', 'state-entry-action', 'individuals-compartment-element', 'occurrence-name-compartment', 'textual-representation-node', 'sq-l-node', 'directed-features-compartment-contents', 'state-subaction-declaration', 'allocation', 'loop-body', 'actors-compartment-element', 'states-compartment-element', 'allocation-node', 'flow-on-connection', 'ends-compartment-element', 'sq-graphical-element', 'exhibit-state-usage', 'transition', 'calc-name-compartment', 'general-view', 'action-body-textual', 'then-body', 'actions-compartment', 'param-t', 'timeslice-name-compartment', 'occurrence', 'port-l', 'import', 'n-ary-def-connection-dot', 'if-condition', 'timeslice-or-snapshot-node', 'enumeration-name-compartment', 'perform-actions-compartment-element', 'ellipsis-at-lower-left-corner', 'verification', 'assert-constraints-compartment', 'connection-graphical', 'general-element', 'attribute', 'connection-def', 'condition-expression', 'aflow-succession', 'c-adornment', 'n-ary-connection-def', 'verify-relationship', 'entry-action', 'assume-edge', 'succession-compartment', 'requirement-name-compartment', 'assume-constraints-compartment', 'occurrences-compartment', 'requirements-compartment-element', 'constraint-def', 'frame-concern-node', 'interconnection-compartment', 'allocation-name-compartment', 'port-def-name-compartment', 'occurrence-ref', 'succession-compartment-contents', 'enums-compartment-element', 'ports-compartment', 'timeslices-compartment', 'interface-label', 'attribute-def-name-compartment', 'flows-compartment-element', 'action-flow-compartment', 'usage-name-with-alias', 'members-compartment-contents', 'action-def-name-compartment', 'connection-definition-elaboration', 'package-with-name-inside', 'port-name-compartment', 'performed-by-compartment', 'proxy-h', 'comment-without-keyword', 'performed-by-compartment-contents', 'connection-def-name-compartment', 'analysis-def-name-compartment', 'allocation-def', 'include-use-case-name-compartment', 'decision-node', 'eventer', 'actions-compartment-contents', 'assign-action-node', 'sflow-node-r', 'assert-constraint-name-compartment', 'verifications-compartment', 'packages-compartment', 'actor', 'analyses-compartment-element', 'port-def', 'relationships-compartment', 'verification-methods-compartment', 'action-name-compartment', 'stakeholders-compartment-contents', 'features-compartment-element', 'flow-end-node', 'relationships-compartment-element', 'satisfy-requirements-compartment', 'analyses-compartment-contents', 'allocations-compartment-contents', 'sq-part', 'satisfy-requirement-usage', 'event-edge', 'perform-actions-compartment', 'use-case-name-compartment', 'exit-action', 'general-node |', 'snapshots-name-compartment', 'constraint-def-name-compartment', 'connection-relationship', 'state-transition-view', 'snapshots-compartment-element', 'element-node', 'occurrences-compartment-element', 'distinguished-parameter-link', 'flow-def-name-compartment', 'constraints-usage-compartment-element', 'concern-def-name-compartment', 'swimlane', 'analysis-def', 'item-ref', 'action-flow-relationship', 'action-flow-node', 'view-def-name-compartment', 'frames-compartment', 'attribute-def', 'use-case-def', 'items-compartment', 'port-r', 'perform-action-usage', '|', 'require-constraint-node', 'timeslices-compartment-contents', 'else-body', 'DefinitionExtensionKeyword names a MetadataDefinition that is a direct', 'msg-end-node', 'if-else-action-node', 'n-ary-def-segment', 'definition-node |', 'parameters-compartment-element', 'exhibit-state-name-compartment', 'variants-compartment-contents', 'state-subaction-body', 'requirement-def-name-compartment', 'enumeration-def', 'assumer', 'extended-def-name-compartment', 'definition-name-with-alias', 'comment-node', 'includes-compartment-element', 'flow-node', 'extended-usage-name-compartment', 'satisfy-edge', 'verifications-compartment-element', 'require-constraints-compartment-contents', 'connection', 'state-name-compartment', 'package-with-name-in-tab', 'include-use-cases-compartment-contents', 'sflow-node-l', 'usage-node', 'interface-name-compartment', 'event-occurrence', 'merge-node', 'part-def-name-compartment', 'directed-features-compartment-element', 'assume-constraints-compartment-contents', 'subject-compartment-element', 'frame-edge', 'ports-compartment-contents', 'usage-cp', 'members-compartment', 'language-string', 'snapshots-compartment', 'states-compartment', 'rel-name', 'state-def-name-compartment', 'includes-compartment', 'verify-requirement-node', 'action-def', 'transition-label', 'while-loop-action-node', 'exit-action-name-comp', 'parameters-compartment-contents', 'satisfier', 'use-case', 'accept-action-node', 'or indirect specialization of KerML metaclass SemanticMetadata.', 'type-relationship', 'state-ref', 'state-source', 'send-action-name-compartment', 'extended-def', 'flow-label', 'sequence-view', 'sq-graphical-node', 'exhibit-edge', 'a-subsetting', 'sq-head-node', 'interface-def', 'calcs-compartment-element', 'comment-with-keyword', 'part-ref', 'subject', 'while-loop-action-name-compartment', 'require-constraints-compartment', 'use-cases-compartment', 'requirements-compartment', 'attribute-name-compartment', 'ends-compartment-contents', 'state-exit-action', 'include-use-cases-compartment', 'sq-port-label', 'n-ary-dependency', 'connection-end', 'send-action-expression', 'compartment-stack', 'sq-succession', 'annotation-link', 'connection-usage-elaboration', 'interface', 'attributes-compartment-contents', 'concerns-compartment', 'succession-flow', 'view-def', 'flow-def', 'relationships-compartment-contents', 'n-ary-connection', 'send-action-node', 'subject-name', 'analyses-compartment', 'a-property', 'ends-compartment', 'n-ary-dependency-supplier-link', 'state-def', 'documentation-compartment', 'constraints-compartment', 'definition', 'general-compartment', 'calc', 'port-t', 'top-level-import', 'flows-compartment', 'port-label', 'stakeholders-compartment', 'individuals-compartment-contents', 'verification-def', 'timeslice', 'param-r', 'param-l', 'general-relationship |', 'connections-compartment-contents', 'event-occurrence-def-name-compartment', 'performer-node', 'allocations-compartment', 'a-direction', 'st-succession', 'satisfies-compartment', 'root-view', 'flows-compartment-contents', 'use-cases-compartment-element', 'constraints-compartment-contents', 'enumeration-def-name-compartment', 'allocation-def-name-compartment', 'includes-compartment-contents', 'portion-relationship', 'interface-def-name-compartment', 'include-use-case-usage', 'annotation-node', 'states-compartment-contents', 'verification-methods-compartment-element', 'assert-edge', 'element', 'message', 'requirement-ref', 'allocations-compartment-element', 'perform-actions-swimlanes', 'flow-name-compartment', 'calcs-compartment-contents', 'individuals-compartment', 'for-loop-action-name-compartment', 'satisfy-requirements-compartment-contents', 'analysis-name-compartment', 'terminate-node', 'occurrence-def', 'state-transition-element', 'annotated-element', 'while-condition', 'unowned-membership', 'item-def-name-compartment', 'subject-compartment-contents', 'package-node', 'parts-compartment', 'concern', 'sequence-compartment', 'ifelse-action-name-compartment', 'connections-compartment-element', 'occurrence-def-name-compartment', 'stakeholders-compartment-element', 'succession-label', 'interfaces-compartment-contents', 'parts-compartment-contents', 'state-transition-compartment', 'calc-def', 'concern-def', 'distinguished-parameter', 'satisfy-requirement-name-compartment', 'calcs-compartment', 'occurrences-compartment-contents', 'lifeline', 'concern-name-compartment', 'part', 'parts-compartment-element', 'cdot-label', 'enumeration', 'assert-constraints-compartment-element', 'timeslices-compartment-element', 'calc-def-name-compartment', 'start-node', 'include-use-cases-compartment-element', 'subclassification', 'assume-constraint-name-compartment', 'recursive-import', 'requirement', 'n-ary-association-dot', 'assign-action-name-compartment', 'constraint', 'fork-node', 'state-do-action', 'verify-requirement-name-compartment', 'require-edge', 'accept-action-expression', 'event-occurrence-def', "'«' 'do' OccurrenceUsagePrefix 'action' '»'", 'actor-name', 'state-actions-compartment-contents', 'include-use-case-relationship', 'owned-membership', 'frame-relationship', 'pdh', 'state-subaction-body-textual', 'rolename', 'connections-compartment', 'exhibit-states-compartment-element-compartment', 'use-cases-compartment-contents', 'features-compartment-contents', 'action-body', 'exhibit-states-compartment-contents', 'for-loop-action-node', 'action', 'do-action', 'enums-compartment', 'sq-graphical-relationship', 'exhibitor', 'parameters-compartment', 'binding-connection', 'entry-action-name-comp', 'constraint-ref', 'assume-constraint-node', 'verification-methods-compartment-contents', 'constraint-name-compartment', 'packages-compartment-element', 'type-node', 'interface-connection', 'do-action-name-comp', 'flow-node-r', 'imported-package-with-name-inside', 'reference-subsetting', 'multiplicity', 'packages-compartment-contents', 'requirer', 'param-b', 'package-compartment', 'variants-compartment', 'assert-constraint-node', 'features-compartment', 'requirements-compartment-contents', 'state-transition-node', 'state-actions-compartment', 'snapshot', 'directed-features-compartment', 'pdv', 'succession-flow-label', 'text-block', 'enums-compartment_contents', 'interfaces-compartment', 'iteration-expression', 'result-compartment-contents', 'subject-compartment', 'port-usage', 'accept-action-name-compartment', 'proxy-v', 'perform-actions-compartment-contents', 'join-node', 'interconnection-element', 'connection-name-compartment', 'concern-stakeholder-link', 'message-label', 'connection-label', 'objective-compartment-element', 'verifies-compartment-element', 'satisfies-compartment-contents', 'action-ref', 'verifications-compartment-contents', 'attributes-compartment-element', 'item', 'subsetting', 'verifies-compartment', 'frames-compartment-element', 'state-actions-compartment-element', 'state', 'require-constraint-name-compartment', 'n-ary-segment', 'objective-compartment-contents', 'proxy-label', 'extended-usage', 'cdef-label', 'framer', 'sq-port', 'flow-node-l', 'relationship-name', 'imported-package-with-name-in-tab', 'composite-feature-membership', 'requirement-def', 'sq-proxy', 'ports-compartment-element', 'action-flow-view', 'message-node-l', 'require-constraint-element', 'use-case-def-name-compartment', 'verifies-compartment-contents', 'UsageExtensionKeyword names a MetadataDefinition that is a direct', 'binary-dependency', 'variant-elementusages-compartment', 'trigger-expression', 'actors-compartment-contents', 'stakeholder-name', 'exhibit-states-compartment', 'port-b', 'item-name-compartment', 'documentation-node', 'items-compartment-element', 'usage-edge', 'perform-action-name-compartment', 'else-branch', 'event-occurrence-name-compartment', 'n-ary-dependency-client-or-supplier-link', 'el-prefix', 'flow', 'done-node', 'actors-compartment', 'actions-compartment-element', 'item-def'}
        +WARNING : Production start line does not contain exactly one '=': usage-node |=
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.26 in production:
        +usage-node |=
        +      viewpoint
        +    | view
        +    | framed-view
        +
        +Unexpected token Token('VBAR', '|') at line 1, column 12.
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +Previous tokens: [Token('GRAPHICAL_NAME', 'usage-node')]
        +
        +WARNING : Production start line does not contain exactly one '=': compartment =|
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.26 in production:
        +compartment =|
        +    | views-compartment
        +    | viewpoints-compartment
        +    | exposes-compartment
        +    | filters-compartment
        +    | rendering-compartment
        +
        +Unexpected token Token('VBAR', '|') at line 2, column 5.
        +Expected one of: 
        +	* IMAGE
        +	* NONTERMINAL_NAME
        +	* LBRACE
        +	* QUALIFIED_NAME
        +	* GRAPHICAL_NAME
        +	* LPAR
        +	* TERMINAL
        +	* LEXICAL_NAME
        +Previous tokens: [Token('__ANON_0', '=|')]
        +
        +WARNING : Production start line does not contain exactly one '=': interconnection-element =|
        +WARNING : Production start line does not contain exactly one '=': general-relationship =| expose-relationship
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.26 in production:
        +expose-relationship =
        +     expose_r | toplevel-expose-r | recursive-expose-r
        +
        +No terminal matches '_' in the current parser context, at line 2 col 12
        +
        +     expose_r | toplevel-expose-r | recursive-expos
        +           ^
        +Expected one of: 
        +	* VBAR
        +	* IMAGE
        +	* REPETITION_SYMBOL
        +	* LEXICAL_NAME
        +	* GRAPHICAL_NAME
        +	* QUALIFIED_NAME
        +	* LBRACE
        +	* RPAR
        +	* _NON_CONTINUATION_LINE
        +	* LPAR
        +	* TERMINAL
        +	* NONTERMINAL_NAME
        +
        +Previous tokens: Token('GRAPHICAL_NAME', 'expose')
        +
        +ERROR   : Parse error in tests\KerML_and_SysML_spec_sources\SysML-spec.html 8.2.3.26 in production:
        +expose_r =
        +      
        +
        +No terminal matches '_' in the current parser context, at line 1 col 7
        +
        +expose_r =
        +      ^
        +Expected one of: 
        +	* EQUAL
        +	* "=|"
        +
        +Previous tokens: Token('GRAPHICAL_NAME', 'expose')
        +
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=view-frame-info-compartment-tr
        +ERROR   : Unexpected tag inside 
         element: tag=view-frame-info-compartment-bl
        +ERROR   : Unexpected tag inside 
         element: tag=view-frame-info-compartment-br
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : PROCESSING Clause 8.2.3.27 Metadata Graphical Notation
        +WARNING : Production start line does not contain exactly one '=': annotation-node =| metadata-feature-annotation-node
        +ERROR   : Unexpected tag inside 
         element: tag=
        +ERROR   : Unexpected tag inside 
         element: tag=
        +INFO    : ===== Start of Textual Notation Grammar Checks
        +INFO    : Keywords extracted from textual BNF grammar scan:
        +    abstract accept action allocated allocation analysis assign assume attribute calc case concern connection constraint
        +    def defines derived do entry enum event exit flow flows frame if in inout interface item language loop message
        +    metadata nonunique not occurrence of ordered out parallel part perform performs port readonly redefines ref require
        +    requirement satisfy send specializes state subsets succession to use verification verify view viewpoint
        +INFO    : Comparison of declared reserved keywords versus extracted keywords
        +INFO    : Declared reserved keywords not in extracted keywords:
        +
        +WARNING : Extracted keywords not in declared reserved keywords:
        +    abstract accept action allocated allocation analysis assign assume attribute calc case concern connection constraint
        +    def defines derived do entry enum event exit flow flows frame if in inout interface item language loop message
        +    metadata nonunique not occurrence of ordered out parallel part perform performs port readonly redefines ref require
        +    requirement satisfy send specializes state subsets succession to use verification verify view viewpoint
        +INFO    : ===== End of Textual Notation Grammar Checks
        +INFO    : ===== Start of Graphical Notation Grammar Checks
        +WARNING : The following 4 SVG images are missing:
        +images/expose_r.svg
        +images/results-compartment.svg
        +images/succession-compartment.svg
        +images/|.svg
        +INFO    : Map from 271 original to new SVG  images:
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-01a51e6a-39d0-426c-addc-6a046bd2d8d0/png images/if-else-action-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-03648eae-4996-44b4-ae3f-a2d4ccdac9c1/png images/else-body.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-0808c61c-951b-4c57-8051-36e6c4139e66/png images/event-edge.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-0be42259-71a6-4452-a749-9f8c848e434f/png images/view-frame-info-compartment-bl.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-0c5d07eb-6be4-4155-a1a4-11b373b68eb1/png images/perform-edge.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-0f1182f3-d2e2-4458-90ee-b4d3b7d0609e/png images/st-succession-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-1296af92-077c-4551-bc4a-c52ae7606367/png images/transition-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-18b12a33-68ce-450c-87a5-d4ea67485aff/png images/exhibit-edge.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-1a4ad442-3460-4022-92eb-f062bc63e975/png images/st-succession-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-1bc07682-c317-4223-9e3e-dc965235d656/png images/sq-proxy-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-1ff1564b-73c0-4d45-9eff-e9203c5c652b/png images/recursive-import.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-2192a09c-929a-4f2b-90c6-6cc3460d5f7d/png images/framed-view.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-2a094901-227d-49ec-9f49-f602a84f3bef/png images/verify-requirement-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-2dd8cce2-287a-49d3-9c6a-ae84da113c8c/png images/proxy-h-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-2e60a27c-4cab-46bc-9e86-8a3e1c361991/png images/entry-action-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-34e9ef33-e269-4304-bbd5-2aed4a9e93b8/png images/assert-edge.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-366ce55f-c8e1-4d74-9b45-81374d100336/png images/terminate-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-3a9adfd7-cb63-4127-9780-69ef52327654/png images/proxy-h-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-3beea011-5ec0-4254-acb6-b1d035a1e990/png images/frame-concern-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-3ca9f823-97b1-4c0e-8105-90e48df4a02b/png images/connection-graphical-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-3fd3dcfc-51c9-4655-b841-3c8f70647e0e/png images/state-do-action.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-4570e469-ff3a-4327-a4f7-309be6d14708/png images/satisfy-edge.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-478dab8f-42a4-49fb-aba7-d77ae9c89e1d/png images/event-occurrence-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-485cec84-c8da-4dfc-b345-35caa28345ff/png images/while-condition.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-4a53bc80-12e3-4835-a4fc-818575adaa20/png images/frame-edge.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-524295f4-7b76-48ff-9f04-80d8ff2ebc77/png images/toplevel-expose-r.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-5334a43b-635a-4076-96c3-57fc615100d5/png images/while-loop-action-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-559fd89d-11e4-474e-a53c-3505ada4f016/png images/iteration.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-5b569de8-7801-49b1-bcbd-3edfbce2143b/png images/features-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-5d4ed40e-a008-498a-90d6-257a349b83e9/png images/event-occurrence.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-5df42a08-93cc-4633-85a1-74cdd53e8563/png images/sq-proxy-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-5f626c58-bb17-4fe9-9b06-15bbd207c403/png images/state-entry-action.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-62999a7c-8269-4d2f-8c2b-188e842c277d/png images/viewpoint-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-65c94454-ff75-4d18-8c9a-6ddee0d5b0ec/png images/top-level-import.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-72a247c8-8937-458b-88a8-7c72cde4f7e7/png images/import.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-92dc28c0-603e-405e-9b91-04dc3652038e/png images/transition-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-950f6215-2b45-4f55-918a-7f700babc658/png images/then-body.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-957a4dbd-b931-4c08-8f53-fda512cf1526/png images/state.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-a3585453-c8ab-44e9-aa60-ea993696ab69/png images/state-exit-action.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-a98b33e5-43b9-47ae-aa2a-4482e028e82d/png images/n-ary-def-connection-dot.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-abce49cf-3252-400e-bf84-6706a0f1338e/png images/entry-action-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-af1eec6f-270c-47dd-909c-ea092822c502/png images/require-edge.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-b33ce383-6529-4435-bf80-13a71b9eb5ec/png images/view-frame-info-compartment-br.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-b674baa8-0339-4d22-87b4-69559e13fb46/png images/lifeline.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-b9fea3a7-2a24-4ba5-a546-21fbd7835710/png images/do-action.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-bd3cdb82-d53d-4188-aa66-25822481081e/png images/metadata-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-c04a57bc-03f2-4c05-83b9-604005b33842/png images/state-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-c2b2699e-6b92-4266-a3c5-b26480894a16/png images/recursive-expose-r.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-c4d7cdfd-ec52-4e26-aca2-55c316dc2305/png images/require-constraint-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-c5a99890-8b58-4aad-ab93-b76885e29023/png images/sq-succession.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-c5e4ac8b-00d8-408a-8b9d-8ba9ce29830d/png images/proxy-v-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-c7f1f03e-9adb-4396-9411-aae8d903abff/png images/assume-constraint-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-c8c905ff-475d-42ea-95c8-ce935fd64259/png images/until-condition.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-cd16d0bd-fdc0-4460-9566-84e21b4f8b9d/png images/expose_r.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-d66dbd82-ec14-4718-8267-be981ed7cbd5/png images/else-branch.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-d92eccb2-7c7b-4935-af84-949b5a0f9c2a/png images/loop-body.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-db017a93-ac75-4c4d-94fd-269321331ed6/png images/connection-def-graphical-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-dfe98b91-6fc1-4ed9-a835-f122bc9e6445/png images/flow-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-e1dc43fb-54eb-423b-a20c-eb68fccad7e8/png images/assume-edge.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-e5ac8941-52d7-40a2-bb08-4bef6390bb14/png images/view-frame-info-compartment-tr.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-eadb79c5-f068-49f7-8734-74568a3243d2/png images/for-loop-action-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-f4a55f27-1850-4126-9d52-a84b861a3487/png images/exit-action.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-f4d644b9-2422-4d0f-a890-34f9ad3fc5ed/png images/proxy-v-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-fae50d9e-8dec-4412-b7e1-602a7095b98f/png images/if-condition.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-fe5632cc-8a70-4798-b1c7-9364f1f62042/png images/flow-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_image_ve-5-0-0-omg-ff99cb59-43d7-4639-89c0-be2970e1bec0/png images/n-ary-def-segment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1636087290041_5f6cb622-0b56-4ad3-8444-d21cf43a99441636087291876__png/png images/subclassification.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1636087541552_6da0a0b7-59e6-4184-99c5-ca0ed6d8fa2b1636087543384__png/png images/subsetting.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1636087639877_f09fb901-e87a-4718-a2b9-e5ed93465cbb1636087641796__png/png images/definition.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1636087765457_e05a7f01-84d8-4653-a52c-9b69832df6d81636087767058__png/png images/composite-feature-membership.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1636087810268_297947bb-0e43-44b4-a9aa-68b8ed4576aa1636087811863__png/png images/noncomposite-feature-membership.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1636405980123_3b0181df-bc2e-4bdb-b15f-91dc6a9e99e01636405982405__png/png images/redefinition.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1669818864467_5b1ed918-3b7f-4140-8bc2-56447ef7f2331669818865667__png/png images/start-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1669818912728_4d4bd3ab-09e7-4e7c-845b-68887c1ddb321669818913905__png/png images/done-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1669818954017_cf06e09c-1018-466c-910f-584566851b4e1669818955190__png/png images/fork-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1669818993708_01b30e27-b3ad-4d4b-81c6-c95a225d1f8b1669818995080__png/png images/join-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1669819120748_09232aaf-e49c-4718-a3c4-9bdefc94efef1669819122108__png/png images/decision-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1669819156369_38552a2b-015f-4da5-9f80-6301bc78019d1669819157956__png/png images/merge-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1673790698364_3b7cf5fa-3754-4be1-a940-9be812e474a31673790701459__png/png images/annotation-link.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1674167851716_aac2bf6a-2ca6-491f-8207-cd8b8726ab2c1674167855039__png/png images/portion-relationship.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1674233669475_bcff3e4e-2327-44a1-958b-941fcb8bff171674233673588__png/png images/swimlane.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676210182689_78b8e473-19ab-4a9c-b33d-e60aa8dca8381676210187102__png/png images/general-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676210818545_baf49e3e-5a17-4fcb-8af0-41c6d91c26861676210823038__png/png images/binary-dependency.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676210931339_ad2732af-64e0-4cac-99bd-cc7b953220781676210935968__png/png images/n-ary-association-dot.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676211808531_1e382bd4-59d7-482d-bfac-a99a73d4885b1676211813221__png/png images/n-ary-dependency-client-link.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676211856686_d92d11af-1ddf-403f-9ee8-4fddfda85e051676211861077__png/png images/n-ary-dependency-supplier-link.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676212470954_1f53c0e0-c2ad-4a19-ad0d-3cc3cabb21c91676212475356__png/png images/comment-without-keyword.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676212575480_44d2f2db-6974-462d-bc97-55c56e0c817e1676212579878__png/png images/textual-representation-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676212670386_c84ca6c2-8ef8-45d2-beeb-9d6fc183c8981676212674767__png/png images/documentation-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676219029607_1e4a2d87-60b5-43ab-b692-11a50ed4cd601676219034238__png/png images/package-with-name-inside.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676219069208_afdbeaf3-0b22-4fab-b396-3320879f50391676219073903__png/png images/package-with-name-in-tab.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676219107812_91f8d841-a7b2-43ce-b29d-ff798911fb2e1676219112423__png/png images/imported-package-with-name-inside.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676219152700_d98fa479-d49b-42a1-a101-2eac7cb0f25d1676219157376__png/png images/imported-package-with-name-in-tab.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676219306363_a210519a-8454-4068-aa8f-893c1663c9391676219311080__png/png images/packages-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676219336028_9caefd80-f022-4be7-835e-c0757cb081b91676219340624__png/png images/members-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676219378206_cf5e2aec-c994-4f04-9f53-74d21d91352c1676219382825__png/png images/relationships-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676219569571_4cb3b7b5-1b90-4dc4-b053-0b04e86e93da1676219574027__png/png images/owned-membership.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676219633980_a3317b43-3c0c-4555-b9df-779309ce78f71676219638426__png/png images/unowned-membership.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676221177447_93dea8d0-c7a7-41ba-bde0-5ee446d0d1661676221182122__png/png images/reference-subsetting.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676222115869_df1a915e-31d0-4312-a7c7-e904b9d79aef1676222120536__png/png images/variants-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676222178303_256f9c01-6772-42f6-aaf7-d9b05d6b60261676222182772__png/png images/variant-elementusages-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676309440200_5cc4ca88-18b3-4eb5-a82b-1551a4ea17dd1676309445550__png/png images/attribute-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676309569712_de2d8788-191f-4c57-838c-6f20c536fd791676309574809__png/png images/attributes-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676309743453_1aca8ded-db2b-4fb9-a628-291de8aaf29e1676309748632__png/png images/enumeration-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676309842545_6d1bae09-8cf6-4aca-818c-4f68ace85f3b1676309847624__png/png images/enums-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676310028345_3b61ec90-6b38-4533-a6f6-71d595de6a981676310033524__png/png images/occurrence-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676310252448_356dfe88-469e-4c03-be71-6ef093a416fe1676310257705__png/png images/occurrences-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676310310115_0c0a3d9b-9be9-4124-ab26-8e6f11349d321676310315198__png/png images/individuals-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676310344132_01e360be-13ea-4cfc-b333-e142862279df1676310349216__png/png images/timeslices-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676310366451_debc4a9c-08e8-40ce-95a4-eb6bf02d40481676310371540__png/png images/snapshots-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676310393249_797d0311-cec0-4878-a8a2-292892b64a1c1676310398332__png/png images/sequence-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676310476689_70d67638-c9cc-496c-9504-378fbd80aac01676310481773__png/png images/sq-port.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676311316277_896d319f-c9b4-4de5-a790-195362a2a3d21676311321385__png/png images/items-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676311369481_e0f2a8d2-b08b-4f17-a905-3829294ba3201676311374576__png/png images/item-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676311485222_75789059-0cc8-4d84-892a-01213e9d67151676311490415__png/png images/part-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676311728321_03073d32-d0a7-4091-9a89-6b10d279f55a1676311733656__png/png images/parts-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676311798900_74f02e53-34f6-4f01-8ed5-ebede4e462b71676311803999__png/png images/directed-features-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676311864307_93c5c2a5-b319-4288-8795-ef968568541b1676311869406__png/png images/interconnection-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676311983165_c778065d-5830-4b17-8247-903d35e03a531676311988281__png/png images/ports-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676312037979_6cc3b690-00a5-4dc6-b7a2-200d266e3a6f1676312043146__png/png images/port-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676313031690_b9375572-3cef-4693-92d8-bbf477289b311676313036811__png/png images/pdh-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676313125759_b4ca0f53-0c83-4433-af83-5eccd3198d181676313130889__png/png images/pdh-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676313196646_2e3cff04-c158-4313-8059-98818ebbdaed1676313201760__png/png images/pdh-3.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676313230329_75339660-c3c8-490f-9519-ab96f85dd0be1676313235432__png/png images/pdv-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676313300908_c01f5f2f-eb34-4313-b7aa-5b8279f479d31676313306012__png/png images/pdv-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676313339136_8832829e-39c6-49c5-92ef-d4f991355ae01676313344251__png/png images/pdv-3.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676313666143_6db58735-ca34-40d8-b117-cbce0e1e7a201676313671270__png/png images/port-r-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676313741239_4bdd43ba-1c3f-4ae6-b3f0-5cfa94e9a83d1676313746353__png/png images/port-t-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676313841441_4c683bdf-8fc8-4dfc-9fdb-7fbaa5c9af571676313846777__png/png images/port-b-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676313890618_7c4da4f9-6d0f-41a5-8104-e4dd9364bc8a1676313895742__png/png images/port-l-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676329936893_9144b8ab-b097-4e06-a204-77c2a50052e61676329942168__png/png images/element-inside-textual-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676337928908_4bc94fe2-61ee-4057-b688-c8ae77b6675c1676337933083__png/png images/connection-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676338076183_239509c6-f278-4679-a939-d77f40f0daf81676338080429__png/png images/connections-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676338279339_93629fe5-5baf-4f0b-90da-e672908526bf1676338283422__png/png images/flow-on-connection.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676338870754_5936d01b-8455-42c5-898e-e3ef195dcb291676338875114__png/png images/interface-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676339129535_e02620f3-ef2c-4a57-a5e8-f9f356089bfe1676339133781__png/png images/interfaces-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676339205401_0f63712e-92d3-46f4-91ca-7bfc30f4df611676339209492__png/png images/ends-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676339339875_d4ab9015-becc-4fd7-8a14-c17524721a151676339343961__png/png images/allocation-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676339400501_fac2e5b2-5233-4f72-8886-605a7a30026d1676339404600__png/png images/allocations-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676339665038_82ac9120-3c76-4a68-93ef-11f4a2293f611676339669392__png/png images/allocate-relationship.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676339852583_d033d698-5c6a-45bf-981a-0a0fc93c06b71676339856772__png/png images/action-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676339937540_74cbc855-fc25-4dc7-b900-218d50b5aed21676339941638__png/png images/action.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676340071176_acbf5609-32d9-46a4-a5a7-324563699fba1676340075267__png/png images/actions-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676340100728_84057ab8-fbfa-4edd-ac1a-d6ba4911bf541676340104820__png/png images/perform-actions-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676340135014_904a3c8e-bee5-48dc-a60b-ea42037dd5de1676340139118__png/png images/parameters-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676340167856_bba6fa0c-9083-4585-b16f-96c26428f9381676340171946__png/png images/action-flow-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676371454155_843cb290-ff3b-4d50-a17d-18eae98061c11676371458377__png/png images/connection-definition-elaboration.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676371640655_c0421bb8-adc6-44ca-b510-662974dbeda31676371648860__png/png images/connection-usage-elaboration.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676372322476_9892ab06-7a7c-4554-af32-0114c11a02d61676372326795__png/png images/send-action-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676372364808_ed546e9e-e291-447e-92e1-327b221019c51676372368949__png/png images/accept-action-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676372448164_ce3b2fc0-d49f-4d97-86fa-2c6de9a17a441676372454566__png/png images/assign-action-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676376019205_565f0340-1567-4b45-9807-948a4ecdeec11676376023403__png/png images/states-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676376053035_bdcde06f-071e-4d48-b9b9-451af5d1d41c1676376057129__png/png images/state-actions-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676376079695_c31233f3-5285-4728-b6af-0b681fbe56871676376083802__png/png images/exhibit-states-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676376111509_d6e6fcc2-33a0-49ff-bc80-b9004e2428951676376115788__png/png images/succession-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676376155096_c4505c35-938a-4324-8a78-115ad0d75d961676376159214__png/png images/state-transition-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676376757399_ded42442-2314-4be6-a6a1-7f105f0037c41676376762220__png/png images/calc-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676376957747_e4b06c80-6794-45be-bb50-052a9839d18b1676376962028__png/png images/calc.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676377446949_969bc485-08eb-42cd-910b-329a81919a331676377451106__png/png images/calcs-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676377615580_5e1bb2d5-88d8-4fe9-bc22-7b47bfdf32191676377619702__png/png images/results-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676381003065_e975ae4a-0f97-4319-9303-a40ca71b00591676381007331__png/png images/perform-action-usage.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676381309979_a24adc27-efee-4bf0-9f7c-5f5194c259ea1676381314220__png/png images/exhibit-state-usage.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676381521374_0c928254-41fa-4d87-a198-702361c0b51a1676381525397__png/png images/constraints-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676381602871_e3967110-2bcb-4831-b6ff-711f7cd7fea91676381607092__png/png images/assert-constraints-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676381828612_2f5a13b3-2264-4215-b50f-1b539dd99bf51676381832930__png/png images/constraint-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676382864499_eb906638-6de1-46ae-bc16-76c20f34e1141676382868728__png/png images/assert-constraint-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676391117929_02377bca-a478-4d3c-8fa4-3df8c12247af1676391122238__png/png images/metadata-feature-annotation-node.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676394418548_3983a60a-f5c0-42e6-b526-f6fa4ad8b2b21676394422979__png/png images/requirement-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676394685723_3bf419c5-5723-426b-b5b6-1c1acab76fb91676394690106__png/png images/satisfy-requirement-usage.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676394881256_e3bb5277-af76-40f4-a2fa-c7e742b6bf4b1676394885523__png/png images/requirements-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676395091238_4315e58a-4bfa-4f75-8677-1dd2a7c6add41676395095512__png/png images/require-constraints-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676396202995_02d60036-1737-4327-8461-70738f876c3c1676396207357__png/png images/assume-constraints-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676396378215_cb0308fd-220c-4c30-9f23-cf9943a4d0e21676396382514__png/png images/satisfy-requirements-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676396609908_29dc252f-2546-4f0a-b4e0-f60e483827591676396614188__png/png images/satisfies-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676396656926_a1ddc1a4-17bd-4a99-bdd3-d9358131179b1676396661177__png/png images/actors-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676396711576_9de6f72d-748b-4ee8-9f6c-2917bb0a10061676396715835__png/png images/subject-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676396755126_2ec83da5-2ea5-4b4d-b3fb-32e088b250e31676396759392__png/png images/stakeholders-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676396804506_fad3bd65-eda0-4ceb-bc09-8c9b6054394f1676396808788__png/png images/frames-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676397088544_373a1ffb-89ff-436c-9c48-6ccbfe8631b51676397092872__png/png images/subject.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676397434586_4439daa2-829d-4a34-93ee-af920fb9c3bb1676397438962__png/png images/actor-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676397687703_1ff3ba78-bc24-4d7a-a5b8-a709cf0334f41676397692072__png/png images/actor-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676397829293_315f7ca1-9f06-4054-b175-4ec4e5fc799c1676397833618__png/png images/distinguished-parameter-link.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676398386001_6c7bcfd0-de5d-4047-b439-05e7325e78051676398390387__png/png images/concern-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676398507034_cf9adfb6-ae27-427e-9cbe-5c41504ae1bf1676398511401__png/png images/concern.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676399968777_6b2f079e-e927-4b44-9bd4-2752a16041841676399973143__png/png images/concern-stakeholder-link.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676404009089_4dd07cd7-5c21-4e20-b1bd-1be0946a593d1676404013453__png/png images/include-use-cases-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676404861188_cef34a5c-652a-4301-8f64-ec081457d9dc1676404865559__png/png images/includes-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676405038585_d6ff68b2-7ea3-4635-8421-f1c6d1f6a4cd1676405042943__png/png images/use-cases-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676446569658_3d8986c8-8262-40fd-bd1c-5eb976133f6a1676446573432__png/png images/frame-relationship.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676447753786_7c28aedc-a752-4a7f-8700-a6b7f5d3966d1676447757493__png/png images/stakeholder.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676449003338_dca4efe0-9767-448a-ae69-47bef44b32421676449007045__png/png images/objective-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676450804004_1dc8dba1-5bf2-4c01-8cce-1b078c9c92021676450808015__png/png images/analyses-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676452306526_e551d273-8d5b-4218-9881-e818961281f11676452310265__png/png images/verifications-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676452572646_2442b6a9-f01a-4e02-8f1f-df4106f02b581676452576393__png/png images/verifies-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676452645293_80f445c6-fc71-423a-b7c5-61e1f4f90ac01676452649196__png/png images/verification-methods-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676452763099_af814652-9966-4f67-90d8-e225889263411676452766840__png/png images/views-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676452899873_7d2eedbf-442f-4b92-b1e2-792046e6e9021676452903790__png/png images/viewpoints-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676453172621_9667b7a4-1d50-4c97-b84d-48b48ffa7bb11676453176382__png/png images/exposes-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676453237002_14c85a63-4fc2-43f7-8ab7-ed183082656e1676453240737__png/png images/filters-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676453307428_cc4ff9aa-7e0e-4820-a655-d63fdae97f951676453311161__png/png images/rendering-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676472994032_6d4b74b3-872f-42d3-99b2-8d2b66f8773a1676472998203__png/png images/analysis-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676473357362_3f88b841-65f4-45e8-ba46-de15ee32f4341676473361560__png/png images/analysis.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676473534302_64ff7bbd-4e41-4853-9382-b79df16d8e8f1676473538511__png/png images/verification.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676473592359_ee22af56-816f-403e-baac-8af8e051dd691676473596541__png/png images/verification-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676473702819_c9ab6273-50b7-48c4-96ea-36192e7cc5f01676473707018__png/png images/use-case-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676473887411_44d21a82-922b-42ce-b7a0-1ace84e7c1b61676473891610__png/png images/use-case.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676474263657_f9b89225-b57d-4340-a01e-f7c75ba23e1b1676474267811__png/png images/include-use-case-usage.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676474833574_5ba0da44-b27e-4c24-997b-cbd4c9dad1f21676474837726__png/png images/view-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676474897526_3da58f2d-5afd-4eff-9276-5560215c3f131676474901505__png/png images/viewpoint.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676474997245_c231c893-9d38-485a-97c8-3b1f60d022da1676475001217__png/png images/view.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676475525072_e735cbe8-ca67-43fc-bb58-03a2e39734a51676475529234__png/png images/include-use-case-relationship.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676475785886_06714cd2-f7cd-401d-ab94-ff1ce3a16c241676475790086__png/png images/verify-relationship.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676478369043_d90b1fa7-508a-4a21-ac25-f5b819f25b051676478373274__png/png images/performed-by-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676478600576_bbe90522-392b-4dee-9497-bd0343ace6271676478604696__png/png images/concerns-compartment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676482512257_b32f6fc3-dee4-4c1f-940d-dc2d25e266421676482516486__png/png images/timeslice.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1676482538609_ed358aa0-6732-4b0a-a0f5-505daaa06d9f1676482542867__png/png images/snapshot.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695206645490_a8b2701c-8b7a-4c7a-8288-5084caa88b4f1695206640728__png/png images/port-l-3.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695206719632_ee5bf8a6-b758-4238-822f-b0b1b4c2544d1695206714998__png/png images/|.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695206828678_fb1f7d07-c7fd-408c-a090-e995730c7eca1695206823902__png/png images/port-t-3.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695206908817_9dbdb722-a64f-4b56-856e-0c1052ace5521695206904037__png/png images/port-b-3.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695207833013_cdbb82bf-38dd-41b5-9f0f-919a60a6d7f01695207828260__png/png images/param-l-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695207908449_59d43041-30cd-470e-b504-314538da54541695207903682__png/png images/param-l-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695207978292_0e2d1088-1e7b-4ea9-a8ae-7cc02b712ac91695207973505__png/png images/param-r-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695208033559_bb35113c-869c-4f93-a82d-1f96ba6b72711695208028927__png/png images/param-r-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695208099343_7618ab76-8238-49df-af49-70c68af70c0e1695208094564__png/png images/param-t-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695208194623_d37fa2ea-00ce-4c0a-89b2-c1232133bff71695208189874__png/png images/param-t-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695208290298_44af135a-6ebc-416d-9c63-f76a57fda38e1695208285524__png/png images/param-b-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695208334047_7c443c58-5b66-483b-ac7e-a75ba74592ff1695208329415__png/png images/param-b-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695214188501_9e3f560b-2969-40ac-a73e-7141f4b2505f1695214183899__png/png images/sq-part.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695362353026_08ecb023-33db-4bf3-83a3-a957b5c41ff21695362349195__png/png images/n-ary-segment.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1695378895216_71ac6b92-3ef0-4de0-9989-e3749b6d568a1695378889325__png/png images/n-ary-connection-dot.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701453194563_74e7c8a9-751d-40c4-8429-84c81ab63d5e1701453145643__png/png images/binding-connection.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701533037196_b77dabf2-fcf2-4f4b-b2d8-e291c386006e1701532987450__png/png images/connection-graphical-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701533866642_dfb6e16a-b3a0-4fe8-9525-b3e74c04a1ce1701533816849__png/png images/extended-def.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701533967962_f230d8be-91ca-456a-96d5-138bfc19c2401701533918435__png/png images/extended-usage.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701536969567_46ba5e0b-560f-48b9-95ff-0e4e16bfe2411701536919788__png/png images/item.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701537030798_78a62b29-d074-4789-ab12-04588bbb06a91701536980647__png/png images/item-ref.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701537200327_a7a343a5-cd77-468e-9136-e0fcce316b641701537150696__png/png images/part.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701537419715_5925c836-afaa-4cff-88a4-9cc3a20287be1701537369711__png/png images/part-ref.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701603122367_46fe79b1-7abc-4e52-9466-3580ba49f9991701603072303__png/png images/port-usage.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701603278048_f37c9c57-3a78-463f-a73f-ff905723459e1701603228396__png/png images/port-l-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701603359431_88766c93-24be-4420-a3f6-3b87ef9b6f941701603309177__png/png images/port-r-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701603477103_1c7a0a50-23ad-4b67-8363-1eafe3031fba1701603426842__png/png images/port-t-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701603534468_2db479b7-f086-40b7-9164-317d4471f9821701603484205__png/png images/port-b-2.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701603713607_6a3f1f0a-f364-42b4-85c6-f67fd9c122c61701603663906__png/png images/connection.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701603901267_8b7dab0f-9c44-4488-8782-3bca6e5fa61f1701603851352__png/png images/allocation.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701604085944_ca8d98f3-8562-41bc-b8da-3dca1f61e5511701604036037__png/png images/action-ref.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701604601537_c330b2cf-9888-471a-8cf9-ad6a0d4d48811701604551286__png/png images/state-ref.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701604790277_ee84c11a-08f6-4c71-891c-5ca098ab59981701604741428__png/png images/constraint.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701604867908_5d9e3c7d-acdc-42e2-a33c-21d0a2e5b64e1701604818335__png/png images/constraint-ref.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701605242171_2b963b0b-84b2-48d1-a394-63bca71553481701605192106__png/png images/requirement-ref.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1701605295066_5d84b783-a17f-45d0-8cdc-8da534fd90f51701605244976__png/png images/requirement.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1702310572535_ead90e8e-7025-4391-a5b9-ea498dc7dc9b1702310517102__png/png images/attribute.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1702310701770_f52d47e2-ea8f-4adf-997f-fca893f849f81702310646304__png/png images/occurrence.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1702310835510_3757c444-967c-4854-9f2a-2311d0f4a8711702310780073__png/png images/occurrence-ref.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1702310918970_dd5f243c-2bbb-4875-bdd1-5314e6d0a3791702310863496__png/png images/interface.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1702314741581_3a1eed13-1e0d-4b07-8368-3954d5ff731b1702314686114__png/png images/enumeration.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705239163653_b9bb9f26-c7e8-4d77-a5b3-e286bc906a411705239089847__png/png images/message.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705239747148_9bb30c4b-7ef7-4ffd-8038-38a3b9fd54921705239673331__png/png images/flow.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705240089577_8caad7f9-3c97-40f9-bf17-cf9e964577f01705240016382__png/png images/succession-flow.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705240988906_b0da0a3c-15e7-4b3c-a0eb-57eb256223cc1705240914936__png/png images/flow-node-r.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705241129790_ea57eb57-6bcc-4e22-bd70-9a8aee759b741705241055820__png/png images/sflow-node-r.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705241223066_62c366c0-2a50-4667-b910-1cd5f248c05c1705241149120__png/png images/sflow-node-l.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705241348134_d182ba18-ad9d-46fc-9364-79942aa74d9d1705241274171__png/png images/message-node-r.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705241555373_2b197fc8-764f-4747-afce-8fcfebedb4351705241481425__png/png images/message-node-l.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705241873499_30389483-061f-4a72-8a4d-01e493eeb40a1705241800320__png/png images/interface-connection.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705242271116_025f268b-6c34-4f6f-9d11-7d3b4c7704ea1705242197772__png/png images/aflow-succession.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1705394388190_bbb2b3ee-bae0-43e0-88a5-4f411c966a511705394313764__png/png images/connection-def-graphical-1.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1706166039597_7c55ff4a-e4aa-4bc2-a22f-445caec9925c1706165959817__png/png images/flow-node-l.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1708142047525_f881c664-aaf1-4db9-a162-9e20939a36f71708141954707__svg/svg images/comment-with-keyword.svg
        +https://mms4.openmbee.org/projects/PROJECT-005ebf08-7fda-46f4-abf0-d855fca56881/refs/master/elements/_hidden_img_VE_1708142137966_84532239-ef56-4712-82f1-a05618a778291708142045112__svg/svg images/documentation-node.svg
        +INFO    : ===== End of Graphical Notation Grammar Checks
        +INFO    : Dumping BNF grammar elements into tests\KerML_and_SysML_grammars\SysML-graphical-bnf-elements.json
        +INFO    : Writing BNF grammar file tests\KerML_and_SysML_grammars\SysML-graphical-bnf-marked_up.kgbnf
        +INFO    : Writing BNF grammar file tests\KerML_and_SysML_grammars\SysML-graphical-bnf.kgbnf
        +INFO    : Writing BNF HTML file tests\KerML_and_SysML_grammars\SysML-graphical-bnf.html
        +WARNING : Tokenize: Space inside TERMINAL 'defined by' in line relationship-name = 'defines', 'defined by', 'specializes', 'specialized by', 'connect to',
        +WARNING : Tokenize: Space inside TERMINAL 'specialized by' in line relationship-name = 'defines', 'defined by', 'specializes', 'specialized by', 'connect to',
        +WARNING : Tokenize: Space inside TERMINAL 'connect to' in line relationship-name = 'defines', 'defined by', 'specializes', 'specialized by', 'connect to',
        +WARNING : Tokenize: Space inside TERMINAL 'subsetted by' in line       'subsets', 'subsetted by', 'performs', 'performed by', 'allocated', 'allocated to',
        +WARNING : Tokenize: Space inside TERMINAL 'performed by' in line       'subsets', 'subsetted by', 'performs', 'performed by', 'allocated', 'allocated to',
        +WARNING : Tokenize: Space inside TERMINAL 'allocated to' in line       'subsets', 'subsetted by', 'performs', 'performed by', 'allocated', 'allocated to',
        +WARNING : Tokenize: Space inside TERMINAL 'satisfied by' in line       'satisfy', 'satisfied by'
        +WARNING : Tokenize: Unexpected character '_' in state None at position 6 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 7 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 8 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 9 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 10 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 11 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 12 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 13 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 14 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 15 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 16 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 17 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 18 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 19 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 20 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 21 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 22 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 23 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 24 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 25 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 26 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 27 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 28 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 29 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 30 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 31 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 32 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 33 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 34 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 35 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 36 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 37 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 38 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 39 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 40 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 41 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 42 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 43 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 44 in line:       ________________________________________ 
        +WARNING : Tokenize: Unexpected character '_' in state None at position 45 in line:       ________________________________________ 
        +WARNING : Tokenize: Space inside TERMINAL '«assert constraint»' in line        '«assert constraint»'
        +WARNING : Tokenize: Space inside TERMINAL '«satisfy requirement»' in line        '«satisfy requirement»'
        +WARNING : Tokenize: Space inside TERMINAL '«include use case»' in line        '«include use case»'
        +WARNING : Grammar SysML-graphical-bnf contains 50 unresolved non-terminal(s) ...
        +ERROR   : Cannot resolve ActionUsageParameterList in
        +    8.2.3.25:       ( ValuePart | ActionUsageParameterList )? CaseBody
        +ERROR   : Cannot resolve CalculationUsageParameterPart in
        +    8.2.3.20:       CalculationUsageParameterPart CalculationBody
        +ERROR   : Cannot resolve Identifier in
        +    8.2.3.27: metadata-feature-decl = Identifier
        +    8.2.3.27: metadata-feature-name = Identifier
        +ERROR   : Cannot resolve KerML in
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +ERROR   : Cannot resolve OccurenceUsagePrefix in
        +    8.2.3.14:       el-prefix? OccurenceUsagePrefix InterfaceUsageDeclaration
        +ERROR   : Cannot resolve OccurrencePrefix in
        +    8.2.3.18:     el-prefix? OccurrencePrefix ActionUsageDeclaration
        +ERROR   : Cannot resolve QualifedName in
        +    8.2.3.14: ends-compartment-element = QualifedName (':' QualifiedName)?
        +ERROR   : Cannot resolve SemanticMetadata in
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +ERROR   : Cannot resolve ValueOrFlowPart in
        +    8.2.3.17:       el-prefix? FeatureDirection UsageDeclaration ValueOrFlowPart? DefinitionBodyItem*
        +    8.2.3.26:       el-prefix? OccurrenceUsagePrefix UsageDeclaration? ValueOrFlowPart? ViewBody
        +ERROR   : Cannot resolve action-flow-element in
        +    8.2.3.17:      (action-flow-element)*
        +ERROR   : Cannot resolve analysis-case in
        +    8.2.3.16:     | use-case | verification-case | analysis-case | proxy
        +ERROR   : Cannot resolve assert-constraint-usage in
        +    8.2.3.20:     | assert-constraint-usage
        +ERROR   : Cannot resolve basic-name-prefix in
        +    8.2.3.27:     basic-name-prefix
        +ERROR   : Cannot resolve comp-prefix in
        +    8.2.3.22:       comp-prefix? MemberPrefix ConstraintUsageDeclaration RequirementBody
        +ERROR   : Cannot resolve compartment in
        +    8.2.3.6: compartment-stack = (compartment)*
        +ERROR   : Cannot resolve concerns-compartment-contents in
        +    8.2.3.21:       concerns-compartment-contents
        +ERROR   : Cannot resolve definition-node in
        +    8.2.3.2:     usage-node | definition-node | annotation-node | namespace-node
        +    8.2.3.3:     usage-node | definition-node | annotation-node | namespace-node
        +    8.2.3.6:       definition-node
        +    8.2.3.6: general-node |= usage-node definition-node<
        +    8.2.3.6: definition-node |= extended-def
        +    8.2.3.9: definition-node |= event-occurrence-def
        +    8.2.3.9: eventer = usage-node | definition-node<
        +    8.2.3.13: definition-node |= n-ary-def-connection-dot
        +    8.2.3.20: assertor = usage-node | definition-node
        +    8.2.3.21: satisfier = usage-node | definition-node
        +    8.2.3.21: requirer = usage-node | definition-node
        +ERROR   : Cannot resolve dependencies-and-annotations-element in
        +    8.2.3.2:      dependencies-and-annotations-element
        +    8.2.3.2:       (dependencies-and-annotations-element)*
        +    8.2.3.9:     | dependencies-and-annotations-element
        +    8.2.3.11:       (dependencies-and-annotations-element)*
        +    8.2.3.17:      (dependencies-and-annotations-element)*
        +    8.2.3.18:       (dependencies-and-annotations-element)*
        +ERROR   : Cannot resolve dependencies-element in
        +    8.2.3.3: dependencies-and-annotations-element =| dependencies-element
        +ERROR   : Cannot resolve direct in
        +    8.2.3.6: DefinitionExtensionKeyword names a MetadataDefinition that is a direct
        +    8.2.3.6: UsageExtensionKeyword names a MetadataDefinition that is a direct
        +ERROR   : Cannot resolve element-in-textual-compartment in
        +    8.2.3.15:     | element-in-textual-compartment
        +ERROR   : Cannot resolve enums-compartment-contents in
        +    8.2.3.8:       enums-compartment-contents
        +ERROR   : Cannot resolve exhibit-state-scompartment-element in
        +    8.2.3.18: exhibit-states-compartment-contents = exhibit-state-scompartment-element* '…'?
        +ERROR   : Cannot resolve general-node in
        +    8.2.3.2:       general-node
        +    8.2.3.6: general-node |= usage-node definition-node<
        +    8.2.3.15:       general-node
        +ERROR   : Cannot resolve general-relationship in
        +    8.2.3.2:     | general-relationship
        +    8.2.3.13:        general-relationship |= connection-def-graphical
        +    8.2.3.13: general-relationship |= n-ary-def-segment
        +    8.2.3.18: general-relationship |= exhibit-edge
        +    8.2.3.20: general-relationship |= assume-edge
        +    8.2.3.20: general-relationship |= assert-edge
        +    8.2.3.21: general-relationship |= satisfy-edge
        +    8.2.3.21: general-relationship |= require-edge
        +    8.2.3.21: general-relationship |= frame-edge
        +ERROR   : Cannot resolve include-actions-compartment in
        +    8.2.3.25:     | include-actions-compartment
        +ERROR   : Cannot resolve indirect in
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +ERROR   : Cannot resolve interconnection-view in
        +    8.2.3.11:       interconnection-view
        +    8.2.3.11: general-view =| interconnection-view
        +    8.2.3.26:     | interconnection-view
        +ERROR   : Cannot resolve is in
        +    8.2.3.6: DefinitionExtensionKeyword names a MetadataDefinition that is a direct
        +    8.2.3.6: UsageExtensionKeyword names a MetadataDefinition that is a direct
        +ERROR   : Cannot resolve keyword in
        +    8.2.3.19:       '«' 'ref'? keyword* 'calc' '»'
        +    8.2.3.27:     '«' keyword* 'metadata' 'def' '»'
        +ERROR   : Cannot resolve message-connection in
        +    8.2.3.16:       message-connection
        +ERROR   : Cannot resolve metaclass in
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +ERROR   : Cannot resolve names in
        +    8.2.3.6: DefinitionExtensionKeyword names a MetadataDefinition that is a direct
        +    8.2.3.6: UsageExtensionKeyword names a MetadataDefinition that is a direct
        +ERROR   : Cannot resolve namespace-node in
        +    8.2.3.2:     usage-node | definition-node | annotation-node | namespace-node
        +    8.2.3.3:     usage-node | definition-node | annotation-node | namespace-node
        +    8.2.3.5: general-node =| namespace-node
        +ERROR   : Cannot resolve occurrence-name-prefix in
        +    8.2.3.19:       occurrence-name-prefix
        +ERROR   : Cannot resolve occurrence-refxfx in
        +    8.2.3.9:     | occurrence-refxfx
        +ERROR   : Cannot resolve of in
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +ERROR   : Cannot resolve or in
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +ERROR   : Cannot resolve perform-action-swimlanes in
        +    8.2.3.17:      (perform-action-swimlanes)?
        +ERROR   : Cannot resolve port in
        +    8.2.3.12: interconnection-element =| port-def | port
        +    8.2.3.16:       occurrence| sq-l-node| item | part | port | action | state
        +ERROR   : Cannot resolve proxy in
        +    8.2.3.16:     | use-case | verification-case | analysis-case | proxy
        +    8.2.3.16:     parameter | proxy
        +ERROR   : Cannot resolve result-compartment in
        +    8.2.3.19:     | result-compartment
        +ERROR   : Cannot resolve specialization in
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +    8.2.3.6: or indirect specialization of KerML metaclass SemanticMetadata.
        +ERROR   : Cannot resolve state-node in
        +    8.2.3.18:       state-node
        +    8.2.3.18:     state-node
        +    8.2.3.18:    state-node | state-ref-node
        +ERROR   : Cannot resolve state-ref-node in
        +    8.2.3.18:   | state-ref-node
        +    8.2.3.18:    state-node | state-ref-node
        +ERROR   : Cannot resolve states-actions-compartment in
        +    8.2.3.18:     | states-actions-compartment
        +ERROR   : Cannot resolve succession in
        +    8.2.3.17: usage-edge = |succession perform-edge
        +ERROR   : Cannot resolve successions-compartment in
        +    8.2.3.18:     | successions-compartment
        +ERROR   : Cannot resolve that in
        +    8.2.3.6: DefinitionExtensionKeyword names a MetadataDefinition that is a direct
        +    8.2.3.6: UsageExtensionKeyword names a MetadataDefinition that is a direct
        +ERROR   : Cannot resolve verification-case in
        +    8.2.3.16:     | use-case | verification-case | analysis-case | proxy
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_styles.css b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_styles.css
        new file mode 100644
        index 000000000..6bd538d5d
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/bnf_styles.css
        @@ -0,0 +1,10 @@
        +h1 {font-size:20pt;}
        +h2 {font-size:18pt;}
        +h3 {font-size:16pt;}
        +h4 {font-size:14pt;}
        +h5 {font-size:14pt;}
        +h6 {font-size:14pt;}
        +/*img {margin-left:0pt;}*/
        +p, li {font-family: "Times New Roman", Times, serif; font-size: 14pt;}
        +ol, ul {list-style-type: none; list-style-position: inside;}
        +code, pre, tt {font-family: "Courier New", Courier, monospace; font-size: 12pt; background-color: #e0eeee}
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/accept-action-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/accept-action-node.svg
        new file mode 100644
        index 000000000..de560e8fe
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/accept-action-node.svg
        @@ -0,0 +1,238 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    accept-action-name-compartment
        +    accept-action-expression
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-binding-connection.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-binding-connection.svg
        new file mode 100644
        index 000000000..f91503330
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-binding-connection.svg
        @@ -0,0 +1,131 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &action-flow-node
        +    
        +    &action-flow-node
        +    '='
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-def.svg
        new file mode 100644
        index 000000000..32a830faf
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-def.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    action-def-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    
        +    
        +     param-t* 
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-flow-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-flow-compartment.svg
        new file mode 100644
        index 000000000..e33c8477b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-flow-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    action flow
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-ref.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-ref.svg
        new file mode 100644
        index 000000000..a3e9f2ef5
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action-ref.svg
        @@ -0,0 +1,256 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    action-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action.svg
        new file mode 100644
        index 000000000..8dc3bdf47
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/action.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    action-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actions-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actions-compartment.svg
        new file mode 100644
        index 000000000..ee5610ae9
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actions-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    action
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor-1.svg
        new file mode 100644
        index 000000000..4cd518529
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor-1.svg
        @@ -0,0 +1,95 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    actor-name
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor-2.svg
        new file mode 100644
        index 000000000..e9511c923
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor-2.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    «actor»
        +    
        +    actor-name
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor-connector.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor-connector.svg
        new file mode 100644
        index 000000000..df3409dc4
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor-connector.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &case-node
        +    &actor-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor.svg
        new file mode 100644
        index 000000000..392974129
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actor.svg
        @@ -0,0 +1,80 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    actor-declaration
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actors-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actors-compartment.svg
        new file mode 100644
        index 000000000..c6ed7770a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/actors-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    actor
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/aflow-succession.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/aflow-succession.svg
        new file mode 100644
        index 000000000..226ca21db
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/aflow-succession.svg
        @@ -0,0 +1,161 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &action-flow-node
        +    
        +    &action-flow-node
        +    
        +    
        +    
        +    guard-expression?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocate-relationship.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocate-relationship.svg
        new file mode 100644
        index 000000000..ec360f9bd
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocate-relationship.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &allocation-node
        +    &allocation-node
        +    ''«allocate»''
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocation-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocation-def.svg
        new file mode 100644
        index 000000000..fbcdaa6c4
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocation-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    allocation-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocation.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocation.svg
        new file mode 100644
        index 000000000..1197443bf
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocation.svg
        @@ -0,0 +1,101 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    allocation
        +    -name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocations-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocations-compartment.svg
        new file mode 100644
        index 000000000..4317b405b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/allocations-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    allocation
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/analyses-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/analyses-compartment.svg
        new file mode 100644
        index 000000000..8de5b718d
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/analyses-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    analyse
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/analysis-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/analysis-def.svg
        new file mode 100644
        index 000000000..adee09a15
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/analysis-def.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    analysis-def-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/analysis.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/analysis.svg
        new file mode 100644
        index 000000000..918323f2c
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/analysis.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    analysis-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/annotation-link.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/annotation-link.svg
        new file mode 100644
        index 000000000..4790b7f23
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/annotation-link.svg
        @@ -0,0 +1,101 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    &element
        +    &annotation-node
        +    (rel-name)?
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assert-constraint-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assert-constraint-node.svg
        new file mode 100644
        index 000000000..94d77d67f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assert-constraint-node.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    assert-constraint-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assert-constraints-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assert-constraints-compartment.svg
        new file mode 100644
        index 000000000..6166f6133
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assert-constraints-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    assert constraints
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assert-edge.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assert-edge.svg
        new file mode 100644
        index 000000000..4cf4615ed
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assert-edge.svg
        @@ -0,0 +1,146 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '«assert»'
        +    
        +    &assertor
        +    
        +    &constraint
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assign-action-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assign-action-node.svg
        new file mode 100644
        index 000000000..cf3510b28
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assign-action-node.svg
        @@ -0,0 +1,223 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    assign-action-name-compartment
        +    assign-action-expression
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assume-constraint-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assume-constraint-node.svg
        new file mode 100644
        index 000000000..b1a08912a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assume-constraint-node.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    assume-constraint-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assume-constraints-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assume-constraints-compartment.svg
        new file mode 100644
        index 000000000..7aee9a416
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assume-constraints-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    assume constraint
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assume-edge.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assume-edge.svg
        new file mode 100644
        index 000000000..3e23a4423
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/assume-edge.svg
        @@ -0,0 +1,146 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '«assume»'
        +    
        +    &assumer
        +    
        +    &constraint
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attribute-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attribute-def.svg
        new file mode 100644
        index 000000000..8c08670b8
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attribute-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    attribute-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attribute-ref.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attribute-ref.svg
        new file mode 100644
        index 000000000..d6a254d4b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attribute-ref.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    attribute-ref-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attribute.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attribute.svg
        new file mode 100644
        index 000000000..3712ecd32
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attribute.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    attribute-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attributes-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attributes-compartment.svg
        new file mode 100644
        index 000000000..b752b4594
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/attributes-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    attributes
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/binary-dependency.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/binary-dependency.svg
        new file mode 100644
        index 000000000..938b08a50
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/binary-dependency.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    (rel-name)?
        +    &element-node
        +    &element-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/binding-connection.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/binding-connection.svg
        new file mode 100644
        index 000000000..a069b6a78
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/binding-connection.svg
        @@ -0,0 +1,101 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    '='
        +    &usage-node
        +    &usage-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/calc-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/calc-def.svg
        new file mode 100644
        index 000000000..d6cb893ae
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/calc-def.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    calc-def-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    
        +    
        +     param-t* 
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/calc.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/calc.svg
        new file mode 100644
        index 000000000..68d037d46
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/calc.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    calc-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/calcs-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/calcs-compartment.svg
        new file mode 100644
        index 000000000..58a5a9d8b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/calcs-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    calc
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/comment-with-keyword.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/comment-with-keyword.svg
        new file mode 100644
        index 000000000..4fe099e9b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/comment-with-keyword.svg
        @@ -0,0 +1,157 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    22
        +    
        +    
        +    
        +     text-block
        +    '«comment»'
        +    
        +    Identification 
        +    ( 'locale' STRING_VALUE )?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/comment-without-keyword.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/comment-without-keyword.svg
        new file mode 100644
        index 000000000..2caee8e22
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/comment-without-keyword.svg
        @@ -0,0 +1,82 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +     text-block
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/composite-feature-membership.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/composite-feature-membership.svg
        new file mode 100644
        index 000000000..0cd5608d7
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/composite-feature-membership.svg
        @@ -0,0 +1,102 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    &usage-node 
        +    
        +    &type-node 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concern-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concern-def.svg
        new file mode 100644
        index 000000000..8eecc46d1
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concern-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    concern-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concern-stakeholder-link.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concern-stakeholder-link.svg
        new file mode 100644
        index 000000000..cc002753e
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concern-stakeholder-link.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &stakeholder-node
        +    &concern
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concern.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concern.svg
        new file mode 100644
        index 000000000..319a7e2c6
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concern.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    concern-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concerns-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concerns-compartment.svg
        new file mode 100644
        index 000000000..e79690972
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/concerns-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    concern
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-def-graphical-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-def-graphical-1.svg
        new file mode 100644
        index 000000000..87605063e
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-def-graphical-1.svg
        @@ -0,0 +1,209 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    connection-label?
        +    &type-node
        +    &type-node
        +    rolename
        +    multiplicity
        +    rolename
        +    multiplicity
        +    c-adornment
        +    c-adornment
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-def-graphical-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-def-graphical-2.svg
        new file mode 100644
        index 000000000..d6d36967b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-def-graphical-2.svg
        @@ -0,0 +1,224 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    connection-label?
        +    &type-node
        +    rolename
        +    multiplicity
        +    rolename
        +    multiplicity
        +    c-adornment
        +    c-adornment
        +    &type-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-def.svg
        new file mode 100644
        index 000000000..39803bf0b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    connection-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-definition-elaboration.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-definition-elaboration.svg
        new file mode 100644
        index 000000000..ee60a1e43
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-definition-elaboration.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &connection-relationship
        +    &definition-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-graphical-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-graphical-1.svg
        new file mode 100644
        index 000000000..61f959b6e
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-graphical-1.svg
        @@ -0,0 +1,209 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    connection-label?
        +    &connection-end
        +    &connection-end
        +    rolename
        +    multiplicity
        +    rolename
        +    multiplicity
        +    c-adornment
        +    c-adornment
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-graphical-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-graphical-2.svg
        new file mode 100644
        index 000000000..1d76f6d77
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-graphical-2.svg
        @@ -0,0 +1,224 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    c-adornment
        +    c-adornment
        +    
        +    
        +    connection-label?
        +    &connection-end
        +    &connection-end
        +    rolename
        +    multiplicity
        +    rolename
        +    multiplicity
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-usage-elaboration.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-usage-elaboration.svg
        new file mode 100644
        index 000000000..690775928
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection-usage-elaboration.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &connection-relationship
        +    &usage-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection.svg
        new file mode 100644
        index 000000000..466d9668f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connection.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    connection-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connections-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connections-compartment.svg
        new file mode 100644
        index 000000000..1614fa861
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/connections-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    connection
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraint-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraint-def.svg
        new file mode 100644
        index 000000000..ad37f7acc
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraint-def.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    constraint-def-name-compartment
        +    general-view
        +    compartment-stack
        +    
        +    
        +    
        +     param-t* 
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraint-ref.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraint-ref.svg
        new file mode 100644
        index 000000000..64cd53336
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraint-ref.svg
        @@ -0,0 +1,256 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    constraint-name-compartment
        +    general-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraint.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraint.svg
        new file mode 100644
        index 000000000..39e1bc013
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraint.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    constraint-name-compartment
        +    general-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraints-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraints-compartment.svg
        new file mode 100644
        index 000000000..0fc8a195b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/constraints-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    constraint
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/decision-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/decision-node.svg
        new file mode 100644
        index 000000000..e442959a9
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/decision-node.svg
        @@ -0,0 +1,47 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/definition.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/definition.svg
        new file mode 100644
        index 000000000..5d8252e90
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/definition.svg
        @@ -0,0 +1,132 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    
        +    
        +    &definition-node 
        +    
        +    &usage-node 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/directed-features-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/directed-features-compartment.svg
        new file mode 100644
        index 000000000..2312131b1
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/directed-features-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    directed feature
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/distinguished-parameter-link.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/distinguished-parameter-link.svg
        new file mode 100644
        index 000000000..d30bb2ebd
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/distinguished-parameter-link.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &distinguished-parameter
        +    &subject-actors-stakeholders-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/do-action.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/do-action.svg
        new file mode 100644
        index 000000000..e99e2e287
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/do-action.svg
        @@ -0,0 +1,223 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    do-action-name-comp
        +    state-subaction-body
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/documentation-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/documentation-compartment.svg
        new file mode 100644
        index 000000000..066022355
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/documentation-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    doc
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/documentation-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/documentation-node.svg
        new file mode 100644
        index 000000000..a2fb5f951
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/documentation-node.svg
        @@ -0,0 +1,139 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +     text-block
        +    '«doc»'
        +    
        +    Identification 
        +    ( 'locale' STRING_VALUE )?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/done-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/done-node.svg
        new file mode 100644
        index 000000000..f40dedf5d
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/done-node.svg
        @@ -0,0 +1,82 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +     
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/element-inside-textual-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/element-inside-textual-compartment.svg
        new file mode 100644
        index 000000000..05a7f1649
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/element-inside-textual-compartment.svg
        @@ -0,0 +1,77 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/else-body.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/else-body.svg
        new file mode 100644
        index 000000000..21c57bcf4
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/else-body.svg
        @@ -0,0 +1,80 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    'else body'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/else-branch.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/else-branch.svg
        new file mode 100644
        index 000000000..16ee88a34
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/else-branch.svg
        @@ -0,0 +1,161 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &decision-node
        +    
        +    &action-flow-node
        +    
        +    
        +    
        +    'else'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/ends-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/ends-compartment.svg
        new file mode 100644
        index 000000000..d3b3ce4e9
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/ends-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    end
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/entry-action-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/entry-action-1.svg
        new file mode 100644
        index 000000000..7678fdc20
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/entry-action-1.svg
        @@ -0,0 +1,32 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +  
        +  
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/entry-action-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/entry-action-2.svg
        new file mode 100644
        index 000000000..868adaa90
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/entry-action-2.svg
        @@ -0,0 +1,223 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    entry-action-name-comp
        +    state-subaction-body
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/enumeration-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/enumeration-def.svg
        new file mode 100644
        index 000000000..a0188df15
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/enumeration-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    enumeration-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/enumeration.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/enumeration.svg
        new file mode 100644
        index 000000000..803a107e1
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/enumeration.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    enumeration-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/enums-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/enums-compartment.svg
        new file mode 100644
        index 000000000..3b0a0cd61
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/enums-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    enums
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/event-edge.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/event-edge.svg
        new file mode 100644
        index 000000000..7d257f110
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/event-edge.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &event-occurence
        +    '«event»'
        +    &eventer
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/event-occurrence-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/event-occurrence-def.svg
        new file mode 100644
        index 000000000..f2e380973
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/event-occurrence-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    event-occurrence-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/event-occurrence.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/event-occurrence.svg
        new file mode 100644
        index 000000000..fbba61779
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/event-occurrence.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    event-occurrence-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exhibit-edge.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exhibit-edge.svg
        new file mode 100644
        index 000000000..0272f581d
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exhibit-edge.svg
        @@ -0,0 +1,146 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '«exhibit»'
        +    
        +    &exhibitor
        +    
        +    &state
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exhibit-state-usage.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exhibit-state-usage.svg
        new file mode 100644
        index 000000000..1112fc4db
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exhibit-state-usage.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    exhibit-state-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exhibit-states-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exhibit-states-compartment.svg
        new file mode 100644
        index 000000000..16927142d
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exhibit-states-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    exhibit state
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exit-action.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exit-action.svg
        new file mode 100644
        index 000000000..b257fd0af
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exit-action.svg
        @@ -0,0 +1,223 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    exit-action-name-comp
        +    state-subaction-body
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/expose-r.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/expose-r.svg
        new file mode 100644
        index 000000000..7f3b971fb
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/expose-r.svg
        @@ -0,0 +1,118 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &element
        +    &view
        +    
        +    '«'  'expose' '»'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/expose-relationship.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/expose-relationship.svg
        new file mode 100644
        index 000000000..e7c21e83e
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/expose-relationship.svg
        @@ -0,0 +1,118 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &element
        +    &view
        +    
        +    '«'  'expose' '»'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exposes-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exposes-compartment.svg
        new file mode 100644
        index 000000000..41a9b8c8b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/exposes-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    expose
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/extended-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/extended-def.svg
        new file mode 100644
        index 000000000..c486c0118
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/extended-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    extended-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/extended-usage.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/extended-usage.svg
        new file mode 100644
        index 000000000..aa25a5637
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/extended-usage.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    extended-usage-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/features-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/features-compartment.svg
        new file mode 100644
        index 000000000..b3394301a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/features-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    features
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/filters-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/filters-compartment.svg
        new file mode 100644
        index 000000000..7671db9e5
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/filters-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    filter
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-def.svg
        new file mode 100644
        index 000000000..8a143c966
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    flow-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-node-l.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-node-l.svg
        new file mode 100644
        index 000000000..d0918d0c8
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-node-l.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    flow-label
        +    
        +    '«flow»'?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-node-r.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-node-r.svg
        new file mode 100644
        index 000000000..2d8f069d8
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-node-r.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    '«flow»'?
        +    flow-label
        +    
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-node.svg
        new file mode 100644
        index 000000000..91e730185
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-node.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    flow-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-on-connection.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-on-connection.svg
        new file mode 100644
        index 000000000..11b2ed1da
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow-on-connection.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    &port-node
        +    &port-node
        +    
        +    
        +    flow-node*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow.svg
        new file mode 100644
        index 000000000..9b4290b6a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flow.svg
        @@ -0,0 +1,164 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    &flow-end-node
        +    
        +    
        +    
        +    flow-label
        +    &flow-end-node
        +    
        +    '«flow»'?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flows-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flows-compartment.svg
        new file mode 100644
        index 000000000..bfcd59406
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/flows-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    flow
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/for-loop-action-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/for-loop-action-node.svg
        new file mode 100644
        index 000000000..c6ccb42be
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/for-loop-action-node.svg
        @@ -0,0 +1,319 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +    
        +    for-loop-action-name-compartment
        +    
        +    iteration
        +    
        +    compartment-stack
        +    
        +    loop-body
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/fork-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/fork-node.svg
        new file mode 100644
        index 000000000..91f75653d
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/fork-node.svg
        @@ -0,0 +1,47 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frame-concern-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frame-concern-node.svg
        new file mode 100644
        index 000000000..1b733c136
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frame-concern-node.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    frame-concern-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frame-edge.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frame-edge.svg
        new file mode 100644
        index 000000000..6fe17ba33
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frame-edge.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &concern
        +    '«frame»'
        +    &framer
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frame-relationship.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frame-relationship.svg
        new file mode 100644
        index 000000000..965e8a209
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frame-relationship.svg
        @@ -0,0 +1,146 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '«frame»'
        +    
        +    &framer
        +    
        +    &concern
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/framed-view.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/framed-view.svg
        new file mode 100644
        index 000000000..fd49aecb0
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/framed-view.svg
        @@ -0,0 +1,215 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    frameless-view
        +    
        +    view-frame-info-compartment-bl?
        +    
        +    view-frame-info-compartment-br?
        +    
        +    view-frame-info-compartment-tr?
        +    
        +    view-frame-name-compartment
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frames-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frames-compartment.svg
        new file mode 100644
        index 000000000..c38dcda6c
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/frames-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    frame
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/general-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/general-compartment.svg
        new file mode 100644
        index 000000000..a21207c72
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/general-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    general
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/if-condition.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/if-condition.svg
        new file mode 100644
        index 000000000..f0eba9e1a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/if-condition.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    if condition
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/if-else-action-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/if-else-action-node.svg
        new file mode 100644
        index 000000000..e2af41cb7
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/if-else-action-node.svg
        @@ -0,0 +1,337 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +    
        +    ifelse-action-name-compartment
        +    
        +    if-condition
        +    
        +    compartment-stack
        +    else-body?
        +    
        +    then-body
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/import.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/import.svg
        new file mode 100644
        index 000000000..013a9e1e3
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/import.svg
        @@ -0,0 +1,117 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '«' VisibilityIndicator? 'import' '»'
        +    &namespace-node
        +    &namespace-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/imported-package-with-name-in-tab.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/imported-package-with-name-in-tab.svg
        new file mode 100644
        index 000000000..b698ebf08
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/imported-package-with-name-in-tab.svg
        @@ -0,0 +1,118 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    general-view
        +    (package-compartment)*
        +    
        +    
        +     Identification
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/imported-package-with-name-inside.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/imported-package-with-name-inside.svg
        new file mode 100644
        index 000000000..9fbf956fc
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/imported-package-with-name-inside.svg
        @@ -0,0 +1,124 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    Identification
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +                            
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/include-use-case-relationship.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/include-use-case-relationship.svg
        new file mode 100644
        index 000000000..9afcde1fc
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/include-use-case-relationship.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &use-case
        +    &use-case
        +    '«include»'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/include-use-case-usage.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/include-use-case-usage.svg
        new file mode 100644
        index 000000000..25412bdb7
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/include-use-case-usage.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    include-use-case-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/include-use-cases-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/include-use-cases-compartment.svg
        new file mode 100644
        index 000000000..6b40e7e22
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/include-use-cases-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    include use case
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/includes-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/includes-compartment.svg
        new file mode 100644
        index 000000000..d44cd0b16
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/includes-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    include
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/individuals-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/individuals-compartment.svg
        new file mode 100644
        index 000000000..91721c864
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/individuals-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    individual
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interconnection-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interconnection-compartment.svg
        new file mode 100644
        index 000000000..a74adea96
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interconnection-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    interconnection
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interface-connection.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interface-connection.svg
        new file mode 100644
        index 000000000..c340a6dbc
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interface-connection.svg
        @@ -0,0 +1,254 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    &port-node
        +    &port-node
        +    
        +    
        +    interface-label
        +    
        +    '«interface»'?
        +    rolename
        +    multiplicity
        +    rolename
        +    multiplicity
        +    
        +    flow-node*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interface-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interface-def.svg
        new file mode 100644
        index 000000000..96eb64cd1
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interface-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    interface-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interface.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interface.svg
        new file mode 100644
        index 000000000..b6d2c4d1a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interface.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    interface-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interfaces-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interfaces-compartment.svg
        new file mode 100644
        index 000000000..729073b9b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/interfaces-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    interface
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/item-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/item-def.svg
        new file mode 100644
        index 000000000..9a43f3633
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/item-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    item-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/item-ref.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/item-ref.svg
        new file mode 100644
        index 000000000..bb48fc35e
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/item-ref.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    item-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/item.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/item.svg
        new file mode 100644
        index 000000000..82b76cb9a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/item.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    item-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/items-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/items-compartment.svg
        new file mode 100644
        index 000000000..a1dc59f90
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/items-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    item
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/iteration.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/iteration.svg
        new file mode 100644
        index 000000000..cc4cc14ba
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/iteration.svg
        @@ -0,0 +1,118 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    'for 
        +    iterator
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/join-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/join-node.svg
        new file mode 100644
        index 000000000..97e146480
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/join-node.svg
        @@ -0,0 +1,47 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/lifeline.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/lifeline.svg
        new file mode 100644
        index 000000000..e3a287d2b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/lifeline.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &sq-head-node
        +    
        +    sq-proxy*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/loop-body.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/loop-body.svg
        new file mode 100644
        index 000000000..0b8d1f9df
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/loop-body.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    loop body
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/members-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/members-compartment.svg
        new file mode 100644
        index 000000000..343924586
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/members-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    members
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/merge-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/merge-node.svg
        new file mode 100644
        index 000000000..22392dc7c
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/merge-node.svg
        @@ -0,0 +1,47 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/message-node-l.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/message-node-l.svg
        new file mode 100644
        index 000000000..4e5e223ac
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/message-node-l.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    '«message»'?
        +    
        +    
        +    
        +    message-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/message-node-r.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/message-node-r.svg
        new file mode 100644
        index 000000000..b7f402593
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/message-node-r.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    '«message»'?
        +    message-label
        +    
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/message.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/message.svg
        new file mode 100644
        index 000000000..857d27ec3
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/message.svg
        @@ -0,0 +1,164 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    message-label
        +    &msg-end-node
        +    &msg-end-node
        +    
        +    '«message»'?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/metadata-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/metadata-compartment.svg
        new file mode 100644
        index 000000000..38ef89bba
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/metadata-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    metadata
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/metadata-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/metadata-def.svg
        new file mode 100644
        index 000000000..88426e82d
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/metadata-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    metadata-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/metadata-feature-annotation-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/metadata-feature-annotation-node.svg
        new file mode 100644
        index 000000000..fb45b0f4b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/metadata-feature-annotation-node.svg
        @@ -0,0 +1,120 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +     metadata-feature-decl
        +    
        +     metadata-feature-name-value-list
        +    '«metadata»'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-association-dot.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-association-dot.svg
        new file mode 100644
        index 000000000..4eecca9b0
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-association-dot.svg
        @@ -0,0 +1,65 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    (rel-name)?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-connection-dot.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-connection-dot.svg
        new file mode 100644
        index 000000000..16254b8ed
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-connection-dot.svg
        @@ -0,0 +1,65 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    cdot-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-def-connection-dot.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-def-connection-dot.svg
        new file mode 100644
        index 000000000..aadbef4d8
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-def-connection-dot.svg
        @@ -0,0 +1,65 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    cdot-def-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-def-segment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-def-segment.svg
        new file mode 100644
        index 000000000..66990ead0
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-def-segment.svg
        @@ -0,0 +1,137 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &n-ary-def- connection-dot
        +    rolename
        +    multiplicity
        +    c-adornment
        +    &type-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-dependency-client-link.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-dependency-client-link.svg
        new file mode 100644
        index 000000000..52c8a98b7
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-dependency-client-link.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &n-ary-association-dot
        +    &element-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-dependency-supplier-link.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-dependency-supplier-link.svg
        new file mode 100644
        index 000000000..b6909bb04
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-dependency-supplier-link.svg
        @@ -0,0 +1,98 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &element-node
        +    &n-ary-association-dot
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-segment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-segment.svg
        new file mode 100644
        index 000000000..e828e634d
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/n-ary-segment.svg
        @@ -0,0 +1,119 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &usage-node
        +    &n-ary-connection-dot
        +    rolename
        +    multiplicity
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/noncomposite-feature-membership.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/noncomposite-feature-membership.svg
        new file mode 100644
        index 000000000..19322da71
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/noncomposite-feature-membership.svg
        @@ -0,0 +1,102 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    &usage-node 
        +    
        +    &type-node 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/objective-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/objective-compartment.svg
        new file mode 100644
        index 000000000..fc21d6af7
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/objective-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    objective
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrence-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrence-def.svg
        new file mode 100644
        index 000000000..ac27e604b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrence-def.svg
        @@ -0,0 +1,101 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    occurrence-def-name-compartment
        +    sequence-view
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrence-ref.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrence-ref.svg
        new file mode 100644
        index 000000000..545c00ebc
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrence-ref.svg
        @@ -0,0 +1,101 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    occurrence-name-compartment
        +    sequence-view
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrence.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrence.svg
        new file mode 100644
        index 000000000..5d070ed06
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrence.svg
        @@ -0,0 +1,101 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    occurrence-name-compartment
        +    sequence-view
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrences-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrences-compartment.svg
        new file mode 100644
        index 000000000..466ae47dd
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/occurrences-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    occurrence
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/owned-membership.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/owned-membership.svg
        new file mode 100644
        index 000000000..52272f524
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/owned-membership.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    &namespace-node
        +    &element-node
        +    
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/package-with-name-in-tab.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/package-with-name-in-tab.svg
        new file mode 100644
        index 000000000..47709b9ca
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/package-with-name-in-tab.svg
        @@ -0,0 +1,118 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    general-view
        +    (package-compartment)*
        +    
        +    
        +     Identification
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/package-with-name-inside.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/package-with-name-inside.svg
        new file mode 100644
        index 000000000..27ac39db9
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/package-with-name-inside.svg
        @@ -0,0 +1,120 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    Identification
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +    
        +                         
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/packages-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/packages-compartment.svg
        new file mode 100644
        index 000000000..ba964c2d2
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/packages-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    packages
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-b-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-b-1.svg
        new file mode 100644
        index 000000000..c95118aaf
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-b-1.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    param-label
        +    
        +    
        +    pdv
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-b-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-b-2.svg
        new file mode 100644
        index 000000000..841c5f326
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-b-2.svg
        @@ -0,0 +1,165 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    param-label
        +    
        +    
        +    
        +     param-b* 
        +    
        +    pdv
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-l-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-l-1.svg
        new file mode 100644
        index 000000000..0bd0d3c35
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-l-1.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    pdh
        +    param-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-l-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-l-2.svg
        new file mode 100644
        index 000000000..b81a3dfd6
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-l-2.svg
        @@ -0,0 +1,161 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    param-label
        +    
        +    param-l*
        +    
        +    pdh
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-r-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-r-1.svg
        new file mode 100644
        index 000000000..e8a78b797
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-r-1.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    param-label
        +    
        +    
        +    pdh
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-r-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-r-2.svg
        new file mode 100644
        index 000000000..2fd927640
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-r-2.svg
        @@ -0,0 +1,161 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    param-label
        +    
        +    param-r*
        +    
        +    pdh
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-t-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-t-1.svg
        new file mode 100644
        index 000000000..883af85a9
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-t-1.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    param-label
        +    
        +    
        +    
        +    pdv
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-t-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-t-2.svg
        new file mode 100644
        index 000000000..b5d06e8dd
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/param-t-2.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    param-label
        +    
        +    pdv
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/parameters-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/parameters-compartment.svg
        new file mode 100644
        index 000000000..d2db4b2b6
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/parameters-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    parameter
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/part-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/part-def.svg
        new file mode 100644
        index 000000000..a1b526cb3
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/part-def.svg
        @@ -0,0 +1,233 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    part-def-name-compartment
        +    interconnection-view
        +    compartment-stack
        +    
        +    port-l*
        +    
        +    port-r*
        +    
        +    port-t*
        +    
        +    port-b*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/part-ref.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/part-ref.svg
        new file mode 100644
        index 000000000..f4b582337
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/part-ref.svg
        @@ -0,0 +1,248 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    part-name-compartment
        +    interconnection-view
        +    compartment-stack
        +    
        +    port-t*
        +    
        +    port-r*
        +    
        +    port-l*
        +    
        +    port-b*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/part.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/part.svg
        new file mode 100644
        index 000000000..0196a7227
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/part.svg
        @@ -0,0 +1,233 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    part-name-compartment
        +    interconnection-view
        +    compartment-stack
        +    
        +    port-t*
        +    
        +    port-r*
        +    
        +    port-l*
        +    
        +    port-b*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/parts-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/parts-compartment.svg
        new file mode 100644
        index 000000000..8c82d4035
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/parts-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    part
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdh-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdh-1.svg
        new file mode 100644
        index 000000000..4bd681e77
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdh-1.svg
        @@ -0,0 +1,92 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdh-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdh-2.svg
        new file mode 100644
        index 000000000..02c8c1169
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdh-2.svg
        @@ -0,0 +1,62 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdh-3.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdh-3.svg
        new file mode 100644
        index 000000000..7b892b647
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdh-3.svg
        @@ -0,0 +1,62 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdv-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdv-1.svg
        new file mode 100644
        index 000000000..bc0b509e9
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdv-1.svg
        @@ -0,0 +1,32 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +  
        +  
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdv-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdv-2.svg
        new file mode 100644
        index 000000000..5f573feab
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdv-2.svg
        @@ -0,0 +1,32 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +  
        +  
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdv-3.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdv-3.svg
        new file mode 100644
        index 000000000..5f573feab
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/pdv-3.svg
        @@ -0,0 +1,32 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +  
        +  
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/perform-action-usage.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/perform-action-usage.svg
        new file mode 100644
        index 000000000..c3b269b41
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/perform-action-usage.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    perform-action-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/perform-actions-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/perform-actions-compartment.svg
        new file mode 100644
        index 000000000..20ce5400b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/perform-actions-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    perform action
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/perform-edge.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/perform-edge.svg
        new file mode 100644
        index 000000000..16a16c91d
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/perform-edge.svg
        @@ -0,0 +1,146 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '«perform»'
        +    
        +    &performer-node
        +    
        +    &action
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/performed-by-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/performed-by-compartment.svg
        new file mode 100644
        index 000000000..cb1e643e9
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/performed-by-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    performed by
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-b-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-b-1.svg
        new file mode 100644
        index 000000000..ea49f7bf1
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-b-1.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    pdv
        +    
        +    
        +    
        +    port-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-b-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-b-2.svg
        new file mode 100644
        index 000000000..46b38242c
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-b-2.svg
        @@ -0,0 +1,158 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    pdv
        +    
        +    
        +    
        +    port-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-b-3.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-b-3.svg
        new file mode 100644
        index 000000000..79ccb2c54
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-b-3.svg
        @@ -0,0 +1,161 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    pdv
        +    port-label
        +    
        +    
        +    
        +    port-b*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-def.svg
        new file mode 100644
        index 000000000..2ae09c64f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-def.svg
        @@ -0,0 +1,215 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    port-def-name-compartment
        +    compartment-stack
        +    
        +    port-l*
        +    
        +    port-r*
        +    
        +    port-t*
        +    
        +    port-b*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-l-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-l-1.svg
        new file mode 100644
        index 000000000..ce92082f7
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-l-1.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    pdh
        +    
        +    
        +    
        +    port-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-l-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-l-2.svg
        new file mode 100644
        index 000000000..069275d33
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-l-2.svg
        @@ -0,0 +1,143 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    port-label
        +    pdh
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-l-3.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-l-3.svg
        new file mode 100644
        index 000000000..b2ddc1f3e
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-l-3.svg
        @@ -0,0 +1,176 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    pdh
        +    port-label
        +    
        +    
        +    port-l*
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-r-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-r-1.svg
        new file mode 100644
        index 000000000..a05749a46
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-r-1.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    pdh
        +    
        +    
        +    
        +    port-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-r-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-r-2.svg
        new file mode 100644
        index 000000000..7d616d6fc
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-r-2.svg
        @@ -0,0 +1,143 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    port-label
        +    
        +    
        +    
        +    pdh
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-r-3.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-r-3.svg
        new file mode 100644
        index 000000000..968e4ce58
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-r-3.svg
        @@ -0,0 +1,176 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    pdh
        +    port-label
        +    
        +    
        +    
        +    
        +    port-r*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-t-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-t-1.svg
        new file mode 100644
        index 000000000..c64c8a927
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-t-1.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    pdv
        +    
        +    
        +    
        +    port-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-t-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-t-2.svg
        new file mode 100644
        index 000000000..f4561bc5b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-t-2.svg
        @@ -0,0 +1,143 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    port-label
        +    pdv
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-t-3.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-t-3.svg
        new file mode 100644
        index 000000000..3122b7c38
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-t-3.svg
        @@ -0,0 +1,161 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    pdv
        +    port-label
        +    
        +    
        +    
        +    port-t*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-usage.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-usage.svg
        new file mode 100644
        index 000000000..997295f7c
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/port-usage.svg
        @@ -0,0 +1,215 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    port-name-compartment
        +    compartment-stack
        +    
        +    port-t*
        +    
        +    port-r*
        +    
        +    port-l*
        +    
        +    port-b*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/portion-relationship.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/portion-relationship.svg
        new file mode 100644
        index 000000000..0b2522a89
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/portion-relationship.svg
        @@ -0,0 +1,102 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &occurrence-node 
        +    
        +    &timeslice-or-snapshot-node 
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/ports-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/ports-compartment.svg
        new file mode 100644
        index 000000000..61503a19e
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/ports-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    port
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-h-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-h-1.svg
        new file mode 100644
        index 000000000..9b561ee89
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-h-1.svg
        @@ -0,0 +1,95 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    proxy-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-h-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-h-2.svg
        new file mode 100644
        index 000000000..f9182f71f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-h-2.svg
        @@ -0,0 +1,95 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    proxy-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-v-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-v-1.svg
        new file mode 100644
        index 000000000..7d3ef5e39
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-v-1.svg
        @@ -0,0 +1,95 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    proxy-label
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-v-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-v-2.svg
        new file mode 100644
        index 000000000..8954e4508
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/proxy-v-2.svg
        @@ -0,0 +1,95 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    proxy-label
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/recursive-expose-r.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/recursive-expose-r.svg
        new file mode 100644
        index 000000000..7a6968fd3
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/recursive-expose-r.svg
        @@ -0,0 +1,118 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &element
        +    &view
        +    
        +    '«'  'expose' '»**'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/recursive-import.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/recursive-import.svg
        new file mode 100644
        index 000000000..5d3005352
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/recursive-import.svg
        @@ -0,0 +1,117 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '«' VisibilityIndicator? 'import' '»**'
        +    &namespace-node
        +    &namespace-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/redefinition.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/redefinition.svg
        new file mode 100644
        index 000000000..9799466c0
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/redefinition.svg
        @@ -0,0 +1,117 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    
        +    &usage-node 
        +    
        +    &usage-node 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/reference-diamond-black.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/reference-diamond-black.svg
        new file mode 100644
        index 000000000..daf29494b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/reference-diamond-black.svg
        @@ -0,0 +1,32 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +  
        +  
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/reference-diamond-white.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/reference-diamond-white.svg
        new file mode 100644
        index 000000000..daf29494b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/reference-diamond-white.svg
        @@ -0,0 +1,32 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +  
        +  
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/reference-subsetting.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/reference-subsetting.svg
        new file mode 100644
        index 000000000..afa85c6e7
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/reference-subsetting.svg
        @@ -0,0 +1,162 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    
        +    
        +    &usage-node 
        +    
        +    &usage-node 
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/relationships-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/relationships-compartment.svg
        new file mode 100644
        index 000000000..b6d6ee538
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/relationships-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    relationships
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/rendering-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/rendering-compartment.svg
        new file mode 100644
        index 000000000..0bedbae20
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/rendering-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    rendering
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/require-constraint-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/require-constraint-node.svg
        new file mode 100644
        index 000000000..e966f8a8c
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/require-constraint-node.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    require-constraint-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/require-constraints-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/require-constraints-compartment.svg
        new file mode 100644
        index 000000000..a52a3497a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/require-constraints-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    require constraint
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/require-edge.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/require-edge.svg
        new file mode 100644
        index 000000000..e208422a1
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/require-edge.svg
        @@ -0,0 +1,146 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '«require»'
        +    
        +    &requirer
        +    
        +    &requirement
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirement-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirement-def.svg
        new file mode 100644
        index 000000000..88da0a518
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirement-def.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    requirement-def-name-compartment
        +    general-view
        +    compartment-stack
        +    
        +    
        +    
        +     param-t* 
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirement-ref.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirement-ref.svg
        new file mode 100644
        index 000000000..10096e179
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirement-ref.svg
        @@ -0,0 +1,256 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    requirement-name-compartment
        +    general-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirement.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirement.svg
        new file mode 100644
        index 000000000..9afec56eb
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirement.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    requirement-name-compartment
        +    general-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirements-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirements-compartment.svg
        new file mode 100644
        index 000000000..5f85ef737
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/requirements-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    requirements
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/result-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/result-compartment.svg
        new file mode 100644
        index 000000000..c1331ab71
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/result-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    result
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfies-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfies-compartment.svg
        new file mode 100644
        index 000000000..311884456
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfies-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    satisfie
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfy-edge.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfy-edge.svg
        new file mode 100644
        index 000000000..931f07a48
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfy-edge.svg
        @@ -0,0 +1,146 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '«satisfy»'
        +    
        +    &satisfier
        +    
        +    &requirement
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfy-requirement-usage.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfy-requirement-usage.svg
        new file mode 100644
        index 000000000..40b7cae95
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfy-requirement-usage.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    satisfy-requirement-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfy-requirements-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfy-requirements-compartment.svg
        new file mode 100644
        index 000000000..73c3005a3
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/satisfy-requirements-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    satify requirement
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/send-action-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/send-action-node.svg
        new file mode 100644
        index 000000000..5fcf41198
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/send-action-node.svg
        @@ -0,0 +1,238 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    send-action-name-compartment
        +    send-action-expression
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sequence-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sequence-compartment.svg
        new file mode 100644
        index 000000000..96acdcf20
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sequence-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    sequence
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sflow-node-l.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sflow-node-l.svg
        new file mode 100644
        index 000000000..320ef766f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sflow-node-l.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    flow-label
        +    
        +    '«succession flow»'?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sflow-node-r.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sflow-node-r.svg
        new file mode 100644
        index 000000000..c0329f163
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sflow-node-r.svg
        @@ -0,0 +1,128 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    flow-label
        +    
        +    
        +    
        +    
        +    '«succession flow»'?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/snapshot.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/snapshot.svg
        new file mode 100644
        index 000000000..66f6e03d8
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/snapshot.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    snapshot-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/snapshots-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/snapshots-compartment.svg
        new file mode 100644
        index 000000000..e81b1eb24
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/snapshots-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    snapshot
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-ev-occurrence-label.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-ev-occurrence-label.svg
        new file mode 100644
        index 000000000..3cc8a2af9
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-ev-occurrence-label.svg
        @@ -0,0 +1,80 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    sq-ev-occurrence-label
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-message.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-message.svg
        new file mode 100644
        index 000000000..85c28a7ee
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-message.svg
        @@ -0,0 +1,194 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    message-label
        +    
        +    &sq-l-node
        +    
        +    &sq-l-node
        +    
        +    '«message»'?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-part.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-part.svg
        new file mode 100644
        index 000000000..ed1208301
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-part.svg
        @@ -0,0 +1,117 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    part-name-compartment
        +    
        +    
        +    
        +     sq-port* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-port.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-port.svg
        new file mode 100644
        index 000000000..de1079cd0
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-port.svg
        @@ -0,0 +1,80 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    sq-port-label
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-proxy-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-proxy-1.svg
        new file mode 100644
        index 000000000..7c00c86e8
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-proxy-1.svg
        @@ -0,0 +1,95 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    proxy-label
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-proxy-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-proxy-2.svg
        new file mode 100644
        index 000000000..f03081a65
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-proxy-2.svg
        @@ -0,0 +1,95 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    proxy-label
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-succession.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-succession.svg
        new file mode 100644
        index 000000000..94bff2074
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/sq-succession.svg
        @@ -0,0 +1,168 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    succession-label
        +    
        +    
        +        &sq-l-node
        +    &sq-l-node
        +    
        +    '«succession»'?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/st-succession-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/st-succession-1.svg
        new file mode 100644
        index 000000000..e95f1891b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/st-succession-1.svg
        @@ -0,0 +1,98 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &state-transition-node
        +    &state-transition-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/st-succession-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/st-succession-2.svg
        new file mode 100644
        index 000000000..558689d33
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/st-succession-2.svg
        @@ -0,0 +1,98 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &state-transition-node
        +    &state-transition-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/stakeholder.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/stakeholder.svg
        new file mode 100644
        index 000000000..4cd6c9e39
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/stakeholder.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    «stakeholder»
        +    
        +    stakeholder-name
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/stakeholders-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/stakeholders-compartment.svg
        new file mode 100644
        index 000000000..22040a1f1
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/stakeholders-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    stakeholder
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/start-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/start-node.svg
        new file mode 100644
        index 000000000..44e1d7c8b
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/start-node.svg
        @@ -0,0 +1,67 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +     
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-actions-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-actions-compartment.svg
        new file mode 100644
        index 000000000..437d9660d
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-actions-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    state action
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-def.svg
        new file mode 100644
        index 000000000..49ef66757
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-def.svg
        @@ -0,0 +1,155 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    state-def-name-compartment
        +    state-entry-action
        +    state-do-action
        +    state-transition-view
        +    state-exit-action
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-do-action.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-do-action.svg
        new file mode 100644
        index 000000000..eb281a98f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-do-action.svg
        @@ -0,0 +1,80 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    'do'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-entry-action.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-entry-action.svg
        new file mode 100644
        index 000000000..bc18ae54a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-entry-action.svg
        @@ -0,0 +1,80 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    'entry'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-exit-action.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-exit-action.svg
        new file mode 100644
        index 000000000..199d72905
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-exit-action.svg
        @@ -0,0 +1,80 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    'exit'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-ref.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-ref.svg
        new file mode 100644
        index 000000000..30b298115
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-ref.svg
        @@ -0,0 +1,101 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    state-name-compartment
        +    state-transition-view
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-transition-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-transition-compartment.svg
        new file mode 100644
        index 000000000..657dedd84
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state-transition-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    state tran
        +    sition
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state.svg
        new file mode 100644
        index 000000000..64961816c
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/state.svg
        @@ -0,0 +1,155 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    state-name-compartment
        +    state-entry-action
        +    state-do-action
        +    state-transition-view
        +    state-exit-action
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/states-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/states-compartment.svg
        new file mode 100644
        index 000000000..7c45a2476
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/states-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    state
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subclassification.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subclassification.svg
        new file mode 100644
        index 000000000..d5b45e7a0
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subclassification.svg
        @@ -0,0 +1,102 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    &definition-node 
        +    
        +    &definition-node 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject-compartment.svg
        new file mode 100644
        index 000000000..9f2787920
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    subject
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject-connector.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject-connector.svg
        new file mode 100644
        index 000000000..0036d2fc7
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject-connector.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    &case-node
        +    &subject-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject-node.svg
        new file mode 100644
        index 000000000..95325145a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject-node.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    subject
        +    subject-declaration
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject.svg
        new file mode 100644
        index 000000000..a3a529b35
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subject.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    «subject»
        +    
        +    subject-name
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subsetting.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subsetting.svg
        new file mode 100644
        index 000000000..8850fd248
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/subsetting.svg
        @@ -0,0 +1,102 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    &usage-node 
        +    
        +    &usage-node 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/succession-flow.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/succession-flow.svg
        new file mode 100644
        index 000000000..083de54bd
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/succession-flow.svg
        @@ -0,0 +1,164 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    &flow-end-node
        +    
        +    
        +    
        +    succession-flow-label
        +    &flow-end-node
        +    
        +    '«succession flow»'?
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/successions-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/successions-compartment.svg
        new file mode 100644
        index 000000000..e7faf5ea2
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/successions-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    successions
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/swimlane.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/swimlane.svg
        new file mode 100644
        index 000000000..7ef6cdb6f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/swimlane.svg
        @@ -0,0 +1,146 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    usage-name-
        +    compartment
        +    
        +    &action-flow-node*
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/terminate-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/terminate-node.svg
        new file mode 100644
        index 000000000..14f91d53c
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/terminate-node.svg
        @@ -0,0 +1,32 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +  
        +  
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/textual-representation-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/textual-representation-node.svg
        new file mode 100644
        index 000000000..b8a7f225f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/textual-representation-node.svg
        @@ -0,0 +1,138 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +     language-string
        +    
        +     text-block
        +    '«rep»'
        +    Identification
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/then-body.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/then-body.svg
        new file mode 100644
        index 000000000..8a17f09d0
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/then-body.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    then body
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/timeslice.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/timeslice.svg
        new file mode 100644
        index 000000000..b3483825a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/timeslice.svg
        @@ -0,0 +1,101 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    timeslice-name-compartment
        +    compartment-stack
        +    rd
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/timeslices-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/timeslices-compartment.svg
        new file mode 100644
        index 000000000..a859be391
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/timeslices-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    timeslice
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/top-level-import.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/top-level-import.svg
        new file mode 100644
        index 000000000..2115118a9
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/top-level-import.svg
        @@ -0,0 +1,117 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '«' VisibilityIndicator? 'import' '»*'
        +    &namespace-node
        +    &namespace-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/toplevel-expose-r.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/toplevel-expose-r.svg
        new file mode 100644
        index 000000000..559061154
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/toplevel-expose-r.svg
        @@ -0,0 +1,118 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &element
        +    &view
        +    
        +    '«'  'expose' '»*'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/transition-1.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/transition-1.svg
        new file mode 100644
        index 000000000..5836c0562
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/transition-1.svg
        @@ -0,0 +1,131 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    
        +    transition-label
        +    &state-source
        +    &state-transition-node
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/transition-2.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/transition-2.svg
        new file mode 100644
        index 000000000..fe05265c0
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/transition-2.svg
        @@ -0,0 +1,131 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    &decision-node
        +    &state-transition-node
        +    
        +    
        +    
        +    guard-expression
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/unowned-membership.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/unowned-membership.svg
        new file mode 100644
        index 000000000..994aeb05f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/unowned-membership.svg
        @@ -0,0 +1,98 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    &namespace-node
        +    &element-node
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/until-condition.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/until-condition.svg
        new file mode 100644
        index 000000000..0b74f0e9f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/until-condition.svg
        @@ -0,0 +1,80 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    'until condition'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/use-case-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/use-case-def.svg
        new file mode 100644
        index 000000000..c4a3fddf1
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/use-case-def.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    use-case-def-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    
        +    
        +     param-t* 
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/use-case.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/use-case.svg
        new file mode 100644
        index 000000000..aef874119
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/use-case.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    use-case-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/use-cases-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/use-cases-compartment.svg
        new file mode 100644
        index 000000000..4af4dc5d6
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/use-cases-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    use case
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/variant-elementusages-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/variant-elementusages-compartment.svg
        new file mode 100644
        index 000000000..474395ddb
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/variant-elementusages-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    variant elementusages
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/variants-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/variants-compartment.svg
        new file mode 100644
        index 000000000..47c8af61e
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/variants-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    variants
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verification-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verification-def.svg
        new file mode 100644
        index 000000000..3b095703a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verification-def.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    verification-def-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    
        +    
        +     param-t* 
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verification-methods-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verification-methods-compartment.svg
        new file mode 100644
        index 000000000..dee22dd21
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verification-methods-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    verification method
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verification.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verification.svg
        new file mode 100644
        index 000000000..7f81a0be4
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verification.svg
        @@ -0,0 +1,241 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    verification-name-compartment
        +    action-flow-view
        +    compartment-stack
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-b* 
        +    
        +    
        +    
        +     param-t* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verifications-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verifications-compartment.svg
        new file mode 100644
        index 000000000..d754258c7
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verifications-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    verification
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verifies-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verifies-compartment.svg
        new file mode 100644
        index 000000000..72d1cb9e8
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verifies-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    verifie
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verify-relationship.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verify-relationship.svg
        new file mode 100644
        index 000000000..ba30223aa
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verify-relationship.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    &requirement
        +    &verification-case
        +    '«verify»'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verify-requirement-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verify-requirement-node.svg
        new file mode 100644
        index 000000000..c6812548a
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/verify-requirement-node.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    verify-requirement-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-def.svg
        new file mode 100644
        index 000000000..22dad61eb
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    view-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-frame-info-compartment-bl.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-frame-info-compartment-bl.svg
        new file mode 100644
        index 000000000..0d4cfc0fc
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-frame-info-compartment-bl.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    view-frame-info-contents
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-frame-info-compartment-br.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-frame-info-compartment-br.svg
        new file mode 100644
        index 000000000..6738ee166
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-frame-info-compartment-br.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    view-frame-info-contents
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-frame-info-compartment-tr.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-frame-info-compartment-tr.svg
        new file mode 100644
        index 000000000..81b7e185e
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view-frame-info-compartment-tr.svg
        @@ -0,0 +1,113 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    view-frame-info-contents
        +    
        +    
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view.svg
        new file mode 100644
        index 000000000..c82161991
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/view.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    view-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/viewpoint-def.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/viewpoint-def.svg
        new file mode 100644
        index 000000000..f270a20ff
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/viewpoint-def.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    viewpoint-def-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/viewpoint.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/viewpoint.svg
        new file mode 100644
        index 000000000..2074931e5
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/viewpoint.svg
        @@ -0,0 +1,83 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    viewpoint-name-compartment
        +    compartment-stack
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/viewpoints-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/viewpoints-compartment.svg
        new file mode 100644
        index 000000000..70a173d3c
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/viewpoints-compartment.svg
        @@ -0,0 +1,134 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    viewpoint
        +    s
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/views-compartment.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/views-compartment.svg
        new file mode 100644
        index 000000000..b7b0593ad
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/views-compartment.svg
        @@ -0,0 +1,116 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    '
        +    views
        +    '
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/while-condition.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/while-condition.svg
        new file mode 100644
        index 000000000..6da86faf3
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/while-condition.svg
        @@ -0,0 +1,80 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    'while condition'
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/while-loop-action-node.svg b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/while-loop-action-node.svg
        new file mode 100644
        index 000000000..8da4c2fda
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/images/while-loop-action-node.svg
        @@ -0,0 +1,385 @@
        +
        +
        +
        +
        +  
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +    
        +      
        +    
        +  
        +  
        +    
        +    
        +    
        +    param-l*
        +    
        +    param-r*
        +    
        +    
        +    
        +     param-t* 
        +    
        +    while- loop-action-name-
        +    
        +    compartment
        +    
        +    while-condition?
        +    
        +    compartment-stack
        +    
        +    until-condition?
        +    
        +    loop-body
        +    
        +    
        +    
        +     param-b* 
        +  
        +
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/source_marked_ups.json b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/source_marked_ups.json
        new file mode 100644
        index 000000000..36375631e
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_grammars/source_marked_ups.json
        @@ -0,0 +1,25 @@
        +[
        +  {
        +    "file": "../../sysml.library/Kernel Libraries/Kernel Semantic Library/KerML.kerml",
        +    "syntax_kind": "kerml-library"
        +  },
        +  {
        +    "file": "../../sysml.library/Systems Library/SysML.sysml",
        +    "syntax_kind": "sysml-library"
        +  },
        +  {
        +    "file": "KerML-textual-bnf-corrected-marked_up.kebnf",
        +    "syntax_kind": "textual-bnf",
        +    "clause_id": "8.2"
        +  },
        +  {
        +    "file": "SysML-textual-bnf-corrected-marked_up.kebnf",
        +    "syntax_kind": "textual-bnf",
        +    "clause_id": "8.2.2"
        +  },
        +  {
        +    "file": "SysML-graphical-bnf-corrected-marked_up.kgbnf",
        +    "syntax_kind": "graphical-bnf",
        +    "clause_id": "8.2.3"
        +  }
        +]
        diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/KerML-spec-r2025-04_REF.html b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/KerML-spec-r2025-04_REF.html
        new file mode 100644
        index 000000000..f9c4f720f
        --- /dev/null
        +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/KerML-spec-r2025-04_REF.html
        @@ -0,0 +1,55728 @@
        +
        +        Part 1 - Kernel Modeling Language (KerML)
        +        
        +    
        +    
        +        
        +    
        +
        +
        +

        + + Part 1 - Kernel Modeling Language (KerML) +

        +
        + + +
        + + + + +
        + +
        + + +

        An OMG® Systems Modeling Publication

        +

        Kernel Modeling Language™ (KerML™)

        +
        +

        Version 1.0 Beta 4
        +(Release 2025-04)

        +
        +

        _______________________________________________________________________________

        OMG Document Number: ptc/2025-04-01

        Date: April 2025

        Standard document URL: https://www.omg.org/spec/KerML/1.0/

        Machine Readable File(s): https://www.omg.org/spec/KerML/20250201/

        Normative:

        https://www.omg.org/spec/KerML/20250201/KerML.xmi
        +https://www.omg.org/spec/KerML/20250201/Semantic-Library.kpar
        +https://www.omg.org/spec/KerML/20250201/Data-Type-Library.kpar
        +https://www.omg.org/spec/KerML/20250201/Function-Library.kpar
        +https://www.omg.org/spec/KerML/20250201/KerML-Model-Interchange.json
        +https://www.omg.org/spec/KerML/20250201/KerML.json

        _______________________________________________________________________________

        +
         
        +

        + +
        + + +

         

        + +
        + + +

        Copyright © 2019-2025, 88solutions Corporation
        +Copyright © 2019-2025, Airbus
        +Copyright © 2019-2025, Aras Corporation

        +Copyright © 2019-2025, Association of Universities for Research in Astronomy (AURA)
        +Copyright © 2019-2025, BigLever Software
        +Copyright © 2019-2025, Boeing
        +Copyright © 2022-2025, Budapest University of Technology and Economics
        +Copyright © 2021-2025, Commissariat à l'énergie atomique et aux énergies alternatives (CEA)

        +Copyright © 2019-2025, Contact Software GmbH
        +Copyright © 2019-2025, Dassault Systèmes (No Magic)
        +Copyright © 2019-2025, DSC Corporation
        +Copyright © 2020-2025, DEKonsult
        +Copyright © 2020-2025, Delligatti Associates LLC

        +Copyright © 2019-2025, The Charles Stark Draper Laboratory, Inc.
        +Copyright © 2020-2025, ESTACA
        +Copyright © 2023-2025, Galois, Inc.

        +Copyright © 2019-2025, GfSE e.V.
        +Copyright © 2019-2025, George Mason University
        +Copyright © 2019-2025, IBM
        +Copyright © 2019-2025, Idaho National Laboratory
        +Copyright © 2019-2025, INCOSE

        +Copyright © 2019-2025, Intercax LLC
        +Copyright © 2019-2025, Jet Propulsion Laboratory (California Institute of Technology)
        +Copyright © 2019-2025, Kenntnis LLC
        +Copyright © 2020-2025, Kungliga Tekniska högskolon (KTH)

        +Copyright © 2019-2025, LightStreet Consulting LLC
        +Copyright © 2019-2025, Lockheed Martin Corporation
        +Copyright © 2019-2025, Maplesoft
        +Copyright © 2021-2025, MID GmbH
        +Copyright © 2020-2025, MITRE
        +Copyright © 2019-2025, Model Alchemy Consulting
        +Copyright © 2019-2025, Model Driven Solutions, Inc.

        +Copyright © 2019-2025, Model Foundry Pty. Ltd.
        +Copyright © 2023-2025, Object Management Group, Inc.
        +Copyright © 2019-2025, On-Line Application Research Corporation (OAC)
        +Copyright © 2019-2025, oose Innovative Informatik eG

        +Copyright © 2019-2025, Østfold University College
        +Copyright © 2019-2025, PTC
        +Copyright © 2020-2025, Qualtech Systems, Inc.
        +Copyright © 2019-2025, SAF Consulting
        +Copyright © 2019-2025, Simula Research Laboratory AS
        +Copyright © 2019-2025, System Strategy, Inc.
        +Copyright © 2019-2025, Thematix Partners, LLC

        +Copyright © 2019-2025, Tom Sawyer
        +Copyright © 2023-2025, Tucson Embedded Systems, Inc.

        +Copyright © 2019-2025, Universidad de Cantabria
        +Copyright © 2019-2025, University of Alabama in Huntsville
        +Copyright © 2019-2025, University of Detroit Mercy

        +Copyright © 2019-2025, University of Kaiserslauten
        +Copyright © 2020-2025, Willert Software Tools GmbH (SodiusWillert)

        +

        + +
        + + +

         

        + +
        + + +

        The material in this document details an Object Management Group specification in accordance with the terms, conditions and notices set forth below. This document does not represent a commitment to implement any portion of this specification in any companys products. The information contained in this document is subject to change without notice.

        The companies listed above have granted to the Object Management Group, Inc. (OMG) a nonexclusive, royalty-free, paid up, worldwide license to copy and distribute this document and to modify this document and distribute copies of the modified version. Each of the copyright holders listed above has agreed that no person shall be deemed to have infringed the copyright in the included material of any such copyright holder by reason of having used the specification set forth herein or having conformed any computer software to the specification.

        Subject to all of the terms and conditions below, the owners of the copyright in this specification hereby grant you a fully-paid up, non-exclusive, nontransferable, perpetual, worldwide license (without the right to sublicense), to use this specification to create and distribute software and special purpose specifications that are based upon this specification, and to use, copy, and distribute this specification as provided under the Copyright Act; provided that: (1) both the copyright notice identified above and this permission notice appear on any copies of this specification; (2) the use of the specifications is for informational purposes and will not be copied or posted on any network computer or broadcast in any media and will not be otherwise resold or transferred for commercial purposes; and (3) no modifications are made to this specification. This limited permission automatically terminates without notice if you breach any of these terms or conditions. Upon termination, you will destroy immediately any copies of the specifications in your possession or control.

        The attention of adopters is directed to the possibility that compliance with or adoption of OMG specifications may require use of an invention covered by patent rights. OMG shall not be responsible for identifying patents for which a license may be required by any OMG specification, or for conducting legal inquiries into the legal validity or scope of those patents that are brought to its attention. OMG specifications are prospective and advisory only. Prospective users are responsible for protecting themselves against liability for infringement of patents.

        Any unauthorized use of this specification may violate copyright laws, trademark laws, and communications regulations and statutes. This document contains information which is protected by copyright. All Rights Reserved. No part of this work covered by copyright herein may be reproduced or used in any form or by any means--graphic, electronic, or mechanical, including photocopying, recording, taping, or information storage and retrieval systems--without permission of the copyright owner.

        WHILE THIS PUBLICATION IS BELIEVED TO BE ACCURATE, IT IS PROVIDED "AS IS" AND MAY CONTAIN ERRORS OR MISPRINTS. THE OBJECT MANAGEMENT GROUP AND THE COMPANIES LISTED ABOVE MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS PUBLICATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF TITLE OR OWNERSHIP, IMPLIED WARRANTY OF MERCHANTABILITY OR WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE. IN NO EVENT SHALL THE OBJECT MANAGEMENT GROUP OR ANY OF THE COMPANIES LISTED ABOVE BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, RELIANCE OR COVER DAMAGES, INCLUDING LOSS OF PROFITS, REVENUE, DATA OR USE, INCURRED BY ANY USER OR ANY THIRD PARTY IN CONNECTION WITH THE FURNISHING, PERFORMANCE, OR USE OF THIS MATERIAL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

        The entire risk as to the quality and performance of software developed using this specification is borne by you. This disclaimer of warranty constitutes an essential part of the license granted to you to use this specification.

        Use, duplication or disclosure by the U.S. Government is subject to the restrictions set forth in subparagraph (c) (1) (ii) of The Rights in Technical Data and Computer Software Clause at DFARS 252.227-7013 or in subparagraph (c)(1) and (2) of the Commercial Computer Software - Restricted Rights clauses at 48 C.F.R. 52.227-19 or as specified in 48 C.F.R. 227-7202-2 of the DoD F.A.R. Supplement and its successors, or as specified in 48 C.F.R. 12.212 of the Federal Acquisition Regulations and its successors, as applicable. The specification copyright owners are as indicated above and may be contacted through the Object Management Group, 9C Medway Road, PMB 274, Milford, MA 01757, U.S.A.

        CORBA®, CORBA logos®, FIBO®, Financial Industry Business Ontology®, Financial Instrument Global Identifier®, IIOP®, IMM®, Model Driven Architecture®, MDA®, Object Management Group®, OMG®, OMG Logo®, SoaML®, SOAML®, SysML®, UAF®, Unified Modeling Language™, UML®, UML Cube Logo®, VSIPL®, and XMI® are registered trademarks of the Object Management Group, Inc.

        For a complete list of trademarks, see: https://www.omg.org/legal/tm_list.htm. All other products or company names mentioned are used for identification purposes only, and may be trademarks of their respective owners.

        The copyright holders listed above acknowledge that the Object Management Group (acting itself or through its designees) is and shall at all times be the sole entity that may authorize developers, suppliers and sellers of computer software to use certification marks, trademarks or other special designations to indicate compliance with these materials.

        Software developed under the terms of this license may claim compliance or conformance with this specification if and only if the software compliance is of a nature fully matching the applicable compliance points as stated in the specification. Software developed only partially matching the applicable compliance points may claim only that the software was based on this specification, but may not claim compliance or conformance with this specification. In the event that testing suites are implemented or approved by Object Management Group, Inc., software developed using this specification may claim compliance or conformance with the specification only if the software satisfactorily completes the testing suites.

        +

        + +
        + + +

         

        + +
        + + +

        All OMG specifications are subject to continuous review and improvement. As part of this process we encourage readers to report any ambiguities, inconsistencies, or inaccuracies they may find by completing the Issue Reporting Form listed on the main web page https://www.omg.org, under Documents, Report a Bug/Issue.

        +

        + +
        +
        + +
        +
        +

        Table of Contents

        + + + + + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/KerML-spec.html b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/KerML-spec.html new file mode 100644 index 000000000..f9c4f720f --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/KerML-spec.html @@ -0,0 +1,55728 @@ + + Part 1 - Kernel Modeling Language (KerML) + + + + +
        +
        +
        +

        + + Part 1 - Kernel Modeling Language (KerML) +

        +
        + + +
        + + + + +
        + +
        + + +

        An OMG® Systems Modeling Publication

        +

        Kernel Modeling Language™ (KerML™)

        +
        +

        Version 1.0 Beta 4
        +(Release 2025-04)

        +
        +

        _______________________________________________________________________________

        OMG Document Number: ptc/2025-04-01

        Date: April 2025

        Standard document URL: https://www.omg.org/spec/KerML/1.0/

        Machine Readable File(s): https://www.omg.org/spec/KerML/20250201/

        Normative:

        https://www.omg.org/spec/KerML/20250201/KerML.xmi
        +https://www.omg.org/spec/KerML/20250201/Semantic-Library.kpar
        +https://www.omg.org/spec/KerML/20250201/Data-Type-Library.kpar
        +https://www.omg.org/spec/KerML/20250201/Function-Library.kpar
        +https://www.omg.org/spec/KerML/20250201/KerML-Model-Interchange.json
        +https://www.omg.org/spec/KerML/20250201/KerML.json

        _______________________________________________________________________________

        +
         
        +

        + +
        + + +

         

        + +
        + + +

        Copyright © 2019-2025, 88solutions Corporation
        +Copyright © 2019-2025, Airbus
        +Copyright © 2019-2025, Aras Corporation

        +Copyright © 2019-2025, Association of Universities for Research in Astronomy (AURA)
        +Copyright © 2019-2025, BigLever Software
        +Copyright © 2019-2025, Boeing
        +Copyright © 2022-2025, Budapest University of Technology and Economics
        +Copyright © 2021-2025, Commissariat à l'énergie atomique et aux énergies alternatives (CEA)

        +Copyright © 2019-2025, Contact Software GmbH
        +Copyright © 2019-2025, Dassault Systèmes (No Magic)
        +Copyright © 2019-2025, DSC Corporation
        +Copyright © 2020-2025, DEKonsult
        +Copyright © 2020-2025, Delligatti Associates LLC

        +Copyright © 2019-2025, The Charles Stark Draper Laboratory, Inc.
        +Copyright © 2020-2025, ESTACA
        +Copyright © 2023-2025, Galois, Inc.

        +Copyright © 2019-2025, GfSE e.V.
        +Copyright © 2019-2025, George Mason University
        +Copyright © 2019-2025, IBM
        +Copyright © 2019-2025, Idaho National Laboratory
        +Copyright © 2019-2025, INCOSE

        +Copyright © 2019-2025, Intercax LLC
        +Copyright © 2019-2025, Jet Propulsion Laboratory (California Institute of Technology)
        +Copyright © 2019-2025, Kenntnis LLC
        +Copyright © 2020-2025, Kungliga Tekniska högskolon (KTH)

        +Copyright © 2019-2025, LightStreet Consulting LLC
        +Copyright © 2019-2025, Lockheed Martin Corporation
        +Copyright © 2019-2025, Maplesoft
        +Copyright © 2021-2025, MID GmbH
        +Copyright © 2020-2025, MITRE
        +Copyright © 2019-2025, Model Alchemy Consulting
        +Copyright © 2019-2025, Model Driven Solutions, Inc.

        +Copyright © 2019-2025, Model Foundry Pty. Ltd.
        +Copyright © 2023-2025, Object Management Group, Inc.
        +Copyright © 2019-2025, On-Line Application Research Corporation (OAC)
        +Copyright © 2019-2025, oose Innovative Informatik eG

        +Copyright © 2019-2025, Østfold University College
        +Copyright © 2019-2025, PTC
        +Copyright © 2020-2025, Qualtech Systems, Inc.
        +Copyright © 2019-2025, SAF Consulting
        +Copyright © 2019-2025, Simula Research Laboratory AS
        +Copyright © 2019-2025, System Strategy, Inc.
        +Copyright © 2019-2025, Thematix Partners, LLC

        +Copyright © 2019-2025, Tom Sawyer
        +Copyright © 2023-2025, Tucson Embedded Systems, Inc.

        +Copyright © 2019-2025, Universidad de Cantabria
        +Copyright © 2019-2025, University of Alabama in Huntsville
        +Copyright © 2019-2025, University of Detroit Mercy

        +Copyright © 2019-2025, University of Kaiserslauten
        +Copyright © 2020-2025, Willert Software Tools GmbH (SodiusWillert)

        +

        + +
        + + +

         

        + +
        + + +

        The material in this document details an Object Management Group specification in accordance with the terms, conditions and notices set forth below. This document does not represent a commitment to implement any portion of this specification in any companys products. The information contained in this document is subject to change without notice.

        The companies listed above have granted to the Object Management Group, Inc. (OMG) a nonexclusive, royalty-free, paid up, worldwide license to copy and distribute this document and to modify this document and distribute copies of the modified version. Each of the copyright holders listed above has agreed that no person shall be deemed to have infringed the copyright in the included material of any such copyright holder by reason of having used the specification set forth herein or having conformed any computer software to the specification.

        Subject to all of the terms and conditions below, the owners of the copyright in this specification hereby grant you a fully-paid up, non-exclusive, nontransferable, perpetual, worldwide license (without the right to sublicense), to use this specification to create and distribute software and special purpose specifications that are based upon this specification, and to use, copy, and distribute this specification as provided under the Copyright Act; provided that: (1) both the copyright notice identified above and this permission notice appear on any copies of this specification; (2) the use of the specifications is for informational purposes and will not be copied or posted on any network computer or broadcast in any media and will not be otherwise resold or transferred for commercial purposes; and (3) no modifications are made to this specification. This limited permission automatically terminates without notice if you breach any of these terms or conditions. Upon termination, you will destroy immediately any copies of the specifications in your possession or control.

        The attention of adopters is directed to the possibility that compliance with or adoption of OMG specifications may require use of an invention covered by patent rights. OMG shall not be responsible for identifying patents for which a license may be required by any OMG specification, or for conducting legal inquiries into the legal validity or scope of those patents that are brought to its attention. OMG specifications are prospective and advisory only. Prospective users are responsible for protecting themselves against liability for infringement of patents.

        Any unauthorized use of this specification may violate copyright laws, trademark laws, and communications regulations and statutes. This document contains information which is protected by copyright. All Rights Reserved. No part of this work covered by copyright herein may be reproduced or used in any form or by any means--graphic, electronic, or mechanical, including photocopying, recording, taping, or information storage and retrieval systems--without permission of the copyright owner.

        WHILE THIS PUBLICATION IS BELIEVED TO BE ACCURATE, IT IS PROVIDED "AS IS" AND MAY CONTAIN ERRORS OR MISPRINTS. THE OBJECT MANAGEMENT GROUP AND THE COMPANIES LISTED ABOVE MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS PUBLICATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF TITLE OR OWNERSHIP, IMPLIED WARRANTY OF MERCHANTABILITY OR WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE. IN NO EVENT SHALL THE OBJECT MANAGEMENT GROUP OR ANY OF THE COMPANIES LISTED ABOVE BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, RELIANCE OR COVER DAMAGES, INCLUDING LOSS OF PROFITS, REVENUE, DATA OR USE, INCURRED BY ANY USER OR ANY THIRD PARTY IN CONNECTION WITH THE FURNISHING, PERFORMANCE, OR USE OF THIS MATERIAL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

        The entire risk as to the quality and performance of software developed using this specification is borne by you. This disclaimer of warranty constitutes an essential part of the license granted to you to use this specification.

        Use, duplication or disclosure by the U.S. Government is subject to the restrictions set forth in subparagraph (c) (1) (ii) of The Rights in Technical Data and Computer Software Clause at DFARS 252.227-7013 or in subparagraph (c)(1) and (2) of the Commercial Computer Software - Restricted Rights clauses at 48 C.F.R. 52.227-19 or as specified in 48 C.F.R. 227-7202-2 of the DoD F.A.R. Supplement and its successors, or as specified in 48 C.F.R. 12.212 of the Federal Acquisition Regulations and its successors, as applicable. The specification copyright owners are as indicated above and may be contacted through the Object Management Group, 9C Medway Road, PMB 274, Milford, MA 01757, U.S.A.

        CORBA®, CORBA logos®, FIBO®, Financial Industry Business Ontology®, Financial Instrument Global Identifier®, IIOP®, IMM®, Model Driven Architecture®, MDA®, Object Management Group®, OMG®, OMG Logo®, SoaML®, SOAML®, SysML®, UAF®, Unified Modeling Language™, UML®, UML Cube Logo®, VSIPL®, and XMI® are registered trademarks of the Object Management Group, Inc.

        For a complete list of trademarks, see: https://www.omg.org/legal/tm_list.htm. All other products or company names mentioned are used for identification purposes only, and may be trademarks of their respective owners.

        The copyright holders listed above acknowledge that the Object Management Group (acting itself or through its designees) is and shall at all times be the sole entity that may authorize developers, suppliers and sellers of computer software to use certification marks, trademarks or other special designations to indicate compliance with these materials.

        Software developed under the terms of this license may claim compliance or conformance with this specification if and only if the software compliance is of a nature fully matching the applicable compliance points as stated in the specification. Software developed only partially matching the applicable compliance points may claim only that the software was based on this specification, but may not claim compliance or conformance with this specification. In the event that testing suites are implemented or approved by Object Management Group, Inc., software developed using this specification may claim compliance or conformance with the specification only if the software satisfactorily completes the testing suites.

        +

        + +
        + + +

         

        + +
        + + +

        All OMG specifications are subject to continuous review and improvement. As part of this process we encourage readers to report any ambiguities, inconsistencies, or inaccuracies they may find by completing the Issue Reporting Form listed on the main web page https://www.omg.org, under Documents, Report a Bug/Issue.

        +

        + +
        +
        + +
        +
        +

        Table of Contents

        + + + + + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/SysML-spec-r2025-04_REF.html b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/SysML-spec-r2025-04_REF.html new file mode 100644 index 000000000..49775ba5f --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/SysML-spec-r2025-04_REF.html @@ -0,0 +1,78589 @@ + + Part 2 - Systems Modeling Language (SysML) + + + + +
        +
        +
        +

        + + Part 2 - Systems Modeling Language (SysML) +

        +
        + + +
        + + + + +
        + +
        + + +

        An OMG® Systems Modeling Publication

        +

        OMG Systems Modeling Language™ (SysML®)

        +
        +

        Version 2.0 Beta 4
        +(Release 2025-04)

        +
        +

        Part 1: Language Specification

        +
         
        +

        + +
        + + +

         

        + +
        + + +

        Copyright © 2019-2025, 88solutions Corporation
        +Copyright © 2019-2025, Airbus
        +Copyright © 2019-2025, Aras Corporation

        +Copyright © 2019-2025, Association of Universities for Research in Astronomy (AURA)
        +Copyright © 2019-2025, BigLever Software
        +Copyright © 2019-2025, Boeing
        +Copyright © 2022-2025, Budapest University of Technology and Economics
        +Copyright © 2021-2025, Commissariat à l'énergie atomique et aux énergies alternatives (CEA)

        +Copyright © 2019-2025, Contact Software GmbH
        +Copyright © 2019-2025, Dassault Systèmes (No Magic)
        +Copyright © 2019-2025, DSC Corporation
        +Copyright © 2020-2025, DEKonsult
        +Copyright © 2020-2025, Delligatti Associates LLC

        +Copyright © 2019-2025, The Charles Stark Draper Laboratory, Inc.
        +Copyright © 2020-2025, ESTACA
        +Copyright © 2023-2025, Galois, Inc.

        +Copyright © 2019-2025, GfSE e.V.
        +Copyright © 2019-2025, George Mason University
        +Copyright © 2019-2025, IBM
        +Copyright © 2019-2025, Idaho National Laboratory
        +Copyright © 2019-2025, INCOSE

        +Copyright © 2019-2025, Intercax LLC
        +Copyright © 2019-2025, Jet Propulsion Laboratory (California Institute of Technology)
        +Copyright © 2019-2025, Kenntnis LLC
        +Copyright © 2020-2025, Kungliga Tekniska högskolon (KTH)

        +Copyright © 2019-2025, LightStreet Consulting LLC
        +Copyright © 2019-2025, Lockheed Martin Corporation
        +Copyright © 2019-2025, Maplesoft
        +Copyright © 2021-2025, MID GmbH
        +Copyright © 2020-2025, MITRE
        +Copyright © 2019-2025, Model Alchemy Consulting
        +Copyright © 2019-2025, Model Driven Solutions, Inc.

        +Copyright © 2019-2025, Model Foundry Pty. Ltd.
        +Copyright © 2023-2025, Object Management Group, Inc.
        +Copyright © 2019-2025, On-Line Application Research Corporation (OAC)
        +Copyright © 2019-2025, oose Innovative Informatik eG

        +Copyright © 2019-2025, Østfold University College
        +Copyright © 2019-2025, PTC
        +Copyright © 2020-2025, Qualtech Systems, Inc.
        +Copyright © 2019-2025, SAF Consulting
        +Copyright © 2019-2025, Simula Research Laboratory AS
        +Copyright © 2019-2025, System Strategy, Inc.
        +Copyright © 2019-2025, Thematix Partners, LLC

        +Copyright © 2019-2025, Tom Sawyer
        +Copyright © 2023-2025, Tucson Embedded Systems, Inc.

        +Copyright © 2019-2025, Universidad de Cantabria
        +Copyright © 2019-2025, University of Alabama in Huntsville
        +Copyright © 2019-2025, University of Detroit Mercy

        +Copyright © 2019-2025, University of Kaiserslauten
        +Copyright © 2020-2025, Willert Software Tools GmbH (SodiusWillert)

        +

        + +
        + + +

         

        + +
        + + +

        The material in this document details an Object Management Group specification in accordance with the terms, conditions and notices set forth below. This document does not represent a commitment to implement any portion of this specification in any companys products. The information contained in this document is subject to change without notice.

        The companies listed above have granted to the Object Management Group, Inc. (OMG) a nonexclusive, royalty-free, paid up, worldwide license to copy and distribute this document and to modify this document and distribute copies of the modified version. Each of the copyright holders listed above has agreed that no person shall be deemed to have infringed the copyright in the included material of any such copyright holder by reason of having used the specification set forth herein or having conformed any computer software to the specification.

        Subject to all of the terms and conditions below, the owners of the copyright in this specification hereby grant you a fully-paid up, non-exclusive, nontransferable, perpetual, worldwide license (without the right to sublicense), to use this specification to create and distribute software and special purpose specifications that are based upon this specification, and to use, copy, and distribute this specification as provided under the Copyright Act; provided that: (1) both the copyright notice identified above and this permission notice appear on any copies of this specification; (2) the use of the specifications is for informational purposes and will not be copied or posted on any network computer or broadcast in any media and will not be otherwise resold or transferred for commercial purposes; and (3) no modifications are made to this specification. This limited permission automatically terminates without notice if you breach any of these terms or conditions. Upon termination, you will destroy immediately any copies of the specifications in your possession or control.

        The attention of adopters is directed to the possibility that compliance with or adoption of OMG specifications may require use of an invention covered by patent rights. OMG shall not be responsible for identifying patents for which a license may be required by any OMG specification, or for conducting legal inquiries into the legal validity or scope of those patents that are brought to its attention. OMG specifications are prospective and advisory only. Prospective users are responsible for protecting themselves against liability for infringement of patents.

        Any unauthorized use of this specification may violate copyright laws, trademark laws, and communications regulations and statutes. This document contains information which is protected by copyright. All Rights Reserved. No part of this work covered by copyright herein may be reproduced or used in any form or by any means--graphic, electronic, or mechanical, including photocopying, recording, taping, or information storage and retrieval systems--without permission of the copyright owner.

        WHILE THIS PUBLICATION IS BELIEVED TO BE ACCURATE, IT IS PROVIDED "AS IS" AND MAY CONTAIN ERRORS OR MISPRINTS. THE OBJECT MANAGEMENT GROUP AND THE COMPANIES LISTED ABOVE MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS PUBLICATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF TITLE OR OWNERSHIP, IMPLIED WARRANTY OF MERCHANTABILITY OR WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE. IN NO EVENT SHALL THE OBJECT MANAGEMENT GROUP OR ANY OF THE COMPANIES LISTED ABOVE BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, RELIANCE OR COVER DAMAGES, INCLUDING LOSS OF PROFITS, REVENUE, DATA OR USE, INCURRED BY ANY USER OR ANY THIRD PARTY IN CONNECTION WITH THE FURNISHING, PERFORMANCE, OR USE OF THIS MATERIAL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

        The entire risk as to the quality and performance of software developed using this specification is borne by you. This disclaimer of warranty constitutes an essential part of the license granted to you to use this specification.

        Use, duplication or disclosure by the U.S. Government is subject to the restrictions set forth in subparagraph (c) (1) (ii) of The Rights in Technical Data and Computer Software Clause at DFARS 252.227-7013 or in subparagraph (c)(1) and (2) of the Commercial Computer Software - Restricted Rights clauses at 48 C.F.R. 52.227-19 or as specified in 48 C.F.R. 227-7202-2 of the DoD F.A.R. Supplement and its successors, or as specified in 48 C.F.R. 12.212 of the Federal Acquisition Regulations and its successors, as applicable. The specification copyright owners are as indicated above and may be contacted through the Object Management Group, 9C Medway Road, PMB 274, Milford, MA 01757, U.S.A.

        CORBA®, CORBA logos®, FIBO®, Financial Industry Business Ontology®, Financial Instrument Global Identifier®, IIOP®, IMM®, Model Driven Architecture®, MDA®, Object Management Group®, OMG®, OMG Logo®, SoaML®, SOAML®, SysML®, UAF®, Unified Modeling Language™, UML®, UML Cube Logo®, VSIPL®, and XMI® are registered trademarks of the Object Management Group, Inc.

        For a complete list of trademarks, see: https://www.omg.org/legal/tm_list.htm. All other products or company names mentioned are used for identification purposes only, and may be trademarks of their respective owners.

        The copyright holders listed above acknowledge that the Object Management Group (acting itself or through its designees) is and shall at all times be the sole entity that may authorize developers, suppliers and sellers of computer software to use certification marks, trademarks or other special designations to indicate compliance with these materials.

        Software developed under the terms of this license may claim compliance or conformance with this specification if and only if the software compliance is of a nature fully matching the applicable compliance points as stated in the specification. Software developed only partially matching the applicable compliance points may claim only that the software was based on this specification, but may not claim compliance or conformance with this specification. In the event that testing suites are implemented or approved by Object Management Group, Inc., software developed using this specification may claim compliance or conformance with the specification only if the software satisfactorily completes the testing suites.

        +

        + +
        + + +

         

        + +
        + + +

        All OMG specifications are subject to continuous review and improvement. As part of this process we encourage readers to report any ambiguities, inconsistencies, or inaccuracies they may find by completing the Issue Reporting Form listed on the main web page https://www.omg.org, under Documents, Report a Bug/Issue.

        +

        + +
        +
        + +
        +
        +

        Table of Contents

        + + + + + + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/SysML-spec.html b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/SysML-spec.html new file mode 100644 index 000000000..49775ba5f --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/SysML-spec.html @@ -0,0 +1,78589 @@ + + Part 2 - Systems Modeling Language (SysML) + + + + +
        +
        +
        +

        + + Part 2 - Systems Modeling Language (SysML) +

        +
        + + +
        + + + + +
        + +
        + + +

        An OMG® Systems Modeling Publication

        +

        OMG Systems Modeling Language™ (SysML®)

        +
        +

        Version 2.0 Beta 4
        +(Release 2025-04)

        +
        +

        Part 1: Language Specification

        +
         
        +

        + +
        + + +

         

        + +
        + + +

        Copyright © 2019-2025, 88solutions Corporation
        +Copyright © 2019-2025, Airbus
        +Copyright © 2019-2025, Aras Corporation

        +Copyright © 2019-2025, Association of Universities for Research in Astronomy (AURA)
        +Copyright © 2019-2025, BigLever Software
        +Copyright © 2019-2025, Boeing
        +Copyright © 2022-2025, Budapest University of Technology and Economics
        +Copyright © 2021-2025, Commissariat à l'énergie atomique et aux énergies alternatives (CEA)

        +Copyright © 2019-2025, Contact Software GmbH
        +Copyright © 2019-2025, Dassault Systèmes (No Magic)
        +Copyright © 2019-2025, DSC Corporation
        +Copyright © 2020-2025, DEKonsult
        +Copyright © 2020-2025, Delligatti Associates LLC

        +Copyright © 2019-2025, The Charles Stark Draper Laboratory, Inc.
        +Copyright © 2020-2025, ESTACA
        +Copyright © 2023-2025, Galois, Inc.

        +Copyright © 2019-2025, GfSE e.V.
        +Copyright © 2019-2025, George Mason University
        +Copyright © 2019-2025, IBM
        +Copyright © 2019-2025, Idaho National Laboratory
        +Copyright © 2019-2025, INCOSE

        +Copyright © 2019-2025, Intercax LLC
        +Copyright © 2019-2025, Jet Propulsion Laboratory (California Institute of Technology)
        +Copyright © 2019-2025, Kenntnis LLC
        +Copyright © 2020-2025, Kungliga Tekniska högskolon (KTH)

        +Copyright © 2019-2025, LightStreet Consulting LLC
        +Copyright © 2019-2025, Lockheed Martin Corporation
        +Copyright © 2019-2025, Maplesoft
        +Copyright © 2021-2025, MID GmbH
        +Copyright © 2020-2025, MITRE
        +Copyright © 2019-2025, Model Alchemy Consulting
        +Copyright © 2019-2025, Model Driven Solutions, Inc.

        +Copyright © 2019-2025, Model Foundry Pty. Ltd.
        +Copyright © 2023-2025, Object Management Group, Inc.
        +Copyright © 2019-2025, On-Line Application Research Corporation (OAC)
        +Copyright © 2019-2025, oose Innovative Informatik eG

        +Copyright © 2019-2025, Østfold University College
        +Copyright © 2019-2025, PTC
        +Copyright © 2020-2025, Qualtech Systems, Inc.
        +Copyright © 2019-2025, SAF Consulting
        +Copyright © 2019-2025, Simula Research Laboratory AS
        +Copyright © 2019-2025, System Strategy, Inc.
        +Copyright © 2019-2025, Thematix Partners, LLC

        +Copyright © 2019-2025, Tom Sawyer
        +Copyright © 2023-2025, Tucson Embedded Systems, Inc.

        +Copyright © 2019-2025, Universidad de Cantabria
        +Copyright © 2019-2025, University of Alabama in Huntsville
        +Copyright © 2019-2025, University of Detroit Mercy

        +Copyright © 2019-2025, University of Kaiserslauten
        +Copyright © 2020-2025, Willert Software Tools GmbH (SodiusWillert)

        +

        + +
        + + +

         

        + +
        + + +

        The material in this document details an Object Management Group specification in accordance with the terms, conditions and notices set forth below. This document does not represent a commitment to implement any portion of this specification in any companys products. The information contained in this document is subject to change without notice.

        The companies listed above have granted to the Object Management Group, Inc. (OMG) a nonexclusive, royalty-free, paid up, worldwide license to copy and distribute this document and to modify this document and distribute copies of the modified version. Each of the copyright holders listed above has agreed that no person shall be deemed to have infringed the copyright in the included material of any such copyright holder by reason of having used the specification set forth herein or having conformed any computer software to the specification.

        Subject to all of the terms and conditions below, the owners of the copyright in this specification hereby grant you a fully-paid up, non-exclusive, nontransferable, perpetual, worldwide license (without the right to sublicense), to use this specification to create and distribute software and special purpose specifications that are based upon this specification, and to use, copy, and distribute this specification as provided under the Copyright Act; provided that: (1) both the copyright notice identified above and this permission notice appear on any copies of this specification; (2) the use of the specifications is for informational purposes and will not be copied or posted on any network computer or broadcast in any media and will not be otherwise resold or transferred for commercial purposes; and (3) no modifications are made to this specification. This limited permission automatically terminates without notice if you breach any of these terms or conditions. Upon termination, you will destroy immediately any copies of the specifications in your possession or control.

        The attention of adopters is directed to the possibility that compliance with or adoption of OMG specifications may require use of an invention covered by patent rights. OMG shall not be responsible for identifying patents for which a license may be required by any OMG specification, or for conducting legal inquiries into the legal validity or scope of those patents that are brought to its attention. OMG specifications are prospective and advisory only. Prospective users are responsible for protecting themselves against liability for infringement of patents.

        Any unauthorized use of this specification may violate copyright laws, trademark laws, and communications regulations and statutes. This document contains information which is protected by copyright. All Rights Reserved. No part of this work covered by copyright herein may be reproduced or used in any form or by any means--graphic, electronic, or mechanical, including photocopying, recording, taping, or information storage and retrieval systems--without permission of the copyright owner.

        WHILE THIS PUBLICATION IS BELIEVED TO BE ACCURATE, IT IS PROVIDED "AS IS" AND MAY CONTAIN ERRORS OR MISPRINTS. THE OBJECT MANAGEMENT GROUP AND THE COMPANIES LISTED ABOVE MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS PUBLICATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF TITLE OR OWNERSHIP, IMPLIED WARRANTY OF MERCHANTABILITY OR WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE. IN NO EVENT SHALL THE OBJECT MANAGEMENT GROUP OR ANY OF THE COMPANIES LISTED ABOVE BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, RELIANCE OR COVER DAMAGES, INCLUDING LOSS OF PROFITS, REVENUE, DATA OR USE, INCURRED BY ANY USER OR ANY THIRD PARTY IN CONNECTION WITH THE FURNISHING, PERFORMANCE, OR USE OF THIS MATERIAL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

        The entire risk as to the quality and performance of software developed using this specification is borne by you. This disclaimer of warranty constitutes an essential part of the license granted to you to use this specification.

        Use, duplication or disclosure by the U.S. Government is subject to the restrictions set forth in subparagraph (c) (1) (ii) of The Rights in Technical Data and Computer Software Clause at DFARS 252.227-7013 or in subparagraph (c)(1) and (2) of the Commercial Computer Software - Restricted Rights clauses at 48 C.F.R. 52.227-19 or as specified in 48 C.F.R. 227-7202-2 of the DoD F.A.R. Supplement and its successors, or as specified in 48 C.F.R. 12.212 of the Federal Acquisition Regulations and its successors, as applicable. The specification copyright owners are as indicated above and may be contacted through the Object Management Group, 9C Medway Road, PMB 274, Milford, MA 01757, U.S.A.

        CORBA®, CORBA logos®, FIBO®, Financial Industry Business Ontology®, Financial Instrument Global Identifier®, IIOP®, IMM®, Model Driven Architecture®, MDA®, Object Management Group®, OMG®, OMG Logo®, SoaML®, SOAML®, SysML®, UAF®, Unified Modeling Language™, UML®, UML Cube Logo®, VSIPL®, and XMI® are registered trademarks of the Object Management Group, Inc.

        For a complete list of trademarks, see: https://www.omg.org/legal/tm_list.htm. All other products or company names mentioned are used for identification purposes only, and may be trademarks of their respective owners.

        The copyright holders listed above acknowledge that the Object Management Group (acting itself or through its designees) is and shall at all times be the sole entity that may authorize developers, suppliers and sellers of computer software to use certification marks, trademarks or other special designations to indicate compliance with these materials.

        Software developed under the terms of this license may claim compliance or conformance with this specification if and only if the software compliance is of a nature fully matching the applicable compliance points as stated in the specification. Software developed only partially matching the applicable compliance points may claim only that the software was based on this specification, but may not claim compliance or conformance with this specification. In the event that testing suites are implemented or approved by Object Management Group, Inc., software developed using this specification may claim compliance or conformance with the specification only if the software satisfactorily completes the testing suites.

        +

        + +
        + + +

         

        + +
        + + +

        All OMG specifications are subject to continuous review and improvement. As part of this process we encourage readers to report any ambiguities, inconsistencies, or inaccuracies they may find by completing the Issue Reporting Form listed on the main web page https://www.omg.org, under Documents, Report a Bug/Issue.

        +

        + +
        +
        + +
        +
        +

        Table of Contents

        + + + + + + + diff --git a/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/source_specs.json b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/source_specs.json new file mode 100644 index 000000000..6892d88ff --- /dev/null +++ b/tool-support/bnf_grammar_tools/tests/KerML_and_SysML_spec_sources/source_specs.json @@ -0,0 +1,25 @@ +[ + { + "file": "../../sysml.library/Kernel Libraries/Kernel Semantic Library/KerML.kerml", + "syntax_kind": "kerml-library" + }, + { + "file": "../../sysml.library/Systems Library/SysML.sysml", + "syntax_kind": "sysml-library" + }, + { + "file": "KerML-spec.html", + "syntax_kind": "textual-bnf", + "clause_id": "8.2" + }, + { + "file": "SysML-spec.html", + "syntax_kind": "textual-bnf", + "clause_id": "8.2.2" + }, + { + "file": "SysML-spec.html", + "syntax_kind": "graphical-bnf", + "clause_id": "8.2.3" + } +] diff --git a/tool-support/bnf_grammar_tools/unittests/__init__.py b/tool-support/bnf_grammar_tools/unittests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tool-support/bnf_grammar_tools/unittests/test_render_nested_lists.py b/tool-support/bnf_grammar_tools/unittests/test_render_nested_lists.py new file mode 100644 index 000000000..e2586789e --- /dev/null +++ b/tool-support/bnf_grammar_tools/unittests/test_render_nested_lists.py @@ -0,0 +1,47 @@ +import unittest +from ..bnf_grammar import bnf_grammar_processor as bgp + +class TestRenderNestedLists(unittest.TestCase): + + def test_render_nested_lists(self): + html_snippet = "
        1. One
        2. Two
          • Two sub one
          • Two sub two
          Two continued
        " + self.assertEqual(bgp.render_nested_lists(html_snippet, bgp.RenderMode.TXT, False), """\ + 1. One + 2. Two + • Two sub one + • Two sub two + Two continued""") + + self.assertEqual(bgp.render_nested_lists(html_snippet, bgp.RenderMode.TXT, True), """\ +// 1. One +// 2. Two +// • Two sub one +// • Two sub two +// Two continued""") + + self.assertEqual(bgp.render_nested_lists(html_snippet, bgp.RenderMode.HTML, False), """\ +
          +
        1. 1. One
        2. +
        3. 2. Two +
            +
          • • Two sub one
          • +
          • • Two sub two
          • +
          +Two continued
        4. +
        +""") + + self.assertEqual(bgp.render_nested_lists(html_snippet, bgp.RenderMode.HTML, True), """\ +
          +
        1. // 1. One
        2. +
        3. // 2. Two +
            +
          • // • Two sub one
          • +
          • // • Two sub two
          • +
          +// Two continued
        4. +
        +""") + +# if __name__ == '__main__': +# unittest.main()