Комментарии в строке и строки в комментариях - PullRequest
0 голосов
/ 05 апреля 2010

Я пытаюсь подсчитать символы в комментариях, включенных в код C, используя Python и Regex, но безуспешно. Я могу сначала удалить строки, чтобы избавиться от комментариев в строках, но это также удалит строки в комментариях, и результат будет плохим. Есть ли шанс спросить с помощью регулярных выражений, чтобы они не соответствовали строкам в комментариях или наоборот?

Ответы [ 3 ]

6 голосов
/ 05 апреля 2010

Нет, не совсем.

Regex не является правильным инструментом для анализа вложенных структур, как вы описываете; вместо этого вам нужно будет проанализировать синтаксис C (или «тупое подмножество» того, что вас интересует, в любом случае), и вы можете найти в этом регулярное выражение. Это сделал бы относительно простой конечный автомат с тремя состояниями (CODE, STRING, COMMENT).

2 голосов
/ 06 апреля 2010

Вы можете удалить все строки, которых нет в комментариях, выполнив поиск по регулярному выражению:

'[^'\r\n]+'|(//.*|/\*(?s:.*?)\*/)

и заменить на:

$1

По сути, это ищет регулярное выражение string|(comment), которое соответствует строке или комментарию, захватывая комментарий. Замена либо ничего, если строка соответствует, или комментарий, если комментарий был найден.

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

2 голосов
/ 05 апреля 2010

Регулярные выражения не всегда являются заменой для реального парсера .

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