Доброй пятницы, ЛОР.
Вопрос в первую очередь тем, кто погружался в исходники компиляторов: gcc, clang, rustc, fpc, go… Используют ли они универсальные инструменты для лексического анализа и разбора — все эти flex, bison и др., которые рекомендуют учебники?
Или же там для разбора исходников написано что-то своё, более низкоуровневое?
И второй вопрос — что посоветуете человеку, который хочет что-то вытаскивать из написанного людьми (*) кода на C или C++? Пойти по классике и упороться flex-ом или?..
В первую очередь интересен первый вопрос, особенно в части gcc и clang. Жду рассказов людей, которые туда погружались и выплыли. :)
(*) - так-то понятно, что можно повесить вывеску «принимается только код, обработанный бьютифаером» и по-бырому сделать «парсер» на регулярках, а то и вручную. И «для себя» и даже для небольшого коллектива это будет вполне нормальное инженерное решение, даже в чём-то юниксвейное. А вот если задаться целью сделать как следует…
Upd: в обсуждении выяснилось, что со вторым вопросом, если не лезть внутрь функций, помогает CastXML. Пример:
castxml globals.cpp --castxml-gccxml -o ./out.xml -I ../core -I /usr/include/qt4
Upd2: gcc-xml, предшественник CastXML, тоже поддерживает ключ -I
, но в имевшемся у меня мане он не описан. Выходной файл в этом случае задаётся ключом -fxml=...
Всем спасибо за помощь.