Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4867 | leency | 1 | ( Из Баранова: |
2 | Стек данных как универсальное средство для передачи параметров и результатов |
||
3 | между форт-словами имеет неоспоримые преимущества. Вместе с тем внутри |
||
4 | определения он используется для промежуточных вычислений и размещения значений, |
||
5 | которые в них участвуют. Это вызывает определенные трудности для доступа к |
||
6 | такому локальному значению, поскольку его положение относительно вершины стека |
||
7 | постоянно меняется. |
||
8 | Для упрощения работы желательно закрепить за локальным объектами внутри |
||
9 | определения некоторые постоянные имена, через которые и осуществлять доступ к |
||
10 | ним. |
||
11 | Имеющийся в языке механизм описания переменных в данном случае не подходит, |
||
12 | поскольку создает глобальные имена, тогда как требуется именовать локальные |
||
13 | объекты, учитывая при этом возможность рекурсивных вызовов. Поставленную задачу |
||
14 | решает включение в работу дополнительного стека, отличного от стека данных. |
||
15 | Локальные значения размещаются в этом стеке при входе в определение и убираются |
||
16 | из него при выходе. |
||
17 | На все время исполнения определения их положение относительно вершины стека |
||
18 | остается постоянным, это позволяет организовать очень простой доступ к таким |
||
19 | значениям. |
||
20 | Простейшая надстройка над языком Форт, которая позволяет работать с локальными |
||
21 | переменными, выглядит так:) |
||
22 | |||
23 | |||
24 | 100 ALLOT HERE CONSTANT LP0 ( НАЧАЛО ЛОК.СТЕКА) |
||
25 | VARIABLE LP ( ТЕКУЩАЯ ВЕРШИНА ЛОКАЛЬНОГО СТЕКА) |
||
26 | : INITLP ( ->) LP0 LP ! ; INITLP |
||
27 | : LOC ( N:СЧЕТЧИК->) 1+ CELLS LP @ OVER - DUP LP ! ! ; |
||
28 | : UNLOC ( ->) LP @ @ LP +! ; |
||
29 | : @@ ( N:СМЕЩ->) CREATE , DOES> ( PFA->A) @ CELLS LP @ + @ ; |
||
30 | : !! ( N:СМЕЩ->) CREATE , DOES> ( A,PFA->) @ CELLS LP @ + ! ; |
||
31 | |||
32 | 1 @@ @1 2 @@ @2 3 @@ @3 4 @@ @4 5 @@ @5 ( И Т.Д.) |
||
33 | |||
34 | 1 !! !1 2 !! !2 3 !! !3 4 !! !4 5 !! !5 ( И Т.Д.) |