3

Разбор КС-языка по табелю, часть вторая, итоговая: Провидец

Серия Что такое язык программирования?

Предыдущая статья:Разбор КС-языка по табелю, часть первая: Создание табеля в vk.com

Статья для повторения: Автомат с магазинной памятью (стог-памятью) и КС-языки

На прошлом уроке мы создали табель разбора для грамматики:

Г: В → ДС
С → +ДС | ε
Д → РП
П → *РП | ε
Р → ч | (В)

Давайте этот табель поместим в общее представление разборщика КС-языков в начальном состоянии, который назовём «Провидец»:

Я надеюсь вы повторили статью, которая указана выше? Да? Замечательно. Мы видим контуром обведено внутренне устройство провидца, он состоит из:
1. Табеля разбора, в котором ранее пустые ячейки помечены словом «Ошибка». Это значит, что данная пара конечного и неконечного приводит к ошибке.
2. Стога в который вложен # - правый ограничитель потока, который является подом (далее будем говорить просто грань, имея в виду грань строки). А так же вложен стартовый неконечный символ В, что говорит нам, что разбор является нисходящим.
3. Движка который читает принимаемое выражение и делает вывод. В ходе разбора он управляет стог-памятью, обращаясь к табелю для принятия решения, какую цепь поместить следующей взамен верхнего неконечного. Если встречается продукция вида П → ε или конечный символ, то просто снимаем символ с верха. Если на верху оказывается символ не равнозначный рассматриваемому или мы не находим в табеле продукцию сообщаем об ошибке. Останавливается когда верх будет равен грани.

Работа провидца напоминает повторение левостороннего вывода рассматриваемого выражения. Рассмотрим выражение «ч+ч*ч»:
В => ДС => РПС => чПС => чС => ч+ДС => ч+РПС => ч+чПС => ч+ч*РПС =>
ч+ч*чПС => ч+ч*чС => ч+ч*ч

Ниже показана работа совершённая движком, для распознавания этого выражения:

Так как в табеле однозначно определенна применяемая продукция, то мы знаем, что может нас ожидать впереди, поэтому мы и назвали разборщика провидцем. Ниже приложен его псевдокод. Здесь и здесь, вы можете посмотреть полный псевдокод и реализацию на С# от получения табеля, до разбора выражения.

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

UPD:

Читать далее...

Лига образования

6.8K постов22.9K подписчика

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако мы хотим, чтобы соблюдались следующие условия:


ДЛЯ АВТОРОВ:


Приветствуются:

-уважение к читателю и открытость

-желание учиться

Не рекомендуются:

-публикация недостоверной информации


ДЛЯ ЧИТАТЕЛЕЙ:


Приветствуются:

-конструктивные дискуссии на тему постов

Не рекомендуются:

-личные оскорбления и провокации

-неподкрепленные фактами утверждения


В этом сообществе мы все союзники - мы все хотим учиться! :)

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества