Пытаюсь построить парсер для Промелы в llvm. У меня есть парсер, который использует SPIN, который построен с использованием yacc, включая входные данные, которые поступают в yacc. Есть ли способ использовать парсер yacc для быстрого и безболезненного создания парсера clang / llvm? Я буду использовать его для создания графиков вызовов и выполнения статического анализа.
Получить парсер clang / llvm от парсера yacc
Ответы (1)
Теперь мне нужно знать, могу ли я использовать существующий компилятор Promela, который был построен с помощью yacc, для быстрого создания синтаксического анализатора (а позже и генератора IR) с использованием инфраструктуры llvm.
Да, вы можете повторно использовать существующую грамматику YACC (и, если хотите, даже существующий AST) для своего проекта. «Создание синтаксического анализатора с использованием среды llvm» немного вводит в заблуждение, потому что LLVM не имеет ничего общего с синтаксическим анализом и AST. LLVM не войдет в него, пока вы не сгенерируете LLVM IR и не начнете с ним работать.
Таким образом, вы либо берете существующую грамматику YACC и существующий AST, либо вы берете только грамматику и заменяете действия теми, которые создают ваш собственный AST, который вы определили сами. В любом случае эта часть не будет включать LLVM.
Затем вы должны написать отдельную фазу, которая обходит AST и генерирует LLVM IR с помощью LLVM API, на котором вы затем можете запускать все преобразования и анализы, поддерживаемые LLVM.