Changeset 3864
- Timestamp:
- Jul 23, 2008, 3:34:11 PM (12 years ago)
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
devel-tools/trunk/eclipse/org.refal.rfpdt.core/src/org/refal/rfpdt/compiler/RefalASGenerator.java
r3851 r3864 117 117 public void visit (AstFuncDecl astFuncDecl, Expr.Concatenator e) { 118 118 Expr.Concatenator items = Expr.getConcatenator(); 119 if (astFuncDecl.funcDef instanceof AstNative)120 items.toRight(NATIVE);121 119 if (astFuncDecl.funcDef == null) 122 120 items.toRight(IMPORT); … … 134 132 astFuncDecl.outFormat.accept(this, outFormat); 135 133 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) { 139 140 Expr.Concatenator body = Expr.getConcatenator(); 140 141 body.toRight(BRANCH); -
to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_asail_cpp.rf
r3634 r3864 120 120 (s.tag UNDEF e) = ; 121 121 (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)) = 123 123 <Del_Pragmas <Gener_Var_Indices 1 (<Vars e.in>) 'arg'>> : e.rfArg s, 124 124 <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 121 121 (s.tag IMPORT e) = /*empty*/; 122 122 (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>; 124 124 (s.tag s.linkage t.name (e.args) (e.ress) e.body), 125 125 s.tag : \{ -
to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_asail_jbc.rf
r3761 r3864 995 995 Module_Item_To_JBC { 996 996 (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>; 998 998 (s.tag s.linkage t.qname (e.args) (e.ress) e.body), 999 999 s.tag : \{ -
to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_asail_tpp.rf
r3774 r3864 144 144 (s.tag UNDEF e) = ; 145 145 (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)) = 147 147 <Del_Pragmas <Gener_Var_Indices 1 (<Vars e.in>) 'arg'>> : e.rfArg s, 148 148 <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 131 131 (BRANCH t e.Snt1) = 132 132 <Satisfies_Format (e.InFormat) (e.OutFormat) e.Snt1> (); 133 (NATIVE e) = /*empty*/ (); 133 134 (Comp Branch) = /*empty*/ (); 134 135 }; -
to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfp_compile.rf
r3667 r3864 87 87 88 88 /* 89 * Ящик для объявлений статических функций, констант и объектов. Все они90 * выписываются в самом начале тела модуля.89 * О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫ О©╫О©╫О©╫ 90 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫. 91 91 */ 92 92 $box Declarations; … … 130 130 (EXTERN t.name) = 131 131 <Put &Declarations (EXTERN t.name)>; 132 (NATIVE e) =133 t.item;132 // (NATIVE e) = 133 // t.item; 134 134 (s.link s.tag t.name (e.in) (e.out) e.body), FUNC "FUNC?" TFUNC : e s.tag e = 135 135 { 136 136 e.body : (BRANCH e.branch) = 137 137 <Comp_Func s.link s.tag t.name (e.in) (e.out) e.branch>; 138 e.body : (NATIVE e) = 139 t.item; 138 140 <Comp_Func s.link s.tag t.name (<Gener_Vars (e.in) "arg">) (e.out)>; 139 141 }; … … 684 686 685 687 /* 686 * О беспечивает, что сгенерированные препроцессорами переменные (с именами,687 * оканчивающимися на число) не пересекаются с программными переменными (за688 * счёт того, что таг будетVAR).688 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, 689 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫) О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫ 690 * О©╫чёО©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ VAR). 689 691 */ 690 692 Prepare_Vars { … … 702 704 703 705 /* 704 * Генерируем уникальные внутри модуля имена для функций-заглушек.706 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 705 707 */ 706 708 Stub_Name (e.qualifiers s.name) = … … 773 775 774 776 /* 775 * Итак, e.vars -- все переменные, входящие в форматное выражение. Каждая776 * переменная может входить в форматное выражение только один раз, поэтому777 * повторяющихся среди них нет.778 * e.splited-Re -- набор результатных выражений. На каждую переменную из779 * e.vars по выражению, которое должно быть ей присвоено.777 * О©╫О©╫О©╫О©╫, e.vars -- О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫ 778 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ 779 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫. 780 * e.splited-Re -- О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ 781 * e.vars О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 780 782 * 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 * О©╫О©╫О©╫О©╫О©╫О©╫: 787 789 * 788 790 * t1 (t1 t2) (t1 t3) :: t2 t1 t3 … … 793 795 * t2 = aux_1; 794 796 * 795 * В общем случае вспомогательная переменная требуется, если двум переменным796 * необходимы старые значения друг друга (возможно, не напрямую, а через797 * промежуточные переменные).798 * 799 * Вместо того, чтобы искать и анализировать такие циклы, будем действовать по800 * методу "наибольшей пользы". А именно:797 * О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ 798 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫ 799 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫). 800 * 801 * О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ 802 * О©╫О©╫О©╫О©╫О©╫О©╫ "О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫". О©╫ О©╫О©╫О©╫О©╫О©╫О©╫: 801 803 * 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 * О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫: 828 830 * 829 831 * t1 (t1 t2) (t1 t3) :: t2 t1 t3 … … 834 836 * 835 837 * 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. 839 841 * 840 842 * Res-vars <- <Map &Vars (Res)> … … 884 886 885 887 /* 886 * Если есть переменная, у которой список provide пуст, её можно посчитать.887 * Это выражается в том, что она (вместе с присваиваемым значением) добавляется888 * в список assigns, убирается из списка vars, а также из всех списковprovide889 * и delayed. В списках require её не было.888 * О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ provide О©╫О©╫О©╫О©╫, её О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 889 * О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫) О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ 890 * О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ assigns, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ vars, О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ provide 891 * О©╫ delayed. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ require её О©╫О©╫ О©╫О©╫О©╫О©╫. 890 892 * 891 893 * 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 О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 894 896 * vars = vars - var_i 895 897 * provide = [ provide_j - i | provide_j <- provide ] … … 915 917 916 918 /* 917 * Если есть переменная, у которой список require пуст, кладём её вdelayed.918 * О на будет посчитана, когда у неё опустеет список provide, т.е. когда не919 * останется переменных, у которых она в спискеrequire.919 * О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ require О©╫О©╫О©╫О©╫, О©╫О©╫О©╫дёО©╫ её О©╫ delayed. 920 * О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫её О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ provide, О©╫.О©╫. О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ 921 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ require. 920 922 */ 921 923 $func Delay_Empty_Requires e.vars = e.delayed (e.vars); … … 930 932 931 933 /* 932 * Выбор переменной (из двух) с более длинным списком требуемых ей значений.934 * О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫ О©╫О©╫О©╫О©╫) О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 933 935 */ 934 936 $func Max_Require e = e; … … 944 946 945 947 /* 946 * Подставить вспомогательную переменную вместо исходной во всех результатных выражениях.947 * Присваивание к исходной переменной убрать (оно к этому моменту уже выполнено).948 * Убрать переменную из списков зависимостей.948 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 949 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫). 950 * О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 949 951 */ 950 952 $func Subst_Aux_Var e = e; … … 962 964 963 965 /* 964 * Извлечь присваивание из всей информации о переменной.966 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 965 967 */ 966 968 $func Extract_Assigns e = e; … … 969 971 970 972 /* 971 * О сновной цикл обработки присваиваний.972 * 973 * 1) Из всех переменных (в том числе и отложенных), от которых больше ничего974 * не зависит, сделать присваивания.975 * 2) Все переменные, которые больше ни от чего не зависят, отложить.976 * 3) Если осталось хотя бы две неотложенных переменных, выбирать из них ту,977 * которая зависит от наибольшего числа переменных, подставить везде вместо978 * неё вспомогательную, перейти к пункту1.973 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 974 * 975 * 1) О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫), О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ 976 * О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 977 * 2) О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 978 * 3) О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫, 979 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ 980 * О©╫её О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ 1. 979 981 */ 980 982 CAV e.vars (e.assigns) (e.delayed) = … … 996 998 997 999 998 //***************** Компиляция сопоставления с образцом*******************1000 //***************** О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ ******************* 999 1001 1000 1002 Get_Clash_Sequence (e.last_Re) t.Pattern e.Snt = … … 1002 1004 e.Snt : (RESULT e.Re) (s.dir e.Pe) e.rest = 1003 1005 /* 1004 * Компилируем все константные выражения и заводим в табличке все1005 * незаведённые переменные. У старых переменных очищается память1006 * на предмет клешей, в которых они раньше использовались.1006 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ 1007 * О©╫О©╫О©╫О©╫О©╫О©╫дёО©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ 1008 * О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 1007 1009 */ 1008 1010 <Prepare_Res (e.Re) (e.Pe)> : (e.R1) (e.P1), … … 1059 1061 <CC_Unknown_Lengths t.end_cycle e.clashes> :: e.conds, 1060 1062 /* 1061 * Когда мы добрались до сюда, все условия на длины на текущем уровне1062 * выписаны. Невыполнение любого из оставшихся условий (на1063 * соответствие типов, равенство, длины внутри скобок) ведёт не к1064 * прекращению текущего цикла, а переход к его следующей итерации.1065 * Поэтому в качестве t.end-cycle везде дальше подставляется текущий1066 * откат.1063 * О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ 1064 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫ 1065 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫) О©╫О©╫дёО©╫ О©╫О©╫ О©╫ 1066 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. 1067 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ t.end-cycle О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ 1068 * О©╫О©╫О©╫О©╫О©╫. 1067 1069 */ 1068 1070 <Update_Hard_Parts> : { … … 1208 1210 1209 1211 /* 1210 * Информацию о проверках и заведении переменных, необходимых для создания1211 * клешей из содержимого скобок, кодируем наASAIL.1212 * О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ 1213 * О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ ASAIL. 1212 1214 */ 1213 1215 CC_Deref (e.fail) e.actions, e.actions : { … … 1251 1253 { 1252 1254 /* 1253 * Мы предполагаем, что во всех пришедших e.eqs всеe.Re1254 * уже были определены ранее.1255 * О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ e.eqs О©╫О©╫О©╫ e.Re 1256 * О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫. 1255 1257 */ 1256 1258 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 457 457 s.linkage; 458 458 } :: 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)) 460 460 e.trace; 461 461 -
to-imperative/trunk/compiler/refal/org/refal/plus/compiler/rfpc.rf
r3850 r3864 460 460 e.Items : e t.Item e, t.Item : \{ 461 461 { 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); 466 466 (s.Linkage s.ItemType (PRAGMA (e) e) t.ItemName e.ItemBody) = 467 467 (s.Linkage s.ItemType t.ItemName e.ItemBody);
Note: See TracChangeset
for help on using the changeset viewer.