从平面Modelica代码中提取类型/类名

时间:2018-03-02 09:00:34

标签: modelica dymola

我想知道是否已经存在从平面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中获取已使用变量的列表。但直到现在我还没有找到一种已经存在的方法来获取相应的类型。我真的想避免编写自己的解析器: - )。

1 个答案:

答案 0 :(得分:2)

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

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

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

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