
Создаём DSL на C#: Добавляем семантику
Popou 11 минут назад Создаём DSL на C#: Добавляем семантику Простой 6 мин 331 .NET * C# * Программирование * Туториал Прошёл примерно месяц с предыдущей статьи, но работа над Akbura продолжается. В прошлый раз мы...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: Popou 11 минут назад Создаём DSL на C#: Добавляем семантику Простой 6 мин 331 . NET * C# * Программирование * Туториал Прошёл примерно месяц с предыдущей статьи, но работа над Akbura продолжается. В прошлый раз мы написали инкрементальный синтаксический анализатор.
Теперь пора ответить на вопрос, ради которого строилось синтаксическое дерево: что написанный код означает? Создаём синтаксисПишем парсерСобираем блендерДобавляем семантикуДиагностикаИнтегрируем Language Server Protocol и делаем поддержку в Visual StudioГенерируем кодЗачем нужна семантикаСинтаксический анализатор может разобрать такой файл:После разбора известны границы StateDeclarationSyntax, атрибута разметки и инструкции C#. Но остаются более важные вопросы:какой тип у count?
Технические детали
существует ли Width у Button? можно ли преобразовать int в double? какая перегрузка Console.
что означает Refresh. какое свойство получает содержимое Button? Отвечать на них во время разбора нельзя.
Синтаксическое дерево должно строиться даже для незаконченного кода, а синтаксический анализатор не должен знать о сборках, типах, доступности и выборе перегрузок. Поэтому обработка разделена на этапы:Компиляция и декларацииОдного файла для семантики недостаточно. Компонент может находиться в другом .
Отраслевые последствия
akbura, стиль во внешнем . akcss, а тип C# в подключённой сборке. Всё это объединяет AkburaCompilation.
Внутри неё хранится обычная CSharpCompilation, а поверх неё:деревья . akcssкорневое пространство имёнкаталог проектатаблица декларацийКомпиляция является неизменяемым снапшот. После изменения файла создаётся новая AkburaCompilation, а старая продолжает обслуживать уже начатые запросы.
Это особенно важно для среды разработки, где несколько потоков могут работать с разными версиями документа. Следующий слой называется декларациями. Декларация является дешёвым описанием структуры проекта, но ещё не полноценным символом.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





