<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Итерация №1: лексический анализ on Компиляторы | ПС</title><link>https://compilers-course.ru/docs/projects/frontend/01_lexer/</link><description>Recent content in Итерация №1: лексический анализ on Компиляторы | ПС</description><generator>Hugo</generator><language>ru-ru</language><atom:link href="https://compilers-course.ru/docs/projects/frontend/01_lexer/index.xml" rel="self" type="application/rss+xml"/><item><title>Создание репозитория</title><link>https://compilers-course.ru/docs/projects/frontend/01_lexer/repository/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compilers-course.ru/docs/projects/frontend/01_lexer/repository/</guid><description>&lt;h1 id="создание-репозитория"&gt;&#10; Создание репозитория&#10; &#10; &lt;a class="anchor" href="#%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d1%80%d0%b5%d0%bf%d0%be%d0%b7%d0%b8%d1%82%d0%be%d1%80%d0%b8%d1%8f"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;h2 id="выбор-git-хостинга"&gt;&#10; Выбор Git хостинга&#10; &#10; &lt;a class="anchor" href="#%d0%b2%d1%8b%d0%b1%d0%be%d1%80-git-%d1%85%d0%be%d1%81%d1%82%d0%b8%d0%bd%d0%b3%d0%b0"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Все изменения по проекту следует публиковать в Git-репозитории, размещённом в облаке.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Одна команда — один репозиторий на все итерации проекта&lt;/li&gt;&#10;&lt;li&gt;Рекомендуется использовать SourceCraft или Github&#10;&lt;ul&gt;&#10;&lt;li&gt;SourceCraft — российская платформа компании Яндекс: &lt;a href="https://sourcecraft.dev/"&gt;https://sourcecraft.dev/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Github — американская платформа компании Microsoft: &lt;a href="http://github.com/"&gt;http://github.com/&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Репозиторий может быть публичным или приватным.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Выберите Git-хостинг и зарегистрируйтесь в нём.&lt;/p&gt;&#10;&lt;p&gt;Создайте пустой репозиторий.&lt;/p&gt;&#10;&lt;p&gt;Если у вас приватный репозиторий, то следует добавить доступ на просмотр и комментирование преподавателю:&lt;/p&gt;</description></item><item><title>Спецификация лексики языка</title><link>https://compilers-course.ru/docs/projects/frontend/01_lexer/specification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compilers-course.ru/docs/projects/frontend/01_lexer/specification/</guid><description>&lt;h1 id="спецификация-лексики-языка"&gt;&#10; Спецификация лексики языка&#10; &#10; &lt;a class="anchor" href="#%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d1%8f-%d0%bb%d0%b5%d0%ba%d1%81%d0%b8%d0%ba%d0%b8-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;В 1-й итерации вы создаёте спецификацию с двумя разделами:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Введение — название языка и его ключевые особенности, связь с другими языками.&lt;/li&gt;&#10;&lt;li&gt;Лексика — детальное описание лексем языка.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Ничего иного в 1-й версии быть не должно.&lt;/p&gt;&#10;&lt;h2 id="требования-к-языку"&gt;&#10; Требования к языку&#10; &#10; &lt;a class="anchor" href="#%d1%82%d1%80%d0%b5%d0%b1%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%ba-%d1%8f%d0%b7%d1%8b%d0%ba%d1%83"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Вы проектируете языке со следующими свойствами:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Весь код программы в одном файле&lt;/li&gt;&#10;&lt;li&gt;Есть точка входа — функция main (как в C/C++), метод main (как в Java/C#), основной блок (как в Pascal) или что-то иное&lt;/li&gt;&#10;&lt;li&gt;Строго типизированный — есть числовой тип, строковый тип и тип boolean&lt;/li&gt;&#10;&lt;li&gt;Императивный стиль&lt;/li&gt;&#10;&lt;li&gt;Есть арифметические операторы, логические операторы и операторы сравнения&lt;/li&gt;&#10;&lt;li&gt;Средства для ввода/вывода с помощью встроенных функций, специальных инструкций или иных инструментов&lt;/li&gt;&#10;&lt;li&gt;Есть поддержка переменных, при этом переменные объявляются явно&lt;/li&gt;&#10;&lt;li&gt;Есть поддержка структурного программирования — ветвления, циклы, последовательное выполнение инструкций в блоке&lt;/li&gt;&#10;&lt;li&gt;Есть поддержка массивов&lt;/li&gt;&#10;&lt;li&gt;Есть поддержка структур (записей) или классов — если выбраны классы, то у них есть методы&lt;/li&gt;&#10;&lt;li&gt;Есть поддержка процедурного стиля, при желании можно добавить поддержку классов и методов&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="файл-спецификации"&gt;&#10; Файл спецификации&#10; &#10; &lt;a class="anchor" href="#%d1%84%d0%b0%d0%b9%d0%bb-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Спецификация — это один файл &lt;code&gt;docs/specification.md&lt;/code&gt;, написанный по правилам markdown (CommonMark либо Github Flavoured Markdown).&lt;/p&gt;</description></item><item><title>Лексический анализатор</title><link>https://compilers-course.ru/docs/projects/frontend/01_lexer/lexer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compilers-course.ru/docs/projects/frontend/01_lexer/lexer/</guid><description>&lt;h1 id="лексический-анализатор"&gt;&#10; Лексический анализатор&#10; &#10; &lt;a class="anchor" href="#%d0%bb%d0%b5%d0%ba%d1%81%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8%d0%b9-%d0%b0%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%82%d0%be%d1%80"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;Нужно написать и покрыть тестами модуль лексического анализа.&lt;/p&gt;&#10;&lt;h2 id="соответствие-спецификации"&gt;&#10; Соответствие спецификации&#10; &#10; &lt;a class="anchor" href="#%d1%81%d0%be%d0%be%d1%82%d0%b2%d0%b5%d1%82%d1%81%d1%82%d0%b2%d0%b8%d0%b5-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Лексический анализатор и его тесты должны соответствовать спецификации вашего языка:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Спецификация должна появиться до начала кодирования — так же, как и в реальных проектах.&lt;/li&gt;&#10;&lt;li&gt;Вы можете составлять спецификацию совместно или доверить это одному человеку.&lt;/li&gt;&#10;&lt;li&gt;Ждать проверки спецификации преподавателем не нужно.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="требования-к-коду"&gt;&#10; Требования к коду&#10; &#10; &lt;a class="anchor" href="#%d1%82%d1%80%d0%b5%d0%b1%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%ba-%d0%ba%d0%be%d0%b4%d1%83"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;a href="https://compilers-course.ru/docs/guides/ai-use-policy"&gt;Правила использования ИИ&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://compilers-course.ru/docs/guides/code-conventions"&gt;Соглашения о кодировании&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="требования-к-реализации-лексера"&gt;&#10; Требования к реализации лексера&#10; &#10; &lt;a class="anchor" href="#%d1%82%d1%80%d0%b5%d0%b1%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%ba-%d1%80%d0%b5%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d0%b8-%d0%bb%d0%b5%d0%ba%d1%81%d0%b5%d1%80%d0%b0"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Лексер следует писать без генераторов лексических анализаторов (таких как GNU Flex, lexertl и так далее)&lt;/li&gt;&#10;&lt;li&gt;Весь код, связанный с лексическим анализом, должен располагаться в отдельной модуле программы&lt;/li&gt;&#10;&lt;li&gt;Лексер должен загружать файл в память и обрабатывать посимвольно, при этом:&#10;&lt;ul&gt;&#10;&lt;li&gt;следует хранить исходный текст и позицию чтения (целое число)&lt;/li&gt;&#10;&lt;li&gt;допускается предпросмотр на сколько угодно символов вперёд и сдвиг позиции чтения вперёд (увеличение позиции чтения)&lt;/li&gt;&#10;&lt;li&gt;возврат назад (уменьшение позиции чтения) не допускается&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="требования-к-лексике-языка"&gt;&#10; Требования к лексике языка&#10; &#10; &lt;a class="anchor" href="#%d1%82%d1%80%d0%b5%d0%b1%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%ba-%d0%bb%d0%b5%d0%ba%d1%81%d0%b8%d0%ba%d0%b5-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Минимум один тип комментариев&lt;/li&gt;&#10;&lt;li&gt;Продуман набор операторов&lt;/li&gt;&#10;&lt;li&gt;Выбраны ключевые слова&lt;/li&gt;&#10;&lt;li&gt;Продуманы разделители блоков и инструкций&lt;/li&gt;&#10;&lt;li&gt;Обозначены правила для идентификаторов: какие символы содержат&lt;/li&gt;&#10;&lt;li&gt;Указано, важен ли регистр символов для идентификаторов и ключевых слов&lt;/li&gt;&#10;&lt;li&gt;Есть литералы для числового типа — целочисленного либо типа с плавающей точкой&lt;/li&gt;&#10;&lt;li&gt;Есть литералы для строк&lt;/li&gt;&#10;&lt;li&gt;Для литералов строк выбран способ экранирования символов, чтобы можно внутри литерала задать любой текст, включая текст с кавычками и переносами строк&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="требования-к-тестам-лексера"&gt;&#10; Требования к тестам лексера&#10; &#10; &lt;a class="anchor" href="#%d1%82%d1%80%d0%b5%d0%b1%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%ba-%d1%82%d0%b5%d1%81%d1%82%d0%b0%d0%bc-%d0%bb%d0%b5%d0%ba%d1%81%d0%b5%d1%80%d0%b0"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Вы должны убедиться, что:&lt;/p&gt;</description></item><item><title>Плагин VSCode с поддержкой лексики</title><link>https://compilers-course.ru/docs/projects/frontend/01_lexer/vscode-plugin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compilers-course.ru/docs/projects/frontend/01_lexer/vscode-plugin/</guid><description>&lt;h1 id="плагин-vscode-с-поддержкой-лексики"&gt;&#10; Плагин VSCode с поддержкой лексики&#10; &#10; &lt;a class="anchor" href="#%d0%bf%d0%bb%d0%b0%d0%b3%d0%b8%d0%bd-vscode-%d1%81-%d0%bf%d0%be%d0%b4%d0%b4%d0%b5%d1%80%d0%b6%d0%ba%d0%be%d0%b9-%d0%bb%d0%b5%d0%ba%d1%81%d0%b8%d0%ba%d0%b8"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;Нужно разработать расширение VSCode с поддержкой лексики языка.&lt;/p&gt;&#10;&lt;p&gt;Не требуется добавлять поддержку LSP-сервера на данном этапе — его ещё нет.&lt;/p&gt;&#10;&lt;h2 id="соответствие-спецификации"&gt;&#10; Соответствие спецификации&#10; &#10; &lt;a class="anchor" href="#%d1%81%d0%be%d0%be%d1%82%d0%b2%d0%b5%d1%82%d1%81%d1%82%d0%b2%d0%b8%d0%b5-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Расширение VSCode должно соответствовать спецификации вашего языка&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Спецификация должна появиться до начала кодирования — так же, как и в реальных проектах.&lt;/li&gt;&#10;&lt;li&gt;Вы можете составлять спецификацию совместно или доверить это одному человеку.&lt;/li&gt;&#10;&lt;li&gt;Ждать проверки спецификации преподавателем не нужно.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="ожидаемый-результат"&gt;&#10; Ожидаемый результат&#10; &#10; &lt;a class="anchor" href="#%d0%be%d0%b6%d0%b8%d0%b4%d0%b0%d0%b5%d0%bc%d1%8b%d0%b9-%d1%80%d0%b5%d0%b7%d1%83%d0%bb%d1%8c%d1%82%d0%b0%d1%82"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Ожидается расширение VSCode, основанное на декларативном формате описания языка:&lt;/p&gt;</description></item></channel></rss>