|
@@ -0,0 +1,65 @@
|
|
|
+# LOMO
|
|
|
+
|
|
|
+## Описание
|
|
|
+
|
|
|
+LOMO (language of message objects) язык декларативный, модульный. Основан на идеях языка Lola, только вместо электронных компонентов базовым элементом системы выступает программный агент (unit).
|
|
|
+
|
|
|
+## Синтаксис
|
|
|
+
|
|
|
+Синтаксис в стиле Оберона, ключевые слова капсом. Идентификаторы состоят из букв и цифр, начинаются с буквы.
|
|
|
+
|
|
|
+## Модули
|
|
|
+
|
|
|
+Описание модуля начинается ключевым словом `UNIT`. Является единицей компиляции и загрузки. При исполнении в память загружается один или несколько экземпляров каждого модуля.
|
|
|
+Модуль состоит из секции объявления констант, секции объявления переменных и секции правил (выражений и инструкций)
|
|
|
+
|
|
|
+## Константы
|
|
|
+
|
|
|
+Константы описываются в секции `CONST`.
|
|
|
+
|
|
|
+## Переменные
|
|
|
+
|
|
|
+### Регистры
|
|
|
+
|
|
|
+## Типы данных
|
|
|
+
|
|
|
+### Встроенные типы
|
|
|
+
|
|
|
+Встроенными типами являются `INTEGER`, `REAL`, `BOOLEAN`, `TRILEAN`, `CHAR`, `STRING`, `ATOM`, `COMPLEX`.
|
|
|
+
|
|
|
+### Модуль это тип.
|
|
|
+
|
|
|
+Идентификатор модуля может являться типом переменной, такой тип называется *сторонним* и представляет возможности использовать переменную в качестве экземпляра модуля (т.е. в качестве агента).
|
|
|
+Доступ к экспортированным переменным осуществляется с помощью селектора `.`.
|
|
|
+
|
|
|
+## Инструкции
|
|
|
+
|
|
|
+### Присваивание
|
|
|
+
|
|
|
+Присваивание обозначается символом `->`, это инструкция устанавливающая значение переменной справа после вычисления этого значения из выражения, описанного слева.
|
|
|
+
|
|
|
+Пример присваивания:
|
|
|
+
|
|
|
+````
|
|
|
+0 -> x
|
|
|
+x + 1 -> y
|
|
|
+````
|
|
|
+
|
|
|
+Каждой переменной может быть присвоено только одно значение.
|
|
|
+
|
|
|
+## Выражения
|
|
|
+
|
|
|
+### Операторы
|
|
|
+
|
|
|
+В языке LOMO реализованы арифметические операции: сложение, вычитание, умножение, деление, возведение в степень, целочисленное деление и вычисление остатка от целочисленного деления.
|
|
|
+
|
|
|
+### Тернарный оператор
|
|
|
+
|
|
|
+Тернарный оператор позволяет вычислить одно из двух выражений в зависимости от истинности опорного выражения. Тернарные операторы можно связывать в цепочки таким образом осуществляя множественный выбор из выражений.
|
|
|
+
|
|
|
+Пример тернарного оператора:
|
|
|
+
|
|
|
+````
|
|
|
+x > 0 ? 1 : 0 -> y
|
|
|
+x > 0 ? 1 : x < 0 : -1 : 0 -> y
|
|
|
+````
|