Описание платформы Gide

Материал из Deeptown Manual
Перейти к: навигация, поиск

Синтаксис языка 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.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
информация
документация
Инструменты