Сопоставить оператор Java If с классом абстрактной синтаксической метамодели дерева (ASTM)? - PullRequest
0 голосов
/ 08 июня 2018

Я реализую метамодель абстрактного синтаксического дерева (ASTM) для моего анализатора Java.Теперь я сделал с парсером дерева с моим файлом грамматики.Теперь я попытался отобразить дерево разбора на astm.Я полностью запутался в том, что сопоставить с каким, сопоставленный оператор If с классом IfStatement.java, но не имею представления о сопоставлении условий, thenbody, elsebody и т. Д. Есть ли какой-либо документ для сопоставления?

Ссылка ASTM: http://www.omg.org/news/meetings/workshops/ADM_2005_Proceedings_FINAL/T-3_Newcomb.pdf источник астмы: https://github.com/adolfosbh/cs2as/tree/master/org.xtext.example.delphi/emf-gen/org/xtext/example/delphi/astm https://hal.inria.fr/hal-00752688/file/sosym-gra2mol.pdf

1 Ответ

0 голосов
/ 08 июня 2018

Как показано в диаграмме примера на странице 63 вашей первой ссылки, условие оператора if является выражением EXPRESSION, а каждое из предложений then и else является "EXEC-STATEMENT-CONTENTS".(Я не смог найти определение этого класса, но я предполагаю, что он описывает последовательность операторов.) Семантика, специфичная для оператора if, инкапсулирована тем фактом, что эти стандартные объекты являются конкретными атрибутами оператора if;они не должны быть разными классами.

Если это кажется запутанным, рассмотрим простой класс Pixel:

struct Pixel {
  int x;
  int y;
};

Обратите внимание, что нет необходимости (или даже желательно) придумывать конкретныеклассы для "целых чисел, которые являются X-координатами" и "целых чисел, которые являются Y-координатами".Оба являются просто целыми числами, а определенная семантика является особенностью самого класса Pixel.

Таким же образом, предложения then и предложения else являются просто списками операторов.

На самом деле, в Java они являются отдельными утверждениями, хотя это не так для каждого языка.Например, в Python они представляют собой последовательность операторов, но не область действия, в то время как в Lua это обычный блок (который является областью действия).Во многих языках, включая Java, предложение else является необязательным (в отличие от диаграммы, на которую я ссылался, которая, как представляется, настаивает на том, что она есть).

...