Почему комментирование многострочных комментариев в C++ противоречиво?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему комментирование многострочных комментариев в C++ противоречиво?

Сообщение Anonymous »

Итак, мы это знаем

// This doesn't affect anything

/*
This doesn't affect anything either
*/

/*
/* /* /*
This doesn't affect anything
*/
This does because comments aren't recursive

/* /*
This doesn't affect anything
*/ */
This throws an error because the second * / is unmatched since comments aren't recursive


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

"\/[\/]+((?![\n])[\s\S])*\r*\n"


чтобы соответствовать // однострочным комментариям и используйте

"\/\*((?!\*\/)[\s\S])*\*\/"


чтобы соответствовать /* многострочным комментариям */, затем пройтись по всем однострочным комментариям, удалить их, затем пройтись по всем многострочным комментариям и удалить их. . Или наоборот. Но здесь я застрял. Кажется, что сделать то или другое недостаточно, потому что:

// /*
An error is thrown because the /* is ignored
*/

/*
This doesn't affect things because of mysterious reasons
// */


и

/*
This throws an error because the second * / is unmatched
// */ */


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

Изменить:

Итак, если быть более точным, мой вопрос заключается в том, почему следующие три (казалось бы, разумных) способа объяснения такого поведения не работают:
  • Просто игнорировать все символы в строке после // независимо от того, являются ли они /* или */, даже если вы находитесь в многострочном комментарии.
  • Разрешить / * или */, за которым следует //, чтобы сохранить эффект.
  • Оба из вышеперечисленных.
Я понимаю, почему вложенные комментарии не допускаются, поскольку для них потребуется стек и произвольно большой объем памяти. Но в этих трех случаях этого не произойдет.

Измените еще раз:

Если кому-то интересно, вот следующий код чтобы извлечь комментарии из файла c/c++ в Python, следуя правильным правилам комментирования, обсуждаемым здесь:

import re
commentScanner = re.Scanner([
(r"\/[\/]+((?![\n])[\s\S])*\r*(\n{1})?", lambda scanner, token: ("//", token)),
(r"\/\*((?!\*\/)[\s\S])*\*\/", lambda scanner, token: ("/* ... */", token)),
(r"[\s\S]", lambda scanner, token: None)
])
commentScanner.scan("fds a45fsa//kjl fds4325lkjfa/*jfds/\nk\lj\/*4532jlfds5342a l/*a/*b/*c\n//fdsafa\n\r\n/*jfd//a*/fd// fs54fdsa3\r\r//\r/*\r\n2a\n\n\nois")


Подробнее здесь: https://stackoverflow.com/questions/321 ... consistent
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Сопоставление многострочных комментариев в стиле C++ с использованием Regex
    Гость » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Гость
  • Создание комментариев и добавление в поле для комментариев
    Anonymous » » в форуме Html
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Комментирование кода с помощью PHP и JS, вызывающее ошибку [дубликат]
    Anonymous » » в форуме Php
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Быстрое комментирование /* выбранного кода C# */ в Visual Studio (а не всей // строки)
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Комментирование кода Java в тег Scriptlet в JSP
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»