Skip to content

Latest commit

 

History

History
48 lines (38 loc) · 3.39 KB

README.md

File metadata and controls

48 lines (38 loc) · 3.39 KB

EBNF + ANTLR project

Работали с формальной системой определения синтаксиса EBNF и генератором парсера ANTLR.

Синтаксис языка

  1. Повторение *()
  2. Опциональный оператор ?()
  3. Конкатенация (),()
  4. Альтернатива ()|()
  5. Скобки для группировки ( )
  6. Однострочные комментарии %
  7. Многострочные комментарии #{ }#
  8. Пробельная вложенность - четное количество пробелов (0 пробелов — 0 уровень, 2 пробела — 1, …)
  9. Идентификаторы — состоит из цифр 0-9, английский букв [a-zA-Z] и нижнего подчеркивания и пробелов между словами, в начале разрешается иметь только букву
  10. Литералы — цифры, английские буквы и нижнего подчёркивания, в двойных кавычках
  11. Описание определения : Идентификатор -> определение В правой части пробелы могут быть в любом количестве
  12. Каждая строка заканчивается символом ;
  13. Конец файла обозначается символами EOF
  14. Пустое правило имеет вид rule1 = ;

Особенность языка

Язык чувствителен к пробелам. В языке реализована вложенность блоков (по аналогии с языком Python). Следующий уровень вложенность -- 2 пробельных символа. Правила во вложенном блоке являются вспомогательными для правила на уровень выше.

Сборка проекта

  1. Скачать ANTLR -- https://github.com/antlr/antlr4/blob/master/doc/getting-started.md
  2. Скачать модуль для python -- pip install antlr4-python3-runtime
  3. Генерация парсера -- antlr4 -Dlanguage=Python3 -visitor ebnf.g4
  4. Передача тестовых файлов -- python3 visitor.py test.txt

Задача участников

Воробьев Вячеслав

  1. Написана грамматика для языка с помощью ANTLR
  2. Написан парсер на Python, который строит AST и выводит в текстовом виде
  3. Обработаны ошибки при парсинге и сделаны проверки на корректность

Шеремеев Андрей

  1. Поддержка языка в среде разработки VSCode Реализованы:
  • подсветка синтаксиса
  • поддержка snippet'ов с автоматической вставкой конструкций языка
  • анализ синтаксиса на автодополнение правил, объявленные выше и находящиеся в зоне видимости данного правила
  • анализ синтаксиса на использование необъявленных ранее правил
  1. Написаны тесты для языка