Общие принципы

1. Пример кода

Вот пример простейшей программы, которая выводит на экран сообщение «Привет, мир!».

стат функция запустить() возвращает число:
	Кар.Печатать("Привет, мир!\н")
	вернуть 0

Данный текст программы должен быть записан в кодировке UTF-8 и помещен в файл с раширением «кар», например: ПриветМир.кар. Далее его можно откомпилировать с помощью программы

kar ПриветМир -o hello.exe

и запустить из командной строки

hello.exe

После запуска программа выведен на экран строку «Привет, мир!».

2. Общее описание языка

Язык программирования Картарика или Картарский язык является строго-типизированным объектно-ориентированным языком с обязательной инициализацией переменных с ограниченным сборщиком мусора и запретом кольцевых зависимостей (см. раздел «Запрет кольцевых зависимостей»).

3. Общая структура проекта

Файловая структура проекта. Проект состоит из одного или множества файлов модулей (один или более) а также может содержать файл проекта (ноль или один). Модули могут располагатся в каталогах или подкаталогах.

Результатом компиляции проекта является исполняемая программа либо библиотека.

Пример построения проекта.

Каталог1
    Подкаталог1
        Модуль.кар
        Модуль11А.кар
        Модуль11Б.кар
    Подкаталог2
        Модуль.кар
        Модуль12А.кар
Каталог2
    Модуль2.кар
...
КаталогН
    Модуль.кар
    ЕщёОдинМодуль.кар
Модуль1.кар
Модуль2.кар
Модуль3.кар
Проект.проект

3.1 Модули

В модулях записывается непосредственно код программы.

В картарском языке модуль = файл = класс. Это означает, что если необходимо создать два разных класса, то для них необходимо создать два разных файла и в них соответственно описать эти классы.

Файл модуля имеет расширение кар. Имя файла (без расширения) должен соответствовать правилам идентификатора (см. п. 5 статьи «Лексическая структура модуля»).

Подробное описание синтаксиса модулей см. в п.7 статьи «Лексическая структура модуля».

3.2 Каталоги

Имена каталогов должны быть без расширения и должны соответствовать правилам идентификатора (см. п.5 статьи «Лексическая структура модуля»). Основное назначение каталогов — разбивать модули на логические группы.

3.3 Файл проекта

В файле проекта находятся настройки проекта, свойства, параметры компиляции и прочее, что не может быть описано в непосредственно в коде программы. Более подробное описание смотри в статье  «Файл описания проекта».

3.4 Внешние ссылки

Если в одном модуле необходима ссылка на другой модуль, то он записывается в виде пути и имени файла (без расширения), разделенных точкой. Например, если модуль с именем Модуль.кар лежит в каталоге Каталог1, который в свою очередь лежит в каталоге Каталог2, то путь к модулю записывается так: Каталог2.Каталог1.Модуль.

Алгоритм поиска модуля. При поиске модуля программа пытается найти модуль в текущем каталоге, затем в каталоге проекта, затем в каталоге библиотек, затем в каталоге стандартной библиотеки.

В сообщениях об ошибках или в других случаях, когда нужно однозначно описать какой конкретно модуль имеется в виду можно написать:

Стандарт:Модуль.Подмодуль
Библиотека.<ИмяБиблиотеки>.<ВерсияБиблиотеки>:Модуль.Подмодуль
Проект:Модуль.Подмодуль

4. Юникод и кодировка

Написанные программы используют ЮНИКОД (UNICODE), описание которого можно найти на сайте

http://www.unicode.org

Используемая кодировка: UTF-8. Соответствующий стандарт находится здесь:

https://tools.ietf.org/rfc/rfc3629.txt

5. Грамматика

Для описания грамматики используется расширенная форма Бэкуса-Наура, с некоторыми дополнениями.

Описание отдельных символов:

  • Переменная, состоящая из одного символа, обозначает этот символ. Например: ф — русская буква ф, z — латинская буква z и т.д.
  • Для различения похожих букв русского и английского алфавита, там где не понятен контекст, перед русской буквой ставится префикс р (русский), перед английской буквой ставится префикс l (latin). Например ра обозначает русскую букву а, la — обозначает латинскую букву a.
  • Переменной «юникод» обозначается любой символ Юникода.
  • Переменной «буква» обозначается любая буква любого алфавита Юникода.
  • Символ Юникода также можно записать в виде \uHEX. То есть значала записывается обратная косая черта, затем английская буква u и после неё номер символа в таблице Юникода в шестнадцатеричном формате. Например \u5F обозначает символ нижнего подчеркивания.

Правила записи расширенной формы Бэкуса-Наура, используемые в этом документе:

  • Конкатенация. Конкатенируемые символы заключены в двойные кавычки. Правило вида A = «BCD». обозначает, что нетерминал A состоит из трех символов — B, C и D.
  • Выбор. Обозначается вертикальной чертой. Правило вида A = B|C|D. Обозначает, что нетерминал A может состоять либо из B, либо из C, либо из D.
  • Для сокращения записи выбора, если символы стоят рядом в таблице Юникод, можно обозначить промежуток символом тире. Правило вида 1-3. Обозначает либо 1, либо 2, либо 3.
  • Кроме. Исключения в выборе обозначается восклицательным знаком. Правило 0-9!3!5 обозначает все цифры от 0 до 9, кроме 3 и 5. То есть 0, 1, 2, 4, 6, 7, 8, 9.
  • Условное вхождение. Квадратные скобки выделяют необязательный элемент выражения, который может присутствовать, а может и отсутствовать. Правило вида A = [B]. обозначает, что нетерминал A либо является пустым, либо состоит из символа B.
  • Повторение. Фигурные скобки обозначают конкатенацию любого числа (включая нуль) записанных в ней элементов. Правило вида A = {B}. обозначает, что A — либо пустой, либо представляет собой конкатенацию любого числа символов B (то есть A — это либо пустой элемент, либо B, либо BB, либо BBB и так далее). Если требуется, чтобы A представлял собой либо B, либо произвольное число B, но не мог быть пустым, используется запись A = B{B}.
  • Круглые скобки. Они применяются для группировки элементов при формировании сложных выражений. Например, правило A = (B|C)(D|E). обозначает, что A состоит из двух символов, первым из которых является либо B, либо C, вторым — либо D, либо E, то есть A может быть одной из цепочек BD, BE, CD, CE.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *