【发布时间】:2020-11-13 15:00:25
【问题描述】:
for context - OCL 表达式将与一个“Ecore”文件一起提供,该文件包含与表达式相关联的 UML 的信息。
作为我正在进行的研究的一部分,我正在尝试将 OCL 表达式解析为抽象语法树 (AST),我希望能够对其进行迭代、查看每个节点的信息并进行更改。问题是我发现的所有与 OCL 有任何关系的软件—— 现代应用程序不支持,因为它们太过时了,或者用于验证表达式或为给定模型实例的表达式返回布尔值。
我确实设法使用 Eclipse MDE 查看给定表达式的 AST,但这只是通过 UI 没有导出它的选项(据我所知)。
我找到的最接近的解决方案是 DresdenOCL (https://github.com/dresden-ocl/standalone),在对代码进行了很长时间的搜索后,我发现了一个函数,它为某个“OCLResource”对象返回一个“TreeIterator”对象。问题是树上的节点由仅供后端使用的类组成——这意味着除了类名、内存位置和有时代表一部分的字符串值之外,我无法从中获取任何真实信息的表达。除了打印的顺序之外,没有任何层次结构的迹象,这也是一个大问题。我也尝试在这些节点上使用反射,但据我所知,这些类没有任何有用的函数或字段可能会有所帮助。
我还提供了一些照片作为示例,包括输入和输出。 照片:
目前我最好的选择是刻苦研究这些 DresdenOCL 输出,直到我很好地理解它们是如何构建的,然后自己编写一个代码来获取这些输出并构建一个我可以正常使用的 AST,但是可能需要很长时间,这就是为什么我在这里提出这个问题,希望一些漂亮的陌生人可能会出现更好的解决方案。
任何建议将不胜感激,在此先感谢。
【问题讨论】:
标签: java eclipse parsing abstract-syntax-tree ocl