0

В моем текущем проекте требуется, чтобы я прочитал данные, которые хранятся в файлах конфигурации и генерируют код уровня абстрагирования аппаратного обеспечения. Структуры данных конфигурации описывают цифровое оборудование низкоуровневым способом (компоненты с регистрами/битовыми полями, значениями сброса питания и т. Д.). Из этих данных мне нужно автогенерировать код Python, который может использоваться другими разработчиками приложений для написания приложений поверх него. Как я уже говорил, идея заключается в предоставлении HAL для приложения более высокого уровня.Как создать генератор кода, который генерирует код Python

Мой вопрос: каким будет ваш подход к решению этой проблемы? Для меня естественно использовать Python для генератора кода. Я не знаю, есть ли лучшие инструменты для этой задачи (yacc/bison?). Моя идея дизайна заключалась бы в том, чтобы статический программный компонент перераспределялся и обрабатывал обработку сообщений, ведение журнала и все общие вещи. Другой компонент, зависящий от оборудования, будет полностью автогенерирован и использовать API статического компонента.

+0

Привет, добро пожаловать в SO. У вас есть конкретная проблема и связанный с ней вопрос? У вас есть какой-либо код (если это так, отправьте его здесь). –

ответ

0

Что вы хотите сделать, это использовать Program Transformation System (PTS).

Это инструменты/фреймворки, которые принимают описания одного или нескольких языков компьютера, а затем позволяют писать правила, которые отображают один язык на другой. В вашем случае вы хотите определить язык для «файлов конфигурации» для своего оборудования и написать правила, которые отображают различные шаблоны конфигурационных файлов на фрагменты кода Python (возможно, объявления, возможно, заявления, а также набор функций), которые предоставляют ваши требуемый API оборудования.

Настаивать на PTS на Python просто ограничит вас выбором довольно пустого набора, если вы не думаете, что собираетесь строить PTS самостоятельно. Это тоже не произойдет. Мысль о том, что использование парсера - хороший шаг, прав, но это лишь небольшая часть действительно работоспособного решения; см. мое эссе о Life After Parsing о том, почему вы хотите полный PTS.