Книга: Системное программное обеспечение. Лабораторный практикум
Пример 1
Пример 1
Возьмем входную цепочку «if a or b and c then a:= 1 xor c;».
После выполнения лексического анализа, если все лексемы типа «идентификатор» и «константа» обозначить как «a», получим цепочку: «if a or a and a then a:= a xor a;».
Рассмотрим процесс синтаксического анализа этой входной цепочки. Шаги функционирования МП-автомата будем обозначать символом «?». Символом «?п» будем обозначать шаги, на которых выполняется сдвиг (перенос), символом «?с» – шаги, на которых выполняется свертка.
{if a or a and a then a := a xor a;?к|?н |л} ч п
{a or a and a then a := a xor a;?к|?н if|л} ч п
{or a and a then a := a xor a;?к|?н if a|л} ч с
{or a and a then a := a xor a;?к|?н if E|12} ч п
{a and a then a := a xor a;?к|?н if E or|12} ч п
{and a then a := a xor a;?к|?н if E or a|12} ? с
{and a then a := a xor a;?к|?н if E or E|12 12} ? п
{a then a := a xor a;?к|?н if E or E and|12 12} ? п
{then a := a xor a;?к|?н if E or E and a|12 12} ? с
{then a := a xor a;?к|?н if E or E and E|12 12 12} ? с
{then a := a xor a;?к|?н if E or E|12 12 12 10} ? с
{then a := a xor a;?к|?н if E|12 12 12 10 7} ? п
{a := a xor a;?к|?н if E then|12 12 12 10 7} ч п
{:= a xor a;?к|?н if E then a|12 12 12 10 7} ч п
{a xor a;?к|?н if E then a :=|12 12 12 10 7} ч п
{xor a;?к|?н if E then a := a|12 12 12 10 7} ч с
{xor a;?к|?н if E then a := E|12 12 12 10 7 12} ч п
{a;?к|?н if E then a := E xor|12 12 12 10 7 12} ч п
{;?к|?н if E then a := E xor a|12 12 12 10 7 12} ч с
{;?к|?н if E then a:= E xor E|12 12 12 10 7 12} ? с
{;?к|?н if E then a := E|12 12 12 10 7 12 12 8} ? с
{;?к|?н if E then E|12 12 12 10 7 12 12 8 4} ? с
{;?к|?н E|12 12 12 10 7 12 12 8 4 3} ? п
{?к|?н E;|12 12 12 10 7 12 12 8 4 3} ? с
{?к|E?н |12 12 12 10 7 12 12 8 4 3 1}– разбор закончен, МП-автомат перешел в конечную конфигурацию, цепочка принята.
В результате получим последовательность правил: 12 12 12 107 12 12843 1. Этой последовательности правил будет соответствовать цепочка вывода на основе остовной грамматики С:
E?1 E; ?3 if E then E; ?4 if E then a := E; ?8 if E then a := E xor E; ?12 if E then a := E xor a; ?12 if E then a := a xor a; ?7 if E or E then a:= a xor a; ?10 if E or E and E then a := a xor a; ?12 if E or E and a then a := a xor a; ?12 if E or a and a then a := a xor a; ?12 if a or a and a then a := a xor a;
Стоит обратить внимание, что, так как данный МП-автомат строит правосторонний вывод, в цепочке вывода на каждом шаге правило всегда применяется к крайнему правому нетерминальному символу в цепочке.
Дерево синтаксического разбора, соответствующее данной входной цепочке, приведено на рис. 3.2.
Рис. 3.2. Дерево синтаксического разбора входной цепочки «if a or a and a then а:= а хог а;».
- Построение множеств крайних правых и крайних левых символов
- Таблица 3.2. Множества крайних левых и крайних правых символов. Шаг 1
- Таблица 3.3. Множества крайних левых и крайних правых символов. Шаг 2
- Таблица 3.4. Множества крайних левых и крайних правых символов. Шаг 3
- Таблица 3.5. Множества крайних левых и крайних правых символов. Шаг 4 (результат)
- Построение множеств крайних правых и крайних левых терминальных символов
- Таблица 3.6. Множества крайних левых и крайних правых терминальных символов. Шаг 1
- Таблица 3.7. Множества крайних левых и крайних правых терминальных символов. Результат
- Заполнение матрицы предшествования
- Таблица 3.8. Матрица операторного предшествования
- Примеры выполнения разбора предложений входного языка
- Пример 1
- Пример 2
- Пример установочного скрипта
- Пример из практики
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Пример 17-10. Блочный комментарий
- Примеры
- 2. Пример создания базового отношения в записи на псевдокоде
- Пример 9-8. Содержимое $* и $@, когда переменная $IFS -- пуста
- Часть I На примере денег