|
|
Строка 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.
| + | |