Skip to content
/ C42 Public

C42: Эзотерический язык программирования вдохновленный ASM.

License

Notifications You must be signed in to change notification settings

AlmazCode/C42

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C42

C42 - это язык программирования, который представляет собой эзотерическую разновидность ассемблера, где программы конструируются исключительно из ограниченного набора команд, состоящего из 42 инструкций, пронумерованных от 01 до 42.

Основные конструкции языка

В языке определены три варианта использования команд (у каждой команды свой вариант написания):

  • COMMAND ARG
  • COMMAND ARG1 ARG2
  • COMMAND

Типы данных

В языке C42 переменные - это ячейки (подобные регистрам), каждая из которых способна хранить только один из определенных типов данных:

  • INT
  • STRING
  • FLOAT

Создание ячеек (переменных)

Для создания ячейки используется команда 41. Пример:

41 -1 0

Первый аргумент — имя переменной (только отрицательное число, начиная с -1). Второй аргумент — тип данных, которое оно сможет хранить:

  • 0 - INT
  • 1 - STRING
  • 2 - FLOAT

Блоки кода

Код на C42 может быть структурирован в блоки, аналогичные функциям в других языках программирования. Блоки могут иметь любые идентификаторы.

Объявление блока

  • #1 <имя> — ключевое слово объявления блока. После #1 указывается имя блока.
  • #0 — завершение блока.

Блок с идентификатором main является точкой входа программы, где размещается основной исполняемый код.

Пример кода

Программа для вывода любимой фразы программистов:

#1 main $ Создаем блок с идентификатором main (точка входа)

41 -1 1 $ Создание ячейки -1 с типом STRING
04 -1 "Hello, World!" $ Записываем в ячейку нашу фразу
02 -1 $ Выводим ячейку в консоль

#0 $ Завершаем блок

Этот пример иллюстрирует основные элементы синтаксиса и функциональность языка.

Список Команд

Код Синтаксис Описание
01 01 Завершает выполнение программы.
02 02 CELL Выводит значение указанной ячейки в консоль.
03 03 CELL Записывает данные, введенные пользователем, в указанную ячейку.
04 04 CELL VALUE Присваивает указанной ячейке конкретное значение.
05 05 CELL1 CELL2 Суммирует значения двух указанных ячеек и записывает результат в первую ячейку.
06 06 CELL1 CELL2 Вычитает значение второй ячейки из первой и записывает результат в первую ячейку.
07 07 CELL1 CELL2 Умножает значения двух указанных ячеек и записывает результат в первую ячейку.
08 08 CELL1 CELL2 Делит значение первой ячейки на значение второй и записывает результат в первую ячейку.
09 09 CELL Увеличивает значение указанной ячейки на 1 (только для чисел типа int/float).
10 10 CELL Уменьшает значение указанной ячейки на 1 (только для чисел типа int/float).
11 11 CELL1 CELL2 Записывает в первую ячейку остаток от деления значения первой ячейки на значение второй.
12 12 Очищает консоль.
13 13 CELL1 CELL2 Выполняет следующую команду, если значения двух указанных ячеек равны.
14 14 CELL1 CELL2 Выполняет следующую команду, если значения двух указанных ячеек не равны.
15 15 CELL1 CELL2 Выполняет следующую команду, если значение первой ячейки больше значения второй.
16 16 CELL1 CELL2 Выполняет следующую команду, если значение первой ячейки меньше значения второй.
17 17 CELL1 CELL2 Выполняет следующую команду, если значение первой ячейки больше или равно значению второй.
18 18 CELL1 CELL2 Выполняет следующую команду, если значение первой ячейки меньше или равно значению второй.
19 19 CELL Переводит значение указанной ячейки в верхний регистр (если это строка).
20 20 CELL Переводит значение указанной ячейки в нижний регистр (если это строка).
21 21 CELL1 CELL2 Возвращает длину строки во второй ячейке и записывает результат в первую ячейку.
22 22 CELL Инвертирует значение указанной ячейки.
23 23 CELL Вызывает блок с идентификатором, указанным в ячейке.
24 24 CELL VALUE Увеличивает значение указанной ячейки на константное число или добавляет строку.
25 25 CELL1 CELL2 Обменивает значения между двумя указанными ячейками.
26 26 CELL1 CELL2 Копирует значение из второй ячейки в первую.
27 27 CELL1 CELL2 Удаляет в первой ячейке символ по индексу, указанному во второй ячейке.
28 28 CELL1 CELL2 Сохраняет в первую ячейку преобразованное число из строки во второй ячейке.
29 29 CELL1 CELL2 Сохраняет в первую ячейку преобразованную строку из числа во второй ячейке.
30 30 CELL1 CELL2 Выполняет битовую операцию И и сохраняет результат в первую ячейку (только для int).
31 31 CELL1 CELL2 Выполняет битовую операцию ИЛИ и сохраняет результат в первую ячейку (только для int).
32 32 CELL1 CELL2 Выполняет битовую операцию исключающего ИЛИ и сохраняет результат в первую ячейку (только для int).
33 33 CELL Выполняет битовую операцию НЕ и сохраняет результат в указанную ячейку (только для int).
34 34 CELL Останавливает выполнение программы на время, указанное в ячейке.
35 35 CELL Начинает цикл, код которого будет блок, указанный в ячейке.
36 36 CELL1 CELL2 Выбирает случайный символ из CELL2 и сохраняет его в CELL1.
37 37 CELL1 CELL2 Ищет максимальное значение из двух указанных ячеек и сохраняет его в первую ячейку.
38 38 CELL1 CELL2 Ищет минимальное значение из двух указанных ячеек и сохраняет его в первую ячейку.
39 39 CELL1 CELL2 Вычисляет НОД двух чисел и сохраняет результат в первую ячейку.
40 40 CELL1 CELL2 Вычисляет НОК двух чисел и сохраняет результат в первую ячейку.
41 41 NAME DATATYPE Создание новой ячейки.
42 42 Принудительное завершение блока или цикла.

About

C42: Эзотерический язык программирования вдохновленный ASM.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages