![]() |
Когда в AS3 нужно ставить ";"?
Столкнулся с непонятной проблемой:
Код AS3:
Код AS3:
В чем, собственно, разница? |
Во втором случае, ";" ставится автоматически.
Почитай в ECMA-262 раздел 7.9 |
Точка с запятой отделяет друг от друга команды. Но так сложилось, что перенос строки, точка с запятой вещи взаимозаменяемые в приведенном случае. Но не во всех. Например, так нельзя:
Код AS3:
Да, наверное, правильней сказать "ставится автоматически". |
Ох, спасибо. Очень захотелось чем-нибудь тяжелым по голове, того, кто стандарт писал. На ровном месте, блин такой маразм придумать... токены нарушители, ***...
|
возьми огнетушитель и тяжелое и от жары помогает
кстати, спасибо, интересный фактик |
Спасибо за дельный совет. А то, что изза этой никому не нужной возможности в парсере нужно добавить несколько сотен строк кода вам, я так понимаю, в голову не пришло.
|
точка с запятой разделяет statements. я в парсере добавил 3 строчки. не знаю, что за парсер ты пишешь, но видать, что-то делаешь не так.
|
Схему для Бизона, если интересно, и тремя строчками ты никак не обойдешься. Кроме того, невозможно создать правило которое правильно описывает весь правильный ввод. Поэтому, например:
Код AS3:
|
Цитата:
|
Это не токены, а лексемы.
|
Это вы расскажите дюжине подписавшихся под ECMAScript документами. Они это токеном назвали.
Ну просто зло берет, когда изза какого-то идиотизма приходится делать кучу работы, которая ну ничего же не улучшит. И, сорри, я вообще злой такой, потому что сегодня еще и спецификацию XMPP читал, и его очевидно прийдтся воплощать в жизнь. Такое впечатление, что интернет был придуман религиозной сектой марсиан аутистов-мазoхистов... fish_r: Проблема не в том, что не видит, а в том, что +"b" - вполне себе валидное выражение, и с точки зрения парсера, имеет место быть два выражения идущие подряд, а не одно с переносом строки посередине. А вот если перенести плюс на первую строчку, тогда выражение "a"+ будет невалидным, и парсер продолжит читать на следующей строчке. Но еще большая проблема в том, что нет однозначности в том, что считать переносом строки, и если, например, кто-то автоматом сделал мердж, и в части кода строки заканчиваются по-одному, а в другой - по-другому, тогда можно получить какие-то вообще необъяснимые баги, опять же, на ровном месте.... |
по поводу ES самый умный Олег на свете как всегда не прав в очевидных случаях. в ES у токенизера есть такой необычный метод isSemicolon, или типа того. в общем стукнись, я тебе дзен открою.
Добавлено через 5 минут а ваще почитай кнута. у тебя пробелы в теории компиляторов. |
Блуд, не спорь пожалуйста. Это к компилятору имеет только косвенное отношение, т.как компиляторы тоже используют парсеры. В данном случае я делаю LL(1), вернее, пытаюсь сделать LL(1) парсер, а вот изза такого замечательного планирования это оказалось невозможно. И как бы методов там в принципе быть не может / это не от той стенки гвозди... я вообще говорил про правила вида A -> B | C.
PS. http://www.youtube.com/watch?v=6QI9gF95UxA ;) |
ANTLR пробовал?
|
Давно когда-то, и умаялся настраивать (но пробовал для других целей, для генерации а не парсинга) + Metaas. Bison проще в обращении (никаких заморочек с Явой не нужно) и как бы по-серьезнее будет :).
|
я в качестве примера. они генерят парсеры.
|
Встречал фразы "генераторы компиляторов", "генераторы трансляторов". А вот с преступником Фунтиком я не знаком.
Парсер по мнению Википедии занимается синтаксическим анализом. Компилятор довольно сложная штука, включающая лексический анализ, синтаксический анализ и семантический анализ ) |
http://www.gnu.org/software/bison/ - Знакомтесь, Bison, GNU parser generator :) Что он делает - берет набор правил описаных на его собственном языке (очень напоминающем значки которые используют для описания контекстно-независимых грамматик), и на основании этих правил генерирует парсрер (на Си). Для чего можно было бы использовать: примитивный, но очень быстрый поиск ошибок в исходниках, подсветка кода. Если совершить подвиг и прицепить к нему еще каких-нибудь утилит, то можно было бы, например AS3 байткод оптимизировать с помощью gcc... но это уже для меня очень сильное колдунство :)
|
Ладно, почитаю еще. Очень интересная тема.
|
| Часовой пояс GMT +4, время: 14:18. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.