Существует ли 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
Ответ 2
Мой парсер для языка ассемблера LLVM, написанный для генератора синтаксического анализа, подобный YACC, может служить определением BNF для языка.
Ответ 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
Ответ 6
Этот плагин Eclipse содержит грамматику Xtext для LLVM IR.
Ответ 7
Я только что нашел LLIR ( "Неофициальные библиотеки для взаимодействия с LLVM IR" ), который включает в себя (WIP?) grammar репозиторий ( "BNF-грамматика для сборки LLVM IR" ).