Слоевая грамматика и её применение для синтаксического анализа

УДК 004.423.26

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

ЛЕЩИНСКАЯ Е.Л.__________________________

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

1 Актуальность исследования

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

2. Постановка задачи. Цель работы

При разборе текста выделяют следующие этапы: лексический анализ (выделение элементарных единиц-лексем, таких как слово, знак препинания, цифра, операция и др.), синтаксический анализ (проверка корректности синтаксиса — взаимного расположения лексем, их присутствия или отсутствия), семантический анализ (извлечение смысла и построение объектной модели информации, например, дерева разбора или графа) [1]. Чем более формальным является язык, тем легче для него проводить все три этапа, а иногда удается даже объединять их между собой. Так, построение дерева разбора стало неотъемлемой частью синтаксического анализа. Но аппарат формальных грамматик [2], использующийся при таком анализе, при всех своих достоинствах имеет ряд недостатков, которые усложняют его применение для извлечения семантической информации [2-4]. Среди них можно выделить следующие.

1. Раздувание при преобразовании

Разработанная по поставленной задаче грамматика не всегда используется в таком же виде. Часто

необходимо привести её к одному из классов, для которых возможно построение детерминированного конечного автомата с магазинной памятью и управляющей таблицей, однозначно определяющих последовательность применения продукций при анализе подающегося на вход транслятора текста [2]. Приведение неизбежно сопровождается трансформацией исходной грамматики, увеличением количества незначащих нетерминалов (см. недостаток 2) и правил, приведением грамматики в нечитабельный для человека вид.

2. Разделение представления одного семантического объекта между несколькими нетерминалами

Редко удается представить один семантический объект одним нетерминальным символом грамматики. С одной стороны, эта проблема вызвана синтаксическими особенностями текста, с другой — желанием построить грамматику по одному из известных клас -сических типов, чтобы в дальнейшем упростить её анализ и избежать описанной в пункте 1 трансформации. Из-за этого один семантический объект представляется в грамматике несколькими нетерминалами, что не очень-то естественно. Ачасто вообще невозможно однозначно ответить, какое понятие кроется за тем или иным нетерминалом, он представляет собой неименованную его часть (наподобие В ^ + А — это не семантическая единица, а всего лишь часть строки).

3. Невозможность распараллеливания

Анализ входного текста в известных на данный момент грамматиках всегда ведется последовательно, «не забегая вперед». С одной стороны, это неплохо. Зачем анализировать строку дальше, если в ней содержатся ошибки, при исправлении которых последующий анализ может кардинальным образом измениться. С другой стороны, часто ошибка закрадывается в синтаксис одного из распознаваемых объектов и не влияет на другие. Благодаря этому после исправления ошибки необходимо будет разобрать заново именно поврежденный объект, а не весь массив информации целиком. Конечно, это возможно только в том случае, если реализован какой-то механизм локализации поврежденного объекта.

Второй недостаток последовательного разбора — невозможность распараллелить анализ отдельных объектов для ускорения работы транслятора.

Цель исследования — попытка устранить эти недостатки, что привело к разработке нового ответвления в теории формальных грамматик — слоевой атрибутной грамматики.

3. Сущность слоевой грамматики

3.1. Общие принципы функционирования

Идея функционирования слоевой грамматики (СГ)возникла в результате наблюдения за анализом алгебраического выражения человеком, желающим упростить его. Естественно было предположить, что анализ начинается с мелких деталей, которые затем складываются в более крупные и так далее, и,

104

РИ, 2003, № 4

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

Входная строка

Анализ строки слоевой грамматикой

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

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

Операция выноса определяется следующим образом:

— Пусть О — выносимый символ.

Пусть Li—символ перед О в продукции, L2—символ непосредственно после O в продукции, a—цепочка в продукции, предшествующая О.

— Тогда при встрече а в анализируемой строке необходимо:

— отыскать L2;

— вырезать подстроку между L1 и L2;

— вставить вместо неё нетерминал О с атрибутом — номером потока, в который вынесена для анализа подстрока;

— продолжить анализ строки дальше;

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

Операция выноса позволяет распараллелить анализ.

Оценкарезультатов анализа

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

На промежуточных этапах при каждом следующем сдвиге анализирующей головки вправо также проверяется синтаксическая правильность введенной цепочки. Выполняется такая проверка с помощью отношения А ПЕРЕД В. Смысл его следующий. В может стоять сразу за А в промежуточной цепочке вывода, только если выполнено отношение А ПЕРЕД В.

А и В — любые терминалы или нетерминалы алфавита.

В СГ обязательно присутствие трех следующих атрибутов у каждого нетерминала:

— номер потока, в котором производится анализ нетерминала (синтезируемый);

— номер порожденного потока, если он есть, для выносимых нетерминалов (синтезируемый);

—тип нетерминала для обозначения семантического смысла объекта, представленного данным нетерминалом (синтезируемый).

Остальные атрибуты могут быть введены для дополнительного анализа объектов строки. Ими могут стать:

—строковое представление подстроки, порожденной данным нетерминалом;

— представление древовидной структуры ветви, порожденной данным нетерминалом (скобочная структура синтаксического дерева);

— и т.д.

В слоевых грамматиках для упрощения анализа вместо Ф-правил введены так называемые условные нетерминалы. Возможны два вида условных правил:

—отсутствие нетерминала не вызывает затруднений при синтаксическом анализе и не требует дополнительных условий;

—должны быть определены условия, при выполнении которых возможно отсутствие нетерминала.

РИ, 2003, № 4

105

Конфликты между двумя правилами слоя с одинаковым префиксом разрешаются в пользу более длинного правила.

3.2. Пример использования грамматики

Рассмотрим, как будет выглядеть СГ для решения породившей её задачи. Чтобы не создавать дополнительных слоев, условимся, что распознавание отдельных терминалов (имени переменной (одна или несколько литер), указателя степени, коэффициента (одна или несколько цифр), знака, действия, скобок) остается задачей лексического анализатора (ЛА). ЛА работает на основе, например, конечных автоматов, которые составляются по отдельности для распознания каждого простейшего понятия, а затем объединяются в один. Выходом такого автоматаявляется тип распознанной подстроки или “пусто”, если строка недопустима.

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

Ниже приведена модель грамматики для алгебраических выражений.

1. Слой 1

1.1. N цифра*

Type(1,1).Value = “Number”

InThread

1.2. V переменная Type(1,1).Value = “Letter”

InThread

1.3. Z знак*

Type(1,1).Value = “Sign”

?BEFORE

Default

Type(1,1).Value = “AV”

InThread

OutThread

Op(1,4).Value = “()”

4. Слой 4

4.1. PL ^ PL|P список переменных Type(1,1).Value = “VarList”

InThread

5. Слой 5

5.1 . O- > Z00N0PL| Z00N -- одночлен ? BEFORE

Default

Empty

Default

Конфликт разрешается в пользу более длинного правила

Type(1,1).Value = “Odn”

InThread

Op(1,4).Value = “*”

6. Слой 6

6.1. Oj ^ O2DO3 алгебраическое выражение Type(1,1).Value = “AV”

InThread

InThread

1.4. D действие*

Type(1,1).Value = “Act”

InThread

2. Слой 2

2.1. E - >л[0]{вынос 3} Type(1,1).Value = “exp”

InThread

OutThread

3. Слой 3

3.1. P - > VE0 -- переменная в степени Type(1,1).Value = “Var”

InThread(1,2) 3

3.2. O1 ^ Z00

Default

Op

7. Слой 7

?type(1,1).Value = “AV” AND 7^. type(2,1).Value = “Odn”

O1O2 ^ O2O1

8. Слой 8

8.1.

O1 ^ O2O3 многочлен или АВ Type(1,1).Value = IIF(type(2,1) = “AV” or type(3,1) = “AV”,

“AV”, “Mnog”)

InThread

? type(2,1) = “AV” or type(3,1) = “AV” : Op(1,4) = “ +”

9. Слой 9

9.1. O1 ^ O2 алгебраическое выражение

Type(1,1).Value = “AV”

InThread

106

РИ, 2003, № 4

* - из соответствующей лексемы

Значения типов атрибутов: Type—тип нетерминала; InThiead—идентификатор текущего потока; OutThread —идентификатор порожденного потока..

Значения свойств нетерминалов: Empty(Neterminal) — может отсутствовать; Default(Neterminal) — значение по умолчанию.

Слой 2

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

1) Ожидаем O Qtype = АВ .

Системные функции: BEFORE(a є N, b є Z uN) — возвращает истину, если символ b находится непосредственно перед подцепочкой, рассматриваемой как правая часть предполагаемой продукции, в цепочке вывода.

Ключевые слова: BO F—начало строки разбора, дно стека 8 — точка справа от нетерминала указывает, что это условное правило первого типа, две точки — второго.

Для продукций, в которых нетерминал Z может отсутствовать, условием допустимого отсутствия является перечисление терминальных и нетерминальных символов, которые могут следовать перед ними, если Z отсутствует. Это множество задается разработчиком в процессе конструирования грамматики. Например, для правил 4 и 6 это множество

следующее: {V, (,[,*,/}.

Символы л ,[, ], (,), N, V, Z, D в данной форме записи представляют собой простейшие атомарные объекты, распознанные в строке ЛА. Остальные нетерминалы порождаются путем свертки.

ZN^ [0]ZNVZNVDVDZ(NVVZN) ^

Имеем

ZNVEZNVZNVDVDZ

2) Ожидаем O Q.type = АВ.

Имеем N ^ О Qtype = Одночлен

О ^ О__Qtype = АВ

Соответствует ожидаемому результату Анализ 1)

Слой 3

(Правила P ^ VE0 и О ^ Z00(O)E„{вынос}) Ожидаем О O.type = AB

ZNVEZNVZNVDVDZ(NVVZN) ^ *

ZNР ZNР ZNPDP DZ

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

1) Ожидаем O O.type = AB .

Конфликт между правилами в слое 4 разрешается всегда в пользу более длинного правила.

{вынос} — описанная в предыдущем подразделе операция выноса.

Имеем

ZNP ZN Р ZN Р DPD Z(O) ^ ZN Р ZN Р ZN Р DPD О

2) Ожидаем O O.type = AB .

Значения по умолчанию атрибутов для нетерминалов, которые могут отсутствовать:

Имеем

NVVZN ^ NPPZN ^ NPLP Z N ^ NPLZN^ OO ^ O ^ O

— отсутствие знака равносильно знаку +

O.type = AB

Z0.0 .value = 1 (что эквивалентно +) Соответствует ожидаемому результату

— отсутствие степени равносильно степени 1 Анализ 1)

E 0 ^[O]

O ^ ZN Z.value = 1 N.value = 1

— отсутствие коэффициента равносильно коэффициенту 1 N0 .Value := 1

Пример использования слоевой грамматики.

Теперь попробуем проанализировать строку — 5aЛ[2] +7b-3z*c/-(24ab + 8) с помощью только что построенной грамматики.

Входная строка после ЛА(слой 1):

ZN^ [N]ZNVZNVDVDZ

Начнем анализ, двигаясь слева направо.

Слой 4

1) Ожидаем O O.type = AB .

Z№ ZNР ZNPDPD0 ^

Имеем

ZNРLZNPL ZNРLDPLD O Слой 5

1) Ожидаем O O.type = AB.

Имеем

ZNPL ZNPL ZNPL D PL D Q ^QQQDQDQ

Слой 6 (Правило O1 ^ O2DO3 ) 1) Ожидаем O O.type = AB

РИ, 2003, № 4

107

Имеем

ОООDОDО^> OOODO^ OOO.

Слой 8

1) Ожидаем O O.type = AB.

Имеем ООО^ OO ^ O O.type = AB .

Строка разобрана.

Описанная слоевая грамматика также была испро -бована в задаче подсчета максимальной степени уравнения для определения метода его решения (как квадратного или линейного).

4. Сравнение с аналогами и результаты

Для решения рассмотренной в примере задачи разбора алгебраических выражений можно предложить другие типы грамматик. Например, LL1, ССП(слабой стратегии предшествования). Ниже приведены данные сравнения этих грамматик.

Кол-во Необходимость

правил преобразования

<LL1> 22 ДА

<СПГ> 21 НЕТ

<СГ> 15 НЕТ

Как видно, СГ выигрывает в количестве правил, у нее отсутствует необходимость дополнительного преобразования для работы распознавателя и возможно распараллеливание. При этом в грамматике данного примера отсутствуют все приведенные в начале статьи недостатки, чего нельзя сказать о двух других типах.

5. Выводы

Представленная СГ иногда способна частично, полностью устранить недостатки существующих типов (невозможность распараллеливания, уменьшение необходимости преобразований, разделение представления одного семантического объекта на несколько нетерминалов). Благодаря разделению на слои уменьшается количество потенциальных конфликтов выбора между правилами в процессе вывода, что приводит к ослаблению, а иногда и исключению вообще необходимости преобразовывать исходные правила. Из-за использования атрибутов, поиска на каждом шаге подстроки для замены (при восходящем разборе) анализ с помощью такого типа грамматик замедляется по сравнению с классическими типами. Но эти потери могут быть оправданы целями, поставленными разработчиками анализа.

Литература: 1. Grune Ceriel Jacobs Parsing Techniques. A Practical Guide DICK. 1998. 2. Льюис Ф, Розенкранц Д, Стирнз Р. Теоретические основы проектирования компиляторов М.:Мир, 1997. 654 с. 3. Josef Grosch. Cocktail Toolbox for Compiler Construction. Object-Oriented Attribute Grammars Achern, Germany: CoCoLab — Datenverarbeitung. 1994. 40 с. // www.cocolab.com 4. Тэйз А., Грибомонт П, Льюис Дж. Логический подход к искусственному интеллекту М.: Мир, 1990. 429 с.

Поступила в редколлегию 21.03.2003

Рецензент: д-р техн. наук, проф. Шабанов-Кушнаренко С.Ю.

Лещинская Елена Леонидовна, студентка 5-го курса специальности ПОАС ХНУРЭ. Научные интересы: проектирование и разработка трансляторов, САПР, систем ИИ, ДБ и БЗ. Адрес: Украина, 61166, Харьков, пр. Ленина, 14, тел. 702-16-46; 24-39-25; e-mail: leo@starnet.com.ua, leshinskayahelen@yahoo.com

УДК 681.327.12.001.362

ФИЛЬТРАЦИЯ ЛОКАЛЬНЫХ ПОМЕХ И ШУМА НА ЭТАПЕ, ПРЕДШЕСТВУЮЩЕМ ПРОЦЕССУ СЕГМЕНТАЦИИ

ГАРЯЧЕВСКАЯ И.В.______________________

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

1. Введение

Ряд задач обработки сложных изображений связан с поиском объектов характерной формы. К таким задачам относятся: обнаружение и опознавание цели в телевизионных системах наблюдения; обна-

ружение и отслеживание перемещения транспортных средств в реальных условиях в реальном масштабе времени; распознавание произвольно расположенных на листе символов (например, букв и условных знаков на географической карте) и др. Основной особенностью этого типа задач является наличие небольшого числа эталонных изображений (силуэт автомобиля, профиль детали). Существенной характеристикой объекта является его форма, а не линейные размеры, положение в пространстве и т.д. В общем случае под обработкой изображений можно понимать низкоуровневую обработку и непосредственно распознавание. К низкоуровневой (предварительной) обработке изображений можно отнести борьбу с помехами (локальными и шумом), выделение объекта из фона (сегментация), выделение контуров объекта и его деталей для осуществления перехода в пространство признаков и проведения непосредственно распознавания. Борьба с помехами— это первый этап, повышающий качество входного изображения.

108

РИ, 2003, № 4