66
ИНФОРМАЦИОННЫЕ СТРУКТУРЫ И ИХ
ПРЕОБРАЗОВАНИЕ
необходимое количество операндов с вершины стека и кладет на стек свой
результат. Именно такая модель используется в MSIL для реализации
большинства операций.
Перевод инфиксной записи в суффиксную
Будем полагать, что в некоторой сентенциальной форме основа Х
найдена и ее можно заменить на нетерминал в соответствии с правилам u:=X.
Синтаксический распознаватель обратится к некоторой семантической
программе и осуществит преобразование, т.е. перевод ее (основы) в
суффиксную форму.
Генерируемую цепочку будем хранить в одномерном массиве Р,
который содержит индекс, указывающий на первый свободный элемент
массива. Каждый элемент массива содержит один символ. Имеется
возможность доступа к стеку, где хранится цепочка. Нужно занести в массив
код переменной и код операции их связывающий:
Е:=Е+Т. Если встретили цепочку Е+Т, то польская (суффиксная) запись
уже получена: коды <E> и <T> уже существуют, а программа должна занести
в массив "+":
Р(р)="+";
Inc(p).
Есть входная цепочка: A*(B+C), мы должны преобразовать ее в
АВС+*, предварительно проверив, правильно ли она получена
синтаксически.
Сработал лексический анализатор и выдал i*(i+i). С каждым i связано
его физическое имя. Мы могли бы и оставить свои физические имена (А, В,
С), но тогда бы пришлось резервировать большую область памяти.
А * ( В + С )
| | | | | | |
- эти связи должны храниться;
1 2 4 1 3 1 5
-
на
стадии
лексического
анализатора
каждый
символ
получает
свое
индивидуальное имя, проверяется синтаксис (см.
прошлый семестр).
1. E:=E+T
2. E:=T
3. T:=T*F
4. T:=F
5. F:=(E)
6. F:=i
Для "6."
P(p)=S(j);
1...,58,59,60,61,62,63,64,65,66,67 69,70,71,72,73,74,75,76,77,78,...88