2013-02-14 7 views
1

При предоставлении решения в C# (Visual Studio) мне нужно определить классы, которые следуют за некоторым шаблоном, и извлечь этот шаблон для последующего генерации кода.Извлечение шаблона из нескольких файлов (обнаружение паттерна)

Другими словами, мне нужно сравнить 2 класса (файлы) и извлечь из них общий шаблон. Этот шаблон будет использоваться для последующего генерации кода, когда программисту придется писать меньше кода.

Есть ли какое-либо тело, которое может дать мне представление о том, как это сделать?

Еще один вопрос: можно ли получить синтаксическое/семантическое дерево, созданное Visual Studio?

Tnx

ответ

0

Наконец я пользователь

  • NRefactory для компиляции кода, и я получил AST.
  • переписать код, используя пользовательские метки (эк: для -> loop_start)
  • выравнивать дерево получение массива длиной метки (эк: class_start, method_start, ... конец, конец)
    это было 2 файлов
  • Я сравнил 2 массива, используя «жадный алгоритм черепицы строки»
  • и отсюда у меня уже были файлы шаблонов.
0

Для первого вопроса, я думаю, вы должны смотреть в алгоритмы дифф найти общие части 2 текстовых файлов, например here.

На второй вопрос, который я хотел бы предложить, чтобы взглянуть на Roslyn

+0

Благодарю вас, но мне нужно больше обнаружить плагиат как [Мосс] (http://theory.stanford.edu/~aiken/moss/). Код не обязательно должен быть точно идентичным. –

+0

Roslyn закончил хороший инструмент, но только для VS 2012, без поддержки VS 2010. Tnx –

+0

А, ок. Возможно, вы можете скомпилировать эти файлы, а затем загрузить сборки для анализа через отражение, если вы хотите сделать это вручную. Или вы можете использовать некоторые [инструменты (ссылка)] (http://stackoverflow.com/questions/38635/what-static-analysis-tools-are-available-for-c). И у Roslyn есть двоичные файлы, доступные в [NuGet (link)] (http://nuget.org/packages/Roslyn), поэтому его можно использовать со свободной экспресс-версией VS 2012 –

Смежные вопросы