>>  <<  Ркв  Ввд  JfC  LJ  Фрз  Слв  Изм  Рзг  !:  Помощь  Словарь

E. Разбор и Выполнение

Предложение обрабатывается путем выполнения его фраз в порядке, предписанном правилами разбора языка. Например, в предложении 10%3+2 , фраза 3+2 выполняется первой и производит результат, на который впоследствии делится 10. В общем:
1. Выполнение продвигается справа налево, кроме случаев, когда встречена правая скобка. При нахождении скобки, выполняется сегмент, ограниченный ей и соответствующей левой скобкой; результат этого выполнения заменяет целый сегмент, включая ограничивающие его скобки.
2. Наречия и союзы выполняются перед глаголами; фраза ,"2-a эквивалентна (,"2)-a , но не ,"(2-a) . Более того, левым аргументом, наречия или союза считается целое предшествующее ему глагольное выражение. Таким образом, в выражении +/ . */b , самое правое наречие / применяется к глаголу, представленному фразой +/ . * , не к глаголу * .
3. Если возможно, глагол применяется диадно; тоесть, если перед ним стоит существительное, не являющееся правым аргументом союза.
4. Некоторые цепочки составляют глаголы и наречия, как описано в § F.
5. Для соответствия этих общих правил точным, приведенным ниже, может быть необходимым заключить в скобки фразы из наречий и союзов, производящие результаты, не являющиеся существительными или глаголами.
Важное следствие этих правил состоит в том, что, в выражении без скобок, правым аргументом любого глагола является результат всей фразы, стоящей справа от него. Предложение 3*p%q^|r-5 можно, таким образом, прочитать слева направо как: общий результат есть 3 умножить на результат остальной фразы, который есть частное от p и фразы после % , и т.д.

Разбор производится путем перемещения последовательных элементов (или их значений кроме случая именованных глаголов и имен, стоящих непосредственно слева от присваивания) с конца очереди (в нее изначально помещается маркер §, а потом исходное предложение целиком) на вершину стека (содержащего в начале четыре маркера), с последующим выполнения некоторой, готовой для выполнения, части стека, заменяя ее результатом выполнения. Например, если a=: 1 2 3, то выражение b=:+/2*a будет разобрано и выполнено следующим образом (четыре маркера внизу стека не показаны):
   § b =: + / 2 * a
   § b =: + / 2 *            1 2 3      следующий
   § b =: + / 2           *  1 2 3      следующий
   § b =: + /          2  *  1 2 3      следующий
   § b =: +         /  2  *  1 2 3      следующий
   § b =: +               /  2 4 6    2 Диада
   § b =:              +  /  2 4 6      следующий
   § b             =:  +  /  2 4 6      следующий
   § b               =:  +/  2 4 6    3 Наречие
   § b                      =:  12    0 Монада
   §                     b  =:  12      следующий
   §                            12    7 Есть
                              § 12
Этот пример иллюстрирует два момента: 1) Выполнение фразы 2 * 1 2 3 откладывается до тех пор, пока в стек не передается следующий элемент (наречие /); если бы этот элемент был союзом, то 2 было бы его аргументом, и монада * была бы применена к 1 2 3. 2) В то время как значение имени a перемещается в стек, имя b (поскольку оно предшествует присваиванию) помещается как есть и получает значение 12.

Разбор можно проследить при помощи трассировки в system\packages\misc\trace.ijs .

Выполнение в стеке ограничивается исключительно его первыми четырьмя элементами; готовность к исполнению определяется только классом каждого элемента (существительное, глагол, и т.д., неприсвоенное имя считается глаголом), как описано в следующей таблице разбора. Классы первых четырех элементов стека сравниваются с первыми четырьмя столбцами таблицы, при этом выбирается первая строка, для которой происходит совпадение во всех четырех столбцах. Потом, над выделенными жирным курсивом элементами этой строки производится действие, указанное в пятом столбце, и они заменяются полученным результатом. Если ни одна строка не дает совпадения, на вершину стека помещается следующий элемент из очереди.

РАЗД. ГЛАГОЛ СУЩ. ЛЮБОЕ     0 Монада
РАЗД.+НГС ГЛАГОЛ ГЛАГОЛ СУЩ. 1 Монада
РАЗД.+НГС СУЩ. ГЛАГОЛ СУЩ. 2 Диада
РАЗД.+НГС ГЛАГОЛ+СУЩ. НАРЕЧИЕ ЛЮБОЕ 3 Наречие
РАЗД.+НГС ГЛАГОЛ+СУЩ. СОЮЗ ГЛАГОЛ+СУЩ. 4 Союз
РАЗД.+НГС ГЛАГОЛ+СУЩ. ГЛАГОЛ ГЛАГОЛ 5 Вилка
РАЗД. СНГС СНГС ЛЮБОЕ 6 Крючок
ИМЯ+СУЩ ПРИСВ. СНГС ЛОБОЕ 7 Есть
Л.СКОБКА СНГС П.СКОБКА ЛЮБОЕ 8 Скобки

Где:   НГС означает   НАРЕЧИЕ+ГЛАГОЛ+СУЩ.
СНГС означает   СОЮЗ+НАРЕЧИЕ+ГЛАГОЛ+СУЩ.
РАЗД. означает   МАРКЕР+ПРИСВ.+Л.СКОБКА



>>  <<  Ркв  Ввд  JfC  LJ  Фрз  Слв  Изм  Рзг  !:  Помощь  Словарь