Jump to content

srcML

srcML
Разработчик(и) Майкл Л. Коллард Джонатан И. Малетик
Написано в С, С++, Ява
Лицензия лицензия GPL
Веб-сайт www .srcml .org

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, что обеспечивает богатую функциональность.

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б Коллард, М.Л., Декер, М., Малетик, Дж.И. (2011). Легкое преобразование и извлечение фактов с помощью набора инструментов srcML . Материалы 11-й Международной рабочей конференции IEEE по анализу и манипулированию исходным кодом (SCAM'11). стр. 10 стр. {{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  2. ^ Коллард, М.Л., Малетик, Дж.И., Робинсон, Б.П. (2010). Облегченный трансформационный подход для поддержки крупномасштабных адаптивных изменений . Материалы 26-й Международной конференции IEEE по сопровождению программного обеспечения (ICSM'10). стр. 10 стр. {{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  3. ^ Коллард, Майкл Л., Кагди, Хузефа, Малетик, Джонатан И. (2003). Облегченный экстрактор фактов C++ на основе XML . Материалы 11-го Международного семинара IEEE по пониманию программ (IWPC'03). стр. 10 стр. {{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  4. ^ Малетик, Джонатан И., Коллард, Майкл Л. (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: несколько имен: список авторов ( ссылка )
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 932a7629ca55b9372cb39e6cb261af8a__1651494480
URL1:https://arc.ask3.ru/arc/aa/93/8a/932a7629ca55b9372cb39e6cb261af8a.html
Заголовок, (Title) документа по адресу, URL1:
srcML - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)