<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Итерация №3: переменные и функции on Компиляторы | ПС</title><link>https://compilers-course.ru/docs/projects/frontend/03_variables/</link><description>Recent content in Итерация №3: переменные и функции on Компиляторы | ПС</description><generator>Hugo</generator><language>ru-ru</language><atom:link href="https://compilers-course.ru/docs/projects/frontend/03_variables/index.xml" rel="self" type="application/rss+xml"/><item><title>Внедрение AST</title><link>https://compilers-course.ru/docs/projects/frontend/03_variables/ast/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compilers-course.ru/docs/projects/frontend/03_variables/ast/</guid><description>&lt;h1 id="внедрение-ast"&gt;&#10; Внедрение AST&#10; &#10; &lt;a class="anchor" href="#%d0%b2%d0%bd%d0%b5%d0%b4%d1%80%d0%b5%d0%bd%d0%b8%d0%b5-ast"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;Нужно внедрить AST перед дальнейшим расширением возможностей языка.&lt;/p&gt;&#10;&lt;h2 id="порядок-выполнения"&gt;&#10; Порядок выполнения&#10; &#10; &lt;a class="anchor" href="#%d0%bf%d0%be%d1%80%d1%8f%d0%b4%d0%be%d0%ba-%d0%b2%d1%8b%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Проверьте приёмочные тесты — они должны быть устойчивы к рефакторингу за счёт вызова стабильного API вышего проекта&lt;/li&gt;&#10;&lt;li&gt;Спроектируйте AST в отдельном модуле, в том числе:&#10;&lt;ul&gt;&#10;&lt;li&gt;иерархию классов узлов вашего языка&lt;/li&gt;&#10;&lt;li&gt;интерфейс &lt;code&gt;IAstVisitor&lt;/code&gt; для обхода узлов AST&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Внедрите AST в проект&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="внедрение-в-проект"&gt;&#10; Внедрение в проект&#10; &#10; &lt;a class="anchor" href="#%d0%b2%d0%bd%d0%b5%d0%b4%d1%80%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;h3 id="для-проектов-без-vm"&gt;&#10; Для проектов без VM&#10; &#10; &lt;a class="anchor" href="#%d0%b4%d0%bb%d1%8f-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%be%d0%b2-%d0%b1%d0%b5%d0%b7-vm"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h3&gt;&#10;&lt;p&gt;Для тех, кто выбрал 🟢 зелёную дорожку:&lt;/p&gt;</description></item><item><title>Поддержка переменных и функций</title><link>https://compilers-course.ru/docs/projects/frontend/03_variables/variables-and-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compilers-course.ru/docs/projects/frontend/03_variables/variables-and-functions/</guid><description>&lt;h1 id="поддержка-переменных-и-функций"&gt;&#10; Поддержка переменных и функций&#10; &#10; &lt;a class="anchor" href="#%d0%bf%d0%be%d0%b4%d0%b4%d0%b5%d1%80%d0%b6%d0%ba%d0%b0-%d0%bf%d0%b5%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%bd%d1%8b%d1%85-%d0%b8-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b9"&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="#%d0%bf%d0%be%d1%80%d1%8f%d0%b4%d0%be%d0%ba-%d0%b2%d1%8b%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Напишите падающие приёмочные тесты с примерами программ на вашем языкее&#10;&lt;ul&gt;&#10;&lt;li&gt;эти примеры должны показывать все новые возможности языка&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Обновите спецификацию языка: EBNF-грамматику,&#10;&lt;ul&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;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%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;</description></item><item><title>Навигация по коду в LSP-сервере</title><link>https://compilers-course.ru/docs/projects/frontend/03_variables/lsp-navigation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://compilers-course.ru/docs/projects/frontend/03_variables/lsp-navigation/</guid><description>&lt;h1 id="навигация-по-коду-в-lsp-сервере"&gt;&#10; Навигация по коду в LSP-сервере&#10; &#10; &lt;a class="anchor" href="#%d0%bd%d0%b0%d0%b2%d0%b8%d0%b3%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d0%be-%d0%ba%d0%be%d0%b4%d1%83-%d0%b2-lsp-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b5"&gt;#&lt;/a&gt;&#10; &#10;&lt;/h1&gt;&#10;&#10;&lt;blockquote class='book-hint '&gt;&#10; &lt;p&gt;Задание описано кратко, поскольку в 2026 году ни одна команда не выбрала 🔴 красную дорожку&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&lt;p&gt;Требуется:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Перевести LSP-сервер на AST аналогично остальным подсистемам интерпретатора&lt;/li&gt;&#10;&lt;li&gt;Разобраться, как в протоколе LSP обеспечена поддержка навигация между объявлением и использованиями символа&lt;/li&gt;&#10;&lt;li&gt;Реализовать поддержку необходимых для этого вызовов LSP в LSP-сервере, используя AST для поиска связей между объявлением и использованиями символа&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Допускается выполнять полный разбор программы в AST при каждом изменении документа.&lt;/p&gt;</description></item></channel></rss>