Какое-либо программное обеспечение для сопоставления с образцом и - переписывающий исходный код? [закрытый]

Окончательное заключение, поскольку в SqlQuery отсутствует метод Include

public static Genre BrowseGenre(string genre)
        {
            using (MusicStoreEntities db = new MusicStoreEntities())
            {
                //return db.Database.SqlQuery<Genre>("GetAllGenres").Include("Albums").Single(g => g.Name == genre);
                return db.Genres.Include("Albums").Single(g => g.Name == genre);
            }                
        }
.
7
задан Steven A. Lowe 6 January 2009 в 18:42
поделиться

4 ответа

TXL является базирующимся правилом, а не базирующийся шаблон, таким образом, это имеет больше возможностей, но возможно более крутую кривую обучения.

1
ответ дан 7 December 2019 в 07:51
поделиться

Я подумываю воскресить этот код, перевести его на современный язык и открыть исходный код проекта в качестве инструмента рефакторинга.

Я думаю, было бы просто здорово иметь такой инструмент в свободном доступе.

Но есть коммерческий продукт: DMS Software Reengineering Toolkit .

DMS Software Reengineering Toolkit - это набор инструментов для автоматизации пользовательского анализа исходных программ, модификации или перевода или генерации программных систем, содержащих произвольные смеси языков («домены»). Термин «программное обеспечение» для DMS очень широк и охватывает любые формальные обозначения, включая языки программирования, языки разметки, языки описания оборудования, конструкторские обозначения, описания данных и т. Д. Этот инструментарий является первым шагом на пути к реализации The Design Maintenance System ™ , амбициозное видение среды разработки программного обеспечения 21-го века, которая поддерживает поэтапное построение и обслуживание больших прикладных систем на основе семантики и захваченного дизайна.

Кроме того, для исходного кода C существует инструмент coccinelle :

Coccinelle - это механизм сопоставления программ и преобразования, который предоставляет язык SmPL (Semantic Patch Language) для определения желаемых совпадений и преобразований в C код. Первоначально Coccinelle была нацелена на выполнение побочных изменений в Linux.Такие эволюции включают изменения, которые необходимы в клиентском коде в ответ на эволюцию библиотечных API, и могут включать такие модификации, как переименование функции, добавление аргумента функции, значение которого так или иначе зависит от контекста, и реорганизация структуры данных. Помимо побочных эволюций, Coccinelle успешно используется (нами и другими) для поиска и исправления ошибок в системном коде.

3
ответ дан 7 December 2019 в 07:51
поделиться

Реализация приведенного выше правила в Coccinelle будет выглядеть так:

@@
identifier cnt;
expression max,E;
@@

cnt = 0
... when != cnt=E
-while (cnt < max)
+for (cnt=0; cnt < max; cnt++)
{
  ...
-  cnt++;
}

Для кода C:

int main () {
  int i=0;
  printf ("hello\n");
  while(i < arrlen) {
    printf("element %d: %f\n",i,arr[i]);
    ++i;
  }
}

он дает

int main () { int я = 0; printf ("привет \ п"); for (i = 0; i

... when! = Cnt = E разрешает произвольный код между инициализацией cnt и циклом while, но проверяет, не переопределено ли cnt. Более сложное правило может также избавиться от инициализации cnt, если оно не используется между инициализацией и циклом while.

1
ответ дан 7 December 2019 в 07:51
поделиться

Наша DMS уже упоминалась. У него есть правила преобразования, которые, как выразился ОП, «легко читать, потому что они написаны на том же языке, что и целевой исходный код ».

Вот ссылка , которая показывает полный, подробный пример сопоставления / преобразования с образцом с использованием DMS.

1
ответ дан 7 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: