01 · Правила для простих змінних #rules

Прості змінні/intbyte, /int2, /int4 та їх знакові варіанти.

Правило Валідно Невалідно
Тільки латинські літери та _ val_name val1, ім'я, val#x
Починається з літери counter, my_val 1name, _name*
Закінчується літерою my_val, result val_, val1
_ тільки всередині my_val_x _val†, val_†
Цифри — заборонені counter, result val1, x2, counter3
Максимум 24 символи my_very_long_name_ok abcdefghijklmnopqrstuvwxy (25)

* Підкреслення на початку — синтаксис імпорту, не загальна назва.  † Підкреслення в кінці — синтаксис імпорту.

валідні імена
app (/intbyte, /var) counter = 0
app (/intbyte, /var) my_val = 42
app (/intbyte, /var) result_x = 0
app (/intbyte, /const) max_val = 255
E207 невалідні імена
app (/intbyte, /var) val1 = 0      ! E207: цифри заборонені
app (/intbyte, /var) _val_ = 0     ! E207: _ з обох боків
app (/intbyte, /var) my val = 0    ! E207: пробіл недопустимий
E207 · Невалідне ім'я змінної
E208 занадто довге ім'я
app (/intbyte, /var) abcdefghijklmnopqrstuvwxy = 0
! ↑ 25 символів — E208
E208 · Ім'я перевищує максимум 24 символи (зараз: 25)
02 · Регістр #case

Terra — case-insensitive. Лексер нормалізує всі ідентифікатори до нижнього регістру при читанні. Це не конвенція — це гарантія компілятора.

всі варіанти — одна змінна
app (/intbyte, /var) Alisa = 42

::start::
/display(Alisa)   ! ✓ → 42
/display(alisa)   ! ✓ → 42  (та сама змінна)
/display(ALISA)   ! ✓ → 42  (та сама змінна)
/display(aLiSa)   ! ✓ → 42  (та сама змінна)
Внутрішньо: компілятор бачить лише alisa. Регістр — виключно для читабельності коду програміста.
E201 дублікат через регістр
app (/intbyte, /var) Alisa = 42
app (/intbyte, /var) ALISA = 10
! E201: змінна 'alisa' вже оголошена
E201 · Змінна 'alisa' вже оголошена
03 · Складні типи — цифри дозволені #complex

Для складних типів — цифри в імені дозволені. Решта правил — ті самі.

/shelf /agent /raster /style /matrix /contract /table + інші складні типи
цифри для складних типів
app (/shelf, /intbyte, /var) shelf1 = (1, 2, 3)
app (/shelf, /intbyte, /var) my_shelf2 = (4, 5, 6)
app (/shelf, /intbyte, /var) data3 = (7, 8, 9)
E207 цифра для простої змінної
app (/intbyte, /var) counter1 = 0
! E207: цифри в іменах дозволені тільки для shelf, agent, raster та інших складних типів
E207 · Ім'я 'counter1' містить цифру. Цифри дозволені тільки для shelf, agent та інших складних типів
04 · Рівні імпорту #imports

Підкреслення на початку або в кінці — це адреса в ієрархії пакетів. Кількість підкреслень = кількість рівнів.

Вгору по ієрархії
_Alisa 1 рівень вгору
__Alisa 2 рівні вгору
___Alisa 3 рівні вгору
____Alisa 4 рівні вгору
_____Alisa 5+ → W150 ⚠
Вниз по ієрархії
Alisa_ 1 рівень вниз
Alisa__ 2 рівні вниз
Alisa___ 3 рівні вниз
Alisa____ 4 рівні вниз
Alisa_____ 5+ → W150 ⚠
W150 — архітектурне попередження: 5 або більше підкреслень у будь-якому напрямку. Компіляція не зупиняється — але архітектура сигналізує сама про себе.
E207 обидва боки одночасно
app (/intbyte, /var) _Alisa_ = 0
! E207: напрямок імпорту може бути тільки один — вгору або вниз
E207 · Підкреслення одночасно на початку і в кінці. Напрямок — тільки один.
W150 5 рівнів — попередження
app (/intbyte, /var) _____deep = 1
! компілюється, але...
W150 '_____deep' — 5 рівнів вгору. Розгляньте рефакторинг архітектури пакетів.
Зарезервовано: __ (подвійне підкреслення на початку) зарезервовано для системних ідентифікаторів: __exim__, __start__, __enter, __out, __type.
05 · Помилки та попередження #errors-section
Код Умова Приклад
E207 Цифра в імені простої змінної val1, counter2
E207 _ одночасно на початку і в кінці _val_, __x__
E207 Недопустимий символ val#x, my-val
E207 Починається не з літери 1name
E208 Більше 24 символів abcdefghijklmnopqrstuvwxy
W150 5+ підкреслень на початку або в кінці _____val, val_____

W150не зупиняє компіляцію. Якщо ти пишеш Alisa______шість рівнів вниз — архітектура сама говорить що щось пішло не так.