2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3  След.
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 12:05 
ewert в сообщении #250008 писал(а):
Если речь только о кавычках -- то не нужен. Достаточно поставить флажок "мы внутри строки".
Если только для о кавычках. Но кавычки могут быть одиночные и двойные. А еще могут быть части типа "комментарий", а в некоторых языках - однострочные и многострочные комментарии, а некоторые компиляторы допускают вложенные комментарии...

 
 
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 12:33 
PapaKarlo в сообщении #250030 писал(а):
А еще могут быть части типа "комментарий",

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

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

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

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

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

 
 
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 12:36 
ewert в сообщении #250037 писал(а):
PapaKarlo в сообщении #250030 писал(а):
- однострочные и многострочные комментарии,

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

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

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

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

 
 
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 13:07 
Maslov в сообщении #250046 писал(а):
комментарии еще и вкладываться на произвольную глубину могут.

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

 
 
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 13:13 
ewert в сообщении #250047 писал(а):
А чем они оформляются?

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

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

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

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

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

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

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

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

 
 
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 13:30 
Правильно ли я понял:

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

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

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

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

?

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

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

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

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

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

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

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

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

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

 
 
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 15:56 
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 
Цитата:
Я слышал "задачу о расстановке скобок" в варианте, который подразумевает несколько типов скобок (круглые, квадратные, фигурные, ...)


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

 
 
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 21:51 
malin в сообщении #250177 писал(а):
Заодно свой стек напишу, всё равно пригодится.
Зачем? Есть же стандартный.

 
 
 
 Re: проверить расстановку скобок в тексте
Сообщение08.10.2009, 22:37 
malin в сообщении #250177 писал(а):
Благодарю за предложение решить с помощью стека - действительно, прекрасная идея. Она тем более красива, чем больше скобок.

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

 
 
 
 Re: проверить расстановку скобок в тексте
Сообщение09.10.2009, 01:08 
malin писал(а):
Да, моя задача именно такая.
...
Про ОПН мало чего нашёл, но всё равно, спасибо.


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

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

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

 
 
 [ Сообщений: 34 ]  На страницу Пред.  1, 2, 3  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group