Skip to content

Компилятор подмножества языка программирования Eiffel

Notifications You must be signed in to change notification settings

samedit66/serpent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

serpent

serpent

serpent — это компилятор подмножества языка программирования Eiffel, который позволяет компилировать код в Java-байткод и выполнять его на JVM.

Основные возможности:

  • Интеграция с Java:
    Легко подключайте и используйте произвольный Java-код для расширения возможностей ваших приложений. 🔌☕

  • Мощное наследование:
    Поддержка как одиночного, так и множественного наследования для гибкого построения иерархий классов и переиспользования кода. 🏛️✨

  • Удобные массивы:
    Поддержка динамических массивов с элементами одного типа — просто, понятно и эффективно для работы с данными. 📊✅

  • Простой и интуитивный синтаксис:
    Определяйте классы, методы и управляющие конструкции легко и понятно, сосредотачиваясь на логике приложения. 📝👌

  • Богатый набор встроенных инструментов:
    Встроенные операции ввода/вывода, сортировки, поиска и многое другое для быстрого старта разработки. 🔍💡

Установка

Компилятор состоит из двух частей - парсер, написанный на C, собираемый при помощи gcc, flex и bison (под Windows рекомендуется воспользоваться MSYS2 для установки требуемого ПО) и семантический анализатор с генератором кода, написаннные на Python.

Далее необходимо установить serpent через pip как пакет Python:

pip install .

Для того, чтобы иметь возможность просматривать статус компиляции через прогресс-бар, необходимо выполнить следующий вариант установки:

pip install .[tqdm]

В результате появится возможность воспользоваться флагом -v (описан ниже).

После установки доступна команда serpent в терминале.

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

1️⃣ Инициализация нового проекта

Создаёт минимальный проект с файлом app.e:

serpent init
cd app

После выполнения в папке app появится файл app.e:

class
    APPLICATION

create
    make

feature

    make
    do
        print ("Hello, world!%N")
    end
end

2️⃣ Компиляция проекта

Компилируем код из текущей папки app:

serpent build

После этого в папке classes/ появятся скомпилированные файлы .class.

3️⃣ Запуск программы

Выполняем скомпилированный байткод:

serpent run
Hello, Eiffel!

4️⃣ Создание JAR-файла

Создаём исполняемый .jar:

serpent jar

Файл app.jar будет сохранён в текущую папку. Полученный файл необходимо запускать командной:

java -noverify -jar app.jar

Компилятор не генерирует stack map frames, поэтому проверку на их наличие необходимо отключить.

Описание команд

1. Инициализация проекта

Создаёт минимальный проект Eiffel.

Команда:

serpent init [name]

Параметры:

  • name — Имя проекта. Если не указано, по умолчанию используется app.

2. Компиляция проекта

Компилирует проект Eiffel.

Команда:

serpent build [source]

Параметры:

  • source — Папка с исходными файлами проекта. По умолчанию: текущая директория (.).

Флаги:

  • --mainclass (-m) — Главный класс. По умолчанию: APPLICATION.
  • --mainroutine (-r) — Главный (стартовый) метод. По умолчанию: make.
  • --javaversion (-j) — Версия Java. По умолчанию: 8.
  • --outputdir (-d) — Папка для сборки (генерации class-файлов). По умолчанию: classes.
  • --verbose (-v) — Включает отображение прогресс-бара статуса компиляции. Необходима библиотека tqdm.

3. Запуск скомпилированных классов

Запускает скомпилированные классы проекта.

Команда:

serpent run [classpath]

Параметры:

  • [classpath] — Папка с класс-файлами. По умолчанию: classes.

Флаги:

  • --mainclass (-m) — Главный класс. По умолчанию: APPLICATION.

4. Компиляция и исполнение проекта

Выполняет компиляцию проекта и запуск скомпилированных файлов. Сокращение для следующей последовательности команд:

serpent build
serpent run

Команда:

serpent exec [source]

Параметры:

  • source — Папка с исходными файлами проекта. По умолчанию: текущая директория (.).

Флаги:

  • --mainclass (-m) — Главный класс. По умолчанию: APPLICATION.
  • --mainroutine (-r) — Главный (стартовый) метод. По умолчанию: make.
  • --javaversion (-j) — Версия Java. По умолчанию: 8.
  • --outputdir (-d) — Папка для сборки (генерации class-файлов). По умолчанию: classes.
  • --verbose (-v) — Включает отображение прогресс-бара статуса компиляции. Необходима библиотека tqdm.

5. Создание JAR-файла

Создаёт JAR-файл из скомпилированных классов.

Команда:

serpent jar [classpath]

Параметры:

  • [classpath] — Папка с класс-файлами. По умолчанию: classes.

Флаги:

  • --mainclass (-m) — Главный класс. По умолчанию: APPLICATION.
  • --outputdir (-d) — Папка для сохранения JAR-файла. По умолчанию: текущая директория (.).
  • --jarname (-n) — Имя создаваемого JAR-файла. По умолчанию: app.jar.

Запуск JAR-файлов:

Генерируемые class-файлы не могут быть запущены без указания флага -noverify, т.к. serpent не генерирует stack map frames.

java -noverify -jar app.jar