Есть ли BNF-подобная грамматика для описания LLVM IR? - PullRequest
14 голосов
/ 03 января 2011

Мне интересно, существует ли BNF-грамматика для описания LLVM IR? как грамматика C BNF, описывающая язык C и т. д.

Ответы [ 7 ]

7 голосов
/ 03 января 2011

Мой анализатор для языка ассемблера LLVM , написанный для YACC-подобного генератора синтаксических анализаторов, может служить определением BNF для языка.

6 голосов
/ 23 января 2011

Не опубликована грамматика BNF, но есть файл грамматики полигена, который частично поддерживается и используется именно для случайной генерации входных данных, которые используются для тестирования анализатора и лексера LLVM IR.* Вы можете увидеть текущую версию грамматики здесь:

http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/llvm.grm?revision=112427&view=markup

4 голосов
/ 24 января 2011

Да.Перейдите к файлу "LLParser.cpp" в "LLVM / lib / AsmParser";EBNF распределяется по файлу, например, функция LLParser::ParseNamedType() вокруг строки 350 имеет следующую функцию-комментарий:

/// toplevelentity
///   ::= LocalVar '=' 'type' type
bool LLParser::ParseNamedType() {
  /* impl. */
}

Я уверен, что регулярное выражение успешно извлечет EBNF.Я делаю это вручную, проходя парсер.

2 голосов
/ 19 октября 2017

В ответ на @ tschwinge

Я только что нашел LLIR («Неофициальные библиотеки для взаимодействия с LLVM IR»), который включает в себя (WIP?) грамматику репозиторий («Грамматика BNF для сборки IR LLVM»).

Один из оригинальных авторов здесь. Хранилище грамматики действительно находится в процессе разработки, и цель состоит в том, чтобы определить грамматику BNF для представления на ассемблере LLVM IR. Текущий прогресс может быть отслежен на https://github.com/llir/llvm/blob/master/current.md

В будущем мои друзья и я хотели бы внести эту грамматику обратно в официальный проект LLVM и хотели бы, чтобы лексер и парсер были однажды сгенерированы из грамматики BNF, поскольку это обеспечило бы указание даты.

Проблема, с которой мы столкнулись при написании грамматики BNF, заключается в том, что не существует единого источника истины (ну, конечно, кроме исходного кода). Мы сравнили комментарии исходного кода BNF с документацией LangRef, и иногда они не были синхронизированы с реальным кодом C ++, что приводило к некоторой путанице.

Текущий статус грамматики BNF таков, что она поддерживает все инструкции и выражения констант LLVM IR. Для поддержки всех концепций LLVM IR все еще необходимо добавить несколько небольших дополнений, и в настоящее время мы работаем над поддержкой метаданных DWARF. Общие узлы метаданных уже поддерживаются.

С наилучшими пожеланиями, / u & i

2 голосов
/ 03 января 2011

Нет опубликованной грамматики BNF для LLVM IR.Есть документы для описания формата и, конечно, исходный код , списки рассылки и IRC-канал .Эти места являются гораздо лучшими источниками информации, чем StackOverflow.

1 голос
/ 22 января 2014
0 голосов
/ 10 октября 2017

Я только что нашел LLIR («Неофициальные библиотеки для взаимодействия с LLVM IR»), который включает в себя репозиторий (WIP?) грамматика («Грамматика BNF для сборки IR LLVM»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...