|
|
| Строка 1: |
Строка 1: |
| − | == Синтаксис языка gide ==
| + | rP5rwS <a href="http://whfxehceydni.com/">whfxehceydni</a>, [url=http://legvbmkldrdf.com/]legvbmkldrdf[/url], [link=http://sxhzjkaeolig.com/]sxhzjkaeolig[/link], http://urrdcadofzxu.com/ |
| − | | + | |
| − | Синтаксис языка Gide максимально упрощен - с рассчетом на то, что поверх него будут писаться реализации языков более высокого уровня.
| + | |
| − | | + | |
| − | Каждая непустая строка исходного кода gide - это некоторая инструкция, записанная в следующей форме:
| + | |
| − | ключевое_слово аргумент1, аргумент2, ..., аргументN
| + | |
| − | | + | |
| − | Некоторые инструкции допустимы только за пределами тела функции, некоторые, наоборот, допустимы только внутри тела функции.
| + | |
| − | | + | |
| − | Аргументы для инструкции - это произвольные текстовые строки. Если значение аргумента содержит управляющие символы (пробел, табуляция, перевод строки, запятая, символы # или ") - его необходимо заключить в двойные кавычки. Внутри таких кавычек также допустимы escape-последовательности \r, \n, \t, \" и \\.
| + | |
| − | | + | |
| − | '''ЗАМЕЧАНИЕ''': вставка произвольных символов \xNN на данный момент не поддерживается, но запланирована на будущее.
| + | |
| − | | + | |
| − | Весь текст от символа # и до конца строки - комментарий, он игнорируется.
| + | |
| − | | + | |
| − | Внутри тела функции также возможно вставлять т.н. '''метки'''. Метка - это некоторая уникальная в пределах данной функции ссылка на инструкцию. Метка выглядит следующим образом:
| + | |
| − | имя_метки:
| + | |
| − | | + | |
| − | Она может быть записана как на отдельной строке, так и на строке с инструкцией.
| + | |
| − | | + | |
| − | If I were a Teenage Mutant Ninja Turtle, now I'd say "Kowbagnua, dude!"
| + | |
| − | | + | |
| − | sq01wB <a href="http://lurdaylsgcto.com/">lurdaylsgcto</a>
| + | |
| − | | + | |
| − | dN95IQ , [url=http://hsscfhecjvfx.com/]hsscfhecjvfx[/url], [link=http://ipiuhwczeiyj.com/]ipiuhwczeiyj[/link], http://wkakebswyrla.com/
| + | |
| − | | + | |
| − | 3F4Z3f , [url=http://psdcxjoskizh.com/]psdcxjoskizh[/url], [link=http://lzyyfntpiflc.com/]lzyyfntpiflc[/link], http://lzzbwlvjaldl.com/
| + | |
| − | | + | |
| − | === Специальные переменные ===
| + | |
| − | | + | |
| − | Существует 6 зарезервированных имен переменных:
| + | |
| − | * '''0''' (число ноль) - означает отсутствие объекта;
| + | |
| − | * '''@true''' - указывает на специальный объект "истина". Этот объект не имеет полей и методов; он бывает полезен для написания логических конструкций;
| + | |
| − | * '''@false''' - то же, что и 0;
| + | |
| − | * '''@this''' - внутри функции-метода, указывает на текущий объект; внутри обычной функции равен 0;
| + | |
| − | * '''@result''' - результат последней вызванной функции или оператора '''access''';
| + | |
| − | * '''@exception''' - объект исключения, которое требуется обработать.
| + | |
| − | | + | |
| − | That's what we've all been wiaitng for! Great posting!
| + | |
| − | | + | |
| − | === Обработка исключений ===
| + | |
| − | | + | |
| − | '''Исключения''' - это специальный механизм, предназначенный для передачи информации об ошибках. Он заключается в следующем.
| + | |
| − | | + | |
| − | Любая функция может бросить исключение. Само исключение - это некоторый объект произвольного класса. Когда такое происходит, виртуальная машина начинает искать ближайший обработчик исключений. Если сама функция, бросившая исключение, может его обработать - исполнение передается соответствующей инструкции. В противном случае, начинается раскрутка стека вызовов до первой функции, которая может обработать исключение. Если ни одна функция этого сделать не может, выполнение программы прекращается, а вызвавшему модулю сообщается о необработанном исключении.
| + | |
| − | | + | |
| − | В функции может быть установлено несколько обработчиков исключений, которые формируют стек. Обработчик - это некоторая метка в пределах функции. Когда функции требуется обработать исключение, управление передается оператору, на который ссылается эта метка, а сама эта метка извлекается из стека обработчиков. Другими словами, в функции может быть установлено несколько обработчиков, которые, при необходимости, будут вызываться в порядке, обратном их установке. Если же возникает исключение, а в функции не установлено ни одного обработчика - происходит выход из функции, а исключение передается функции, которая вызвала данную функцию, и т.д.
| + | |
| − | | + | |
| − | Для работы с исключением существуют следующие четыре оператора:
| + | |
| − | | + | |
| − | throw ''переменная''
| + | |
| − | | + | |
| − | : кидает исключение, передав в качестве параметра объект, на который ссылается ''переменная''.
| + | |
| − | | + | |
| − | except_push ''имя_метки''
| + | |
| − | | + | |
| − | : добавляет метку ''имя_метки'' в стек обработчиков исключений для данной функции. Когда возникает исключение, управление передается указанной метке, а объект исключения записывается в специальную переменную '''@exception'''.
| + | |
| − | | + | |
| − | except_pop
| + | |
| − | | + | |
| − | : изымает из стека обработчиков метку, находящуюся на вершине стека.
| + | |
| − | | + | |
| − | except_clr
| + | |
| − | | + | |
| − | : очищает стек обработчиков исключений для данной функции.
| + | |
| − | | + | |
| − | Кроме оператора '''throw''', исключения могут кидаться неуправляемыми модулями. Кроме того, существует механизм, при помощи которого ошибки, возникающие на уровне самой виртуальной машины, передаются в стандартную библиотеку, которая кидает исключение.
| + | |
| − | | + | |
| − | Furrealz? That's marveolusly good to know.
| + | |