LYaPAS

Logical Language for the Representation of Synthesis Algorithms (LYaPAS, Russian: ЛЯПАС) is a programming language created by Arkady Zakrevsky in the Soviet Union.

LYaPAS was initially designed especially for non-numeric programming for the Soviet designed and built line of mainframe computers named Ural-1. LYaPAS uses octal numbers.

A further refinement of LYaPAS is LYaPAS-M.

History
The development started in the end of 1962, while Zakrevsky was working at the Siberian Physical-Technical Institute (part of Tomsk State University). The first translators were implemented in 1963.

The first widely available book about the language was published in Russian (Логический язык для представления алгоритмов синтеза релейных устройств, 1966), which was soon translated and published in English (LYaPAS: a programming language for logic and coding algorithms, 1969). The book contained a collection of articles with full LYaPAS descriptions, some algorithms in the language and descriptions of programming environments for the Ural-1 and M-20 computers which operated at a speed of 100 and 20,000 operations per second, respectively.

In 1974, LYaPAS-M, a new version of the language, appeared. Among other changes, this version was adapted for the character set common among the Soviet computers of the time, namely the first 100 characters of the GOST 10859 7-bit encoding.

Zakrevsky later worked on LYaPAS at the Laboratory of System Programming and Logical Synthesis, of the Academy of Sciences of the Byelorussian SSR, since renamed the National Academy of Sciences of Belarus.

Versions

 * LYaPAS-70 for Minsk-22 machine
 * LYaPAS-71 for BESM-6 and M-220 machines
 * LYaPAS-M

Example
Example program in LYaPAS-M for calculating GCD of variables N and M: Explanation:
 * Program is executed from left to right.
 * П1 and П2 are line labels.
 * Operation  puts the value of the integer variable into the implicit "current value" variable τ, which holds the result of the last operation.
 * Conditional branch operation  moves the execution to line 2 if the current value is zero.
 * Expression  calculates remainder.
 * Expression  assigns current value to variable R.
 * is an unconditional branch to line 1.
 * is the end marker.

All whitespaces are ignored, so the above program is equivalent to the one-liner: