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

Выполнение семантических действий

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

 

В синтаксически управляемых трансляторах выполнение семантических процедур, перевод исходного текста всегда совмещен с процессом синтаксического анализа. Распознавание отдельного элемента или языковой конструкции влекло вызов подпрограмм и выполнение семантических действий. Это и привело к тому, что на практике возвратные алгоритмы анализа не нашли применения. Пройдя часть пути по одной из альтернатив той или иной продукции грамматики, и обнаружив расхождение, мы можем достаточно просто вернуться по пройденному тексту, и рассмотреть еще одну альтернативу. Но как аннулировать результаты семантических подпрограмм, которые уже были выполнены? Это принципиальное возражение теоретиков против возвратных алгоритмов трансляции. В рассматриваемом СП эта проблема достаточно просто решается введением еще одного просмотра – выполнения семантических действий, который осуществляется уже после корректного завершения синтаксического анализа. Это снижает эффективность проектируемого транслятора, увеличивает время трансляции, но это дает возможность рассматривать любые, в том числе и недетерминированные КС-языки, что зачастую и необходимо в учебных целях.

Файл семантических действий, формируемый в процессе синтаксического анализа, содержит протокол вызова процедур, реализующих семантические действия, и аргументы, с которыми они будут вызываться. В качестве аргумента семантической процедуры выступает последняя лексема исходного текста, сопоставленная с конструкцией грамматики непосредственно перед тем, как при грамматическом разборе в правой части продукции было встречено изображение оператора вызова данного семантического действия. Например, в результате успешного сопоставления продукций:

A::= ¼@_IDN_@ (_2_) **

или

A::= ¼<_B_> (_2_) **

B::= ¼@_IDN_@ **

семантическая процедура с кодом 2 будет вызываться с параметром-лексемой “идентификатор”, отождествлённым с синтермом IDN.

Если в грамматике несколько ссылок на семантические процедуры стоят подряд, то эти процедуры будут вызываться с одним и тем же аргументом.

Например, для случая:

A::=... @_INT_@ (_1_)(_3_)(_5_) **

семантические процедуры 1, 3, 5 будут вызываться с аргументом-лексемой “целое число”, отождествлённым с синтермом INT.

Семантика языков программирования – это тот раздел трансляции, который с очень большим трудом поддается формализации. Все известные автору попытки включения формального описания семантики в спецификацию языка не находят распространения. Формальное описание семантики слишком тяжеловесно и так называемые атрибутные или транслирующие грамматики чаще всего понятны только их составителям. В рассматриваемой системе написание набора семантических процедур возлагается на разработчика транслятора для конкретного языка.

В заключение раздела поясним принципы расстановки семантических атрибутов (номеров процедур) в спецификации языка для рассматриваемого СП на примере грамматики арифметических выражений:

Выражение::= [_ <_ OTC _> (_0_) _] (_1_) <_ TEPM _> (_3_)

{_ <_ OTC _> (_2_) <_ TEPM _> (_3_) _} **

TEPM::= <_ множитель _>

{_ <_ OTM _> (_2_) <_ множитель _> (_3_) _} **

множитель::=?_ (<_ Выражение _>) _|_ @_ IDN _@ (_4_) _|_

@_ REL _@ (_4_) _|_ @_ INT _@ (_4_) _? **

OTC::=?_ + _|_ - _? **

OTM::=?_ * _|_ / _? **

 

Здесь семантические действия призваны перевести заданное арифметическое выражение в ПОЛИЗ:

0 - Отметить наличие унарного минуса.

1 - Если был унарный минус, поместить его обозначение – символ ‘@’ в семантический стек и сбросить признак минуса, установленный действием 0-ой процедуры. В противном случае поместить в семантический стек символ ‘n’;

2 - Поместить символ операции (+, -, *, /) в семантический стек;

3 - Выгрузить символ из семантического стека и, если он отличен от ‘n’, поместить его в выходную строку;

4 - Поместить идентификатор или константу в выходную строку.


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 сек.)