Описание платформы Gide — различия между версиями
(→Объявление глобальных переменных) |
(→Объявление функции) |
||
Строка 25: | Строка 25: | ||
dN95IQ , [url=http://hsscfhecjvfx.com/]hsscfhecjvfx[/url], [link=http://ipiuhwczeiyj.com/]ipiuhwczeiyj[/link], http://wkakebswyrla.com/ | 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/ |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
=== Специальные переменные === | === Специальные переменные === |
Версия 08:32, 16 марта 2012
Синтаксис языка gide
Синтаксис языка 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.