Кажется, мы окончательно пришли к минималистичности языка и специализации объектов языка.
Вот например: типы, которые есть в языке:
Код:
Типы данных базовые (элементарные, основные):
- булевское, boolean; true, false; истина, ложь; да, нет
- целое,integer;десятичные;   целые не имеют размера (длинные, реализованы программно);
- дробное, real; стандартный вид; размер соответствует типу double в С++ (IEEE-754-1985)
- символ, character;‘один_символ’; кодировка - ?
Вариант – letter, литера
Литералы (только элементарные типы): 
-целое число – десятичное произвольного размера, 
-дробное число – соответствует типу double в IEEE-754-1985, 
-символ – один символ в апострофах (одиночная кавычка) – кодировка - ?
-строка – см. ниже о массивах
Внимание!    Встроенного типа «строка» - нет. 
 -          Строка – это массив символов. 
 -          Строковые литералы: последовательность символов в кавычках - “строка”
 -          Размер строкового литерала = количество символов 
Операции
   - логические: ~ (not), & (and), | (or), ^ (xor)
   - сравнения: = (равно), #(не равно), <(меньше), >(больше), <=, >=
   - арифметика целая: + - * \ % (вопрос: целое деление – специальный знак?)
   - арифметика дробная: + - * /
Никаких неявных преобразований, кроме integer -> real
Думаем о том, чтобы как-то задавать кодировку символов в явном виде. Неявность тут не есть хорошо.
Массивы
Массив объявляется в том же операторе variable.
   Типом массива является [размер] тип
Примечание. Возможно специальное ключевое слово и отдельное объявление массива:
массив [размер] тип имя
   английское слово array
Семантика:
– нет начальных значений, нет констант!
– тип элементов может быть любой, в том числе массивом, записью, указателем и процедурным типом 
– числовые элементы массива при объявлении обнуляются; 
– булевские элементы массива при объявлении принимают значение false (ложь = ноль)
– массивы – только одномерные; многомерный массив трактуется как «массив массивов… массивов…»
– размер – это целочисленное выражение = количество элементов; 
– размер вычисляется при выполнении программы
– размер массива можно получить с помощью метода размер(), который возвращает целое число типа integer
   m.size()   – английский вариант 
        м.размер()    – русский вариант
Индекс – изменяется от 0 до N-1, если N– размер массива.
Индекс проверяется на корректность во время выполнения программы
Каждый индекс задаётся в скобках [индекс]
   Массив типа [размер] char – это массив символов; 
        при объявлении элементы обнуляются; 
Надо ли разрешать инициализацию? Криминала не наблюдается. 
Поскольку у нас нет компилятора как такового, то нет необходимости различать массив с константным размером и массив с вычисляемым во время выполнения программы. Поэтому нет указателей на массив и нет динамических массивов - они у нас все изначально по определению динамические... 
Пока размышляем, надо ли разрешать операции с массивами, или нехай студни массивы обрабатывают исключительно в циклах ручками. 
Единственный массив, которому можно присваивать значения - это массив символов:
Записи – процедурная часть (без наследования и ООП)
запись поля; методы; конец
английское слово record
английское слово end
Альтернатива 
   английское слово    class
   русское слово      группа
        русское слово      структура 
        русское слово      кортеж 
        русское слово       тип  - выбрали вот этот вариант. 
Семантика
   нет начальных значений, нет констант!
   полем записи может быть объект любого типа, в том числе массив, указатель на тип, объект-запись
Вопрос: поле записи – процедурная переменная; пока разрешаем
Отметим:    объявление полей = объявление переменных без инициализации! 
   Вместо слова переменная используется слово поле; английское field   
Запись определяет:
   – тип объектов
   – пространство имён
Тип объектов
   – определяется на уровне модуля
   - тип используется с момента объявления
   - тип локален в модуле; можно сделать тип публичным
Пространство имён
   -все имена видны внутри записи независимо от места объявления
   - все имена считаются локальными в записи; 
   - даже если тип объявлен публичным, имена все равно являются локальными в записи
   – любое имя, определённое в записи, может быть явно сделано публичным
Доступ к открытым элементам записи 
осуществляется только при объявлении объекта данного типа с помощью селектора – точка
Записи-объекты создаются 
a) статически – обычное объявление переменной
b) динамически – во время выполнения программы в динамической памяти.
Только для записей определены указатели
Указатель на запись
variable тип имя;    – в качестве типа требуется задать указатель на тип записи
указатель-на тип
Вариант: 
   ^ тип
   * тип
Замечание. На месте первого символа можно написать любой иероглиф, обозначающий указатель   
Семантика
   нет констант!
   тип – только объявленный тип записи 
        необходим практически только для создания динамических структур данных из объектов-записей
   при объявлении получает значение (специальное) – пусто (nil)
   может быть полем записи
   может быть элементом массива
Совместимость по присваиванию - должны совпадать типы записей. 
Процедурный тип
(параметры)      – тип переменной-процедуры
(параметры): тип    – тип переменной-функции
Примечание. Возможно специальное ключевое слово и отдельное объявление переменной - процедуры:
процедура (параметры)имя;
функция (параметры): тип имя;
Семантика
   – нет констант!
   – необходим практически только для того, чтобы передавать процедуру как параметр
   – при объявлении процедурной переменной она получает значение (специальное) – пусто (nil)
   – процедурной переменной может быть присвоено имя любой процедуры с таким же прототипом.
   (в том числе и стандартной) – в компонентном паскале - запрещено
   – начальные значения есть - ? (похоже, можно разрешить)
   – совместимость по присваиванию – точное совпадение списка параметров по типам
Примеры объявлений:
Переменные скалярные
   variable тип имя;
   variable тип имя, имя, …, имя;
        variable тип имя, тип имя, …, тип имя;
   
        variable тип имя := выражение;
   variable тип имя := выражение, имя := выражение, тип имя, …, имя := выражение;
        variable тип имя := выражение, тип имя, имя := выражение,…, тип имя := выражение;
русское слово:   переменная
Константы – требуется явный тип и инициализация
   constant тип имя = выражение;
   constant тип имя = выражение, имя = выражение,…;
constant тип имя = выражение, тип имя = выражение,…;
Внимание:    выражение вычисляется во время интерпретации
русское слово:   константа
Важное замечание: константа может быть только элементарного типа. 
Отметим: перечисление – это просто сокращение явного объявления констант. 
constant
   целый воскресенье = 0, понедельник = 1, вторник = 2;    -- и так далее
Замечание: в данном варианте отсутствует присвоение общего имени набору констант. 
-----------------------------------------------------------------------------------------------------------
переменная массив [размер] тип имя;
переменная указатель на тип имя;
переменная процедура(параметры) имя;
переменная функция(параметры):тип имя;
Присваивание: 
Альтернатива:      пусть 
Английское слово   let
скалярные переменные базовых типов
   присвоить имя := выражение;
   Выражение по типу должно совпадать или приводиться к типу имени 
Единственная операция неявного приведения: integer ->real
массив символов - единственный вариант присваивания массиву выражения.
   присвоить имя := строковый_литерал;
Размер строкового литерала не должен превосходить размера массива   
Элемент массива
   присвоить имя[индекс] := выражение;
   Выражение по типу должно совпадать или приводиться к типу имени 
Вопрос:  элементом массива может быть массив. Разрешается ли присваивание такого элемента ?
И вопрос с присваиванием массивов. Либо вообще запрещаем, либо разрешаем. 
Тогда возврат из функции массива надо разрешать. 
Семантика присваивания может быть разная
      – либо размеры и тип элементов совпадают;
      – либо – не совпадают;  
Поле записи
   присвоить полное_имя := выражение;
   Вид выражения зависит от типа поля записи
Выражение по типу должно совпадать или приводиться к типу имени
    
Указатель на запись
   присвоить имя_указателя := имя_указателя;
   присвоить имя_указателя := new(тип-записи);
   Указатели по типу записи должны совпадать 
   Тип записи в операции new () должен совпадать с типом записи указателя
Процедурная переменная
   присвоить имя_пп := имя_процедуры;
   Переменная имя_пп и процедура с именем имя_процедуры должны иметь точно совпадающий список параметров 
варианты присваивания (Дейкстра)– не нужно, так как редактор семантический ?
присвоить имя, имя,… := выражение;   присвоить одно выражение нескольким переменным-- это бывает полезно
Пока как-то так