Извлечение строки кода C с использованием perl на основе имени файла + номера строки - PullRequest
2 голосов
/ 08 августа 2010

Я хочу извлечь оператор кода C, учитывая имя файла и номер белья, где он начинается.

Конечно, я не могу просто взять строку, так как я мог бы получить что-то вроде:

foo(i,
   j, "this is ); \
   ", k);

, как показывает пример, я также не могу найти следующий );, что сделало бы его довольно простым.

Есть ли что-нибудь, предположительно на CPAN,который делает это автоматически?

Если бы я мог сначала выполнить код через отступ, я бы разрешил ему неограниченную длину строки, а затем взял бы только эту строку, но если я это сделаю, я потеряю номер строки!

1 Ответ

5 голосов
/ 08 августа 2010

Чтобы сделать это на отлично, вам понадобится полноценный C-парсер в Perl.Однако вы можете охватить, вероятно, более 99% всех случаев гораздо более простым алгоритмом:

  1. Откройте файл
  2. Пропускать строки, пока не достигнете рассматриваемой строки
  3. Строковые строки до точки с запятой в конце строки

"Точка с запятой в конце строки" - довольно приличная эвристика для "конца утверждения".Относительно простой синтаксический анализ может защитить вас от ситуации, описанной выше.

Если вам нужно что-то более сложное, вы можете взглянуть на C :: Scan и его подклассы или Инлайн :: C :: ParseRecDescent .

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