从平面 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 解析器之一,例如看看:
- https://github.com/lbl-srg/modelica-json
- https://hackage.haskell.org/package/modelicaparser
- https://github.com/xie-dongping/modparc
- https://github.com/pymoca/pymoca
- https://github.com/pymola/pymola/tree/master/src/pymola
第四,如果所有这些都不起作用,你仍然不必编写完整的解析器,你可以使用 ANTLR,然后使用现有的语法文件(查找例如 modelica.g4
)。
我想知道是否已经存在从平面 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 解析器之一,例如看看:
- https://github.com/lbl-srg/modelica-json
- https://hackage.haskell.org/package/modelicaparser
- https://github.com/xie-dongping/modparc
- https://github.com/pymoca/pymoca
- https://github.com/pymola/pymola/tree/master/src/pymola
第四,如果所有这些都不起作用,你仍然不必编写完整的解析器,你可以使用 ANTLR,然后使用现有的语法文件(查找例如 modelica.g4
)。