从平面 Modelica 代码中提取 Types/Classnames

Extract Types/Classnames from flat Modelica code

我想知道是否已经存在从平面 Modelica 代码中提取所有变量及其相应类型(分别为类名)的可能性。

例如:
给定扁平化 Modelica 模型的摘录:

constant Integer nSurfaces = 8;
constant Integer construction1.nLayers(min = 1.0) = 2 "Number of layers of the construction";
parameter Modelica.SIunits.Length construction1.thickness[construction1.nLayers]= {0.2, 0.1} "Thickness of each construction layer";

在这里,想要的输出类似于:

nSurfaces, Integer, constant;
construction1.nLayers, Integer, constant; 
construction1.thickness[construction1.nLayers], Modelica.SIunits.Length, parameter

理想情况下,construction1.thickness 会有两行(=construction1.nLayers 的数目)。

我知道,可以从翻译模型时生成的 dsin.txt 中获取已用变量列表。但是直到现在我都没有找到一种已经存在的方法来获取相应的类型。我真的很想避免编写自己的解析器:-)。

您可以尝试生成由 FMI standard 定义的文件 modelDescription.xml。它包含大量信息,XML 应该更容易解析,例如python 有几个 xml parsing/reading 包。 如果您使用的是 Dymola,则只需设置标志 Advanced.FMI.GenerateModelDescriptionInterface2 = true 即可生成模型描述文件。

第二个想法可能是让 compiler/tool 为您解析 Modelica 文件,因为无论如何他们都需要这样做,请尝试搜索 AST(抽象语法树)。在 Dymola 中,这可以通过 ModelManagement 库获得,也可以通过 Python 接口获得。

第三个想法可能是使用可用的 Modelica 解析器之一,例如看看:

第四,如果所有这些都不起作用,你仍然不必编写完整的解析器,你可以使用 ANTLR,然后使用现有的语法文件(查找例如 modelica.g4)。