Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется написать программу, которая принимает на вход строку, определяет, является ли она записью знакового целого числа на языке Free Pascal, и если да, то каково значение этого числа.
Входные данные содержат одну строку.
Первая строка выходных данных должна содержать число:
Longint
.Longint
.Если первая строка содержит 0, во второй строке должно содержаться значение числа в десятичной записи.
Длина входной строки не более 100 символов.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
2 |
|
|
3 |
|
|
Максимальный балл: | 10 | Ограничение времени: | 1 сек | |
Ограничение памяти: | 512 Мб |
Требуется разработать лексический анализатор. Анализатор должен представлять утилиту командной строки, принимающую в качестве параметра имя файла с исходным кодом и ключ (для отличения от будущих режимов работы).
Анализатор должен определить последовательность лексем согласно выбранному вами языку программирования.
Исходный код анализатора должен быть выделен в отдельный класс/модуль, имеющий интерфейс типа итератора (т.е. функция "получить лексему" должна считывать и возвращать одну лексему без чтения остатка входного файла).
Набор лексем зависит от языка программирования, но обычно включает:
Репозиторий с анализатором должен содержать автоматические тесты, каждый тест должен включать входной и выходной файл.
Отправьте ссылку на конкретный коммит в репозитории на Github, например
https://github.com/klenin/cats-main/commit/dce22c8348808959881ed7d6852c520a41e47c9a
В качестве среды разработки укажите Answer text
.
В файле README укажите свои ФИО, вуз, направление подготовки, год, анализируемый язык программирования, инструкции по запуску как самого анализатора, так и автоматических тестов.
Выходные данные должны содержать описание лексем, по одному в строке. Каждое описание должно состоять из: номера строки, номера символа в строке, класса лексемы, значения лексемы и исходного кода лексемы. Поля описания должны быть разделены табуляцией.
В случае обнаружения ошибки должны выводиться строка, номер символа и текст сообщения об ошибке. После этого анализатор может завершать работу.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 10 |
Требуется написать программу, проводящую синтаксический анализ простейших выражений. Выражения должны удовлетворять грамматике:
expression ::= term { '+' term | '-' term }
term ::= factor { '*' factor | '/' factor }
factor ::= number | identifier | '(' expression ')'
Анализатор должен представлять доработку утилиты командной строки из предыдущего задания, принимающую в качестве параметра имя файла с исходным кодом и ключ для отличения от прочих режимов работы.
Анализатор должен определить абстрактное синтаксическое дерево.
Репозиторий с анализатором должен содержать автоматические тесты, каждый тест должен включать входной и выходной файл.
Отправьте ссылку на конкретный коммит в репозитории на Github, например
https://github.com/klenin/cats-main/commit/dce22c8348808959881ed7d6852c520a41e47c9a
В качестве среды разработки укажите Answer text
.
Выходные данные должны содержать абстрактное синтаксическое дерево, изображённое с помощью отступов и, опционально, ASCII графики.
В случае обнаружения ошибки вместо дерева должна выводиться строка, номер символа и текст сообщения об ошибке. После этого анализатор может завершать работу.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 10 |
Требуется написать программу, проводящую синтаксический анализ подмножества выбранного вами языка программирования. Подмножество зависит от конкретного языка, но обычно включает следующие ограничения:
Репозиторий должен содержать файл с грамматикой реализованного подмножества. Грамматика должна быть получена путём удаления части стандартной грамматики для выбранного языка. Реализованное подмножество должно быть строгим, то есть стандартный компилятор / интерпретатор должен принимать любую программу, которую принимает ваш анализатор.
Анализатор должен представлять доработку утилиты командной строки из предыдущего задания, принимающую в качестве параметра имя файла с исходным кодом и ключ для отличения от прочих режимов работы.
Анализатор должен определить абстрактное синтаксическое дерево.
Репозиторий с анализатором должен содержать автоматические тесты, каждый тест должен включать входной и выходной файл.
Отправьте ссылку на конкретный коммит в репозитории на Github, например
https://github.com/klenin/cats-main/commit/dce22c8348808959881ed7d6852c520a41e47c9a
В качестве среды разработки укажите Answer text.
Выходные данные должны содержать абстрактное синтаксическое дерево, изображённое с помощью отступов и, возможно, ASCII графики.
В случае обнаружения ошибки вместо дерева должна выводиться строка, номер символа и текст сообщения об ошибке. После этого анализатор может завершать работу.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 10 |
Требуется написать программу, проводящую семантический анализ подмножества выбранного вами языка программирования. Подмножество зависит от конкретного языка, но обычно включает следующие ограничения:
Репозиторий должен содержать файл с грамматикой реализованного подмножества. Грамматика должна быть получена путём удаления части стандартной грамматики для выбранного языка. Реализованное подмножество должно быть строгим, то есть стандартный компилятор / интерпретатор должен принимать любую программу, которую принимает ваш анализатор.
Анализатор должен представлять доработку утилиты командной строки из предыдущего задания, принимающую в качестве параметра имя файла с исходным кодом и ключ для отличения от прочих режимов работы.
Анализатор должен определить абстрактное синтаксическое дерево и таблицы символов.
Репозиторий с анализатором должен содержать автоматические тесты, каждый тест должен включать входной и выходной файл.
Анализатор должен определять все виды семантических ошибок, включая несоответствие типов, необъявленные переменные и т.п.
Отправьте ссылку на конкретный коммит в репозитории на Github, например
https://github.com/klenin/cats-main/commit/dce22c8348808959881ed7d6852c520a41e47c9a
В качестве среды разработки укажите Answer text.
Выходные данные должны содержать абстрактное синтаксическое дерево, изображённое с помощью отступов и, возможно, ASCII графики.
В случае обнаружения ошибки вместо дерева должна выводиться строка, номер символа и текст сообщения об ошибке. После этого анализатор может завершать работу.
Максимальный балл: | 10 | Ограничение времени: | 1 сек | |
Ограничение памяти: | 512 Мб |
Требуется написать программу, генерирующую код на основе аннотированного абстрактного синтаксического дерева полученного из подмножества выбранного вами языка программирования.
Сгенерированный код должен быть написан на языке программирования машинного уровня, например языке Ассемблера, WebAssembly, JVM, CLR.
Дальнейший перевод сгенерированного кода в машинный код (либо запуск в случае кода для VM) должен осуществляться стандартными инструментами, например nasm, gcc, java. Инструкции по установке необходимых инструментов должны быть включены в файл README.
Компилятор должен иметь отдельные ключи для режимов "сгенерировать код и остановиться", "сгенерировать код и транслировать его в исполняемый файл / исполнить".
Тесты НЕ должны проверять текстовое содержимое сгенерированного кода. Вместо этого они должны запускать полученные исполняемые модули и сравнивать полученный от них вывод с эталонным.
Дополнительно рекомендуется вместо ручного составления эталонного вывода получать его запуском стаднартного компилятора (например fpc, gcc) на том же самом исходном коде.
Отправьте ссылку на конкретный коммит в репозитории на Github, например
https://github.com/klenin/cats-main/commit/dce22c8348808959881ed7d6852c520a41e47c9a
В качестве среды разработки укажите Answer text.
Выходные данные должны быть файлом на языке низкого уровня или исполняемым файлом в зависимости от выбранного режима.
Максимальный балл: | 20 | Ограничение времени: | 1 сек | |
Ограничение памяти: | 512 Мб |
Требуется написать программу, генерирующую оптимизированный код на основе аннотированного абстрактного синтаксического дерева и, возможно, сгенерированного неоптимизированного кода, полученного из подмножества выбранного вами языка программирования.
Дальнейшие шаги по компиляции и тестированию кода аналогичны заданию "Генерация кода".
Оптимизатор состоит из одного или более оптимизирующих преобразований, каждое из которых оценивается отдельными баллами.
Компилятор должен иметь отдельные ключи, включающие каждое преобразование, а также ключ "включить все оптимизации".
Тесты НЕ должны проверять текстовое содержимое сгенерированного кода. Вместо этого они должны запускать полученные исполняемые модули и сравнивать полученный от них вывод с выводом, полученным без оптимизации.
Рекомендуется в первую очередь рассмотреть следующие оптимизации:
Отправьте ссылку на конкретный коммит в репозитории на Github, например
https://github.com/klenin/cats-main/commit/dce22c8348808959881ed7d6852c520a41e47c9a
В качестве среды разработки укажите Answer text.
Выходные данные должны быть файлом на языке низкого уровня или исполняемым файлом в зависимости от выбранного режима.