Задание 3.2E

Лабораторная №3 — задание 3.2E #

Нужно с помощью ANTLR4 реализовать утилиту командной строки, проверяющую соответствие исходного текста выражения грамматике вашего языка программирования.

⚠️ Обратите внимание #

Это задание выполняется по спецификации грамматики выражений, подготовленной аналитиком в задании 3.2A.

  • Спецификация должна появиться до начала кодирования — так же, как и в реальных проектах.
  • Вы можете составлять спецификацию совместно с аналитиком, а затем приступить к реализации.
  • Ждать проверки спецификации преподавателем не нужно.

Это задание также использует список тестов, подготовленный разработчиком в задании 3.1D.

  • Валидатор проходит тесты, аналогичные тестам основного парсера.

Порядок выполнения #

В задании 3.1E вы сделали следующее:

  1. Подготовили конспект по интеграции ANTLR4 в проект: docs/theory/ANTLR4-integration.md
  2. Подготовили конспект по решению проблем с грамматикой: docs/theory/ANTLR4-troubleshooting.md

Теперь следует реализовать инструмент для проверки соответствия исходного кода грамматике с помощью генератора лексеров/парсеров ANTLR4:

  1. Получите спецификацию грамматики выражений для своего языка программирования у аналитика
  2. Получите список тестов (markdown файл TESTLIST.md) у разработчика
  3. Создайте пустой проект валидатора грамматики: dotnet new classlib -o src/Grammar
    • добавьте его в решение: dotnet sln add src/Grammar
  4. Создайте пустой проект тестов: dotnet new xunit -o tests/Grammar.UnitTests
    • добавьте его в решение: dotnet sln add tests/Grammar.UnitTests
    • добавьте ссылку на библиотеку из проекта тестов: dotnet add tests/Grammar.UnitTests reference src/Grammar
  5. Опишите лексику своего языка на языке грамматик ANTLR4 в файле src/Grammar/Grammars/Lexer.g4
  6. Опишите грамматику своего языка на языке грамматик ANTLR4 в файле src/Grammar/Grammars/Parser.g4
  7. Реализуйте класс для проверки соответствия исходного кода грамматике языка
  8. Напишите модульные тесты для этого класса

Требования к валидатору грамматики #

  1. Валидатор реализован полностью в модуле src/Grammar с помощью ANTLR4
  2. Валидатор реализует ровно ту грамматику, которую описал аналитик
  3. Валидатор покрыт набором модульных тестов, аналогичным тестам основного парсера.

Пример MemSql #

Можно ориентироваться на Пример MemSql

  • Класс проверки соответствия грамматике: src/SqlGrammar/SqlGrammar.cs
  • Модульные тесты: tests/SqlGrammar.UnitTests/SqlGrammarTest.cs