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

2023-11-30

我想知道是否已经存在从平面 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,这是在翻译模型时生成的。但到目前为止我还没有找到一种已经存在的方法来获取相应的类型。我真的很想避免编写自己的解析器:-)。


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

第二个想法可能是让编译器/工具为您解析 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).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从平面 Modelica 代码中提取类型/类名 的相关文章

  • 如何在 Openmodelica 中指定介质?

    我正在 Modelica 中模拟热泵热水系统 我附上了我的模特的照片 但是 当我运行模型时 出现错误 Medium 是部分的 部分类中不允许进行名称查找 您能告诉我吗 我该如何指定水箱 热泵冷凝器和管道中的水 我应该如何指定热泵蒸发器中的空
  • 两相 Modelica Media 示例

    我正在尝试在 OpenModelica 中开发具有单一物质 液体或蒸汽 的流动模拟 Modelica Media Water 模型确实有两个阶段 但极其复杂 并且很难用完全不同的物质来重现 我想找到一个我可以使用的两相介质的简单示例 有一个
  • modelica 中的功能集成

    我想在 Modelica 中对时间以外的变量函数进行积分 但我不知道该怎么做 例如 如何计算上限为 5 下限为 2 的 x dx 的积分 x dx x 2 2 Modelica 并不是像 Maple Mathematica 或 Matlab
  • 来自 Dymola mos 脚本的 mkdir

    我有一个用于运行多个模拟的 mos 脚本 在运行模拟之前 我想cd to a new目录 以便保存所有结果和日志文件并且永远不会被覆盖 目前只能cd据我所知 到现有目录 任何人都建议如何创建名为例如的目录temp modelname and
  • 何时在 Modelica 语言中使用 noEvent 运算符?

    Modelica 中的 noEvent 运算符不使用迭代来查找触发事件的精确时刻 看来这会导致计算错误 这是我在以下网站上找到的示例https mbe modelica university behavior discrete decay
  • 外部函数:从 C 脚本使用 .dll 的替代方法

    这是一个伴随问题外部函数 在 C 脚本中引用头文件来编译 dll 该堆栈溢出问题是使用 Modelica 外部函数调用 c 脚本 然后 该 c 脚本使用 dll 中包含的 c 函数 以下是我尝试过的最初首选方法和我不喜欢的工作尝试 初步尝试
  • matlab dymola 连接在一段时间后失败

    我有 mat 文件中的实验数据和用 dymola 编写的模型 我使用 dymolaM m 文件将命令从 matlab 发送到 dymola 这样我就可以使用 matlab 来优化模型的参数 Matlab从 mat文件中读取数据 以正确的方式
  • Modelica 仿真和方程初始化总时间计算

    我想测量 DAE 系统的总模拟和初始化时间 我对挂钟时间感兴趣 就像 Matlab 中函数 tic toc 给出的时间 我注意到在 Modelica 中 模拟时间有不同的标志 但实际上 与我按下模拟按钮到模拟结束所经过的时间 大约用手机时钟
  • 在 OpenModelica 中模拟闭式液压循环

    我想对一个封闭的液压循环进行建模 正如人们可以在 Modelica 标准库 流体 示例 加热系统中找到的那样 对于供暖系统以及我的 简约 示例 我遇到了同样的问题 系统是超定的 在接下来的讲座中 您可以发现加热系统是一个 坏例子 所以我想这
  • 仿真期间的 Modelica 输出文件

    我进行了很长时间的模拟 并且需要在模拟继续时检查输出 另一个原因是我正在进行实时模拟 所以我也想实时查看输出 如果 OpenModelica 在模拟过程中创建一个输出文件 以便我可以使用第 3 方工具 也许是 Python 读取并绘制它 那
  • FMU FMI模拟,设置某类参数时不修改结果

    我为该示例开发了一个基于 MSL 流体库的简单 Modelica 模型 我将 MassFlowSource 与管道和 Boundary PT 连接为接收器功能 如下图所示 http www casimages com img php i 1
  • 在仿真期间暂停 JModelica 并传递增量输入

    您好 Modelica 社区 我想在 JModelica 中并行运行两个模型 但我不确定如何在模型之间传递变量 一个模型是 python 模型 另一个是 EnergyPlusToFMU 模型 JModelica 文档中的示例具有在模型仿真之
  • 单元测试 Modelica 组件库?

    我正在 Modelica 中创建一个组件库 并且希望获得一些有关对包进行单元测试的技术的意见 到目前为止 我有一个测试包 由一组模型组成 每个组件一个模型 每个测试模型都会实例化一个组件 并将其连接到一些非常简单的帮助器类 这些类提供必要的
  • 不同 Modelica 仿真环境之间有什么区别?

    有不同的 Modelica 仿真环境 包括 Dymola Wolfram SystemModeler OpenModelica 和 Jmodelica 所以 我尝试加载热流体库 ThermoSysProhttps github com Dw
  • 在 Modelica 模拟中包含因果关系会导致模型扁平化时出现平移错误

    我想模拟基于能量工作的质量弹簧模型的控制器 model model parameters parameter Real m 1 parameter Real k 1 parameter Real Fmax 3 parameter Real
  • 使用“在模型中保存起始值”选项来帮助 Dymola 中的收敛

    I build a model in dymola Even though there are some errors during the initialization process but the calculation succee
  • 后续问题:Modelica仿真和方程初始化总时间计算

    我正在写这个相关问题this https stackoverflow com questions 61375492 modelica total time calculation of simulation and equation ini
  • 如何在 Modelica 中构建液体平衡连接器?

    帖子状态 200313 得到了代码 DEMO v42 的答案 我接受了赏金 200310 我评论了昨天建议的两篇关键论文 还是不明白如何更新DEMO v41 200309 我想强调的是 关键问题是如何在代码DEMO v41 如果可能的话 中
  • 理解 Dymola 错误消息时遇到问题

    谁能告诉我 代数环 的含义 以及我应该如何通过添加 预 运算符来应对这种情况 我真的没看懂 Error Failed to generate code for an algebraic loop involving when equatio
  • Modelica 外部函数:C 与 C99

    在 Modelica 中可以定义外部函数 规范第 12 9 章表示支持 C 和 Fortran77 将来可能会支持 C 和 Fortran90 现在我想知道哪个C 的版本 http en wikipedia org wiki C progr

随机推荐

  • 在matlab中改变音频wav文件的音高?

    如何在 matlab 中改变音频信号的音调 本质上我只是想改变音频信号的原始质量而不做巨大的改变 我尝试使用原始输入音频通过稍微改变其质量来模拟合唱 以便我可以使用音频的多种变体来模拟合唱 最简单的方法可能是相位声码器 您可以在这里找到一种
  • 如何在 ASP.Net 站点中启用 FCKeditor 的实时预览?

    Over in this对于这个问题 Scott 写道 可以通过使用来获取 FCKeditor 中写入内容的当前 HTMLFCKeditorAPI Instances instanceNameHere GetHTML 有人可以提供有关如何在
  • Android:如何混合 2 个音频文件并使用 soundPool 重现它们

    我正在尝试开发一个 Android 应用程序 它使用一些声音并将它们混合在一起来创建音乐作品 一开始 我尝试同时再现声音 但是当我这样做时 它们变得不同步 在阅读论坛几个小时后 我意识到在循环模式下同时再现多个声音的最佳方法就是将音频文件合
  • 使用 matplotlib 和 pandas 库绘图不清楚

    有什么解释为什么我会得到这样的情节吗 指数回报的范围是从 100 到 130 我需要帮助来理解上面的这个图 代码很简单 但是情节不太清晰 import needed library import numpy as np import mat
  • 用于 IOS 开发的 QMessagebox 的任何替代解决方案(仅限 QWidget 应用程序)?

    我正在使用 Qt 5 3 并尝试为 IOS 开发应用程序 问题是 iPhone Retina 模拟器中的 QWidget 应用程序 QMessage 变为全屏 在应用程序输出面板中我看到 此插件不支持 传播大小提示 因此正在寻找 QMess
  • java 可以在对象仍在作用域内时终结该对象吗?

    我一直在研究代码中的一个错误 该错误似乎是由一些 丑陋 的终结器代码引起的 代码大致是这样的 public class A public B b new B Override public void finalize b close pub
  • sql server奇怪的Identity增量

    我在 SQL Azure 上设置了这个表 CREATE TABLE dbo Sl ID int IDENTITY 1 1 NOT NULL PublicId uniqueidentifier NOT NULL CONSTRAINT Prim
  • 如何从 MS Word 创建 PCL 文件

    如何创建类似于现有 MS 文档的新 PCL 文件 我有 MS 文档模板并将其替换为实际数据 我需要实现相同的 PCL 格式 创建 PCL 文件作为模板并将其替换为数据库中的实际值并将其发送到传真 安装新打印机 当询问端口时 创建一个 本地端
  • 来自另一个线程的 DoDragDrop()

    每次我想让用户拖动一个控件时 我都会调用该控件的 DoDragDrop 拖放工作正常 但我对周围的事情有问题 DoDragDrop 完全阻塞表单 没有计时器事件跳转 没有处理绘制消息 DoDragDrop 不仅会阻止拖放操作 还会阻止目标程
  • 尝试删除文件时“该进程无法访问该文件,因为该文件正在被另一个进程使用”

    当逐一删除文件时 会生成错误 该进程无法访问该文件 因为在尝试删除文件时该文件正在被另一个进程使用 代码 对于删除这样的文件有什么建议吗 private void DeleteFilesFromDestination string cons
  • MinGW 链接器错误:winsock

    我正在 Windows 上使用 MinGW 编译器来编译带有套接字的 C 应用程序 我的链接命令如下所示 g exe Wall Wno long long pedantic lwsock32 o dist Windows piskvorky
  • 在 PDO 中获取 SUM

    下面是我的代码 由于某种原因它没有给我总和 它总是返回 0 为什么它不起作用 我用过if totSubmits 以避免我的数据库中出现空白字段 我也尝试删除AS due fees并使用 dueAmont result 0 但没有运气 sql
  • C++ |主函数错误 |初学者[重复]

    这个问题在这里已经有答案了 我对 C 完全陌生 我正在使用 Eclipse 但是 我不知道为什么我在 main 函数中收到此错误 错误 main 必须返回 int 我的代码是 void main char a while a q strin
  • 如何在 bootstrap 4 和 angular2 中使用 Glyphicons?

    我正在使用 angular cli 和 bootstrap4 制作一个应用程序 但是当我对 Glyphicons 进行一些引用时 图标不会出现 例如 当我添加以下代码时
  • 响应式全屏 CarouFredSel 幻灯片

    这是一个自我问答 我已经使用令人惊叹的 CarouFredSel 滑块插件进行开发很长时间了 每次我必须制作需要在宽度和高度上响应的全屏幻灯片时 我都会忘记该怎么做 所以我为我和所有其他为此苦苦挣扎的人做了这个问答 所以 问题是 如何制作全
  • Java 1.6 与 C++ 的性能对比?

    随着 Java 1 6 的推出 我们是否可以说 Java 1 6 的性能几乎与 C 代码相当 或者与 C 相比 Java 在性能方面仍然有很多需要改进的地方 Thanks Debian 喜欢对这类事情进行基准测试 在他们的例子中 Java
  • JavaPreparedStatementsetString改变字符

    正如标题所示 可以肯定的是 我正在调试我的应用程序 因此在我将字符串放入PreparedStatement变量中时 特殊字符将更改为 我实际上不知道在哪里搜索应该修复它的东西 所以我不知道是否需要代码 无论如何 我会在这里放一些 Prepa
  • 如何从 FZF 在特定应用程序中打开文件

    我想用FZF搜索文件 然后在我选择的编辑器中打开它们 例如太棒了 原子 我不知道如何为此配置我的 shell 我已经尝试了以下方法 但无法让它工作 你能帮我吗 Thanks fe local files IFS n files fzf tm
  • c++:如何打印不带回车的新行[重复]

    这个问题在这里已经有答案了 可能的重复 如何使 cout 表现得像二进制模式 我使用 C 将二进制数据打印到标准输出 然后将其重定向到文件 我不想直接写入文件 但是 当我尝试打印该值时 0A 我正进入 状态 0D 0A 这是我将输出复制到
  • 从平面 Modelica 代码中提取类型/类名

    我想知道是否已经存在从平面 Modelica 代码中提取所有变量及其相应类型 分别为类名 的可能性 例如 给定扁平 Modelica 模型的摘录 constant Integer nSurfaces 8 constant Integer c