Главная / ПрограммированиеСоздаём язык программирования → Лекция Я4. Учебный процедурный язык

Чем мы здесь занимаемся

«Учебный процедурный язык» — это язык, разработкой которого мы в этом цикле лекций занимаемся.

Создание интерпретатора языка описано в отдельных лекциях.

Рассмотрим далее общий дизайн языка.

Типы данных

Статическая типизация является важным аспектом разработки ЯП в частности и программирования в общем, однако наш язык, для простоты примера, будет обладать динамической типизацией.

Переменные и литералы могут быть трёх типов: целое число, строка и логический тип.

Числа являются последовательностью цифр: 12345.

Строки записываются в двойных кавычках: "пример строки". Символ двойной кавычки нельзя включать в строку (экранирование и иные спецсимволы не поддерживаются).

Имеют место две логических константы: true и false.

Переменные

Перед использованием в выражении переменной должно быть присвоено любое значение. Специального ключевого слова для инициализации переменных использовать не требуется:

# можно
x = 0
y = x + 1

# нельзя, a и b не определены
z = a + b

Имя переменной (и название функции) должно состоять из маленьких латинских букв и цифр, начинаться с буквы.

Выражения

Выражения записываются в привычной инфиксной форме.

В выражениях могут использоваться:

  • скобки;
  • знаки арифметических операций +, -, *, / (включая унарный + и -);
  • операции сравнения >, >=, <, <=, ==, <> («не равно»);
  • логические операции &, |, !.

Комментарии

Весь текст, начиная со знака # и далее до конца строки игнорируется. Следует использовать # для комментирования кода.

Управляющие конструкции

Язык поддерживает минимально достаточный набор из трёх управляющих конструкций: if-else, case-when, while.

Рассмотрим их по порядку.

Условный оператор if (else-часть опциональна):

if x > 0
  output("Число больше 0")
else
  output("Число меньше или равно 0")
end

Оператор выбора (else-часть опциональна):

case x
when 1
  output("Выбрано 1")
when 2
  output("Выбрано 2")
else
  output("Выбрано что-то ещё")
end

Оператор условного цикла while:

while x > 0
  x = x - 1
end

Функции

В языке три встроенных функции — input(), output(x), to_integer(x).

output(x) выведет значение выражения x на экран.

input() вернёт введённое пользователем значение.

Определять пользовательские функции можно с помощью ключевого слова fn. Все объявления функций должны быть в начале файла, до любого другого кода. Файл с исходным кодом, в соответствие со стандартом Unix, должен завершаться символом конца строки \n.

Последнее выражение, исполненное внутри функции, возвращается из функции (даже если явно не указано ключевое слово return).

Вызов функции должен сопровождаться скобками, даже если у функции нет аргументов.

fn adult?(x)
  x >= 18
end

output("Сколько вам лет?")
age = to_integer(input())

if adult?(age)
  output("Вы совершеннолетний")
else
  output("Вы не совершеннолетний")
end

Мотивация

Мотивация — пирожок.

Pirozhok

Пирожок. Конкретный пользовательский экземпляр может отличаться

Пирожок можно взять с полки после написания интерпретатора данного учебного процедурного языка.

Ну и дополнительно: