Главная  Терминология Хоора 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 [ 115 ] 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

S.8. ПРОГРАММА ГРАММАТИЧЕСКОГО РАЗБОРА ДЛЯ ПЛ/0

В качестве первого этапа построения транслятора для ПЛ/0 нужно разработать программу грамматического разбора. Это можно сделать, строго следуя правилам построе-№я В1 - В7, приведенным в разд. 5.4. Но этот метод приме-Чнк, только если синтаксис удовлетворяет ограничениям 1 и 2. Поэтому мы обязаны проверить это условие в его формулировке для синтаксических графов.

, Ограничение 1 требует, чтобы каждая ветвь, выходящая 3 разветвления, вела к отличному от других начальному сим-рлу. Это очень просто проверить по синтаксическим диа-

ojKHbifi ЯЗЫК - Паскаль, транслятор для которого был раз-дботан с применением тех же методов. Его синтаксис дан g дриложении В.

Если говорить о структуре программы, то ПЛ/0 достаточно полон. Конечно, в нем в качестве основной конструкции ва уровне языка содержится оператор присваивания. Другие труктурные концепции - это следование, условное выполне-jjje и цикл, представленные знакомыми формами begin/end-, f. while. В ПЛ/0 включено также и понятие подпрограммы, зледовательно, там есть описания процедур и оператор вызова Процедуры.

Что же касается типов данных, то ПЛ/0, бесспорно, удов-яетворяет требованию простоты: единственный тип данных - hp целые числа. Разумеется, в ПЛ/0 присутствуют обычные дарации арифметики и сравнения.

Наличие процедур, т. е. более или менее самостоятельных истей программы, дает возможность ввести концепцию покальности объектов (констант, переменных и процедур). Поэтому в заголовке каждой процедуры есть описания объек-гов; эти объекты считаются локальными для процедуры, в которой они описаны.

Это краткое введение позволяет представить себе синтаксис ПЛ/0. Этот синтаксис изображен на рис. 5.4 с помощью 7 циаграмм. Преобразовать диаграммы во множество эквива-iieHTHbix порождающих правил БНФ мы предоставляем читателю. Рис. 5.4 является убедительным примером выразитель-кости этих диаграмм, которые позволяют сформулировать синтаксическое описание целого языка программирования в столь краткой и хорошо воспринимаемой форме.

Следующая программа, написанная на ПЛ/0, демонстри-эует некоторые свойства этого мини-языка. Эта программа .Одержит знакомые алгоритмы умножения, деления и на-кождения наибольшего общего делителя двух натуральных Чисел.



-> const J-число^У~-


-ргосйге^--*-( имя Я*

оператор

Оператор

выражение

call--- - имя

Wbegin\

оператор

оператор

<T)J

условие

оператор

vcnnmie



выражение -







ыражение


ЙножнтвПЬ

имя число

выражение

4i>

Рис. 5.4. Синтаксис ПЛ/0,




1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 [ 115 ] 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133