World Conquest Chronicles

World Conquest Chronicles

Интерпретатор ЯП Micro, v2.1

Скриншот примера кода и подсветки синтаксиса

Интерпретатор языка программирования Micro.

Поддержка форсирования вычислений и преобразования типов, битовые функции и функции для работы с хеш-таблицами, модульность, стандартная библиотека, рефакторинг, pip-пакет.

Изменения

  • Добавить преобразование типов #1
  • Добавить возможность форсирования вычислений #2
  • Удалить тип int #3
  • Удалить внутренний тип bool #32
  • Добавить поддержку шестнадцатеричных числовых констант #29
  • Библиотека:
    • Добавить библиотеку для юнит-тестирования #53
    • Добавить библиотеку для работы со списками #58
    • Добавить библиотеку для работы с CLI #59
    • Добавить в библиотеку функцию для создания универсального цикла #68
  • Рантайм:
    • Переименовать функцию рантайма $ в [] #4
    • Добавить в рантайм функцию round #10
    • Добавить в рантайм функции strb, strs, strl, strh и strhh #12
    • Добавить в рантайм функции false и true #13
    • Добавить в рантайм функции ++ и -- #21
    • Добавить функции рантайма + поддержку конкатенации списков и слияния хеш-таблиц #22
    • Добавить в рантайм битовые функции #30
    • Переименовать функцию рантайма ~ в _ #31
    • Дополнить поддержку функции рантайма args #36
    • Добавить в рантайм функции для работы с хеш-таблицами #37
    • Добавить в рантайм функцию size #38
    • Сделать функции рантайма && и || ленивыми #46
    • Добавить в рантайм функцию load #49
    • Добавить в рантайм функцию для доступа к коллекциям по индексу #60
    • Добавить в функции рантайма head и tail поддержку пустых списков #61
    • Добавить в рантайм функцию для указания значений по умолчанию #62
    • Системные функции:
      • Добавить в рантайм функции outln и errln #9
      • Добавить в рантайм функцию env #14
      • Добавить в рантайм функцию time #15
      • Поддерживать чтение строки в функции рантайма in #16
      • Добавить в рантайм функцию inln #39
      • Добавить поддержку вывода сообщения в функцию рантайма exit #45
  • Обработка строк:
    • Упростить регулярные выражения символов и строк #23
    • Упростить функции quote и unquote #24
    • Добавить поддержку шестнадцатеричных escape-последовательностей #25
    • Удалять конечные нули из дробной части при преобразовании числа в строку #33
  • Обработка ошибок:
    • Выбрасывать исключение при попытке преобразования в строку значения неизвестного типа #34
    • Выбрасывать исключение при попытке вычисления сущности неизвестного типа #35
    • Выбрасывать исключение при попытке создания функционального типа из неподходящего источника #40
    • Рефакторинг обработки ошибок #44
    • Добавить имя файла скрипта в сообщения об ошибках #48
    • Отображать исключения как все прочие ошибки #52
    • Определять позицию в коде и имя файла для ошибок времени выполнения #57
    • Обрабатывать исключение KeyboardInterrupt (Ctrl+C) #63
  • Рефакторинг:
    • Удалить отладочный код #5
    • Привести стиль кода в соответствие с PEP 8 #6
    • Вынести тесты в примеры #11
    • Реорганизовать код #17
    • Рефакторинг встроенных функций #18
    • Рефакторинг препарсера #19
    • Вынести в отдельный класс преобразование в строку списка токенов #27
    • Рефакторинг парсера #41
    • Рефакторинг вспомогательных функций #42
    • Рефакторинг функционального типа #43
    • Вынести в отдельную функцию основной код #47
  • pip-пакет:
    • Оформить pip-пакет #7
    • Подключить библиотеку PLY как зависимость pip-пакета #8
  • Сниппеты:
    • Добавить в сниппеты пробелы в шаблонах с функциями #64
    • Добавить в сниппеты поддержку классов #65
    • Добавить в сниппеты заготовку для обхода списка #66
    • Добавить в сниппеты пробелы или переносы строк перед последним положением курсора #67
  • Сделать скоуп замыканий независимым между их запусками #56
  • Добавить возможности функции рантайма load по поиску файлов самому интерпретатору #55
  • Добавить кеширование загружаемых скриптов #54
  • Использовать независимые списки функций при парсинге и вычислениях #51
  • Добавить новый пример — weasel program #50
  • Изменить лицензию документации на CC BY 4.0 #28
  • Игнорировать символ возврата каретки #26

Описание

Описание языка.

Installation

Clone this repository:

$ git clone https://github.com/thewizardplusplus/micro.git
$ cd micro

Then install the interpreter with pip tool:

$ sudo -H python3.5 -m pip install .

sudo command is required to install micro console script. If it's not required, sudo command can be omitted:

$ python3.5 -m pip install .

But then the interpreter should be started as python3.5 -m micro.

Fix the warning from PLY library

When you're running the interpreter, you can get the following error:

WARNING: Couldn't create 'parsetab'. [Errno 13] Permission denied: '/usr/local/lib/python3.5/dist-packages/micro/parsetab.py'

In this case, you need to adjust permissions of the specified file:

$ sudo touch /usr/local/lib/python3.5/dist-packages/micro/parsetab.py
$ sudo chown "$USER:$USER" /usr/local/lib/python3.5/dist-packages/micro/parsetab.py

Использование

$ micro -v | --version
$ micro -h | --help
$ micro [-t TARGET | --target TARGET] [<script>] [<args>...]

Опции:

  • -v, --version — показать версию и выйти;
  • -h, --help — показать справку и выйти;
  • -t TARGET, --target TARGET — установить цель обработки скрипта; она может принимать следующие значения:
    • tokens;
    • preast;
    • ast;
    • evaluation (значение по умолчанию).

Аргументы:

  • <script> — путь к скрипту (если он пуст или равен -, тогда скрипт будет читаться с stdin; значение по умолчанию: -);
  • <args> — аргументы скрипта.

Репозиторий

Ссылка: https://github.com/thewizardplusplus/micro/tree/v2.1.

Содержание: код, документация, инструменты (подсветка синтаксиса), стандартная библиотека и примеры.

Лицензия:

  • кода — MIT;
  • документации — CC BY 4.0.

Скриншоты

One-dimensional cellular automata

One-dimensional cellular automata

Weasel program

Weasel program

Unit tests

Unit tests, part 1

Unit tests, part 2