регулярное выражение уровня документа - PullRequest
0 голосов
/ 26 июня 2019

Я хочу создать систему, которая извлекает блоки кода из файлов C ++.Например, если бы я хотел извлечь каждый цикл while, я бы искал шаблон, который начинается с while и заканчивается }.Проблема с этим конкретным примером заключается в том, что хотя циклы могут содержать другие блоки областей действия, поэтому мне нужно:

  1. Найти строку while - регулярные выражения могут легко это сделать
  2. сопоставлять фигурные скобки, начиная с открытой фигурной скобки после while и заканчивая соответствующей ей фигурной скобкой
  3. Также сопоставлять циклы while, которые содержат одну строку и не содержат фигурных скобок
  4. Обрабатывать как можно больше особых случаев,такие как циклы while, объявленные в комментариях и т. д., согласно предложению @ Cid

Я могу сделать это с помощью синтаксического анализатора и большого количества кода, но мне было интересно, существует ли что-нибудь, что, возможно, расширяет регулярные выражения до такого родазапроса на уровне документа?

1 Ответ

2 голосов
/ 26 июня 2019

Существуют библиотеки и инструменты синтаксического анализатора, даже бесплатные с открытым исходным кодом.У Clang есть, например.Как и GCC.Есть и другие.

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

Но просто провести лексический анализ C ++ менее сложно, и его будет достаточно для грубого анализа структуры программы, есливам все равно, что это не удастся в угловых случаях.Если вы начнете с предварительно обработанного кода (или сделаете сомнительное предположение, что предварительная обработка не изменит структуру программы) и не будете беспокоиться об идентификации шаблонных скобок (в частности, о различении правого оператора сдвига и двух последовательных близких угловых скобок), выдолжна быть в состоянии построить лексический анализатор с достаточно короткой спецификацией генератора сканера.

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

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