Разбор исходных файлов .c / .cpp / .py в Python для получения списка содержащихся функций - PullRequest
2 голосов
/ 14 июля 2010

Я пытаюсь узнать о парсерах для Python, C и C ++ (самостоятельно, а не для школьного проекта).Вот краткое изложение того, что я хочу сделать: 1) прочитать исходные файлы .c / .cpp / .py в Python 2) получить список всех функций в исходных файлах и диапазон их определений в терминах строкиномера.

Итак, чтобы проиллюстрировать мой вопрос, рассмотрим следующий код в файле "helloWorld.cpp" (прочитайте это на python):

//start 
#include <iostream>
#include <string>
using namespace std; 

int main(int argc, char** argv)
{
  string str = "Hello World";
  cout << str << endl; 

  return 0;
}
//end 

То, что я хочу получить, это что-то вместе: списокфункций: int main (int argc, char ** argv) начало: строка 7 конец: строка 12

Есть идеи о том, как этого добиться (некоторые примеры кода будут высоко оценены)?

Ответы [ 4 ]

2 голосов
/ 14 июля 2010

Если вы действительно заинтересованы в изучении синтаксического анализа C, вы можете изучить pycparsing .Он построен на PLY , так что вы, вероятно, можете использовать то, что вы узнали из него, для разбора многих вещей.C или Python, поэтому вы можете изучить Python и C, прежде чем начать копаться в C ++.

0 голосов
/ 14 июля 2010

Для C и особенно C ++ - если у вас есть реальный проект, я бы рекомендовал оставаться как можно ближе к реализации канонического синтаксического анализатора.Разбор в C ++ не для беззаботных (и обычно не делается правильно - даже коммерческими компиляторами).Я использовал gcc-xml в прошлом только по этой причине.Он использует gcc для синтаксического анализа кода, а затем переводит внутреннее представление gcc в ссылочное XML-представление кода, которое немного проще в поиске.Он может не научить вас синтаксическому анализу, но даст вам некоторое представление о языковой грамматике в знакомой модели данных XML.

Для кода Python вы можете использовать парсер и /или ast модулей.Однако я никогда не использовал их лично.

0 голосов
/ 14 июля 2010

Возможно реализовать привязку Python к Clang или, альтернативно, вы можете просто проанализировать и проанализировать дампы XML AST из Clang с Python.

0 голосов
/ 14 июля 2010

Сегменты могут быть хорошим местом для начала.Это общая подсветка кода, написанная на python со всеми языками и многими другими, которые вы пытались проанализировать.Вы можете найти его здесь: http://dev.pocoo.org/projects/pygments/wiki

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...