Что вы не поняли о DMS ?
Существует.
Имеет точный компилятор парсеры / интерфейсы для C, C ++, Java, C #, COBOL (и многих других языков) .
Он автоматически создает полные деревья абстрактного синтаксиса для всего, что анализирует. Каждый узел AST помечается файлом / строкой / столбцом для токена, который представляет начало этого узла,
и последний столбец может быть вычислен с помощью вызова API DMS.
Он имеет встроенную опцию для генерации XML из AST с указанием типа узла, исходного положения (как указано выше) и любого связанного литерального значения. Вызов командной строки:
run DMSDomainParser ++XML <path_to_your_file>
Вы можете посмотреть, как выглядит такой результат XML для Java .
Вы, вероятно, на самом деле не хотите, чего вы хотите. Программа на 1000 C может содержать 100 тысяч строк файла #include. Линия производит от 5 до 10 узлов. Выходные данные XML DMS являются краткими, и каждый узел занимает только одну строку, поэтому вы смотрите ~ ~ 1 миллион строк XML, по 60 символов в каждой -> 60 миллионов символов. Это большой файл, и вы, вероятно, не хотите обрабатывать его с помощью инструмента на основе XML.
Сама DMS предоставляет обширную инфраструктуру для управления создаваемыми AST:
обход, сопоставление с образцом (с образцами, закодированными по существу в исходной форме), преобразования от источника к источнику, поток управления, поток данных, анализ точек, глобальные графы вызовов.
Вам будет удивительно трудно воспроизвести все эти механизмы, и вам, вероятно, понадобится сделать что-нибудь интересное.
Мораль: гораздо лучше использовать что-то вроде DMS для непосредственного управления AST, чем для борьбы с XML.
Полное раскрытие: я архитектор DMS.