]]> ]]>
Править | Обсудить | История

PL/0

Дата создания:
1975
Парадигма:
Типизация:
Реализации и версии (свернуть все | развернуть все):
Язык программирования

Язык PL/0 (не путать с одноименной реализацией языка PL/I) — учебный языком программирования, использующийся в качестве примера разработки компилятора.

Язык был представлен Никлаусом Виртом в 1975 году в книге “Algorithms + Data Structures = Programs”. В книге 1976 года “Compilerbau” (“Разработка компиляторов”) был приведен код компилятора PL/0, написанный на Pascal.

Возможности оригинальной версии языка крайне ограничены:

  • единственный тип данных — целые числа. Несмотря на это, используемые переменные и константы должны быть объявлены в явном виде.
  • набор операторов ограничен арифметическими действиями и операторами сравнения.
  • есть одна встроенная функция odd, проверяющая нечетность числа-аргумента.
  • функции ввода-вывода данных отсутствуют; компилятор выводит на печать значения всех изменяемых переменных в момент их изменения.
  • язык предоставляет конструкции if-then и while-do, а также возможность определять и вызывать пользовательские процедуры (без передачи аргументов).

Ниже приведен синтаксис языка в расширенной форме Бэкуса-Наура:

program = block "." .

block = [ "const" ident "=" number {"," ident "=" number} ";"]
        [ "var" ident {"," ident} ";"]
        { "procedure" ident ";" block ";" } statement .

statement = [ ident ":=" expression | "call" ident |
            "begin" statement {";" statement } "end" |
            "if" condition "then" statement |
            "while" condition "do" statement ].

condition = "odd" expression |
            expression ("="|"#"|"<"|">") expression .

expression = [ "+"|"-"] term { ("+"|"-") term}.

term = factor {("*"|"/") factor}.

factor = ident | number | "(" expression ")".

При переизданиях книги PL/0 сначала усложнялся для иллюстрации более сложных принципов (например, были добавлены функции ввода-вывода данных), а затем и вовсе был заменен на Oberon-0.

Простота реализации “PL/0” и множество возможных путей его расширения (добавление новых конструкций циклов, типов данных и т.д.) делает его популярным выбором в курсах, изучающих построение компиляторов, и в наши дни. Современные реализации позволяют комбинировать язык с новыми идеями — объектно-ориентированным программированием, шаблонами проектирования и даже языком Python.

Элементы синтаксиса:

Регистрозависимость да
Присваивание значения переменной <varname> := <value>
Объявление переменной var <varname>
Блок begin ... end
Равенство =
Неравенство #
Сравнение < >
Определение функции procedure <name>; <body>;
Вызов функции call <name>
Последовательность ;
Если - то if <condition> then <trueBlock>
Бесконечный цикл while 1 = 1 do <loopBody>
Цикл с предусловием while <condition> do <loopBody>

Примеры:

Факториал:

Пример для версий Wirth's PL/0 (1976)

В языке нет возможности выводить символы, поэтому программа выводит пары число-его факториал, без разделителей. Результат запуска этой программы имеет следующий вид:

    0 var n, f;  
    1 begin  
    2    n := 0;  
    4    f := 1;  
    6    while n # 16 do  
   10    begin  
   10       n := n + 1;  
   14       f := f * n;  
   18    end;  
   19 end.  
    0  jmp  1    1  
    1  int  1    5  
    2  lit  1    0  
    3  sto  1    3  
    4  lit  1    1  
    5  sto  1    4  
    6  lod  1    3  
    7  lit  1   16  
    8  opr  1    9  
    9  jpc  1   19  
   10  lod  1    3  
   11  lit  1    1  
   12  opr  1    2  
   13  sto  1    3  
   14  lod  1    4  
   15  lod  1    3  
   16  opr  1    4  
   17  sto  1    4  
   18  jmp  1    6  
   19  opr  1    0  
 start pl/0
0
1
1
1
2
2
3
6
4
24
5
120
6
720
7
5040
8
40320
9
362880
10
3628800
11
39916800
12
479001600
13
1932053504
14
1278945280
15
2004310016
16
2004189184
 end pl/0
var n, f;
begin
   n := 0;
   f := 1;
   while n # 16 do
   begin
      n := n + 1;
      f := f * n;
   end;
end.

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам