srcML
Разработчик(и) | Майкл Л. Коллард Джонатан И. Малетик |
---|---|
Написано в | С, С++, Ява |
Лицензия | лицензия GPL |
Веб-сайт | www |
srcML (исходный ML) — это XML-представление исходного кода, ориентированное на документы. Он был создан совместными усилиями Майкла Л. Колларда и Джонатана И. Малетика . Аббревиатура srcML — это сокращение от Source Markup Language. srcML упаковывает исходный код (текст) с информацией из абстрактного синтаксического дерева или AST (теги) в один XML-документ. Весь исходный текст сохраняется, поэтому исходный документ с исходным кодом можно воссоздать из разметки srcML. Единственным исключением является возможность нормализации новой строки. [1]
Цель srcML — предоставить полный доступ к исходному коду на лексическом, документальном, структурном и синтаксическом уровнях. Этот формат также обеспечивает простую поддержку извлечения и преобразования фактов. Он поддерживается набором инструментов srcML, размещенным на веб-сайте srcML , и было показано, что он выполняет масштабируемое и легкое извлечение и преобразование фактов.
набор инструментов srcML
[ редактировать ]Набор инструментов srcML состоит из программы командной строки под названием srcml, которая преобразует исходный код в srcML при предоставлении файла кода в командной строке или преобразует из srcML в исходный код, когда в командной строке предоставляется архив srcml. Программа также поддерживает прямые запросы и преобразования архивов srcML с использованием таких инструментов, как XPath, XSLT и RELAXNG. Набор инструментов srcML активно поддерживается и в настоящее время поддерживает C, C++, C# и Java.
формат srcML
[ редактировать ]Формат srcML состоит из всего текста из исходного файла исходного кода, а также тегов XML. В частности, текст окружен элементами srcML, которые указывают синтаксическую структуру кода. Короче говоря, это явно идентифицирует все синтаксические структуры в коде. [2]
Теги, используемые в srcML, перечислены ниже с указанием категорий, к которым они относятся.
Категория | Элементы srcML | |
---|---|---|
Файл/Проект | единица | |
Заявление | asm, блок, перерыв, случай, комментарий, условие, ограничение, продолжить, decl, decl_stmt, по умолчанию, сделать еще пустой_stmt, enum, expr, expr_stmt, extern, for, goto, if, incr, index, init, label, макрос, имя, пространство имен, диапазон, требует, переключатель, шаблон, затем, тип, typedef, использование, в то время как | |
Функция/Метод | аргумент, список_аргументов, вызов, функция, описание_функции, параметр, список_параметров, возврат, спецификатор | |
Сорт | класс, class_decl, конструктор, конструктор_decl, деструктор, destructor_decl, друг, список_членов, частный, защищенный, публичный, супер | |
Структура и Союз | структура, struct_decl, объединение, объединение_decl | |
Исключение | поймать, бросить, бросить, попробовать | |
C-препроцессор | cpp:define, cpp:directive, cpp:elif, cpp:endif, cpp:error, cpp:file, cpp:if, cpp:ifdef, cpp:ifndef, cpp:include, cpp:line, cpp:pragma, cpp: неопределенный | |
К&Р С | крпарам, крпараметр_список | |
Ява | расширяет, наконец, реализует, импортирует, упаковывает | |
Дополнительная разметка | горит: литерал, тип: модификатор, оп: оператор | |
Отлаживать | отметка, режим, анализ | |
Разное | побег |
srcML использует пространства имен XML. Ниже приведен список префиксов, используемых для обозначения каждого пространства имен, а также самих пространств имен.
Префикс | Пространство имен |
---|---|
источник | http://www.srcml.org/srcML/src |
cpp | http://www.srcml.org/srcML/cpp |
позиция | http://www.srcml.org/srcML/position |
горит | http://www.srcml.org/srcML/literal |
ошибаться | http://www.srcml.org/srcML/srcerr |
Примечание. Для архива srcML весь проект будет содержаться в одном корневом элементе модуля, а каждый отдельный файл будет содержаться как элемент модуля внутри корневого элемента модуля.
Конвертация одного файла
[ редактировать ]Ниже показано, как srcml можно использовать для отдельных файлов.
В следующем примере файл C++ main.cpp преобразуется в файл srcML main.cpp.xml:
srcml main.cpp -o main.cpp.xml
Следующая команда извлечет исходный код из файла main.cpp.xml и поместит его в файл C++ main.cpp:
srcml main.cpp.xml -o main.cpp
Конверсия проекта
[ редактировать ]Ниже показано, как src2srcml и srcml2src можно использовать во всем проекте:
В следующем примере проект «project» преобразуется в файл srcML project.xml.
srcml project -o project.xml
Следующая команда извлечет файлы исходного кода из файла project.xml и поместит их в каталог проекта:
srcml —to-dir project project.xml
Преобразование программы с помощью srcML
[ редактировать ]srcML позволяет использовать большинство, если не все, существующие XML API и инструменты для записи преобразований. Он также позволяет использовать XSLT напрямую, используя аргумент — xslt={name}.xls в команде srcml2src. Использование разметки srcML с XSLT позволяет пользователю применять преобразования программы к XML-подобной структуре (srcML) для получения преобразованного xml, который затем можно записать обратно в представление исходного кода с помощью инструмента srcml2src. Применение srcML для преобразования программ подробно объяснено Collard et al. [1]
Следующая команда запустит программу XSLT program.xsl в архиве srcML project.xml.
srcml —xslt program.xsl project.xml
Извлечение фактов с помощью srcML
[ редактировать ]В своей простейшей форме извлечение фактов с использованием srcML использует XPath для обращения к частям документа srcML и получения информации о различных объектах или характеристиках исходного кода. Конечно, этим дело не ограничивается. Можно использовать любой стандартный XML API. Применение srcML для извлечения фактов подробно объяснено Kagdi et al. [3]
cpp:директива, cpp:файл, cpp:include, cpp:define, cpp:undef, cpp:line, cpp:if, cpp:ifdef, cpp:ifndef, cpp:else, cpp:elif, cpp:endif, cpp: затем cpp:pragma, cpp:errorliteral, оператор, модификатор Пример создания архива srcML из всего программного проекта.
Следующая команда запускает путь XPath в архиве srcML project.xml.
srcml —xpath "xpath" project.xml
Ведется работа по предоставлению удобных функций расширения.
Анализ различий исходного кода с помощью srcML
[ редактировать ]srcML дает много преимуществ при анализе различий исходного кода. Одним из этих преимуществ является возможность запрашивать различия между конкретными разделами кодовой базы, а также между версиями одной и той же кодовой базы. Применение srcML для анализа различий подробно объяснено Maletic et al. [4]
Примеры
[ редактировать ]В качестве примера использования srcML приведем выражение XPath , которое можно использовать для поиска всех классов в исходном документе:
//src:class
Другим примером может быть поиск всех комментариев внутри функций:
/src:function//src:comment
Поскольку srcML основан на XML, все инструменты XML можно использовать с srcML, что обеспечивает богатую функциональность.
См. также
[ редактировать ]- Набор инструментов для реинжиниринга программного обеспечения DMS
- Программа трансформации
- язык программирования TXL
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Коллард, М.Л., Декер, М., Малетик, Дж.И. (2011). Легкое преобразование и извлечение фактов с помощью набора инструментов srcML . Материалы 11-й Международной рабочей конференции IEEE по анализу и манипулированию исходным кодом (SCAM'11). стр. 10 стр.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Коллард, М.Л., Малетик, Дж.И., Робинсон, Б.П. (2010). Облегченный трансформационный подход для поддержки крупномасштабных адаптивных изменений . Материалы 26-й Международной конференции IEEE по сопровождению программного обеспечения (ICSM'10). стр. 10 стр.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Коллард, Майкл Л., Кагди, Хузефа, Малетик, Джонатан И. (2003). Облегченный экстрактор фактов C++ на основе XML . Материалы 11-го Международного семинара IEEE по пониманию программ (IWPC'03). стр. 10 стр.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Малетик, Джонатан И., Коллард, Майкл Л. (2004). Поддержка анализа различий исходного кода . Материалы Международной конференции IEEE по сопровождению программного обеспечения (ICSM'04). стр. 10 стр.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка )
- Малетик, Джонатан И., Коллард, Майкл Л., Кагди, Хузефа (2004). Использование технологий XML при разработке инструментов анализа программ . Материалы 4-го международного семинара по разработке программного обеспечения, ориентированного на внедрение (ACSE'04). стр. 6 стр.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - Коллард, Майкл Л., Малетик, Джонатан И., Маркус, Андриан (2002). Поддержка представлений документов и данных исходного кода . Материалы 2-го симпозиума ACM по разработке документов (DocEng'02). стр. 8 стр.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - Малетик, Джонатан И., Коллард, Майкл Л., Маркус, Андриан (2002). Файлы исходного кода как структурированные документы . Материалы 10-го Международного семинара IEEE по пониманию программ (IWPC'02). стр. 4 стр.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка )