2016-11-12 1 views
1

Я пишу переднюю часть DSL, используя ANTLR v4, которую я хотел бы закрепить в рамках GCC. Цель состоит в том, чтобы иметь C-язык AST, чтобы использовать остальную часть структуры GCC.Как закрепить на ANTLR 4 перед GCC Generic/GIMBLE?

Я не нашел никакой информации или ранее существовавшей работы, чтобы использовать пример того, как действовать. Я ищу, как переместить ANTLR 4 AST в GCC Generic/GIMBLE.

ANTLR 4 не поддерживает цель языка C, поэтому мне придется привязать цель C++ к языковой среде GCC C.

Помощь ценится

ответ

0

Приклеивания C++ реализации из ANTLR в GCC так, что GCC будет назвать это, вероятно, будет легким шагом. [Не ожидайте, что вам будет легко; GCC хочет быть GCC, а не вашим питомцем. Вы можете получить помощь от GCC Melt, пакета для сопряжения с машинами GCC.]

AST, изготовленный для произвольного (например, вашего пользовательского DSL) языка, не просто «просто перемещается» в C AST или в рамки GCC Gimple (не GIMBLE).

Вам необходимо будет построить, по сути, ваш переводчик DSL-AST на C-AST или ваш переводчик DSL-AST на Gimple. Нет оснований полагать, что создание такого переводчика легко; например, вы не сказали, что ваш DSL был «как C, кроме ...». Итак, вам нужно будет построить переводчика. В отсутствие доказательств это легко, вам придется перевести свои концепции DSL на концепции C. Чем лучше («не C-like») ваша DSL, тем сложнее это будет.

Этот SO ссылка обсуждает вопросы, стоящие за перевод более подробно: What kinds of patterns could I enforce on the code to make it easier to translate to another programming language?

+0

Спасибо за совет, полезные ссылки и указывая на Gimble/Gimple. iPad автоматически корректировал сотрудничество, и я не заметил. Я не думал, что GCC - мое домашнее животное или дружелюбное, а интеграция анализатора ANTLR НЕ является тривиальной задачей. Это была основная причина для постановки вопроса. DSL - это набор символов ascii, канонический поднабор теории категорий для тензоров с подсказками, направляющими конструкции графического процессора и распределенные рабочие процессы через RDMA и MPI (не похожий на тензорный поток). Я сопоставляю DSL с C lang AST, чтобы использовать существующие библиотеки. Детали Lang были опущены, чтобы сосредоточиться на теме. – garyM

+0

@garyM: Вам может быть лучше просто преобразовать DSL в C в качестве * исходного * языка. Затем вы можете реализовать своего переводчика без боевых сражений, чтобы интегрировать его в конкретный компилятор. Если вы заинтересованы в том, как построить переводчик, который отображает конструкции исходного уровня в конструкции исходного уровня, вам следует рассмотреть систему преобразования программ (см. Http://en.wikipedia.org/wiki/Program_transformation), а не что-то, что * просто * парсер. Если вы хотите увидеть примеры источников для исходных преобразований, см. Http://www.semdesigns.com/Products/DMS/DMSRewriteRules.html –

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