Языки программирования Оберон и Оберон-2
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
velT), и адрес описателя типа (TypeDescrAdrT) известны во время компиляции. Например, уровень расширения Node - 0 (этот тип не имеет базового типа), а уровень расширения CenterNode равен 1.
Пример программы
(* Print first PRINT digits of e.
*
* Originally written in Pascal by Scott Hemphill
* Rewritten in Oberon-2 and modified by Andrew Cadach
*
*)
MODULE exp;
IMPORT InOut;
CONST
PRINT = 1024;
DIGITS = PRINT + (PRINT+31) DIV 32;
TYPE Number = ARRAY DIGITS+1 OF INTEGER;
VAR
s, x: POINTER TO Number;
xs, i: INTEGER;
PROCEDURE init (VAR x: Number; n: INTEGER);
VAR i: INTEGER;
BEGIN
x[0] := n;
FOR i := 1 TO DIGITS DO x[i] := 0; END
END init;
PROCEDURE divide (VAR x: Number; xs, n: INTEGER;
VAR y: Number; VAR ys: INTEGER);
VAR
i, c: INTEGER;
BEGIN
c := 0;
FOR i := xs TO DIGITS DO
c := 10*c + x[i];
y[i] := c DIV n;
c := c MOD n
END;
ys := xs;
WHILE (ys <= DIGITS) & (y[ys] = 0) DO INC (ys) END
END divide;
PROCEDURE add (VAR s, x: Number; xs: INTEGER);
VAR
i, c: INTEGER;
BEGIN
c := 0;
FOR i := DIGITS TO xs BY -1 DO
INC (c, s[i] + x[i]);
IF c >= 10 THEN
s[i] := c - 10;
c := 1
ELSE
s[i] := c;
c := 0
END
END;
i := xs;
WHILE c # 0 DO
DEC (i);
INC (c, s[i]);
IF c >= 10 THEN
s[i] := c - 10;
c := 1
ELSE
s[i] := c;
c := 0
END
END
END add;
BEGIN
NEW (s);
NEW (x);
init (s^, 0);
init (x^, 1);
xs := 0;
add (s^, x^, xs);
i := 0;
REPEAT
INC (i);
divide (x^, xs, i, x^, xs);
add (s^, x^, xs);
UNTIL xs > DIGITS;
InOut.WriteLn;
InOut.WriteString (" e = ");
InOut.Write (CHR (s^[0]+ORD (0)));
InOut.Write (.);
FOR i := 1 TO PRINT DO
InOut.Write (CHR (s^[i]+ORD (0)));
IF i MOD 64 = 0 THEN
InOut.WriteLn;
InOut.WriteInt (i, 5);
InOut.WriteString (" ")
END;
END;
InOut.WriteLn;
InOut.WriteLn;
END exp.
Литература:
1 Руслан Богатырев
Судьба Оберона
МирПК, сентябрь 2005;
2 Сергей Свердлов
Арифметика синтаксиса
PC Week/RE, 1998, №42-43;
3 Руслан Богатырев
Язык Оберон. Краткий путеводитель
МирПК, сентябрь 2005;
4 Ханспетер Мессенбок, Никлаус Вирт
Различия между языками Oberon и Oberon-2
Institute for Computer Systems, ETH, Zurich, Technical Paper, July 1993
Перевод Р. Богатырев, 1995;
5 Х.Мёссенбёк, Н.Вирт
Язык программирования Оберон-2
Институт компьютерных систем, ETH, Цюрих Июль 1996
Перевод с английского С.Свердлова.