Существует ли простой способ сгенерировать код от текстового файла?

Я в настоящее время работаю над проектом, который получает доступ к части аппаратных средств с помощью тонн твердых кодированных ячеек памяти. Эти местоположения могут измениться основанный на прихоти инженера-электрика, таким образом, я надеюсь генерировать код из карты распределения памяти инженера. Скажем, карта является простым текстовым файлом как:

Name, Type, Address, Description
Foo, int, A001, Foo integer variable
Bar, float, A002, Bar float variable

Я хотел бы автоматически сгенерировать код (не IL) подобный:

class MachineMap
{
  /// <summary>
  /// Foo integer variable
  /// </summary>
  public readonly Addressable<int> Foo = new Addressable<int>("A001");
  /// <summary>
  /// Bar float variable
  /// </summary>
  public readonly Addressable<float> Bar = new Addressable<float>("A002");
}

У кого-либо есть идеи об инструментах, которые сделали бы эту задачу легкой, или легче?

9
задан Scott P 10 March 2010 в 19:15
поделиться

4 ответа

Посмотрите на встроенную возможность генерации кода в Visual Studio называется T4. Или другим вариантом может быть коммерческий продукт, например CodeSmith .

Прочтите статью Скотта Хансельмана:
Генерация кода T4 (Text Template Transformation Toolkit) - лучший секрет Visual Studio

4
ответ дан 4 December 2019 в 23:05
поделиться

Подобно предложению Ника Осло, StringTemplate - это еще один способ создания исходного кода на основе шаблона из четко определенной грамматики. У него есть порт C #, поэтому его достаточно легко использовать из .NET.

0
ответ дан 4 December 2019 в 23:05
поделиться

Вы можете создать DSL по вашему выбору, а затем использовать M Grammar (часть Осло) для его анализа.

0
ответ дан 4 December 2019 в 23:05
поделиться

Используйте регулярное выражение вроде этого (используя gvim или vim):

:%s/\(.*\), \(.*\), \(.*\), \(.*\)/public readonly Addressable<\2> \1 = new Addressable<\2>("\3")/g

Это решает основную часть парсинга. Затем вы конкатенируете содержимое с файлами заголовков и колонтитулов:

type header.txt converted.txt footer.txt > source.c

Если карта более сложная, используйте инструмент для грамматического разбора. В противном случае, если она действительно настолько проста, избегайте использования танка для такого маленького гвоздя.

3
ответ дан 4 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

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