2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 12:05 
Заслуженный участник


15/05/09
1563
ewert в сообщении #250008 писал(а):
Если речь только о кавычках -- то не нужен. Достаточно поставить флажок "мы внутри строки".
Если только для о кавычках. Но кавычки могут быть одиночные и двойные. А еще могут быть части типа "комментарий", а в некоторых языках - однострочные и многострочные комментарии, а некоторые компиляторы допускают вложенные комментарии...

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 12:33 
Заслуженный участник


11/05/08
32166
PapaKarlo в сообщении #250030 писал(а):
А еще могут быть части типа "комментарий",

Комментарий сам по себе -- это то же самое, что "строка", достаточно флажка.

PapaKarlo в сообщении #250030 писал(а):
- однострочные и многострочные комментарии,

А какая разница-то? Просто игнорируем перевод строки.

PapaKarlo в сообщении #250030 писал(а):
а некоторые компиляторы допускают вложенные комментарии...

Зависит от того, как разрешается оформлять комментарии. Например, в Паскале существует два вида "комментаторских" скобок: "{...}" и "(*...*)". Тогда стек не нужен -- достаточно задать флажок "текущий тип скобки" (они обязаны чередоваться).

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 12:36 
Заслуженный участник


09/08/09
3438
С.Петербург
ewert в сообщении #250037 писал(а):
PapaKarlo в сообщении #250030 писал(а):
- однострочные и многострочные комментарии,

А какая разница-то? Просто игнорируем перевод строки.
Не, не просто. В многострочных комментариях (/* ... */ в С++) игнорируем, а в однострочных (//...) - не игнорируем.

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 12:42 
Заслуженный участник


11/05/08
32166
Maslov в сообщении #250040 писал(а):
Не, не просто. В многострочных комментариях (/* ... */ в С++) игнорируем, а в однострочных (//...) - не игнорируем.

А, в этом смысле однострочные. Тогда всё несколько сложнее, но вовсе не алгоритмически. Просто символ перевода строки считается закрывающей скобкой, и надо лишь оговорить, что его возникновение до открытия данного конкретного типа комментария не является ошибкой.

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 13:05 
Заслуженный участник


09/08/09
3438
С.Петербург
ewert в сообщении #250041 писал(а):
Тогда всё несколько сложнее, но вовсе не алгоритмически.
Да, конечно, алгоритмически тут ничего сложного нет - пишется простенькое подобие конечного автомата и все.
Правда, в хаскеле, например, комментарии еще и вкладываться на произвольную глубину могут.

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 13:07 
Заслуженный участник


11/05/08
32166
Maslov в сообщении #250046 писал(а):
комментарии еще и вкладываться на произвольную глубину могут.

А чем они оформляются?

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 13:13 
Заслуженный участник


09/08/09
3438
С.Петербург
ewert в сообщении #250047 писал(а):
А чем они оформляются?

http://www.haskell.ru/lexemes.html:
Цитата:
2.3 Комментарии

Комментарии являются правильными пробельными символами.

Обычный комментарий начинается с последовательности двух или более следующих друг за другом символов тире (например, --) и простирается до следующего символа новой строки. Последовательность тире не должна являться частью правильной лексемы. Например, "-->" или "|--" не являются началом комментария, потому что оба они являются правильными лексемами; но "--foo" начинает комментарий.

Вложенный комментарий начинается с "{-" и заканчивается "-}". Нет никаких правильных лексем, которые начинаются с "{-"; следовательно, например, "{---" начинает вложенный комментарий несмотря на замыкающие символы тире.

Сам комментарий не подвергается лексическому анализу. Вместо этого, первое, не имеющее соответствующей пары вхождение строки "-}" заканчивает вложенный комментарий. Вложенные комментарии могут быть вложенными на любую глубину: любое вхождение строки "{-" в пределах вложенного комментария начинает новый вложенный комментарий, заканчивающийся "-}". В пределах вложенного комментария каждый "{-" сопоставляется с соответствующим вхождением "-}".

В обычном комментарии последовательности символов "{-" и "-}" не имеют никакого специального значения, и во вложенном комментарии последовательность символов тире не имеет никакого специального значения.

Вложенные комментарии также используются для указаний компилятору, объясненных в главе 11.

Если некоторый код закомментирован с использованием вложенного комментария, то любое вхождение {- или -} в пределах строки или в пределах комментария до конца строки в этом коде будет влиять на вложенные комментарии.

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 13:30 
Заслуженный участник


11/05/08
32166
Правильно ли я понял:

1) символ типа "---" равносилен, скажем, символу "//" в том же Си;

2) символ вложенного комментария -- это фигурная скобка с ровно одной чёрточкой;

3) эти фигурные скобки не рассматриваются как комментаторные внутри комментария, начатого по "---", как и наоборот;

4) "вложенный комментарий" может продолжаться на следующих строчках;

?

Т.е. -- есть три взаимоисключающих режима: собственно код, "концевой" комментарий и т.наз. "вложенный комментарий". Причём в последнем режиме комментаторные скобки подчиняются обычному правилу парности. Так ли это?

Там как-то не шибко внятно изложено.

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 13:35 
Заслуженный участник


09/08/09
3438
С.Петербург
ewert в сообщении #250054 писал(а):
2) символ вложенного комментария -- это фигурная скобка с ровно одной чёрточкой;
Не, вложенный комментарий -- это фигурная скобка с как минимум одной черточкой:
Цитата:
Нет никаких правильных лексем, которые начинаются с "{-"; следовательно, например, "{---" начинает вложенный комментарий несмотря на замыкающие символы тире.
В остальном - правильно.

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 15:19 
Заслуженный участник


11/05/08
32166
Maslov в сообщении #250055 писал(а):
ewert в сообщении #250054 писал(а):
2) символ вложенного комментария -- это фигурная скобка с ровно одной чёрточкой;
Не, вложенный комментарий -- это фигурная скобка с как минимум одной черточкой:
Цитата:
Нет никаких правильных лексем, которые начинаются с "{-"; следовательно, например, "{---" начинает вложенный комментарий несмотря на замыкающие символы тире.

Так вот. Та замечательная фраза может расшифровываться двояко:

а) что все избыточные чёрточки после первой поглощаются;

б) что все избыточные чёрточки после первой включаются в собственно комментарий.

Следствие. Процитированный Вами текст -- безграмотен.

Он безграмотен даже несмотря на то, что ни к каким практическим последствиям эта безграмотность и не ведёт. Просто если уж хочешь чего-то сказать -- так прямо и скажи, а не пудри мозги.

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 15:56 
Заслуженный участник


09/08/09
3438
С.Петербург
ewert в сообщении #250062 писал(а):
Следствие. Процитированный Вами текст -- безграмотен.

Он безграмотен даже несмотря на то, что ни к каким практическим последствиям эта безграмотность и не ведёт. Просто если уж хочешь чего-то сказать -- так прямо и скажи, а не пудри мозги.
Извините, но другого текста нет. Это практически дословный перевод кусочка из документа "Haskell 98 Language and Libraries. The Revised Report":
Цитата:
2.3 Comments
Comments are valid whitespace.
An ordinary comment begins with a sequence of two or more consecutive dashes (e.g. --) and
extends to the following newline. The sequence of dashes must not form part of a legal lexeme.
For example, “-->” or “|--” do not begin a comment, because both of these are legal lexemes;
however “--foo” does start a comment.
A nested comment begins with “{-” and ends with “-}”. No legal lexeme starts with “{-”; hence,
for example, “{---” starts a nested comment despite the trailing dashes.
Как Вы справедливо заметили, с практической точки зрения нет абсолютно никакой разницы, включаются эти черточки в комментарий или просто игнорируются/поглощаются. Более того, я думаю, что Вы - первый, кто обратил на это внимание :).

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 21:02 


10/06/09
111
Цитата:
Я слышал "задачу о расстановке скобок" в варианте, который подразумевает несколько типов скобок (круглые, квадратные, фигурные, ...)


Да, моя задача именно такая. Просто я решил не усложнять её, а решить по частям и потом сделать массив из таких счётчиков. Оказывается, усложнил...
Благодарю за предложение решить с помощью стека - действительно, прекрасная идея. Она тем более красива, чем больше скобок. Заодно свой стек напишу, всё равно пригодится. Ещё раз благодарю за ответы. А насчёт алгоритма Дейкстры - я помню только алгоритм Дейкстры поиска минимального пути во взвешенном графе(Видимо, он к делу не относится). Про ОПН мало чего нашёл, но всё равно, спасибо.

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 21:51 
Заслуженный участник


04/05/09
4587
malin в сообщении #250177 писал(а):
Заодно свой стек напишу, всё равно пригодится.
Зачем? Есть же стандартный.

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 22:37 
Заслуженный участник


11/05/08
32166
malin в сообщении #250177 писал(а):
Благодарю за предложение решить с помощью стека - действительно, прекрасная идея. Она тем более красива, чем больше скобок.

Она не то что бы красива -- она, по-видимому, необходима. Если есть как минимум два типа скобок. Поскольку каждая закрывающая скобка имеет право появляться для соответствующей открывающей лишь ровно на том же уровне вложенности скобок всех прочих типов. А значит, эти уровни придётся запоминать, а для этого нужен стек -- неважно, как организованный.

 Профиль  
                  
 
 Re: проверить расстановку скобок в тексте
Сообщение09.10.2009, 01:08 


21/03/06
1545
Москва
malin писал(а):
Да, моя задача именно такая.
...
Про ОПН мало чего нашёл, но всё равно, спасибо.


Посмотрите тут. Конкретно про перевод из инфиксной записи в ОПН - тут. Мне все-таки кажется, что для решения задач, подобных Вашей, изучить этот материал будет небезполезно.

="malin писал(а):
А насчёт алгоритма Дейкстры - я помню только алгоритм Дейкстры поиска минимального пути во взвешенном графе(Видимо, он к делу не относится).

Я, видимо, погорячился, обозвав тот алгоритм алгоритмом Декстры. Но факт в том, что его также придумал Эдскер Дейкстра. В википедии он называется "сортировочная станция".

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу Пред.  1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group