Сопоставить оператор Java If с классом метамодели абстрактного синтаксического дерева (ASTM)?
Я реализую метамодель абстрактного синтаксического дерева (ASTM) для моего анализатора Java. Теперь я сделал с парсером дерева с моим файлом грамматики. Теперь я попытался отобразить дерево разбора на astm. Я полностью запутался в том, что сопоставить с каким, сопоставленным оператором If с классом IfStatement.java, но не имею представления о сопоставлении условий, затем о теле, о другом и т. Д. Есть ли какой-либо документ для сопоставления?
Ссылочная ссылка ASTM: http://www.omg.org/news/meetings/workshops/ADM_2005_Proceedings_FINAL/T-3_Newcomb.pdf Источник Astm: 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 ответ
Как показано в диаграмме примера на странице 63 вашей первой ссылки, условие if
заявление является выражением, а then
а также else
каждый пункт "EXEC-STATEMENT-CONTENTS". (Я не смог найти определение этого класса, но я предполагаю, что он описывает последовательность операторов.) Семантика, специфичная для if
заявление инкапсулируется тем фактом, что эти стандартные объекты являются конкретными атрибутами if
заявление; они не должны быть разными классами.
Если это кажется странным, рассмотрим простой класс Pixel:
struct Pixel {
int x;
int y;
};
Обратите внимание, что нет необходимости (или даже желательно) изобретать конкретные классы для "целых чисел, которые являются X-координатами" и "целых чисел, которые являются Y-координатами". Оба являются просто целыми числами, и определенная семантика является особенностью самого класса Pixel.
Точно так же, then
пункты и else
оба предложения являются просто списками утверждений.
На самом деле, в Java они являются отдельными утверждениями, хотя это не так для каждого языка. Например, в Python они представляют собой последовательность операторов, но не область действия, в то время как в Lua они представляют собой обычный блок (который является областью действия). Во многих языках, включая Java, else
предложение является необязательным (в отличие от диаграммы, на которую я ссылался, которая, кажется, настаивает на том, что существует только одна).