Skip to content

Releases: andrey-terekhov/RuC

Compiler v2.6.0

16 Feb 11:03
ef441d5
Compare
Choose a tag to compare

Реализован новый препроцессор РуСи:

  • Новый алгоритм позиционирования на основе #line с Си совместимостью
  • Полноценная поддержка многофайловости
  • Добавлена поддержка -D флага для определения макросов из консоли
  • Запрещены плавающие операции в выражениях препроцессора
  • Все директивы теперь строго однострочные, за исключением блочных
  • Поддержка переноса строки обратным слешем
  • Поддержка отделения # символа от имени директивы
  • Добавлены операторы препроцессора # и ## для однострочных макросов
  • Добавлена предварительная обработка аргументов вызова макроса
  • Учтены области видимости аргументов #macro директивы
  • Контроль глубины подключения: MAX_INCLUDE_DEPTH
  • Контроль глубины рекурсии вызовов: MAX_CALL_DEPTH
  • Контроль количества итераций циклов: MAX_ITERATION
  • Вычислитель на основе алгоритма Бауэра и Замельзона

Список директив препроцессора:

  • #include, #INCLUDE, #подключить, #ПОДКЛЮЧИТЬ
  • #line, #LINE, #строка, #СТРОКА
  • #define, #DEFINE, #определить, #ОПРЕДЕЛИТЬ
  • #set, #SET, #переопределить, #ПЕРЕОПРЕДЕЛИТЬ
  • #undef, #UNDEF, #разопределить, #РАЗОПРЕДЕЛИТЬ
  • #macro, #MACRO, #макро, #МАКРО
  • #endm, #ENDM, #конецм, #КОНЕЦМ
  • #ifdef, #IFDEF, #еслибыл, #ЕСЛИБЫЛ
  • #ifndef, #IFNDEF, #еслинебыл, #ЕСЛИНЕБЫЛ
  • #if, #IF, #если, #ЕСЛИ
  • #elif, #ELIF, #инесли, #ИНЕСЛИ
  • #else, #ELSE, #иначе, #ИНАЧЕ
  • #endif, #ENDIF, #конецесли, #КОНЕЦЕСЛИ
  • #eval, #EVAL, #вычислить, #ВЫЧИСЛИТЬ
  • #while, #WHILE, #пока, #ПОКА
  • #endw, #ENDW, #конецп, #КОНЕЦП

Список операторов вычислителя по приоритетам:

  • Унарные:
    • ~, !, -, +
  • Бинарные:
    • *, /, %
    • +, -
    • >>, <<
    • <, >, <=, >=
    • ==, !=
    • &
    • |
    • &&
    • ||

Compiler v2.5.1

11 Feb 01:54
9da460d
Compare
Choose a tag to compare
  • Исправлен баг с областью видимости переменных
  • Упрощен интерфейс извлечения флагов из workspace
  • Добавлен флаг -E для выхода после препроцессирования кода
  • Удалены устаревшие настройки Sublime
  • Обновлены GitHub Actions:
    • actions/checkout обновлен до v3
    • Отключено скачивание всей истории коммитов
    • Изменено условие синхронизации с GitLab на более гибкое

Compiler v2.5.0

10 Jan 16:57
706840b
Compare
Choose a tag to compare

Добавлена кодогенерация MIPS на основе подхода rvalue / lvalue.

  • Выражения:
    • Идентификаторы
    • Вырезки из массивов
    • Константные выражения
    • Вызовы пользовательских функций
    • Печать
    • Выбор полей структур
    • Преобразования типов
    • Унарные:
      • Адрес
      • Разыменование указателя
      • Абсолютное значение
    • Бинарные
    • Тернарный оператор
    • Инициализатор
  • Операторы:
    • Объявления переменных любых типов, а также их инициализация
    • Объявления функций
    • while
    • do
    • for
    • continue
    • break
    • return
    • switch

Compiler v2.4.4

24 Nov 11:52
df21fb2
Compare
Choose a tag to compare

Нововведения:

  • Сигнатура функции main теперь ограничена:
    • Возвращаемый тип должен быть int или void
    • Параметры либо отсутствуют, либо один единственный параметр типа массив
  • Добавлено предупреждение, если результат операции присвоения используется в условном выражении

Исправления:

  • Распределением памяти кодогенератора виртуальной машины теперь занимается он сам
  • Проведен рефакторинг локальных объявлений:
    • Парсер теперь разрешает массивы без размеров-выражений
    • Позиционирование ошибок и восстановление после них теперь работает точнее
  • Мелкие исправления кодогенератора LLVM
  • Исправлена сборка под Windows в контексте C++

Compiler v2.4.3

12 Apr 10:10
Compare
Choose a tag to compare

В генерации LLVM реализовано следующее:

  • Русские имена функций
  • Передача указателей в функцию
  • Передача массивов в функцию
  • Передача многомерных массивов в функцию
  • Передача инициализатора в функцию
  • Функция char *strcpy(char *, char *)
  • Функция int upb(void [])
  • Тип перечисления enum
  • Оператор ,
  • for без условия

Compiler v2.4.2

01 Apr 15:13
950cc88
Compare
Choose a tag to compare

Добавлена поддержка следующих кодов выхода:

Description Variable Code
Success code sts_success 0
System error code sts_system_error 1
Reserved testing system code sts_test_error 64
Preprocessor error code sts_macro_error 65
Parser error code sts_parse_error 66
Linker error code sts_link_error 67
Optimization error code sts_optimize_error 68
Default code generator error code sts_codegen_error 69
Virtual Machine generator error code sts_virtul_error 70
LLVM generator error code sts_llvm_error 71
MIPS generator error code sts_mips_error 72

Compiler v2.4.1

10 Mar 09:25
Compare
Choose a tag to compare

Исправлена работа switch в генерации LLVM для тестов:

 compiling failure : ../tests/codegen/executable/switch/test_1.c
 compiling failure : ../tests/codegen/input/getid/switch/anikin.c 
 compiling failure : ../tests/codegen/input/getid/switch/dina.c 
 compiling failure : ../tests/codegen/input/getid/switch/stasya.c

Compiler v2.4.0

09 Mar 18:02
dbc0bd3
Compare
Choose a tag to compare

Добавлена поддержка LLVM генерации.

Compiler v2.3.1

09 Mar 16:15
Compare
Choose a tag to compare
  • Удален унарный оператор +
  • Добавлен объект для сигнализации об ошибках
  • Preserve structure names
  • Обновление тестирующей системы
  • Исправление предупреждений в utils
  • Проверки линковки вынесены
  • Исправления предупреждений компиляции
  • Фикс проверки наличия main

Compiler v2.3.0

02 Mar 16:03
e4db015
Compare
Choose a tag to compare

Нововведения:

  • Добавлен логический тип bool
  • Логические операции теперь возвращают результат типа bool, а логические значения не могут участвовать в арифметических операциях
  • Добавлены константы логического типа true и false
  • Добавлена поддержка двоичных, восьмеричных и шестнадцатиричных целочисленных литералов
  • upb теперь является унарным оператором, принимающим массив в качестве операнда
  • Удалена поддержка оператора goto и пользовательских меток

Улучшения:

  • Проведен рефакторинг разбора операторов
  • В тесты на генерацию кода добавлены assert для автоматической проверки значений переменных
  • В API синтаксического дерева разбора добавлены assert для проверки корректности обращения
  • Значительно доработано восстановления разбора выражений и операторов после обнаружения ошибок
  • База тестов на лексические ошибки, а также синтаксические и семантические ошибки в выражениях и операторах пересортирована и дополнена

Исправления:

  • Возвращена печать символов и строк при помощи функций print и printid
  • Добавлены ограничения на вид операндов тернарного оператора