Changeset 3864


Ignore:
Timestamp:
Jul 23, 2008, 3:34:11 PM (12 years ago)
Author:
yura
Message:
  • (NATIVE s.linkage s.tag t.pragma (e.qname) t.in t.out e.value2) -> (s.linkage s.tag t.pragma (e.qname) t.in t.out (NATIVE e.value2))
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • devel-tools/trunk/eclipse/org.refal.rfpdt.core/src/org/refal/rfpdt/compiler/RefalASGenerator.java

    r3851 r3864  
    117117    public void visit (AstFuncDecl astFuncDecl, Expr.Concatenator e) {
    118118        Expr.Concatenator items = Expr.getConcatenator();
    119         if (astFuncDecl.funcDef instanceof AstNative)
    120             items.toRight(NATIVE);
    121119        if (astFuncDecl.funcDef == null)
    122120            items.toRight(IMPORT);
     
    134132        astFuncDecl.outFormat.accept(this, outFormat);
    135133        items.toRight((Comparable<?>) outFormat.yield());
    136         if (astFuncDecl.funcDef instanceof AstNative)
    137             items.toRight(((AstNative) astFuncDecl.funcDef).right.identifier);
    138         else if (astFuncDecl.funcDef instanceof AstFuncDef) {
     134        if (astFuncDecl.funcDef instanceof AstNative) {
     135            Expr.Concatenator body = Expr.getConcatenator();
     136            body.toRight(NATIVE);
     137            body.toRight(((AstNative) astFuncDecl.funcDef).right.identifier);
     138            items.toRight((Comparable<?>) body.yield());
     139        } else if (astFuncDecl.funcDef instanceof AstFuncDef) {
    139140            Expr.Concatenator body = Expr.getConcatenator();
    140141            body.toRight(BRANCH);
  • to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_asail_cpp.rf

    r3634 r3864  
    120120    (s.tag UNDEF e) = ;
    121121    (LINENUMBER sN) = ;
    122     (NATIVE s.linkage s.tag (e.name) (e.in) (e.out) e.native) =
     122    (s.linkage s.tag (e.name) (e.in) (e.out) (NATIVE e.native)) =
    123123        <Del_Pragmas <Gener_Var_Indices 1 (<Vars e.in>) 'arg'>> : e.rfArg s,
    124124        <Del_Pragmas <Gener_Var_Indices 1 (<Vars e.out>) 'res'>> : e.rfRes s,
  • to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_asail_java.rf

    r3749 r3864  
    121121    (s.tag IMPORT e) = /*empty*/;
    122122    (LINENUMBER sN) = /*empty*/;
    123     (NATIVE s.linkage s.tag t.qname (e.in) (e.out) e.native) = <WrapGen s.linkage s.tag t.qname (e.in) (e.out) e.native>;
     123    (s.linkage s.tag t.qname (e.in) (e.out) (NATIVE e.native)) = <WrapGen s.linkage s.tag t.qname (e.in) (e.out) e.native>;
    124124    (s.tag s.linkage t.name (e.args) (e.ress) e.body),
    125125      s.tag : \{
  • to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_asail_jbc.rf

    r3761 r3864  
    995995Module_Item_To_JBC {
    996996  (s.tag IMPORT e) = /*empty*/;
    997   (NATIVE s.linkage s.tag t.qname (e.in) (e.out) e.native) = <WrapGen s.linkage s.tag t.qname (e.in) (e.out) e.native>;
     997  (s.linkage s.tag t.qname (e.in) (e.out) (NATIVE e.native)) = <WrapGen s.linkage s.tag t.qname (e.in) (e.out) e.native>;
    998998  (s.tag s.linkage t.qname (e.args) (e.ress) e.body),
    999999    s.tag : \{
  • to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_asail_tpp.rf

    r3774 r3864  
    144144    (s.tag UNDEF e) = ;
    145145    (LINENUMBER sN) = ;
    146     (NATIVE s.linkage s.tag (e.name) (e.in) (e.out) e.native) =
     146    (s.linkage s.tag (e.name) (e.in) (e.out) (NATIVE e.native)) =
    147147        <Del_Pragmas <Gener_Var_Indices 1 (<Vars e.in>) 'arg'>> : e.rfArg s,
    148148        <Del_Pragmas <Gener_Var_Indices 1 (<Vars e.out>) 'res'>> : e.rfRes s,
  • to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_check.rf

    r3589 r3864  
    131131        (BRANCH t e.Snt1) =
    132132          <Satisfies_Format (e.InFormat) (e.OutFormat) e.Snt1> ();
     133        (NATIVE e) = /*empty*/ ();
    133134        (Comp Branch) = /*empty*/ ();
    134135      };
  • to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_compile.rf

    r3667 r3864  
    8787
    8888/*
    89  * Ящик для объявлений статических функций, констант и объектов.  Все они
    90  * выписываются в самом начале тела модуля.
     89 * О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.  О©╫О©╫О©╫ О©╫О©╫О©╫
     90 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.
    9191 */
    9292$box Declarations;
     
    130130        (EXTERN t.name) =
    131131          <Put &Declarations (EXTERN t.name)>;
    132         (NATIVE e) =
    133           t.item;
     132//        (NATIVE e) =
     133//          t.item;
    134134        (s.link s.tag t.name (e.in) (e.out) e.body), FUNC "FUNC?" TFUNC : e s.tag e =
    135135          {
    136136            e.body : (BRANCH e.branch) =
    137137              <Comp_Func s.link s.tag t.name (e.in) (e.out) e.branch>;
     138            e.body : (NATIVE e) =
     139              t.item;
    138140            <Comp_Func s.link s.tag t.name (<Gener_Vars (e.in) "arg">) (e.out)>;
    139141          };
     
    684686
    685687/*
    686  * Обеспечивает, что сгенерированные препроцессорами переменные (с именами,
    687  * оканчивающимися на число) не пересекаются с программными переменными (за
    688  * счёт того, что таг будет VAR). 
     688 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
     689 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫) О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫
     690 * О©╫чёО©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ VAR). 
    689691 */
    690692Prepare_Vars {
     
    702704
    703705/*
    704  * Генерируем уникальные внутри модуля имена для функций-заглушек.
     706 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
    705707 */
    706708Stub_Name (e.qualifiers s.name) =
     
    773775
    774776/*
    775  * Итак, e.vars -- все переменные, входящие в форматное выражение.  Каждая
    776  * переменная может входить в форматное выражение только один раз, поэтому
    777  * повторяющихся среди них нет.
    778  * e.splited-Re -- набор результатных выражений.  На каждую переменную из
    779  * e.vars по выражению, которое должно быть ей присвоено.
     777 * О©╫О©╫О©╫О©╫, e.vars -- О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.  О©╫О©╫О©╫О©╫О©╫О©╫
     778 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     779 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫.
     780 * e.splited-Re -- О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.  О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
     781 * e.vars О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
    780782 *
    781  * Если переменная t.var_i используется в выражении e.Re_j, и i /= j, то
    782  * переменной t.var_j значение должно быть присвоено раньше, чем перeменной
    783  * t.var_i.  Если же, по аналогичным соображениям, t.var_i должна получить
    784  * значение раньше t.var_j, необходимо завести вспомогательную переменную.
    785  *
    786  * Пример:
     783 * О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ t.var_i О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ e.Re_j, О©╫ i /= j, О©╫О©╫
     784 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ t.var_j О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫eО©╫О©╫О©╫О©╫О©╫О©╫
     785 * t.var_i.  О©╫О©╫О©╫О©╫ О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, t.var_i О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     786 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ t.var_j, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     787 *
     788 * О©╫О©╫О©╫О©╫О©╫О©╫:
    787789 *
    788790 * t1 (t1 t2) (t1 t3) :: t2 t1 t3
     
    793795 * t2 = aux_1;
    794796 *
    795  * В общем случае вспомогательная переменная требуется, если двум переменным
    796  * необходимы старые значения друг друга (возможно, не напрямую, а через
    797  * промежуточные переменные).
    798  *
    799  * Вместо того, чтобы искать и анализировать такие циклы, будем действовать по
    800  * методу "наибольшей пользы".  А именно:
     797 * О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     798 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫
     799 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫).
     800 *
     801 * О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
     802 * О©╫О©╫О©╫О©╫О©╫О©╫ "О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫".  О©╫ О©╫О©╫О©╫О©╫О©╫О©╫:
    801803 *
    802  *   - Для каждой переменной выпишем все другие переменные, которым требуется
    803  *     её старое значение, а также отдельно те, старые значения которых
    804  *     требуются ей.
    805  *
    806  *   - Всем переменным, от старых значений которых ничего не зависит, можно
    807  *     смело присвоить новые значения.  При этом они исчезают из списков
    808  *     зависимостей оставшихся переменных.
    809  *
    810  *   - Все переменные, новые значения которых ни от чего не зависят, можно
    811  *     отложить, чтобы присвоить им значения тогда, когда будет удобно.  Т.е.
    812  *     тогда, когда списки зависящих от них переменных опустеют.
    813  *
    814  *   - Чтобы означить оставшиеся, нужны вспомогательные переменные.  Выберем
    815  *     одну из переменных, с максимальным списком тех, от которых она зависит,
    816  *     и положим её значение во вспомогательную переменную.  Так как мы сразу
    817  *     уменьшили кол-во зависимостей у максимального кол-ва переменных,
    818  *     локально мы добились наибольшей пользы, хотя не исключено, что глобально
    819  *     такой метод и не даст наименьшего кол-ва вспомогательных переменных.
    820  *     Кроме того, мы не пытаемся выбрать наилучшую переменную из нескольких с
    821  *     максимальным списком зависимостей.
    822  *
    823  *   - Повторяем всё это до тех пор, пока у каждой переменной не опустеет
    824  *     список зависящих от неё.
    825  *
    826  *
    827  * Для нашего примера:
     804 *   - О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     805 *     её О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     806 *     О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫.
     807 *
     808 *   - О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫
     809 *     О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.  О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     810 *     О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     811 *
     812 *   - О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫
     813 *     О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.  О©╫.О©╫.
     814 *     О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     815 *
     816 *   - О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.  О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     817 *     О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
     818 *     О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ её О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.  О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
     819 *     О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
     820 *     О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     821 *     О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     822 *     О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫
     823 *     О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     824 *
     825 *   - О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫сё О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     826 *     О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫её.
     827 *
     828 *
     829 * О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫:
    828830 *
    829831 * t1 (t1 t2) (t1 t3) :: t2 t1 t3
     
    834836 *
    835837 *
    836  * Для каждой переменной var_i найдём все j /= i, такие что в Re_j встречается
    837  * var_i -- provide[i], и а также все j /= i, такие что var_j нужна для
    838  * подсчёта var_i, т.е. встречается в Re_i.
     838 * О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ var_i О©╫О©╫О©╫дёО©╫ О©╫О©╫О©╫ j /= i, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ Re_j О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     839 * var_i -- provide[i], О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ j /= i, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ var_j О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫
     840 * О©╫О©╫О©╫О©╫чёО©╫О©╫ var_i, О©╫.О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ Re_i.
    839841 *
    840842 * Res-vars <- <Map &Vars (Res)>
     
    884886
    885887/*
    886  * Если есть переменная, у которой список provide пуст, её можно посчитать.
    887  * Это выражается в том, что она (вместе с присваиваемым значением) добавляется
    888  * в список assigns, убирается из списка vars, а также из всех списков provide
    889  * и delayed.  В списках require её не было.
     888 * О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ provide О©╫О©╫О©╫О©╫, её О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     889 * О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫) О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     890 * О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ assigns, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ vars, О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ provide
     891 * О©╫ delayed.  О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ require её О©╫О©╫ О©╫О©╫О©╫О©╫.
    890892 *
    891893 * CAV Res vars provide require assigns delayed =
    892  *   { i | var_i <- vars, provide_i == [] } ->     // Здесь неверно!  На переменные
    893  *                                                    из delayed тоже надо смотреть.
     894 *   { i | var_i <- vars, provide_i == [] } ->     // О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫!  О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     895 *                                                    О©╫О©╫ delayed О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
    894896 *       vars    = vars - var_i
    895897 *       provide = [ provide_j - i | provide_j <- provide ]
     
    915917
    916918/*
    917  * Если есть переменная, у которой список require пуст, кладём её в delayed.
    918  * Она будет посчитана, когда у неё опустеет список provide, т.е. когда не
    919  * останется переменных, у которых она в списке require.
     919 * О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ require О©╫О©╫О©╫О©╫, О©╫О©╫О©╫дёО©╫ её О©╫ delayed.
     920 * О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫её О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ provide, О©╫.О©╫. О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
     921 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ require.
    920922 */
    921923$func Delay_Empty_Requires e.vars  = e.delayed (e.vars);
     
    930932
    931933/*
    932  * Выбор переменной (из двух) с более длинным списком требуемых ей значений.
     934 * О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫ О©╫О©╫О©╫О©╫) О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
    933935 */
    934936$func Max_Require e = e;
     
    944946
    945947/*
    946  * Подставить вспомогательную переменную вместо исходной во всех результатных выражениях.
    947  * Присваивание к исходной переменной убрать (оно к этому моменту уже выполнено).
    948  * Убрать переменную из списков зависимостей.
     948 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     949 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫).
     950 * О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
    949951 */
    950952$func Subst_Aux_Var e = e;
     
    962964
    963965/*
    964  * Извлечь присваивание из всей информации о переменной.
     966 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
    965967 */
    966968$func Extract_Assigns e = e;
     
    969971
    970972/*
    971  * Основной цикл обработки присваиваний.
    972  *
    973  * 1) Из всех переменных (в том числе и отложенных), от которых больше ничего
    974  *    не зависит, сделать присваивания.
    975  * 2) Все переменные, которые больше ни от чего не зависят, отложить.
    976  * 3) Если осталось хотя бы две неотложенных переменных, выбирать из них ту,
    977  *    которая зависит от наибольшего числа переменных, подставить везде вместо
    978  *    неё вспомогательную, перейти к пункту 1.
     973 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     974 *
     975 * 1) О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫), О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
     976 *    О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     977 * 2) О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     978 * 3) О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫,
     979 *    О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
     980 *    О©╫её О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ 1.
    979981 */
    980982CAV e.vars (e.assigns) (e.delayed) =
     
    996998
    997999
    998 //***************** Компиляция сопоставления с образцом *******************
     1000//***************** О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ *******************
    9991001
    10001002Get_Clash_Sequence (e.last_Re) t.Pattern e.Snt =
     
    10021004    e.Snt : (RESULT e.Re) (s.dir e.Pe) e.rest =
    10031005      /*
    1004        * Компилируем все константные выражения и заводим в табличке все
    1005        * незаведённые переменные.  У старых переменных очищается память
    1006        * на предмет клешей, в которых они раньше использовались.
     1006       * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫
     1007       * О©╫О©╫О©╫О©╫О©╫О©╫дёО©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.  О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
     1008       * О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
    10071009       */
    10081010      <Prepare_Res (e.Re) (e.Pe)> : (e.R1) (e.P1),
     
    10591061    <CC_Unknown_Lengths t.end_cycle e.clashes> :: e.conds,
    10601062    /*
    1061      * Когда мы добрались до сюда, все условия на длины на текущем уровне
    1062      * выписаны.  Невыполнение любого из оставшихся условий (на
    1063      * соответствие типов, равенство, длины внутри скобок) ведёт не к
    1064      * прекращению текущего цикла, а переход к его следующей итерации.
    1065      * Поэтому в качестве t.end-cycle везде дальше подставляется текущий
    1066      * откат.
     1063     * О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
     1064     * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.  О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫
     1065     * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫) О©╫О©╫дёО©╫ О©╫О©╫ О©╫
     1066     * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
     1067     * О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ t.end-cycle О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     1068     * О©╫О©╫О©╫О©╫О©╫.
    10671069     */
    10681070    <Update_Hard_Parts> : {
     
    12081210
    12091211/*
    1210  * Информацию о проверках и заведении переменных, необходимых для создания
    1211  * клешей из содержимого скобок, кодируем на ASAIL.
     1212 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
     1213 * О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ ASAIL.
    12121214 */
    12131215CC_Deref (e.fail) e.actions, e.actions : {
     
    12511253        {
    12521254          /*
    1253            * Мы предполагаем, что во всех пришедших e.eqs все e.Re
    1254            * уже были определены ранее.
     1255           * О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ e.eqs О©╫О©╫О©╫ e.Re
     1256           * О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.
    12551257           */
    12561258          e.assigns : $r e1 (s.op e.arg t.Pt e.def) e2, e.arg : \{ s; /*empty*/; } =
  • to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_parse.rf

    r3792 r3864  
    457457    s.linkage;
    458458  } :: s.linkage,
    459   (NATIVE s.linkage s.tag t.pragma (e.qname) t.in t.out e.value2)
     459  (s.linkage s.tag t.pragma (e.qname) t.in t.out (NATIVE e.value2))
    460460  e.trace;
    461461
  • to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfpc.rf

    r3850 r3864  
    460460    e.Items : e t.Item e, t.Item : \{
    461461      {
    462         (NATIVE s.Linkage s.ItemType (PRAGMA (e) e) t.ItemName e.ItemBody) =
    463           (s.Linkage s.ItemType t.ItemName e.ItemBody);
    464         (NATIVE s.Linkage s.ItemType t.ItemName e.ItemBody) =
    465           (s.Linkage s.ItemType t.ItemName e.ItemBody);
     462//        (NATIVE s.Linkage s.ItemType (PRAGMA (e) e) t.ItemName e.ItemBody) =
     463//          (s.Linkage s.ItemType t.ItemName e.ItemBody);
     464//        (NATIVE s.Linkage s.ItemType t.ItemName e.ItemBody) =
     465//          (s.Linkage s.ItemType t.ItemName e.ItemBody);
    466466        (s.Linkage s.ItemType (PRAGMA (e) e) t.ItemName e.ItemBody) =
    467467          (s.Linkage s.ItemType t.ItemName e.ItemBody);
Note: See TracChangeset for help on using the changeset viewer.