{"id":4210,"date":"2023-03-18T11:49:44","date_gmt":"2023-03-18T10:49:44","guid":{"rendered":"http:\/\/mosaic-modeling.de\/?page_id=4210"},"modified":"2023-09-06T10:59:49","modified_gmt":"2023-09-06T09:59:49","slug":"miscellaneous-language-specification","status":"publish","type":"page","link":"https:\/\/mosaic-modeling.de\/?page_id=4210","title":{"rendered":"Miscellaneous: Language specification"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">On this page<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/mosaic-modeling.de\/?page_id=4210\/#Purpose\" >Purpose<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/mosaic-modeling.de\/?page_id=4210\/#Explanation-of-the-editor\" >Explanation of the editor<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/mosaic-modeling.de\/?page_id=4210\/#Global-Language-Settings\" >Global Language Settings<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/mosaic-modeling.de\/?page_id=4210\/#Operations\" >Operations<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/mosaic-modeling.de\/?page_id=4210\/#Variable-Namings\" >Variable Namings<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/mosaic-modeling.de\/?page_id=4210\/#External-Functions\" >External Functions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/mosaic-modeling.de\/?page_id=4210\/#Code-Generation-Properties\" >Code Generation Properties<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/mosaic-modeling.de\/?page_id=4210\/#Code-Elements\" >Code Elements<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/mosaic-modeling.de\/?page_id=4210\/#Overall-Results\" >Overall Results<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Purpose\"><\/span>Purpose<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The editor for user-defined language specifications (UDLS) can be a very powerful tool. It is used to define new specifications of how to generate code for arbitrary (existing and non-existing) programming languages. The user can do this through a graphical user interface and without modifying the MOSAICmodeling source code. The user specifies how variables are to be interpreted, what the standard mathematical operations look like in the desired programming language and from which different nested code blocks the final overall code should be composed of. Additionally, calls for external functions, code generation properties, and solver options can be defined.<\/p>\n<p>In the following, all panels of the editor will be introduced. If you are interested in the workflow, please refer to the <a href=\"http:\/\/mosaic-modeling.de\/?page_id=5484\">Example section<\/a> of this website.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Explanation-of-the-editor\"><\/span>Explanation of the editor<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The UDLS editor has several tabs. Above these tabs, there are four elements:<\/p>\n<ul>\n<li>File: filename of your UDLS once you have saved or loaded it<\/li>\n<li>Description: description of your UDLS, e.g., its purpose. A description is always necessary<\/li>\n<li>Keywords: optional keywords for your UDLS<\/li>\n<li>Usages: model elements, i.e., equations or functions, in which the UDLS is used<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Global-Language-Settings\"><\/span>Global Language Settings<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Creating a new language specification starts with this panel in which you mainly set the type of equation systems you want to support with your UDLS. The editor window is shown in Figure 1. All options are explained in Table 1.<\/p>\n<figure id=\"attachment_5565\" aria-describedby=\"caption-attachment-5565\" style=\"width: 1920px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_GlobalLanguageSettings.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-5565\" src=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_GlobalLanguageSettings.png\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_GlobalLanguageSettings.png 1920w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_GlobalLanguageSettings-300x169.png 300w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_GlobalLanguageSettings-1024x576.png 1024w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_GlobalLanguageSettings-768x432.png 768w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_GlobalLanguageSettings-1536x864.png 1536w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_GlobalLanguageSettings-1110x624.png 1110w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_GlobalLanguageSettings-528x297.png 528w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><figcaption id=\"caption-attachment-5565\" class=\"wp-caption-text\">Figure 1: Global language settings in the UDLS editor.<\/figcaption><\/figure>\n\n\n<figure class=\"wp-block-table is-style-stripes has-small-font-size\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Element<\/th><th class=\"has-text-align-left\" data-align=\"left\">Explanation<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Direct Functions Supported<\/td><td class=\"has-text-align-left\" data-align=\"left\">Direct function calls are enabled. If this option is unchecked, the code element blocks \u201cDirectFunctionsImpl\u201d and \u201cDirectFunctionsCall\u201d will be ignored.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Use Analytic Derivatives<\/td><td class=\"has-text-align-left\" data-align=\"left\">Analytic derivatives are expected. This is not tested and it is not known how to actually apply analytic derivatives in the language specification<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Case Sensitive<\/td><td class=\"has-text-align-left\" data-align=\"left\">Case-sensitive language specification is enabled (recommended). If this option is unchecked, you should specify a \u201cUnique Naming Index Separator\u201d<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Prefix<\/td><td class=\"has-text-align-left\" data-align=\"left\">Specify a prefix for all numbers in the generated code. The number will be appended to the prefix, e.g., the number 3.5, combined with the prefix \u201cpre\u201d, will lead to the expression \u201cpre3.5\u201d<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Suffix<\/td><td class=\"has-text-align-left\" data-align=\"left\">Specify a suffix for all numbers in the generated code. The suffix will be appended to all numbers, e.g., the number 3.5, combined with the suffix \u201cD\u201d, will lead to the expression \u201c3.5D\u201d<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Result<\/td><td class=\"has-text-align-left\" data-align=\"left\">Shows the result for an example with the given prefix and suffix<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Force Floating Point<\/td><td class=\"has-text-align-left\" data-align=\"left\">Check this option if you want to use floating point number representation even for integer values<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Integer Type<\/td><td class=\"has-text-align-left\" data-align=\"left\">Specifies an additional type definition for languages, such as C++<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Real Type<\/td><td class=\"has-text-align-left\" data-align=\"left\">Specifies an additional type definition for languages, such as C++<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Equation System Type<\/td><td class=\"has-text-align-left\" data-align=\"left\">Choose from three options: NLE, ODE, DAE. NLE is used for algebraic equation systems. This selection enables the \u201cNLE specific option\u201d section of this panel containing the checkbox \u201c\u2019Cape Open Unit Operation\u2019 Supported\u201d. Select ODE for a UDLS for ordinary differential equation systems and DAE for a differential-algebraic equation systems<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Opt or Nopt<\/td><td class=\"has-text-align-left\" data-align=\"left\">Select whether the UDLS shall be used for simulation or optimization. If optimization is selected, you can specify this further<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">NLE specific option<\/td><td class=\"has-text-align-left\" data-align=\"left\">At the moment, this only includes the option to support CAPE OPEN unit operations. You will have to specify special function call names and names for basic Cape Open entities, such as temperature, pressure, flow, enthalpy, and fractions<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Table 1: Elements of UDLS editor for global language settings.<\/figcaption><\/figure>\n\n\n<h4><span class=\"ez-toc-section\" id=\"Operations\"><\/span>Operations<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>In the Operations tab, you define how your UDLS shall generate the mathematical operations and parentheses. For each of the binary &#8211; e.g., multiplication &#8211; and unary &#8211; e.g. sine &#8211; operators, you can set prefix and suffix if necessary. Binary operators may also need an infix or have to swap the operands. All operators have to be defined (i.e., they must be non-empty) before you can use your UDLS for productive code generation. In the Specifications text field, you can see all operator definitions already set. The editor window is shown in Figure 2. All options are explained in Table 2.<\/p>\n<figure id=\"attachment_5566\" aria-describedby=\"caption-attachment-5566\" style=\"width: 1920px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_Operations.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-5566\" src=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_Operations.png\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_Operations.png 1920w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_Operations-300x169.png 300w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_Operations-1024x576.png 1024w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_Operations-768x432.png 768w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_Operations-1536x864.png 1536w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_Operations-1110x624.png 1110w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_Operations-528x297.png 528w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><figcaption id=\"caption-attachment-5566\" class=\"wp-caption-text\">Figure 2: Operations in the UDLS editor.<\/figcaption><\/figure>\n\n\n<figure class=\"wp-block-table is-style-stripes has-small-font-size\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Element<\/th><th class=\"has-text-align-left\" data-align=\"left\">Explanation<\/th><th class=\"has-text-align-left\" data-align=\"left\">Implementation<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Prefix<\/td><td class=\"has-text-align-left\" data-align=\"left\">Character to be put in front of the first operand<\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Infix<\/td><td class=\"has-text-align-left\" data-align=\"left\">Character to be put between the first and the second operand<\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Suffix<\/td><td class=\"has-text-align-left\" data-align=\"left\">Character to be put behind the second operand<\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Swap LR<\/td><td class=\"has-text-align-left\" data-align=\"left\">Check this if you to swap the first and the second operand. This may be interesting for the radix root operator<\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;&#8211;&gt;&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Press this button to set the prefix, infix, suffix, and swap information of the currently active operator<\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Result<\/td><td class=\"has-text-align-left\" data-align=\"left\">Displays the result for the current entries<\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Operators<\/td><td class=\"has-text-align-left\" data-align=\"left\">This includes.<br>&#8220;Add&#8221;, mathematical addition operation, e.g., 4+5<br>&#8220;Cosine&#8221;, mathematical cosine operation, e.g., cos(4)<br>&#8220;Divide&#8221;, mathematical division operation, e.g., 4\/5<br>&#8220;Exponential&#8221;, mathematical exponential operation, e.g., exp(4)<br>&#8220;Multiply&#8221;, mathematical multiplication operation, e.g., 4*5<br>&#8220;NaturalLogarithm&#8221;, mathematical natural logarithm operation, e.g., ln(4)<br>&#8220;Parentheses&#8221;, symbols, such as \u201c(\u201d and \u201c)\u201d, are used to group the mathematical terms and<br>numbers to different expressions, e.g., 4+(5*6) vs. (4+5)*6<br>&#8220;Power&#8221;, mathematical n-th root operation, e.g., 4^5<br>&#8220;RadixRoot&#8221;, mathematical addition operation, e.g., sqrt(4)<br>&#8220;Sine&#8221;, mathematical sine operation, e.g., sin(4)<br>&#8220;Subtract&#8221;, mathematical subtract operation, e.g., 4-5<\/td><td class=\"has-text-align-left\" data-align=\"left\">Interpretation of code in MOSAICmodeling:<br>LEFT+RIGHT<br>cos(MID)<br>LEFT\/RIGHT<br>exp(MID)<br>LEFT*RIGHT<br>ln(MID)<br>()<br>pow(LEFT,RIGHT)<br>\\sqrt[LEFT]{RIGHT}<br>sin(MID)<br>LEFT-RIGHT<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Specifications<\/td><td class=\"has-text-align-left\" data-align=\"left\">Contains your specifications for the operators from above<\/td><td class=\"has-text-align-left\" data-align=\"left\"><\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Table 2: Elements of UDLS editor for operations.<\/figcaption><\/figure>\n\n\n<h4><span class=\"ez-toc-section\" id=\"Variable-Namings\"><\/span>Variable Namings<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>In the Variable Namings tab, you define how your UDLS shall interpret and display the variables of the equation system in the generated code. There are two available alternatives: an approach based on the global index of the variable and an approach using the meaning of the variable (i.e. namespace, base name, superscripts, subscript, and indexes). At least one separator has to be non-empty to be able to use the UDLS for code generation. The editor window is shown in Figure 3. All options are explained in Table 3.<\/p>\n<figure id=\"attachment_5568\" aria-describedby=\"caption-attachment-5568\" style=\"width: 1920px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_VariableNamings.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-5568\" src=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_VariableNamings.png\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_VariableNamings.png 1920w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_VariableNamings-300x169.png 300w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_VariableNamings-1024x576.png 1024w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_VariableNamings-768x432.png 768w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_VariableNamings-1536x864.png 1536w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_VariableNamings-1110x624.png 1110w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_VariableNamings-528x297.png 528w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><figcaption id=\"caption-attachment-5568\" class=\"wp-caption-text\">Figure 3: Variable namings in the UDLS editor.<\/figcaption><\/figure>\n\n\n<figure class=\"wp-block-table is-style-stripes has-small-font-size\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Element<\/th><th class=\"has-text-align-left\" data-align=\"left\">Explanation<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Prefix<\/td><td class=\"has-text-align-left\" data-align=\"left\">Choose the character to be put in front of an expression. Only available for option &#8220;Use Global Index&#8221;<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Infix<\/td><td class=\"has-text-align-left\" data-align=\"left\">Choose the character to be put in between two expressions<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Suffix<\/td><td class=\"has-text-align-left\" data-align=\"left\">Choose the character to be put behind an expression. Only available for option &#8220;Use Global Index&#8221;<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;&#8211;&gt;&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Press this button to apply the current settings<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Result<\/td><td class=\"has-text-align-left\" data-align=\"left\">Shows the current specification for the variable naming<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Strategy<\/td><td class=\"has-text-align-left\" data-align=\"left\">Choose from &#8220;Use Global Index&#8221; and &#8220;Use Variable Naming&#8221;. The first option shall be employed if you do not want your language specification to use meaningful variable names. All variables will be identified by their global index inside the overall equation system. Prefix and Suffix should be set, e.g. prefix \u201cX(\u201c, and suffix \u201c)\u201d to get \u201cX(23)\u201d (variable with global index 23). The second option uses meaningful variable<br>names. Affixes and separators for the different parts of the variable naming have to be defined<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Separators<\/td><td class=\"has-text-align-left\" data-align=\"left\">Specify the separators <br>between namespace and base name,<br>before the first superscript,<br>before the first subscript,<br>before the first index<br>between index name and index value<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Sample Variable<\/td><td class=\"has-text-align-left\" data-align=\"left\">Contains an example for a global variable index and a namespace<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Specifications<\/td><td class=\"has-text-align-left\" data-align=\"left\">Contains your specifications for the naming options from above<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Table 3: Elements of UDLS editor for variable namings.<\/figcaption><\/figure>\n\n\n<h4><span class=\"ez-toc-section\" id=\"External-Functions\"><\/span>External Functions<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>In the External Functions tab, MOSAICmodeling interfaces can be added in order for the UDLS to support them. This way, code for MOSAICmodeling functions that are part of a model and that use a MOSAICmodeling interface can be generated. In this tab, the code to call the function and the code to implement the function is specified. It has to be remarked that code is actually only generated for these functions if the \u201cDirect Functions Supported\u201d option in the Global Language Settings tab is activated. The editor window is shown in Figure 4. All options are explained in Table 4.<\/p>\n<p>Some useful code handles (placeholders) have been set up and are available for the implementation code and call code, i.e.,<\/p>\n<ul>\n<li>Function name: This is the full name of the function. The name is fixed by the MOSAIC function that has been included in the model the code is generated for. The handle (placeholder) is fixed to \u201c_FUN_NAME_\u201d<\/li>\n<li>Function name (short): This is the short name of the function. The name is fixed by the id of the\u00a0 MOSAICmodeling function that has been included in the model the code is generated for. The short name is particularly useful for programming languages with a limited length of function names like Scilab. The handle (placeholder) is fixed to \u201c_FUN_NAMESHORT_\u201d<\/li>\n<li>Function output variable: This is the actual function output variable. The output variable is different for each application (\u201cfunction call\u201d) of the function. The handle (placeholder) is fixed to \u201c_FUN_OUT_VAR_\u201d<\/li>\n<li>More handles are available<\/li>\n<\/ul>\n<figure id=\"attachment_5564\" aria-describedby=\"caption-attachment-5564\" style=\"width: 1920px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_ExternalFunctions.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-5564\" src=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_ExternalFunctions.png\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_ExternalFunctions.png 1920w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_ExternalFunctions-300x169.png 300w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_ExternalFunctions-1024x576.png 1024w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_ExternalFunctions-768x432.png 768w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_ExternalFunctions-1536x864.png 1536w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_ExternalFunctions-1110x624.png 1110w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_ExternalFunctions-528x297.png 528w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><figcaption id=\"caption-attachment-5564\" class=\"wp-caption-text\">Figure 4: External functions in the UDLS editor.<\/figcaption><\/figure>\n\n\n<figure class=\"wp-block-table is-style-stripes has-small-font-size\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Element<\/th><th class=\"has-text-align-left\" data-align=\"left\">Explanation<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Supported Function Interfaces<\/td><td class=\"has-text-align-left\" data-align=\"left\">Name or location of a function interface that has been added as a supported function interface<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;+ Interface&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Add a function interface to the list of supported interfaces<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;Search&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Search the database for an interface ID<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;Import&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Import the loaded interfaces from another UDLS<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;Delete&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Delete the selected interface within the list of supported interfaces<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Interface Fields<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lists all fields that have been specified in the respective MOSAICmodeling interface. The handle is not specified by the interface and has to be set by the creator of the UDLS. The following fields are available:<br>Direction: This is the direction of the field. For function interfaces, the possible values are \u201cIn\u201d and<br>\u201cOut\u201d, with exactly one field of direction \u201cOut\u201d and an arbitrary number of fields with<br>direction \u201cIn\u201d. The direction cannot be changed here<br>Dim: This is the dimension of the field. Possible values are \u201cScalar\u201d and \u201cVector\u201d. The<br>dimension cannot be changed here<br>Variable: This is the name of the field variable as it will be used in generated code. The variable<br>name cannot be changed here<br>Name: This is the meaning of the field as it has been stored in the MOSAICmodeling interface. For CAPE OPEN function interfaces, the names are predefined starting with \u201cCO\u201d. The field name<br>cannot be changed here<br>Handle: This is the name of the placeholder as it has to be used in the implementation code and<br>in the call code definition. The handle is not a property of a MOSAICmodeling interface and<br>therefore has to be set here<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">VectorSepSymbol<\/td><td class=\"has-text-align-left\" data-align=\"left\">Symbol that is used to separate the different elements of a vector in the generated code. The handle (placeholder) for the separation symbol is fixed to \u201cSEP_SYMBOL\u201d<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Calculation expression<\/td><td class=\"has-text-align-left\" data-align=\"left\">Expression that actually calculates the return value of the function. The handle (placeholder) for this expression is fixed to \u201c<em>VALUE<\/em>\u201d<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Implementation code<\/td><td class=\"has-text-align-left\" data-align=\"left\">This is the full code that is used to define and implement the function in the generated code. It is recommended to use the above \u201ccalculation expression\u201d here, but it is not necessary<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Vector index counter start<\/td><td class=\"has-text-align-left\" data-align=\"left\">Specifies the index at which the counter starts<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Vector input creation code<\/td><td class=\"has-text-align-left\" data-align=\"left\">Specifies the code to create a vector for external functions<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Call code<\/td><td class=\"has-text-align-left\" data-align=\"left\">Full code that is used to call the function in the generated code. The function call is used to calculate the value of a variable by calling the function with specific input values. It is usually necessary to use the handle for the function output variable (\u201cFUN_OUT_VAR\u201d) here to correctly assign the calculation\/ function call to the variable to be calculated<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Vector output assignment code<\/td><td class=\"has-text-align-left\" data-align=\"left\">Specifies how the returned vector is translated into the original non-vector variables<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Table 4: Elements of UDLS editor for external functions.<\/figcaption><\/figure>\n\n\n<h4><span class=\"ez-toc-section\" id=\"Code-Generation-Properties\"><\/span>Code Generation Properties<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>In the Code Generation Properties tab, options for code generation can be specified. The options entered here will be visible to users when the UDLS is loaded in the &#8220;Simulation&#8221; or &#8220;Optimization&#8221; section where you specify the language specification for code generation. Typical properties are number of iterations, tolerances, etc. Properties, on the other hand, are used if the creator of the UDLS wishes the user to only be able to select the preferred options from a list. The editor window is shown in Figure 5. All options are explained in Table 5.<\/p>\n<figure id=\"attachment_5563\" aria-describedby=\"caption-attachment-5563\" style=\"width: 1920px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeGenerationProperties.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-5563\" src=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeGenerationProperties.png\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeGenerationProperties.png 1920w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeGenerationProperties-300x169.png 300w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeGenerationProperties-1024x576.png 1024w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeGenerationProperties-768x432.png 768w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeGenerationProperties-1536x864.png 1536w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeGenerationProperties-1110x624.png 1110w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeGenerationProperties-528x297.png 528w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><figcaption id=\"caption-attachment-5563\" class=\"wp-caption-text\">Figure 5: Code generation properties in the UDLS editor.<\/figcaption><\/figure>\n\n\n<figure class=\"wp-block-table is-style-stripes has-small-font-size\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Element<\/th><th class=\"has-text-align-left\" data-align=\"left\">Explanation<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Available Properties<\/td><td class=\"has-text-align-left\" data-align=\"left\">Name of the property as it will later be displayed to users selecting this UDLS for code generation<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;+ Property&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lets you add a property. You can then specify the following parameters.<br>Handle: Identifier of this property as it can be used in the code elements tab. It is the placeholder for the value of the property to be inserted<br>Type: Data type of the property. Possible options are Integer, Float (Floating point number), String, and Boolean (Two-Option-String)<br>Default: Default value of the property that will be inserted in the generated code if the user<br>does not specify another value<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;Edit Property&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lets you edit a property<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;Delete Property&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lets you delete a property<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Predefined Options<\/td><td class=\"has-text-align-left\" data-align=\"left\">Each entry in this table will be one entry in the combobox in the code generation section in which the code generator and solver properties are set<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;+ Option&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lets you add an option<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;Delete Option&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lets you delete an option<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Code Export File<\/td><td class=\"has-text-align-left\" data-align=\"left\">Users can export the generated code of a simulation to hard disk. Here, it can be specified which filename and which extension will be used when this UDLS selected for code generation<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Table 5: Elements of UDLS editor for code generation properties.<\/figcaption><\/figure>\n\n\n<h4><span class=\"ez-toc-section\" id=\"Code-Elements\"><\/span>Code Elements<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>The Code Elements tab is the central part of the UDLS editor. In this tab, the elements of the structure of the code to be generated are defined. The code has by definition a tree structure with a node called \u201cFullCode\u201d as the root node. Each node is a code block. Code blocks are of different types and can have sub blocks. Blocks without sub blocks are leaves of the tree structure. Global and local code properties exist and can be accessed in the code blocks. An example for a global code property is the number of equations in an algebraic equation system (\u201c_DIM_EQUAS_\u201d). The separator symbol (\u201c_SEP_SYMBOL_\u201d) is an example for a local code property.<\/p>\n<p>The user specifies each code block separately by plain text, thereby using the unique names (\u201cHandles\u201d) of the properties and of the sub blocks. When the language specification is applied to a simulation or optimization, all handles will be recursively replaced by the respective property value or code block specification. The editor window is shown in Figure 6. All options are explained in Table 6.<\/p>\n<figure id=\"attachment_5562\" aria-describedby=\"caption-attachment-5562\" style=\"width: 1920px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeElements.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-5562\" src=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeElements.png\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeElements.png 1920w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeElements-300x169.png 300w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeElements-1024x576.png 1024w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeElements-768x432.png 768w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeElements-1536x864.png 1536w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeElements-1110x624.png 1110w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_CodeElements-528x297.png 528w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><figcaption id=\"caption-attachment-5562\" class=\"wp-caption-text\">Figure 6: Code elements in the UDLS editor.<\/figcaption><\/figure>\n\n\n<figure class=\"wp-block-table is-style-stripes has-small-font-size\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Element<\/th><th class=\"has-text-align-left\" data-align=\"left\">Explanation<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Elements Tree<\/td><td class=\"has-text-align-left\" data-align=\"left\">Visualization of the code structure. Code blocks and properties can be selected. Information on the selected elements will be displayed in the other parts of this tab<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;+ Node&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Create a new sub block as a child of the currently selected code block. Some predefined code blocks cannot have children (e.g., \u201cDirectFunctionsCall\u201d)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;Delete Node&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lets you delete a node. All sub-blocks will be removed, too!<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;Up&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Move the selected node up in the tree structure. The node&#8217;s level in the tree is not changed. The node changes the position with its preceding sibling<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&#8220;Down&#8221;<\/td><td class=\"has-text-align-left\" data-align=\"left\">Move the selected node down in the tree structure. The node&#8217;s level in the tree is not changed. The node changes the position with its subsequent sibling<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Input Specification<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lets you specify the content of the selected block. You can also see a description of the meaning of the selected system\/code property (e.g. \u201cVarsDimension\u201d)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Show Invisible Characters<\/td><td class=\"has-text-align-left\" data-align=\"left\">Check this option to display the invisible characters (whitespaces, tabs, and newlines)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">CtrStart<\/td><td class=\"has-text-align-left\" data-align=\"left\">Lets you enter the start value of the counter in loop blocks<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Handle<\/td><td class=\"has-text-align-left\" data-align=\"left\">Unique name of the selected code block. It can be changed and usually starts and ends with an underscore (\u201c_\u201d)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Available Subhandles<\/td><td class=\"has-text-align-left\" data-align=\"left\">List showing all subhandles available for the selected code block. The list contains global handles, such as \u201cDIM_VARS\u201d, specific local handles, such as \u201cSEP_SYMBOL\u201d, and the handles of existing (maybe user-defined) subblocks), e.g., \u201cMySubBlock\u201d.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Code Generation Preview<\/td><td class=\"has-text-align-left\" data-align=\"left\">This text field displays the generated code for a selected code block if code has been generated. Press the &#8220;Show Code&#8221; button to generate code according to the selected code block, based on the simulation that is loaded in the \u201cOverall Results\u201d tab<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Table 6: Elements of UDLS editor for code elements.<\/figcaption><\/figure>\n\n\n<h4><span class=\"ez-toc-section\" id=\"Overall-Results\"><\/span>Overall Results<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>In the \u201cOverall Results\u201d tab, you load a simulation to test the code generation of your language specification. You need to load a simulation in this panel to activate the \u201cGenerate Full Code\u201d button and to be able to generate code for the different code blocks in the \u201cCode Elements\u201d tab.<\/p>\n<figure id=\"attachment_5567\" aria-describedby=\"caption-attachment-5567\" style=\"width: 1920px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_OverallResults.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-5567\" src=\"http:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_OverallResults.png\" alt=\"\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_OverallResults.png 1920w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_OverallResults-300x169.png 300w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_OverallResults-1024x576.png 1024w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_OverallResults-768x432.png 768w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_OverallResults-1536x864.png 1536w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_OverallResults-1110x624.png 1110w, https:\/\/mosaic-modeling.de\/wp-content\/uploads\/2023\/08\/Editor_UDLS_OverallResults-528x297.png 528w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><figcaption id=\"caption-attachment-5567\" class=\"wp-caption-text\">Figure 7: Overall results in the UDLS editor.<\/figcaption><\/figure>\n\n\n<figure class=\"wp-block-table is-style-stripes has-small-font-size\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Element<\/th><th class=\"has-text-align-left\" data-align=\"left\">Explanation<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Evaluation<\/td><td class=\"has-text-align-left\" data-align=\"left\">Load the simulation you want to test your UDLS with. As in any other MOSAICmodeling editor, you can use Unload, Reload, Search and Select to set (or unset) a model element.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Status Information<\/td><td class=\"has-text-align-left\" data-align=\"left\">Displays status information about the simulation. It is the same as in the \u201cEvaluate\u201d tab within the \u201cSimulation\u201d section of MOSAICmodeling<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Code<\/td><td class=\"has-text-align-left\" data-align=\"left\">Displays the generated code if code has been generated<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Generate Full Code<\/td><td class=\"has-text-align-left\" data-align=\"left\">Press this button to generate code according to your UDLS and based on the loaded simulation<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Table 7: Elements of UDLS editor for overall results.<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Purpose The editor for user-defined language specifications (UDLS) can be a very powerful tool. It is used to define new specifications of how to generate code for arbitrary (existing and non-existing) programming languages. The user can do this through a graphical user interface and without modifying the MOSAICmodeling source code. The user specifies how variables [&hellip;]<\/p>\n","protected":false},"author":252,"featured_media":0,"parent":4206,"menu_order":4,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4210","page","type-page","status-publish","czr-hentry"],"_links":{"self":[{"href":"https:\/\/mosaic-modeling.de\/index.php?rest_route=\/wp\/v2\/pages\/4210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mosaic-modeling.de\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mosaic-modeling.de\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mosaic-modeling.de\/index.php?rest_route=\/wp\/v2\/users\/252"}],"replies":[{"embeddable":true,"href":"https:\/\/mosaic-modeling.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4210"}],"version-history":[{"count":45,"href":"https:\/\/mosaic-modeling.de\/index.php?rest_route=\/wp\/v2\/pages\/4210\/revisions"}],"predecessor-version":[{"id":5750,"href":"https:\/\/mosaic-modeling.de\/index.php?rest_route=\/wp\/v2\/pages\/4210\/revisions\/5750"}],"up":[{"embeddable":true,"href":"https:\/\/mosaic-modeling.de\/index.php?rest_route=\/wp\/v2\/pages\/4206"}],"wp:attachment":[{"href":"https:\/\/mosaic-modeling.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}