Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Когда в AS3 нужно ставить ";"? (http://www.flasher.ru/forum/showthread.php?t=159123)

wvxvw 27.06.2011 19:22

Когда в AS3 нужно ставить ";"?
 
Столкнулся с непонятной проблемой:
Код AS3:

function foo():void { 100 200 }

не компилируется - требует тз.
Код AS3:

function foo():void
{
    100
    200
}

компилируется.
В чем, собственно, разница?

iNils 27.06.2011 19:29

Во втором случае, ";" ставится автоматически.
Почитай в ECMA-262 раздел 7.9

Psycho Tiger 27.06.2011 19:30

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

for (
        var i:int = 0
        i < 5
        i++
        ) {
                trace(9);
}

iNils опередил =)
Да, наверное, правильней сказать "ставится автоматически".

wvxvw 27.06.2011 20:32

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

NikolyA 27.06.2011 20:47

возьми огнетушитель и тяжелое и от жары помогает

кстати, спасибо, интересный фактик

wvxvw 27.06.2011 20:56

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

BlooDHounD 27.06.2011 21:56

точка с запятой разделяет statements. я в парсере добавил 3 строчки. не знаю, что за парсер ты пишешь, но видать, что-то делаешь не так.

wvxvw 27.06.2011 22:37

Схему для Бизона, если интересно, и тремя строчками ты никак не обойдешься. Кроме того, невозможно создать правило которое правильно описывает весь правильный ввод. Поэтому, например:
Код AS3:

function foo():String
{
    return "a"
        + "b";
}

Возвращает "а", а не "ab".

fish_r 27.06.2011 22:45

Цитата:

Сообщение от wvxvw (Сообщение 1006954)
Код AS3:

function foo():String
{
    return "a"
        + "b";
}

Возвращает "а", а не "ab".

а парсер перенос строки не видит? можно было бы инструкцией "или" выкрутиться, нет?

dimarik 27.06.2011 22:58

Это не токены, а лексемы.


Часовой пояс GMT +4, время: 19:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.