Студопедия
Главная страница | Контакты | Случайная страница

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

Билет №16 Восходящий синтаксический анализ.

Читайте также:
  1. I. Дистрибутивный анализ. Дистрибутивная структура языка на фонемном уровне.
  2. PESTE-анализ.
  3. SWOT-АНАЛИЗ.
  4. Билет 23. Психоаналитическое истолкование природы человека. З. Фрейд и современный психоанализ.
  5. Билет 6 маркетинговая среда фирмы и ее анализ. Влияние маркетинговой среды на условия развития компании.
  6. БИЛЕТ №18Вопрос №1. Криптография и криптоанализ. Основные требования к алгоритмам асимметричного шифрования
  7. Брак продукции. Его классификация, учет и анализ.
  8. Глобальные проблемы современности, их социально-философский анализ.
  9. Издержки производства в краткосрочном периоде. Постоянные и переменные издержки. Общие, средние, предельные издержки, их графический анализ.

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

в предыдущих разделах язык { x m y n |m, n > 0 }, определяемый следующими продукциями:

S -> XY

X -> xX

X -> x

Y - >yY

Y -> y

Предложение xxxyy можно сгенерировать с помощью следующего правого порождения:

S => XY => XyY => Xyy => xXyy => xxX yy => xxxyy.

В отличие от нисходящего, при восходящем синтаксическом анализе

этапы порождения определяются в противоположном порядке, то есть:

xxxyy=> xxX yy=> xXyy=> Xyy=> XyY=> XY=> S.

Применение продукции грамматики на каждом этапе предусматривает

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

При восходящем синтаксическом анализе правые части продукции

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

1) Занесение последнего считанного символа в стек - действие

переноса (SA-shift action).

2) Замена строки наверху стека посредством применения продукции грамматики - действие свертки (RA - reduce action).

Алгоритм восходящего синтаксического анализа иллюстрируется на приводимой ниже таблице.

_____________________________________________________________

Входная строка Стек Продукция Сентенциальная форма SA | RA

_____________________________________________________________

xxxyy xxxyy

x xxyy x xxxyy SA

xx xyy xx xxxyy SA

xxx yy xxx xxxyy SA

xxx yy xxX X -> x xxXyy RA

xxx yy xX X -> xX xXyy RA

xxx yy X X -> xX Xyy RA

xxxy y Xy Xyy SA

xxxyy Xyy Xyy SA

xxxyy XyY Y -> y XyY RA

xxxyy XY Y -> yY XY RA

xxxyy S S -> XY S RA

______________________________________________________________

 

Таблица 3.4.3 -1. Алгоритм восходящего синтаксического анализа.

 

Вершина стека расположена справа, а в последнем столбце показан применяемый тип операций (SA | RA). Действие переноса выполняет удаление символа и занесение его в стек. Действие свертки преду-сматривает изменения в вершине стека и в сентенциальной форме

посредством применения продукции. В начальном состоянии синтаксического разбора стек пустой, а сентенциальная форма совпадает с анализируемым предложением (xxxyy). В финальном состоянии сентенциальная форма совпадает с начальным символом грамматики (S), стек содержит также начальный символ грамматики, строка полностью прочитана.

В приведенной выше таблице явно указывается в какой момент производится одна из операций (SA | RA), однако из этой таблицы однозначным образом не следует критерий выбора той или иной операции. Очевидно, что необходимым условием применения операции свертки является наличие правой части некоторой продукции на вершине стэка. Однако это условие не является достаточным для применения применения операции свертки. Например, на первых этапах синтаксического разбора, иллюстрируемого на таблице 3.4.3 -1,

в стеке появляется элемент x, совпадающий с правой частью

продукции X -> x, однако перехода к операции свертки и соответствующей замены x на X не происходит. Кроме того, вершина стека может содержать например правые части более чем одной продукции и соот-ветственно возникает проблема выбора между разными операциями свертки. Говорят, что имеет место конфликт вида перенос /свертка (shift/reduce conflict), если в оказывается возможным в одно и то же время применение операции переноса и операции

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

свертка /свертка (reduce /reduce conflict). Для разрешения этих конфликтов применяются различные стратегии, основывающиеся на использовании информации о предшествующих этапах синтаксического анализа, а также информа-ции, полученной путем предосмотра.

В приведенной выше таблице символом предосмотра, определяющим применение продукции X -> x, является символ y. Для применения продукции Y -> y в качестве символа предосмотра фигурирует символ обозначающий конец строки.

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

LR(k) - грамматикой. Здесь буква L означает чтение слева (Left) направо, R - правые порождения (Rightmost), k обозначает число символов предосмотра. Соответственно, LR(k) - языком называется

язык, который можно сгенерировать LR(k) - грамматикой.

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

грамматики со следующими продукциями:

1) E -> E+T, 2) E -> T, 3)T -> T * F,4)T -> F, 5) F -> (E), 6) F ->x.

 

В качестве примера синтаксического разбора используем

предложение x+x+x*x. Пример анализа иллюстрируется на приводимой ниже таблице.

 

_____________________________________________________________

Входная строка Стек Продукция Сентенциальная форма SA | RA

_____________________________________________________________

x+x+x*x x+x+x*x

x +x+x*x x x+x+x*x SA

x +x+x*x F F -> x F+x+x*x RA

x +x+x*x T T -> F T+x+x*x RA

x +x+x*x E E ->T E+x+x*x RA

x+ x+x*x E+ E+x+x*x SA

x+x +x*x E+x E+x+x*x SA

x+x +x*x E+F F- > x E+F+x*x RA

x+x +x*x E+T T-> F E+T+x*x RA

x+x +x*x E E -> E+T E+x*x RA

x+x+ x*x E+ E+x*x SA

x+x+x *x E+x E+x*x SA

x+x+x *x E+F F- > x E+F*x RA

x+x+x *x E+T T -> F E+T*x RA

x+x+x* x E+T* E+T*x SA

x+x+x*x E+T*x E+T*x SA

x+x+x*x E+T*F F -> x E+T*F RA

x+x+x*x E+T T -> T * F E+T RA

x+x+x*x E E -> E+T E RA

_____________________________________________________________

 

Таблица 3.4.3 -2. Пример восходящего синтаксического анализа.

_____________________________________________________________

E T F + * () x ^

______________________________________________________________

1 S2 S5 S8 S9 S12

2 S3

3 S4 S8 S9 S12

4 R1 S6 R1 R1

5 R2 S6 R2 R2

6 S7 S9 S12

7 R3 R3 R3 R3

8 R4 R4 R4 R4

9 S10 S5 S8 S9 S12

10 S3 S11

11 R5 R5 R5 R5

12 R6 R6 R6 R6

______________________________________________________________

 

Таблица 3.4.3 -3. Пример заполнения таблицы синтаксического анализа.

 

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

1) Позиция переноса Sn обеспечивает выполнение операции переноса

и переход в состояние n.

2) Позиция свертки Rk обеспечивает выполнение операции свертки,

используя продукцию k.

Пустые позиции таблицы соответствуют синтаксическим ошибкам и для каждой такой позиции можно предусмотреть выдачу своего

индивидуального сообщения об ошибке.

На каждом этапе синтаксического анализа анализатор находится в одном из конечного числа состояний, и это состояние плюс входной символ (либо символ предосмотра, либо символ только что свернутого нетерминала) определяют элемент в таблице синтаксического анализа.

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

анализатор находится в состоянии 1, а входной символ - это первый символ анализируемого предложения.

Пусть позиция таблицы определяет операцию переноса, тогда:

- символ, соответствующий столбцу, в котором находится данная

позиция таблицы, заносится в стек символов;

- анализатор переходит в состояние, определяемое позицией

переноса, и это состояние заносится в стек состояний;

- если входной символ является терминалом, он принимается,

и входным символом становится следующий терминал

предложения.

Пусть позиция таблицы определяет операцию свертки, тогда:

- из стека символов удаляются m -символов, а из стека состояний

удаляются m состояний, где m - число символов в правой части

продукции, фигурирующей в свертке;

- анализатор переходит в состояние, определяемое вершиной стека

состояний;

- входной символ становится символом в левой части продукции,

определенной в позиции свертки.

Ниже приводится пример анализа предложения x+x+x*x на основе использования таблицы 3.4.3 -3.

 

На начальном этапе имеем:

входная строка стек состояний стек символов сентенциальная

форма

x+x+x*x 1 x+x+x*x

 

 

Состояние -1, входной символ -x, значение соответствующего элемента таблицы - S12; выполняется переход в состояние 12, в стек состояний заносится 12, в стек символов заносится x:

 

входная строка стек состояний стек символов сентенциальная

форма

x +x+x*x 1,12 x x+x+x*x

 

Состояние -12, входной символ - +, значение соответствующего элемента таблицы - R6; выполняется свертка согласно продукции 6,

удаляется одно состояние из стека состояний и один символ из стека символов (так как в правой части продукции 6 имеется только один символ); входным символом становится F:

входная строка стек состояний стек символов сентенциальная

форма

x +x+x*x 1 x+x+x*x

 

Состояние -1, входной символ - F, значение соответствующего элемента таблицы - S8; выполняется переход в состояние 8, в стек состояний заносится 8, в стек символов заносится F:

 

входная строка стек состояний стек символов сентенциальная

форма

x +x+x*x 1,8 F F+x+x*x

 

Состояние -8, входной символ - +, значение соответствующего элемента таблицы - R4; выполняется свертка согласно продукции 4,

удаляется одно состояние из стека состояний и один символ из стека символов; входным символом становится T:

входная строка стек состояний стек символов сентенциальная

форма

x +x+x*x 1 F+x+x*x

 

Состояние -1, входной символ - T, значение соответствующего элемента таблицы - S5; выполняется переход в состояние 5, в стек состояний заносится 5, в стек символов заносится T:

 

входная строка стек состояний стек символов сентенциальная

форма

x +x+x*x 1,5 T T+x+x*x

 

Далее выполняются аналогичные действия, основанные на приведенной таблице синтаксического анализа, которые завершаются

следующим состоянием.

 

Состояние -1, входной символ - E, значение соответствующего элемента таблицы - S2; выполняется переход в состояние 2, в стек состояний заносится 2, в стек символов заносится E:

входная строка стек состояний стек символов сентенциальная

форма

x+x+x*x 1,2 E E

Как только в стеке символов оказывается символ E и считано все предложение, анализ успешно завершается.

 




Дата добавления: 2015-02-16; просмотров: 141 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.015 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав