Существует ли BNF-подобная грамматика для описания LLVM IR?

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

Ответы

Ответ 1

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

Здесь вы можете увидеть текущую версию грамматики:

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

В ответ на @tschwinge

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

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

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

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

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

Веселые отношения, /u и i

Ответ 7

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