АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

СЕМАНТИЧЕСКИЕ ПОДПРОГРАММЫ ДЛЯ ПЕРЕВОДА В ТЕТРАДЫ

Читайте также:
  1. III. Характеристика ведомственных целевых программ и мероприятий подпрограммы
  2. III. Характеристика ведомственных целевых программ и мероприятий подпрограммы
  3. III. Характеристика ведомственных целевых программ и мероприятий подпрограммы
  4. III. Характеристика ведомственных целевых программ и мероприятий подпрограммы
  5. АННУЛИРОВАНИЕ ПЕРЕВОДА, ВОЗВРАТ СРЕДСТВ КЛИЕНТУ, ВОССТАНОВЛЕНИЕ ПЕРЕВОДА
  6. ВНИМАНИЕ: если данный пункт меню недоступен, это означает, что в буфере печати нет ни одного сформированного почтового перевода.
  7. Единица перевода
  8. Исправления перевода
  9. История Перевода
  10. Классификация перевода
  11. ЛЕКСИКО-СЕМАНТИЧЕСКИЕ ГРУППИРОВКИ СЛОВ
  12. Лексико-семантические особенности качественных прилагательных

 

Попытаемся провести разбор выражения a+(b*c), используя грамматику простого предшествования для арифметических выражений (см. пример 5.15 и рис. 5.18), и сгенерируем тетрады

+, b, c, M1

*, a, M1, M2

по ходу дела составляя семантические подпрограммы. Логичнее всего генерировать первую тетраду в семантической подпрограмме для правила E ® E+T1. Итак, будем выполнять восходящий разбор по алгоритму Вирта–Вебера до того момента, пока не возникнет необходимость в применении этого правила. На рис. 6.9 а приводятся сентенциальные формы, порождаемые на каждом шаге (подчеркнута основа), а на рис. 6.9 б показано частичное семантическое дерево, построенное к этому моменту.

На следующем шаге E+T1 приводится к E; одновременно с этим семантическая подпрограмма должна выдать тетраду. К сожалению, мы не можем ее построить, так как текущая сентенциальная форма не содержит информации об именах операндов E и T1. Эта информация была потеряна, когда выполнялись редукции M ® b и M ® c.

При получении ПОЛИЗа у нас не возникало подобных затруднений, так как при выполнении редукций M ® b и M ® c имена b и c заносились в выходную цепочку. Очевидно, при генерировании тетрад необходимо где–то хранить имена идентификаторов (значения констант) до момента их использования и это сохранение должна выполнять подпрограмма, связанная с правилом M ® i, где i – произвольный идентификатор или константа. И лучшим местом такого хранения, конечно же, является стек. Назовем его вспомогательным стеком и обозначим через V, а индекс m (вначале он равен нулю) будет указывать на вершину этого стека.

Таким образом, семантическая подпрограмма, связанная с правилом M ® i будет иметь вид:

INC(m); V[m]:=C[i]

Напомним, что C[i] – вершина синтаксического стека из алгоритма восходящего разбора, рассмотренного в разделе 5.2.1.

Точно также как и при переводе в ПОЛИЗ здесь будут отсутствовать семантические действия, связанные с правилами T®M, T1®T, E®T1 и M®(E). С остальными же правилами будет связана процедура формирования тетрады с четырьмя парамет­ра­ми – PutTetrad(O, X, Y, Z), где O – операция, X и Y – операнды, а Z – результат. В качестве результата Z будут использоваться генерируемые имена M1, M2, ¼, обозначающие подвыражения. Для этих целей будет использоваться счетчик n, который вначале имеет нулевое значение. Таким образом, семантическая подпрограмма связанная с правилом E ® E+T1 будет иметь вид:

INC(n); PutTetrad(‘+’, V[m–1], V[m], Mn); DEC(m); V[m]:= Mn;

Суть семантических подпрограмм такого сорта состоит в том, что генерируется тетрада, где в качестве операндов используется два верхних значения из временного стека V, изначально хранящие имена идентификаторов и значения констант, помещенных туда при редукции по правилу M ® i. После формирования тетрады два верхних значения из стека V (для бинарной операции) заменяются на имя результата тетрады. Полный перечень семантических действий по переводу в тетрады, связанный с правилами грамматики арифметических выражений, представлен на рис. 6.10.


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 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)