vak: (Улыбка)
[personal profile] vak
В дебрях сети обнаружились симулятор и примеры языка Эль-76:
http://web.archive.org/web/20030710092032/www.mstu.ru/studies/Others/War/IlbrusLanguage-emul.rar
http://web.archive.org/web/20030710091904/www.mstu.ru/studies/Others/War/IlbrusLanguage-docs.rar

Спасибо [livejournal.com profile] oboguev за наводку.  Язык в целом очень похож на Алгол-68, но семантически отражает особенности архитектуры Эльбруса: полиморфные операции, аппаратная защита массивов и т.п.  Переложил примеры в свою копилку.  Так выглядит обработка списков:
программа
  процедура печатьэл = проц(ф32 эл) начало
    ф32 к;
    для к от 1 до эл[0] цикл печать(эл[к]) повторить
  конец;
  процедура печатьсп = проц(ф32 список) начало
    если не естьпусто список то
      печатьэл(список[0]);
      печатькс();
      печатьсп(список[1])
    все
  конец;
  процедура добавсп = проц(ф32 список, знач) начало
    если не естьпусто список[1] то
      добавсп(список[1], знач)
    иначе
      ф32 с;
      список[1] := лок вект [2] ф32;
      с := список[1];
      с[0] := знач
    все
  конец;
  процедура вариант1 = проц(ф32 список) начало
    если не естьпусто список то
      ф32 слово := список[0];
      если слово[0] > 1 то
        ф32 слово2 := лок вект [слово[0] + 1] ф32, к;
        слово2[0] := 1;
        слово2[1] := слово[1];
        для к от 2 до слово[0] цикл
          если слово[к] <> слово[1] то
            слово2[0] := слово2[0] + 1;
            слово2[слово2[0]] := слово[к]
          все
        повторить;
        список[0] := слово2;
        вариант1(список[1])
      все
    все
  конец;
  процедура вариант2 = проц(ф32 список) начало
    если не естьпусто список то
      ф32 слово := список[0],
          слово2 := лок вект [слово[0]*2 + 1] ф32,
          к;
      слово2[0] := слово[0]*2;
      для к от 1 до слово[0] цикл
        слово2[к*2 - 1] := слово[к];
        слово2[к*2] := 0
      повторить;
      список[0] := слово2;
      вариант2(список[1])    все
  конец;
  ф32 список := лок вект [2] ф32;
  ф32 слово;
  слово := лок вект [4] ф32;
  слово[0] := 3;
  слово[1] := 3;
  слово[2] := 2;
  слово[3] := 3;
  добавсп(список, слово);
  слово := лок вект [7] ф32;
  слово[0] := 6;
  слово[1] := 7;
  слово[2] := 4;
  слово[3] := 7;
  слово[4] := 2;
  слово[5] := 3;
  слово[6] := 7;
  добавсп(список, слово);
  слово := лок вект [5] ф32;
  слово[0] := 4;
  слово[1] := 2;
  слово[2] := 2;
  слово[3] := 1;
  слово[4] := 2;
  добавсп(список, слово);
  печатьсп(список[1]);
  печатькс();
  вариант1(список[1]);
  печатьсп(список[1])
конец