В настоящее время я работаю над проектом, в котором я создаю модель объектов из грамматики Xtext. Моя задача - преобразовать грамматический синтаксис в файл CSV, импортируемый в плагин eclipse pure :: Варианты.
Функциональная модель - это базовое дерево функций. Эти функции бывают разных типов (обязательные, необязательные, альтернативные и т. Д.).
Для построения дерева я использую сгенерированную метамодель ecore моего синтаксиса грамматики xtext. Этот файл (.ecore) в основном представляет собой XML-файл с объектами грамматики. Это последовательно, просто и легко создать дерево из.
Моя проблема в том, что мне нужно назначить типы (обязательные, альтернативные и т. Д.) Узлам моего созданного дерева. Эти типы функций соответствуют количеству операторов. Эти операторы записаны в грамматике xtext следующим образом: ´ (без оператора) ´, ´? ´, ´ * ´ и ´ + ´ (это можно увидеть в разделе 2.1.3 * 1008 руководства пользователя xtext) Проблема в том, что эти кардинальности грамматики xtext, кажется, нигде не найти. Я думал, что они появятся в файлах .ecore или .genmodel, но кардинальности нет вообще.
Я полагаю, что если xtext способен проверять и контролировать эти кардинальности, он должен иметь какую-то метамодель, где эти кардинальности можно увидеть и легко получить (что-то вроде XML-файла, похожего на .ecore или .genmodel). файл).
Итак, мой вопрос: существует ли какой-нибудь файл, сгенерированный xtext, который содержит эти числа элементов? Если нет, мне бы пришлось каким-то образом вывести эти кардинальности из самой грамматики, но это было бы излишне трудоемким и сложным, возможно, даже невозможным, потому что написанная грамматика не полностью соответствует метамодели ecore. Я получаю свое дерево функций и действительно сложный.
Только сгенерированный файл, который мне удалось найти, который содержит что-то «возможно полезное», это сгенерированный файл XXXXGrammarAccess.java (XXXX обозначает название грамматики), который является сложным сгенерированным файлом, с большим количеством библиотечных зависимостей, и у меня есть не знаю, как извлечь из этого кардинальность или если это вообще возможно. Я предполагаю, что есть возможность, потому что этот файл использует много методов IGrammarAccess, таких как getRule (), getKeyword () и другие, но я не могу использовать этот файл или распечатать что-то из него, потому что это сгенерированный файл, и я не могу запустить его сам.
Если нет какой-либо метамодели, которую я ищу, есть ли возможность каким-то образом получить эти кардинальные значения во время генерации?
Большое спасибо за ваши ответы.