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

Теорема 2.1. Достаточные условия применимости метода рекурсивного спуска

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


Читайте также:
  1. A. Причину и условия развития заболевания
  2. He забывайте употреблять настоящее время вместо будущего в придаточных предложениях времени и условия после союзов if, when, as soon as, before, after, till (until).
  3. II. Основные факторы, определяющие состояние и развитие гражданской обороны в современных условиях и на период до 2010 года.
  4. II. Порядок и условия проведения
  5. II. УСЛОВИЯ И ПОРЯДОК ПРОВЕДЕНИЯ КОНКУРСА
  6. II. Условия и порядок проведения Фестиваля
  7. II. Условия предоставления коммунальных услуг

 

Метод рекурсивного спуска применим к грамматике, если правила вывода грамматики имеют один из следующих видов:

1) A ® a, где a Î(T È N)*, и это единственное правило вывода для этого нетерминала;

2) A ® a 1 a 1 | a 2 a 2 |…| anan, где ai Î T для каждого i= 1, 2,…, n; ai¹aj для i¹j, ai Î(T È N)*, т.е. если для нетерминала А несколько правил вывода, то они должны начинаться с терминалов, причем эти терминалы должны быть различными.

Данные требования являются достаточными, но не являются необходимыми. Можно применить эквивалентные преобразования КС-грамматик, которые способствуют приведению грамматики к требуемому виду, но не гарантируют его достижения (см. лабораторную работу № 4) /11/.

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

 

L ® a | a, L или в сокращенной форме L ® a {, a }.

 

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

 

procedure L;

begin

if CH <>’ athen Err else gc;

while CH =’,’ do

begin

gc;

if CH <>’ athen Err

end

end;

 

Пример 2.10. Построим синтаксический анализатор методом рекурсивного спуска для модельного языка М.

 

Вход – файл лексем в числовом представлении.

Выход – заключение о синтаксической правильности программы или сообщение об имеющихся ошибках.

Введем обозначения:

1) LEX – переменная, содержащая текущую лексему, считанную из файла лексем;

2) gl – процедура считывания очередной лексемы из файла лексем в переменную LEX;

2) EQ (S) – логическая функция, проверяющая, является ли текущая лексема LEX лексемой для S;

3) ID – логическая функция, проверяющая, является ли LEX идентификатором;

4) NUM - логическая функция, проверяющая, является ли LEX числом.

Процедуры, проверяющие выполнение правил, описывающих язык М и составляющие синтаксический анализатор, будут иметь следующий вид:

 

1)для правила Р ® program D 1 В.

procedure Р;

begin

if EQ (` program `) then gl else ERR;

D 1;

B;

if not EQ (‘.’) then ERR

end;

 

2) для правила Dvar D {; D }

procedure D 1;

begin

if EQ (‘ var’) then gl else ERR;

D;

while EQ (‘;’) do

begin

gl; D

end

end;

 

3) для правила D ® I {, I }:(int | bool)

procedure D;

begin

I;

while EQ (‘,’) do

begin

gl; I

end;

if EQ (`:`) then gl else ERR;

if EQ (‘ int’) or EQ (‘ bool’) then gl else ERR

end;

 

4) для правила F ® I|N|L| Ø F| (E)

procedure F;

begin

if ID or NUM or EQ (‘ true’) or EQ (‘ false’) then gl

else

if EQ (‘Ø’)

then begin

gl; F

end

else

if EQ (‘(‘)

then begin

gl; E;

if EQ (‘)’) then gl else ERR

end

else ERR

end;

 

Аналогично составляются оставшиеся процедуры.


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


<== предыдущая страница | следующая страница ==>
Синтаксический анализатор программы| Обработка описаний

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