Лабораторная №3 — задание 3.2E #
Нужно с помощью ANTLR4 реализовать утилиту командной строки, проверяющую соответствие исходного текста выражения грамматике вашего языка программирования.
⚠️ Обратите внимание #
Это задание выполняется по спецификации грамматики выражений, подготовленной аналитиком в задании 3.2A.
- Спецификация должна появиться до начала кодирования — так же, как и в реальных проектах.
- Вы можете составлять спецификацию совместно с аналитиком, а затем приступить к реализации.
- Ждать проверки спецификации преподавателем не нужно.
Это задание также использует список тестов, подготовленный разработчиком в задании 3.1D.
- Валидатор проходит тесты, аналогичные тестам основного парсера.
Порядок выполнения #
В задании 3.1E вы сделали следующее:
- Подготовили конспект по интеграции ANTLR4 в проект:
docs/theory/ANTLR4-integration.md - Подготовили конспект по решению проблем с грамматикой:
docs/theory/ANTLR4-troubleshooting.md
Теперь следует реализовать инструмент для проверки соответствия исходного кода грамматике с помощью генератора лексеров/парсеров ANTLR4:
- Получите спецификацию грамматики выражений для своего языка программирования у аналитика
- Получите список тестов (markdown файл TESTLIST.md) у разработчика
- Создайте пустой проект валидатора грамматики:
dotnet new classlib -o src/Grammar- добавьте его в решение:
dotnet sln add src/Grammar
- добавьте его в решение:
- Создайте пустой проект тестов:
dotnet new xunit -o tests/Grammar.UnitTests- добавьте его в решение:
dotnet sln add tests/Grammar.UnitTests - добавьте ссылку на библиотеку из проекта тестов:
dotnet add tests/Grammar.UnitTests reference src/Grammar
- добавьте его в решение:
- Опишите лексику своего языка на языке грамматик ANTLR4 в файле
src/Grammar/Grammars/Lexer.g4 - Опишите грамматику своего языка на языке грамматик ANTLR4 в файле
src/Grammar/Grammars/Parser.g4 - Реализуйте класс для проверки соответствия исходного кода грамматике языка
- Напишите модульные тесты для этого класса
Требования к валидатору грамматики #
- Валидатор реализован полностью в модуле
src/Grammarс помощью ANTLR4 - Валидатор реализует ровно ту грамматику, которую описал аналитик
- Валидатор покрыт набором модульных тестов, аналогичным тестам основного парсера.
Пример MemSql #
Можно ориентироваться на Пример MemSql
- Класс проверки соответствия грамматике:
src/SqlGrammar/SqlGrammar.cs - Модульные тесты:
tests/SqlGrammar.UnitTests/SqlGrammarTest.cs