Extract Types/Classnames from flat Modelica code

北慕城南 提交于 2019-12-11 03:37:21

问题


I was wondering if there already exists a possibility to extract from flat Modelica code all variables AND their corresponding types (classnames respectively).

For example:
Given an extract from a flattened Modelica model:

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";

Here, the wanted output would be something like:

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

Ideally, for construction1.thickness there would be two lines (=number of construction1.nLayers).

I know, that it is possible to get a list of used variables from the dsin.txt, which is produced while translating a model. But until now I did not find an already existing way to get the corresponding types. And I really would like to avoid writing an own parser :-).


回答1:


You could try to generate the file modelDescription.xml as defined by the FMI standard. It contains a ton of information and XML should be easier to parse, e.g. python has a couple of xml parsing/reading packages. If you are using Dymola you just set the flag Advanced.FMI.GenerateModelDescriptionInterface2 = true to generate the model description file.

The second idea could be to let the compiler/tool parse the Modelica file for you as they need to do that anyway, try searching for AST (abstract syntax tree). In Dymola, this is available through the ModelManagement library, and also through the Python interface.

Third idea could be to use one of the Modelica parsers available, e.g. have a look at:

  • 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

Fourth, if all that did not work, you still do not have to write a full parser, you could use ANTLR, then use an existing grammar file (look for e.g. modelica.g4).



来源:https://stackoverflow.com/questions/49065763/extract-types-classnames-from-flat-modelica-code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!