Представление кода в виде синтаксического дерева

Рейтинг: 2Ответов: 1Опубликовано: 11.03.2015

Необходимо по исходному коду построить синтаксическое дерево. Может быть, уже есть готовые библиотеки или программы? Если нет, то как проще это сделать?

Мои идеи: провести лексический анализ, получив на выходе токены, а затем применить синтаксический анализ для построения самого дерева. С синтаксическим вроде всё понятно, а вот с лексическим основная проблема - это составить грамматику для языка C++.

Ответы

▲ 4Принят

Не до конца ясна конечная цель, если это просто прокачать скилы, то стоит посмотреть в сторону другого языка, например чистого C, если же задача более реальная, то парсить C++ руками не стоит, ибо сложно и долго, я бы советовал воспользоваться готовым решением - Clang.

Clang предоставляет библиотеку libclang, при помощи которой можно получить AST для C/C++/ObjC/ObjC++.

У Mike Ash есть неплохая вводная в libclang. Кроме того можно посмотреть на вот этот мини-проект.

По двум предыдущим ссылкам информация об ObjC, но для вас не составит большого труда адаптировать это для С++.

P.S. парсить C++ при помощи Bison не получится, потому как грамматика у C++ не контекстно-свободная, придется писать парсер руками. Есть очень интересный рассказ на эту тему - Редкая профессия

UPD

Кстати, если вам просто посмотреть дерево, то clang умеет это "из коробки"

clang -cc1 -fsyntax-only -ast-dump main.cpp