parserALT
Страницы форума: ← Назад | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 600 | Дальше →

Как вы находите лишние фигурные скобки?

#1Василий М.
21.07.11 18:52
www.parser.ru → | ответить → | в избранное →

Как вы находите лишние фигурные скобки?

Вот тут что-то не так.


@pronounce[]
^if($tys > 0){^numero.menu{^if($numero.digit eq ^eval($tys*1000)){^if($yed eq 0 && $des eq 0 && $sto eq 0){$numero.pronounce}{$numero.continuing}}{}}}{}
^if($sto > 0){^numero.menu{^if($numero.digit eq ^eval($sto*100)){^if($yed eq 0 && $des eq 0){$numero.pronounce}{$numero.continuing}}{}}}{}

#надцатые
^if($des eq 1){
$nad(^eval($des*10 + $yed))
^numero.menu{
^if($numero.digit eq $nad){$numero.pronounce}{}
}}{

^if($des > 0){^numero.menu{^if($numero.digit eq ^eval($des*10)){^if($yed > 0){$numero.continuing}{$numero.pronounce}}{}}}{}
^if($yed > 0){^numero.menu{^if($numero.digit eq $yed){$numero.pronounce}{}}}{}}


Лажа где-то в конечных скобках: если добавить в авто.п что-либо после этого, получаем Unhandled Exception про неожиданный конец :).
Есть ли какой-то универсальный способ находить такую лажу? Второй час бьюсь.

Вы лично как делаете?
#2max_rip
→ Василий М. [#1] | 21.07.11 18:58 / 19:05
www.parser.ru → | ответить → | в избранное →
Отступы делать надо.
А вообще все скобки на месте, но зачем вы делаете
^if(){код}{}
лишнею пару скобок в конце?
#3Misha v.3
→ Василий М. [#1] | 22.07.11 02:33 / 03:17
www.parser.ru → | ответить → | в избранное →
про форматирование кода и ненужные пустые {} вам уже написали.

а находить парные скобки помогают редакторы, подсвечивая их. например бесплатный Notepad++ это умеет.

P.S. в этом коде тоже все ^eval() можно выкинуть за ненадобностью
P.P.S. а вы, случайно, не это пишите?
#4skiv
→ Misha v.3 [#3] | 27.07.11 16:35
www.parser.ru → | ответить → | в избранное →
Эх, надо чаще заглядывать в примеры...

Изобретаем велосипед:

@noun[cnt;n1;n2;result][r1;r2]
$r1(^cnt.right(1))
$r2(^cnt.right(2))
^if($r2 < 11 || $r2 > 14){
	^switch($r1){
		^case(1){$result[$n1]}
		^case(2;3;4){$result[$n2]}
	}
}
#5Misha v.3
→ skiv [#4] | 27.07.11 17:14
www.parser.ru → | ответить → | в избранное →

считаю приведённый код некорректным :)

т.к.:
1. до эксперимента не берусь предсказать поведение метода с объявленным во входный переменных переменной с именем result
2. почитайте changelog к версии 3.4.0. там говорится, что все ветки должны или использовать result, или не использовать. в вашем случае это не так (или как раз срабатывает ваш "хак" с входной переменной result? ну... удачи, конечно, но используя хаки будьте готовы править код после выходя очередной версии :) ).

P.S. ну и до кучи вычисление $r1 под ^if унесли-бы, что уж там
P.P.S. а вообще прикольно.
#6
→ Misha v.3 [#5] | 27.07.11 19:26
www.parser.ru → | ответить → | в избранное →

так тоже работает

@noun[cnt;n1;n2;n5][r1;r2]
$result[$n5]

$r2(^cnt.right(2))

^if($r2 < 11 || $r2 > 14){
	$r1(^cnt.right(1))
	^switch($r1){
		^case(1){$result[$n1]}
		^case(2;3;4){$result[$n2]}
	}
}

а какая ветка здесь не использует $result?
#7Misha v.3
28.07.11 01:01
www.parser.ru → | ответить → | в избранное →

здесь с result всё нормально, т.е. считаю, что данный код не содержит ошибок.

но вот эти .right(), в случае utf-8, совсем не быстрые операции.
#8skiv
→ Misha v.3 [#5] | 28.07.11 09:54
www.parser.ru → | ответить → | в избранное →
Проверено, "хак" работает...
Насчет следующих версий вы правы, пожалуй стоит делать как положено по доке.
Страницы форума: ← Назад | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 600 | Дальше →