Нужен автокод - иностранцам вежливо настраивать язык кириллический

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



МЯСЦО

Сообщений 1 страница 3 из 3

1

## Язык МЯСЦО — полная спецификация

### 1. Общие положения
МЯСЦО оперирует только **цепочками символов**. Цепочку можно **рассматривать как** запись числа в позиционной системе счисления с некоторым основанием. Применение действия рассмотрения обозначается с помощью унарных операторов `<2>`, `<10>`, `<16>`. Рассмотрение возможно, если цепочка состоит исключительно из символов соответствующего алфавита:
- для `<2>`: символы `⊤` и `⊥`;
- для `<10>`: цифры `0`–`9`;
- для `<16>`: символы специального 16‑ричного алфавита, разработанного по образцу кактовикских цифр (визуально простые, наглядно отражающие значения от 0 до 15).

Цепочка, которую никак не рассматривают, остаётся просто **цепочкой символов** (не рассматривается как число в позиционной системе счисления). 
Цепочка, которую рассматривают в некоторой системе счисления, называется **рассматриваемой в данной системе счисления** (например, «рассматриваемая в позиционной системе счисления с основанием 16»).

Обратный оператор `<>` убирает рассмотрение, оставляя только символы (цепочка перестаёт быть рассматриваемой как число).

Логические значения `⊤` (истина) и `⊥` (ложь) — цепочки, которые могут использоваться как есть или быть подвергнуты рассмотрению.

**Литералы** (константные цепочки) записываются в двойных кавычках, например: `"0101"`, `"123"`, `"⊤"`, `"Привет"`. Литерал сам по себе является простой цепочкой. Для того чтобы рассматривать литерал как число в некоторой системе счисления, перед ним ставится соответствующий унарный оператор: `<2>"1010"`, `<10>"123"`, `<16>"1A3F"`.

Программа состоит из строк с отступами, задающими блоки. Синтаксис комментариев не предусмотрен.

### 2. Операции

#### 2.1. Операции, работающие с символами цепочек (рассмотрение не учитывается)
Эти операции смотрят на цепочки только как на последовательности символов, независимо от того, рассматриваются ли они в какой-либо системе счисления.

##### 2.1.1. Длина
`|выражение|` 
Считает количество символов в цепочке.

2.1.1.1. Если текущая система счисления не задана, результат получается **рассматриваемым в десятичной системе счисления** (т.е. цепочка десятичных цифр интерпретируется как число по основанию 10).

2.1.1.2. Если задана текущая система счисления (см. 2.2.3), результат получается **рассматриваемым** в этой системе счисления.

##### 2.1.2. Срез — четыре формы:
`[L:R]` (включая обе границы), 
`[L:R)` (включая левую, исключая правую), 
`(L:R]` (исключая левую, включая правую), 
`(L:R)` (исключая обе). 
Берёт часть цепочки.

**2.1.2.1.** L и R — выражения, задающие левую и правую границы среза. Они вычисляются в текущем контексте (с учётом правил для выражений) и должны давать цепочки, которые могут быть **рассмотрены как целые неотрицательные числа**. Для этого к результату выражения неявно применяется оператор рассмотрения в системе счисления, определяемой контекстом (если контекст задан) или в десятичной системе (если контекст не задан). Полученные числа интерпретируются как индексы символов в исходной цепочке.

**2.1.2.2.** Если после вычисления и рассмотрения результат не является целым неотрицательным числом (например, содержит недопустимые символы или даёт отрицательное значение), возникает ошибка.

**2.1.2.3.** Индексация символов начинается с 0. Результирующая цепочка включает символы в соответствии с заданными границами и типом скобок. При этом **рассмотрение исходной цепочки сохраняется**: если исходная цепочка была рассматриваемой в некоторой системе счисления, результат среза также рассматривается в той же системе; если исходная была простой, результат остаётся простым.

##### 2.1.3. Конкатенация
`<>&`

**2.1.3.1.** Операнды склеиваются. Результат — цепочка, **не рассматриваемая как число в позиционной системе счисления**.

**2.1.3.2.** Операция работает с простыми цепочками, поэтому её операнды должны быть (или приводиться к) простыми цепочками. Любые операнды перед выполнением приводятся к простым цепочкам (к ним применяется оператор `<>`).

##### 2.1.4. Сравнение
`<>?` (равно) и `<>¿` (не равно) 
Перед сравнением оба операнда перестают рассматриваться как числа (к ним применяется `<>`). Затем выполняется посимвольное сравнение получившихся простых цепочек. Результат — цепочка со значением `⊤` или `⊥`, **не рассматриваемая как число в позиционной системе счисления**.

**Примечание:** Сравнение учитывает все символы, включая возможные ведущие нули. Пользователь сам отвечает за соответствие длины и формы записи; нормализация (например, удаление ведущих нулей) не производится.

#### 2.2. Операции, меняющие рассмотрение цепочки
*Данное — это цепочка. Режим рассмотрения — проблема рассматривающего. (Не ООП парадигма, а ФАП — философско-аспектное программирование).*

Эти унарные операторы изменяют то, рассматривается ли цепочка в какой-либо системе счисления и в какой именно.

##### 2.2.1. Начать рассматривать как
`<2>`, `<10>`, `<16>` 
* Если цепочка уже рассматривалась в другой системе счисления, создаётся новая цепочка, записывающая то же число в системе счисления с указанным основанием. 
* Если цепочка не рассматривалась как число, она проверяется на допустимость символов для новой системы счисления и начинает в ней рассматриваться. 
* Этот оператор также задаёт **текущую систему счисления** для всего выражения, в котором находится (см. 2.2.3).

##### 2.2.2. Перестать рассматривать
`<>` 
Убирает рассмотрение как числа, оставляя только символы цепочки. Результат — цепочка, **не рассматриваемая как число в позиционной системе счисления**.

**2.2.2.1.** Оператор `<>` должен возвращать цепочку, которая не рассматривается как число; способ достижения этого (копирование, разделение, снятие «линзы» с того же объекта) остаётся на усмотрение реализации и не влияет на корректность программы.

##### 2.2.3. Текущая система счисления (контекст)
При вычислении выражения может быть определена **текущая система счисления** (значение 2, 10 или 16), а может и не быть. Она задаётся следующими конструкциями:
- унарным оператором `<N>` (п. 2.2.1);
- бинарным оператором с явным указанием основания (`<N>op`) (п. 2.4.1, 2.4.2);
- присваиванием `<N>=` (см. раздел 2.3).

Внутри области действия такого оператора (т.е. при вычислении его операндов) текущая система счисления устанавливается равной N. Это влияет на:
- операцию длины `| |` (п. 2.1.1), которая при наличии текущей системы счисления выдаёт результат, рассматриваемый в этой системе; при отсутствии контекста результат рассматривается в десятичной системе;
- арифметические и побитовые операторы **без явного указания основания** (п. 2.4), которые внутри контекста ведут себя так, как если бы перед ними стояло `<N>` (т.е. операнды приводятся к текущей системе счисления перед выполнением операции);
- **вычисление индексов в срезе** (п. 2.1.2): выражения L и R вычисляются в текущем контексте, что может влиять на результат (например, если они содержат арифметические операции). При этом сам результат среза сохраняет рассмотрение исходной цепочки и не зависит от контекста.

Операции конкатенации `<>&` и сравнения `<>?`/`<>¿` от контекста не зависят — они всегда приводят операнды к простым цепочкам и работают с ними.

#### 2.3. Присваивание
- **Обычное** `имя = выражение` 
  Вычисляет выражение в текущем контексте (который может быть как задан, так и нет), запоминает результат и связывает с именем.
- **С преобразованием** `имя <N>= выражение` 
  Перед вычислением выражения текущая система счисления устанавливается в N. Выражение вычисляется в этом контексте, и результат получается рассматриваемым в системе счисления N.

#### 2.4. Операции, использующие рассмотрение цепочек как чисел

##### 2.4.1. Арифметические
`+`, `-`, `*`

**2.4.1.1. С явным указанием основания** 
Форма: `<N>+`, `<N>-`, `<N>*`, где N ∈ {2,10,16}. 
Поведение:
- Сначала операнды начинают рассматриваться как числа в позиционной системе счисления с основанием N (если они уже рассматривались в другом основании, создаётся новая цепочка, записывающая то же число в системе счисления с основанием N).
- Затем выполняется действие.
- Результат получается **рассматриваемым** в системе счисления с основанием N.
- Этот оператор также задаёт **текущую систему счисления** N для своих операндов.

**2.4.1.2. Без явного указания основания** 
Поведение зависит от наличия текущего контекста:

- **Если текущий контекст задан (равен M):** 
  Оба операнда приводятся к системе счисления M перед выполнением операции, и результат получается рассматриваемым в системе счисления M.

- **Если текущий контекст не задан:** 
  Возможны следующие случаи:
  * Оба операнда рассматриваются в одной и той же системе счисления N — результат получается рассматриваемым в системе счисления N.
  * Один операнд рассматривается в системе счисления N, а второй является простой цепочкой — простая цепочка приводится к системе счисления N (если её символы допустимы), результат получается рассматриваемым в системе счисления N.
  * Иные комбинации (оба простые, разные системы счисления) — ошибка.

##### 2.4.2. Побитовые
`∨` (ИЛИ), `∧` (И), `¬` (НЕ) 
* Допустимы только для оснований 2 и 16. 

**2.4.2.1. С явным указанием основания** 
Форма: `<2>∨`, `<16>∧`, `<2>¬` и т.п. 
Поведение аналогично 2.4.1.1, но с ограничением на допустимые основания.

**2.4.2.2. Без явного указания основания** 
Поведение зависит от наличия текущего контекста:

- **Если текущий контекст задан (равен M, где M ∈ {2,16}):** 
  Оба операнда приводятся к системе счисления M перед выполнением операции, и результат получается рассматриваемым в системе счисления M. Если M не равно 2 или 16 — ошибка.

- **Если текущий контекст не задан:** 
  * Оба операнда рассматриваются в одной и той же системе счисления N (N ∈ {2,16}) — для бинарных операций цепочки должны быть **одинаковой длины**, иначе ошибка. Результат получается рассматриваемым в системе счисления N.
  * Один операнд рассматривается в системе счисления N (N ∈ {2,16}), а второй является простой цепочкой — простая цепочка приводится к системе счисления N (если её символы допустимы и она имеет **ту же длину**, что и первый операнд), результат получается рассматриваемым в системе счисления N.
  * Иные комбинации — ошибка.

* Для `¬` операнд должен рассматриваться в 2 или 16 (простая цепочка не допускается).

##### 2.4.3. Отсутствие деления
Операция деления в языке отсутствует, так как не требуется для целевой области применения (кодирование инструкций процессоров) и её отсутствие упрощает семантику.

### 3. Приоритет и ассоциативность операций
Приоритет операций (от высшего к низшему):
1. Первичные: имена, литералы.
2. Постфиксные срезы.
3. Унарные префиксные: `<2>`, `<10>`, `<16>`, `<>`, `¬`.
4. `∧` (побитовое И) и `<N>∧`.
5. `∨` (побитовое ИЛИ) и `<N>∨`.
6. `*` (умножение) и `<N>*`.
7. `+`, `-` (сложение, вычитание) и `<N>+`, `<N>-`.
8. `<>&` (конкатенация).
9. `<>?`, `<>¿` (сравнение).

Для бинарных операторов, которые могут применяться последовательно (все, кроме сравнения), используется левая ассоциативность: `a op b op c` вычисляется как `(a op b) op c`. Операторы сравнения не предназначены для последовательного применения; запись вида `a <>? b <>? c` запрещена.

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

### 4. Управляющие конструкции
- `если условие то ... иначе ...` 
  Условие должно давать цепочку со значением `⊤` или `⊥` (как рассматриваемую, так и не рассматриваемую как число).
- `пока условие ...` 
  Аналогично.

### 5. Вывод
Выражение, записанное на отдельной строке без присваивания, вычисляется и выводится. 
- Если результат получается **рассматриваемым** в системе счисления с основанием N, он выводится как `<N>цепочка`.
- Если результат **не рассматривается** как число в позиционной системе счисления, выводится просто цепочка (без кавычек).

Примечание: результат операции длины при отсутствии контекста рассматривается в десятичной системе, поэтому выводится как `<10>цепочка`, например `<10>4`.

### 6. Обработка ошибок
- Использование имени, не определённого ранее.
- Недопустимые символы при попытке рассмотреть цепочку в системе счисления `<N>` (в том числе при приведении операндов контекстом или при вычислении индексов).
- В операциях, требующих числового рассмотрения операндов:
  * оба операнда простые при отсутствии контекста;
  * операнды имеют разные основания при отсутствии контекста;
  * контекст не может привести операнды к единому основанию (из-за недопустимых символов в простой цепочке).
- Побитовые операции с основанием 10.
- **Побитовые операции с цепочками разной длины** (как с явным указанием основания, так и без него).
- Вычитание с отрицательным результатом.
- Некорректные границы среза: левая граница больше правой, выход за пределы цепочки, индекс не является целым неотрицательным числом.
- Невозможность выполнить явное указание основания (например, конкатенация с `<N>&` даёт цепочку, которую нельзя рассматривать в N).
- Запись нескольких операторов сравнения подряд.

### 7. Заключение
Язык МЯСЦО предназначен для описания преобразований цепочек символов с возможностью их рассмотрения как чисел в системах счисления 2, 10 и 16. Контекст (текущая система счисления) позволяет единообразно обрабатывать выражения без многократного явного указания основания. Операция деления отсутствует как ненужная для целевой области. Пользователь самостоятельно отвечает за длину цепочек и наличие ведущих нулей; автоматическая нормализация не производится. Философская основа языка — разделение объекта (цепочка) и способа его рассмотрения (ФАП-парадигма). Язык не содержит латиницы, использует специальные 16‑ричные символы и логические `⊤`/`⊥`.

Реализация оставляется читателю в качестве упражнения

Отредактировано Лис (2026-03-12 07:29:55)

0

2

```
дано = <10>"165"
надо <2>= дано
пока |надо| <>? <10>"32" то
    надо <2>= "⊥" <>& надо
```

Берём десятичное число 165
преобразуем в двоичное: "⊤⊥⊤⊥⊥⊤⊥⊤" (8 бит)
пока длина не равна 32
    дописываем слева ⊥ и снова помечаем рассматриваемым как двоичное число

«пока |надо| <>? <10>"32" то»
можно записать как
«пока |надо| <>? "32" то»
или как
«пока |надо| <10>? "32" то»
или
«пока |надо| ? "32" то»
работать будет по-разному, но с одинаковым эффектом

Отредактировано Лис (2026-03-12 14:01:31)

0

3

Искины обнаружили в языке МЯСЦО фатальные недостатки:
- символы (или это были знаки?) в цепочке слишком абстрактные, их невозможно средствами языка привязать к листу бумаги;
- язык не определяет возможности считать цифры в цепочке начиная с разных сторон при вычислении значения числа;
- язык не позволяет группировать символы, например если цепочка битовая, но нет синтаксиса, определяющего байты, или их порядок.

Отредактировано Лис (2026-03-13 15:16:34)

0