Вниз  Java-программирование (1-ые посты)
- 26.08.2013 / 11:56
SeTSeR
  Пользователь

SeTSeR 
Сейчас: Offline
aNNiMON, Код? Да пожалуйста, мне не жалко:
  1. public void skipComment()
  2. {
  3.  while(Look!='}')
  4.  {
  5.   if(Look=='{') skipComment()
  6.   getChar();
  7.  }
  8. }

- 26.08.2013 / 11:57
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
SeTSeR, совет? Да пожалуйста, мне не жалко:
Рекурсия зачастую заменяется циклом.
__________________
 let live
- 26.08.2013 / 12:04
SeTSeR
  Пользователь

SeTSeR 
Сейчас: Offline
aNNiMON, В данном случае не получится, т. к. если вложить skipComment в цикл, то будут обрабаываться комментарии, идущие подряд, а мне нужна обработка вложенных
- 26.08.2013 / 12:12
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
  1. public void skipComment() {
  2.     do {
  3.         boolean skip = false;
  4.         while ( (Look != '}') && !skip ) {
  5.             if (Look == '{') skip = true;
  6.             getChar();
  7.         }
  8.     } while (skip);
  9. }
Что происходит. Допустим у нас строка "{ ololo }". По первому символу { я так понимаю, мы попадаем в этот метод skipComment() из какого-то другого метода. Считывается комментарий и, когда приходит символ } внутренний цикл перестаёт выполняться, а поскольку skip при этом равен false, то и внешний цикл тоже не повторяется. Получается do/while выполняется один раз.
Допустим, у нас строка "{ olo { ololo }". Не знаю, зачем так было извращаться, ведь комментарий строго должен начинатся с { и заканчиваться на }, то что там может быть дофига { не должно никак влиять на парсер (или что там у тебя). Но раз уж задача стоит так ""Я знаю, зачем это сделано.", то продолжим:
Попали в skipComment при {. Далее считывается olo и потом опять приходит {. skip устанавливается в true, внутренний цикл обрывается. А внешний цикл продолжает работу еще один раз. Продолжаем читать дальше. ololo прошло, приходит }. Внутренний цикл заканчивает свою работу и внешний тоже, потому что на этот раз skip равен false.
__________________
 let live

Изменено aNNiMON (26.08 / 12:13) (всего 1 раз)
- 26.08.2013 / 12:16
SeTSeR
  Пользователь

SeTSeR 
Сейчас: Offline
aNNiMON, [офф]насчёт парсера: да, к парсеу этот метод никакого отношения не имеет. Он вызывается из обработчика пробелов, относящегося к сканеру.
И ещё: твой пример немного невалиден. Вложенный комментарий также должен оканчиваться на '}'[/офф]
А за код спасибо.

Изменено SeTSeR (26.08 / 12:20) (всего 2 раза)
- 26.08.2013 / 12:25
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
SeTSeR (26.08.2013/12:16)Вложенный комментарий также должен оканчиваться на '}'Ключевое слово "комментарий". Зачем усложнять жизнь себе и людям? Комментарий, он ведь и в Африке комментарий: {{{{{{пишу скобки, сколько хочу{{{{{{{{{{{{{{ и тут бац}
а не {{{{{{пишу скобки, сколько хочу{{{{{{{{{{{{{{ и тут бац} ой, не бацнулось}}}}}} еще давай }}} блин, надо посчитать сколько еще осталось }}}} я ненавижу автора!!!}}}}}}}}}}}}}}}Ну коли "Я знаю, зачем это сделано.", тогда делай парсер (или сканер или что ты там вообще делаешь) со счетчиком, чтобы усложнить жизнь юзеру считать количество входных { и выходных }. При countBrackets == 0 вложенные комментарии валидны. При countBrackets < 0 - не хватает закрывающей }, при > 0 - открывающей {. Ну, думаю, это и так очевидно.
__________________
 let live

Изменено aNNiMON (26.08 / 12:29) (всего 1 раз)
- 26.08.2013 / 12:45
SeTSeR
  Пользователь

SeTSeR 
Сейчас: Offline
aNNiMON, проще стек заюзать :) А ещё проще - метки.

Изменено SeTSeR (26.08 / 12:48) (всего 1 раз)
- 26.08.2013 / 13:53
gost6678
  Пользователь

gost6678 
Комментарии почти во всех языках пишут после двух слешов, вот так: //комментарий.
- 26.08.2013 / 14:28
RGT
  Пользователь

RGT 
Сейчас: Offline
gost6678 (26.08.2013/13:53)Комментарии почти во всех языках пишут после двух слешов, вот так: //комментарий.Doxygen-style:
//<
//!
//@type

XML-style:
///<tag></tag>

Multistring:
/* */

Bash:
#

asm (некоторые):
;
__________________
 don't tread on me
- 26.08.2013 / 14:31
SeTSeR
  Пользователь

SeTSeR 
Сейчас: Offline
RGT, pascal:
(* *)
TP:
{}
Ada:
--+CR(LF)

Изменено SeTSeR (26.08 / 14:33) (всего 1 раз)
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)