Наш DMS Software Reengineering Toolkit - это система преобразования программ общего назначения, которая принимает описания произвольных языков, позволяя ей манипулировать этими языками. Он имеет внешние интерфейсы для Fortran , C ++, C, Java, C #, COBOL и многих других языков. Эти внешние интерфейсы анализируют исходный код в структурах данных компилятора (например, завершают AST) и позволяют регенерировать AST в качестве допустимого исходного текста на языке, даже сохраняя комментарии. API DMS позволяют произвольную навигацию / проверку / модификацию AST, построение анализаторов на основе атрибута-грамматики.
DMS предоставляет вспомогательный механизм для построения таблиц символов для конкретного языка, а также для контроля и анализа потока данных. Наконец, для любого языка, предоставляемого для DMS, он может применять сопоставления исходных шаблонов с AST, а также преобразования на основе шаблонов от источника к источнику для сопоставления и изменения AST, где каждое преобразование может быть включено произвольным предикатом анализа. .
Одна из ваших задач - найти вызов функции, умноженный на что-то. Этот шаблон DMS распознал бы его:
domain Fortran.
pattern match_multiplied_function_call(f: IDENTIFIER, a: arguments, t: term): product
= " \f(\a)*\t ";
, который соответствует AST, где найден соответствующий синтаксис.
DMS разрабатывается и используется более 15 лет. Он использовался для проведения анализа и преобразования продукции в очень больших целевых программных системах (для C, 25 миллионов строк, для COBOL 10 миллионов строк, для Fortran 1,5 миллиона строк и т. Д.).
Интерфейс Fortran обрабатывает F77 и F90 и обрабатывает обычный дополнительный ганк, найденный в программах на Fortran (элементы F2003, указатели Cray, ...), и даже обрабатывает директивы препроцессора C, используемые внутри текста Fortran.