Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Анализ выражений

Приложение Б Правила присвоения классификационного кода.................... 45 | Приложение В Пример оформления содержания курсовой работы............. 46 | Формальные грамматики | Диаграммы Вирта | Логическая_константа | Лексический анализатор программы | Алгоритм 2.1. Разбор цепочек символов по ДС с действиями | Синтаксический анализатор программы | Теорема 2.1. Достаточные условия применимости метода рекурсивного спуска | Синтаксически управляемый перевод |


Читайте также:
  1. A) проанализируйте модели образования слов, прочтите и переведите слова и словосочетания, созданные на их основе.
  2. I. АНАЛИЗ ПСИХИЧЕСКИХ И ПСИХОФИЗИЧЕСКИХ КАЧЕСТВ
  3. I. Ситуационный анализ внутренней деятельности.
  4. II. Выберите ОДНО из заданий. А) Комплексный анализ прозаического текста.
  5. III. Корреляционный анализ 1 страница
  6. III. Корреляционный анализ 2 страница
  7. III. Корреляционный анализ 3 страница

 

Задача анализа выражений - проверить описаны ли переменные, встречающиеся в выражениях, и соответствуют ли типы операндов друг другу и типу операции.

Эти задачи решаются следующим образом. Вводится таблица двуместных операций (таблица 2.2) и стек, в который в соответствии с разбором выражения E заносятся типы операндов и знак операции. После семантической проверки в стеке оставляется только тип результата операции. В результате разбора всего выражения в стеке остается тип этого выражения.

Для реализации анализа выражений введем следующие обозначения процедур и функций:

1) checkid - процедура, которая для лексемы LEX, являющейся идентификатором, проверяет по таблице идентификаторов TI, описан ли он, и, если описан, то помещает его тип в стек;

2) checkop – процедура, выводящая из стека типы операндов и знак операции, вызывающая процедуру gettype (op, t 1, t 2, t), проверяющая соответствие типов и записывающая в стек тип результата операции;

3) gettype (ор, t 1, t 2, t) – процедура, которая по таблице операций TOP для операции ор выдает тип t результата и типы t 1, t 2 операндов;

4) checknot – процедура проверки типа для одноместной операции «Ø».

 

Таблица 2.2 – Фрагмент таблицы двуместных операций TOP

 

Операция Тип 1 Тип 2 Тип результата
+ > … int int int int int bool

 

Перечисленные процедуры имеют следующий вид:

 

procedure checkid;

begin

k:= LEX [2];

if TI [ k ]. descrid = 0 then ERR;

inst (TI [ k ] .typid)

end;

procedure checkop;

begin

outst (top 2); outst (op); outst (top 1);

gettype (op, t 1, t 2, t);

if (top 1 <>t 1) or (top 2<> t 2) then ERR;

inst (t)

end;

 

procedure checknot;

begin

outst (t);

if t<> bool then ERR;

inst (t)

end;

 

Правила, описывающие выражения языка М, расширенные процедурами семантического анализа, принимают вид.

 

Е ® Е 1 {(> | < | =) < instl> E 1 <checkop >}

EТ {(+ | - | Ú) < instl > T < checkop >}

T ® F {(* | / | Ù) < instl > F < checkop >}

F ® I <checkid>| N<inst (‘ int ’)> | L <inst (‘bool’) >| Ø F <checknot>| (E)

Пример 2.12. Дано выражение a +5* b. Дерево разбора выражения и динамика содержимого стека представлены на рисунке 2.8.

 
 

 


 

int + int * int  

1)

 

 

int + int      

2)

 

 

int          

3)

 

Рисунок 2.8 – Анализ выражения a+5*b

 


Дата добавления: 2015-11-14; просмотров: 70 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Обработка описаний| Перевод в ПОЛИЗ операторов

mybiblioteka.su - 2015-2024 год. (0.006 сек.)