Помощь в учёбе, очень быстро...
Работаем вместе до победы

Программная реализация компонента проверки синтаксиса

РефератПомощь в написанииУзнать стоимостьмоей работы

При обнаружении в процессе разбора нетерминала, которого еще нет в списке Nonterminals, он создается в качестве нового элемента с пустым списком Sequence. Символы в Sequence определяют наличие правила для заданного нетерминала, что способствует выявлению семантических ошибок при повторной инициализации нетерминала. Nonterminals — список нетерминалов как предопределённых, так… Читать ещё >

Программная реализация компонента проверки синтаксиса (реферат, курсовая, диплом, контрольная)

Разработка компонента проверки синтаксиса должна соответствовать спроектированной архитектуре, а также включать в себя реализацию алгоритмов, описанных на этапе анализа. Поскольку данная работа является частью одной системы, в которой один из компонентов уже разработан в рамках курсовой работы, выбор инструментария ограничен средствами совместимыми с технологией .NET.

Построение дерева разбора

Важным этапом, реализующим возможность выполнения проверки синтаксиса модели, является построение дерева. Анализ метамодели осуществляет конструктор CSentence (string s), который получает входной параметр от компонента описания синтаксиса в виде текущей рассматриваемой лексемы и реализует следующие важные поля класса CSentence:

  • 1. Nonterminals — список нетерминалов как предопределённых, так и не предопределённых, определяющий правила языка.
  • 2. StartSymbol — стартовый нетерминал, от которого строится дерево.
  • 3. SemanticErrors — список семантических ошибок в текстовом виде для вывода на экран.
  • 4. LanguageFault — признак наличия синтаксических или семантических ошибок в языке.

Основой построения дерева является заполнение списка Nonterminals. Изначально в него вносятся предопределённые нетерминалы, которые могут быть впоследствии заменены на не предопределённые. Затем компонент описания синтаксиса, а именно лексический анализатор последовательно передает рассматриваемые нетерминалы и выполняет разбор текста языка. Каждое корректное правило разбивается на список лексем Sequence, после чего устанавливается связь с описываемым нетерминалом. Порядок расположения символов в списке соответствует порядку их расположения в тексте правила: слева направо. Каждый символ является наследником абстрактного класса CSymbol:

  • 1. CTerminal — терминал.
  • 2. CPredefined — предопределённый нетерминал.
  • 3. CDefined — нетерминал, определённый пользователем.
  • 4. CMetaSymbol — метасимвол.

При обнаружении в процессе разбора нетерминала, которого еще нет в списке Nonterminals, он создается в качестве нового элемента с пустым списком Sequence. Символы в Sequence определяют наличие правила для заданного нетерминала, что способствует выявлению семантических ошибок при повторной инициализации нетерминала.

По завершении анализа дерево почти построено. В Sequence содержатся все ветви узла в виде символов типа CDefined. Завершающим этапом является поиск корня, то есть стартового символа. Для этой цели служит поле NonStart класса CDefined. При создании объекта данное поле равно false. По окончании синтаксического анализа текста для всех не предопределённых нетерминалов проводится следующая операция: поле NonStart для всех нетерминалов, содержащихся в Sequence, устанавливается в true, поскольку они не могут быть стартовыми символами, оставшийся нетерминал с неизменённым полем NonStart и есть стартовый символ.

Показать весь текст
Заполнить форму текущей работой