Releases: andrey-terekhov/RuC
Releases · andrey-terekhov/RuC
Compiler v2.6.0
Реализован новый препроцессор РуСи:
- Новый алгоритм позиционирования на основе
#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
- Исправлен баг с областью видимости переменных
- Упрощен интерфейс извлечения флагов из
workspace - Добавлен флаг
-Eдля выхода после препроцессирования кода - Удалены устаревшие настройки Sublime
- Обновлены GitHub Actions:
actions/checkoutобновлен доv3- Отключено скачивание всей истории коммитов
- Изменено условие синхронизации с GitLab на более гибкое
Compiler v2.5.0
Добавлена кодогенерация MIPS на основе подхода rvalue / lvalue.
- Выражения:
- Идентификаторы
- Вырезки из массивов
- Константные выражения
- Вызовы пользовательских функций
- Печать
- Выбор полей структур
- Преобразования типов
- Унарные:
- Адрес
- Разыменование указателя
- Абсолютное значение
- Бинарные
- Тернарный оператор
- Инициализатор
- Операторы:
- Объявления переменных любых типов, а также их инициализация
- Объявления функций
whiledoforcontinuebreakreturnswitch
Compiler v2.4.4
Нововведения:
- Сигнатура функции
mainтеперь ограничена:- Возвращаемый тип должен быть
intилиvoid - Параметры либо отсутствуют, либо один единственный параметр типа массив
- Возвращаемый тип должен быть
- Добавлено предупреждение, если результат операции присвоения используется в условном выражении
Исправления:
- Распределением памяти кодогенератора виртуальной машины теперь занимается он сам
- Проведен рефакторинг локальных объявлений:
- Парсер теперь разрешает массивы без размеров-выражений
- Позиционирование ошибок и восстановление после них теперь работает точнее
- Мелкие исправления кодогенератора LLVM
- Исправлена сборка под Windows в контексте C++
Compiler v2.4.3
В генерации LLVM реализовано следующее:
- Русские имена функций
- Передача указателей в функцию
- Передача массивов в функцию
- Передача многомерных массивов в функцию
- Передача инициализатора в функцию
- Функция
char *strcpy(char *, char *) - Функция
int upb(void []) - Тип перечисления
enum - Оператор
, forбез условия
Compiler v2.4.2
Добавлена поддержка следующих кодов выхода:
| 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
Исправлена работа 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
Добавлена поддержка LLVM генерации.
Compiler v2.3.1
- Удален унарный оператор
+ - Добавлен объект для сигнализации об ошибках
- Preserve structure names
- Обновление тестирующей системы
- Исправление предупреждений в
utils - Проверки линковки вынесены
- Исправления предупреждений компиляции
- Фикс проверки наличия
main
Compiler v2.3.0
Нововведения:
- Добавлен логический тип
bool - Логические операции теперь возвращают результат типа
bool, а логические значения не могут участвовать в арифметических операциях - Добавлены константы логического типа
trueиfalse - Добавлена поддержка двоичных, восьмеричных и шестнадцатиричных целочисленных литералов
upbтеперь является унарным оператором, принимающим массив в качестве операнда- Удалена поддержка оператора
gotoи пользовательских меток
Улучшения:
- Проведен рефакторинг разбора операторов
- В тесты на генерацию кода добавлены
assertдля автоматической проверки значений переменных - В API синтаксического дерева разбора добавлены
assertдля проверки корректности обращения - Значительно доработано восстановления разбора выражений и операторов после обнаружения ошибок
- База тестов на лексические ошибки, а также синтаксические и семантические ошибки в выражениях и операторах пересортирована и дополнена
Исправления:
- Возвращена печать символов и строк при помощи функций
printиprintid - Добавлены ограничения на вид операндов тернарного оператора