Skip to content

Repository files navigation

Ассемблер для специализированного процессора с использованием фреймворка ANTLR

Ассемблер, созданный для специализированного процессора. Включает собственную грамматику. Использует фреймворк ANTLR для лексического и синтаксического анализа.

Основой является класс ASIPAssembler, который осуществляет трансляцию ассемблерного кода в машинный код. Для него существуют тесты в файле ASIPAssemblerTest.py, рядом с которым лежат тестовые программы и ожидаемый результат.

wakatime

^ общее время работы (не показывается без VPN)

Пример древа разбора:

example

Структура проекта:

.
├── main.py                       # Точка входа для запуска трансляции
├── ASIPAssembler.py              # Главный класс ассемблера, координирующий все этапы трансляции
├── generate_lexpas.ps1           # PowerShell команда для генерации лексера и парсера из грамматик
├── assembly_highlight.xml        # Файл конфигурации подсветки синтаксиса для Notepad++
│
├── grammar                       # Грамматики ANTLR (лексическая в ASICLexer.g4, синтаксическая в ASICParser.g4)
│
├── generated                     # Сгенерированные ANTLR файлы на Python (лексер и парсер)
│
├── models                        # Модели данных для представления элементов ассемблерного кода
│   ├── ...
│   ├── ConfigInstruction.py      # Модель конфигурации БФС
│   ├── ProgInstruction.py        # Модель инструкции
│   ├── enums                     # Перечисления для типизации инструкций и конфигураций
│   └── exceptions                # Пользовательские исключения для обработки ошибок ассемблера
│
├── test                          
│   ├── ASIPAssemblerTest.py      # Основной файл тестов
│   └── test_files                
│       ├── assembler_data        # Тестовые программы на языке ассемблера, можно использовать как примеры
│       └── expected_data         # Ожидаемые данные
│
├── utils                         # Вспомогательные функции
│
└── visitors                      
    ├── FirstPassVisitor.py       # Visitor первого прохода - собирает метки и директивы
    ├── CodeGenerator.py          # Visitor второго прохода - сама генерация кода
    └── ExpressionEvaluator.py    # Отдельный класс для вычисления выражений

Реализовано:

  • Трансляция ассемблерного кода в машинный код (доступны все поля машинных инструкций и конфигураций)
  • Поддержка директив конфигураций
  • Поддержка директив константных входов конфигураций
  • Поддержка директив макросов
  • Поддержка меток
  • Поддержка выражений (с определёнными ограничениями)
  • Автоматическая вставка инструкций ожидания согласно спецификации процессора
  • Проверка значений аргументов операций в конфигурациях согласно спецификации процессора
  • Вывод указания точного места в исходной программе, где возникла ошибка при трансляции
  • Поддержка вывода машинного кода в разных форматах (bin/hex, с указанием исходных строк, с разделением байтов)
  • Синтаксис для Notepad++ (оптимизирован под светлую тему)

Не реализовано:

  • Поддержка директив условной компиляции (#if, #ifdef, #ifndef, #ifmacro, #ifnmacro)
  • Поддержка операторов //, %% и ^^ в выражениях
  • Поддержка скобок в выражениях
  • Пересчёт выражений, использующих метки после вставки дополнительных инструкций ожидания
  • Разделение логических и арифметичeских выражений
  • Порядок вычисления макросов в зависимости от использования других макросов, а не в зависимости от порядка в исходном коде
  • Поддержка отсутствия точки с запятой в конце строки (пока что необходимо)
  • Автоматическая вставка eop в конец программы при его отсутствии (требуется аналитика необходимости данного функционала)
  • Интерфейс ассемблера (терминал, графический интерфейс или IDE)

About

Ассемблер для специализированного процессора

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages