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
.
- Выражения:
- Идентификаторы
- Вырезки из массивов
- Константные выражения
- Вызовы пользовательских функций
- Печать
- Выбор полей структур
- Преобразования типов
- Унарные:
- Адрес
- Разыменование указателя
- Абсолютное значение
- Бинарные
- Тернарный оператор
- Инициализатор
- Операторы:
- Объявления переменных любых типов, а также их инициализация
- Объявления функций
while
do
for
continue
break
return
switch
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
- Добавлены ограничения на вид операндов тернарного оператора