Язык преобразования текста в модель
ATL - это язык преобразования, который позволяет создавать преобразования модели в модель, но я хочу знать, возможно ли с помощью этого языка преобразования преобразование текста в модель (уже имеющего определенную метамодель Ecore) или мне нужно иметь дело с другим языком преобразования,
Если это невозможно с ATL, какой язык преобразования?
2 ответа
Это называется "обратным инжинирингом" или "восстановлением дизайна" в зависимости от того, насколько абстрактна ваша модель.
Чтобы преобразовать "текст" в модель, вам нужен анализатор для этого текста, что бы это ни было. Как правило, этот текст предназначен для языка программирования во всей его красе. Если ваш текст на языке COBOL, Java или C++, вам нужны полные синтаксические анализаторы для этих языков, и их нелегко построить, так как эти языки большие, сложные и менее хорошо документированы, чем вы думаете, и тогда вам приходится разбираться с конкретными для продавца вариантами.
Парсера тоже недостаточно. Элементы модели представляют сущности со связями между ними (например, классы со связями "содержит", "использует", "вызывает"). Эти отношения должны быть извлечены из кода, поэтому требуется статический анализ кода для извлечения таких фактов. Вы должны написать этот анализ на "некотором" языке.
Идеальным инструментом для такой задачи является система преобразования программ (PT). Эти инструменты принимают определения языка, анализируют AST для построения исходного кода (разновидность структуры данных компилятора) и позволяют преобразовывать код и / или анализировать его для извлечения интересующих отношений, обычно написанных в DSL, специфичном для системы PT. AFAIK, DMS (система PT моей компании) - единственный со зрелыми парсерами для общих языков. YMMV.
EMFText, Xtext.
Я использовал первый, чтобы реализовать XPath 2 принтер и парсер. Также здесь много примеров.