_Доклады БГУИР_
2010 №4 (50)
УДК 004.021
ЛОГИКО-ЛИНГВИСТИЧЕСКИЙ МЕТОД ПОСТРОЕНИЯ ДЕТЕРМИНИРОВАННОГО КОНЕЧНОГО АВТОМАТА ЛЕКСИЧЕСКОГО АНАЛИЗАТОРА ГРАММАТИКИ, ЗАДАННОЙ РЕГУЛЯРНЫМ МЕТАСИМВОЛИЧЕСКИМ ВЫРАЖЕНИЕМ
ДО. ГЛУХОВ, Р.П. БОГУШ, М.В. МАТЮШ, Т.М. ГЛУХОВА
Полоцкий государственный университет Блохина, 29, Новополоцк, 211440, Беларусь
Поступила в редакцию 8 апреля 2010
Предлагается логико-лингвистический метод работы с грамматическими структурами, особенность которого заключается в формализации знаний о преобразовании лингвистических конструкций, в отличие от описания алгоритма преобразования с использованием теоретико-множественных операций. Такой подход применим в том случае, если результат сложного преобразования интуитивно понятен и является легко интерпретируемым. Последним свойством, в частности, и обладает комплексный алгоритм построения лексического анализатора формальной грамматики, заданной регулярным метасимволическим выражением.
Ключевые слова: лексические анализаторы, регулярные выражения, конечный детерминированный автомат.
Введение
Традиционно построение лексического анализатора для языка, заданного регулярным выражением, выполняется путем применения алгоритмов построения правил грамматики по регулярному выражению, записанному на языке метасимволов, приведения грамматики к автоматному виду и приведения, если такая необходимость существует, недетерминированного автомата к детерминированному виду [1, 2].
В данной работе приводится обобщение опыта авторов по конструированию лексических анализаторов в виде логико-лингвистического метода построения детерминированного конечного автомата по регулярному выражению, записанному на языке метасимволов.
В первую очередь, потребность в новом методе заключается в ресурсоемкости применения теоретико-множественных математических методов. Так, например, решение задачи перевода конечного автомата с п исходными состояниями к детерминированному виду требует
2п—1 «
новых состояний и выполнения ресурсоемкого алгоритма отсева недостижимых состояний. Хотя результат работы алгоритма приведения конечного автомата к детерминированному виду интуитивно понятен и заключается в объединении состояний, устраняющем недетерминированность.
Теоритико-множественные преобразования ресурсоемки, а результаты их интуитивно понятны, и, следовательно, могут быть описаны в рамках иного представления знаний об этих преобразованиях. Современные техники извлечения, формализации и использования знаний вербального уровня дают инструмент для работы с лингвистическими структурами в рамках не теоретико-множественных операций, а в рамках систем, основанных на знаниях [3-6].
Определение логико-лингвистического метода построения детерминированного конечного автомата
Определение 1. Фиксированное состояние — это такое положение в метасимволиче-ском представлении регулярного выражения, которое следует за каждым обязательным или возможным единичным включением символа. К множеству фиксированных состояний мы также будем относить состояние, предшествующее символам, определяемым регулярным выражением: так называемое, начальное состояние, конечное состояние и состояние ошибки.
Определение 2. Альтернативный фрагмент — это фрагмент метасимволического представления регулярного выражения, который может рассматриваться в данном фиксированном состоянии как имеющий быть непосредственно следующим, с учетом необязательности присутствия предыдущих, либо при явном присутствии фрагментов, объединенных логической связкой ИЛИ.
Определение 3. Концовка альтернативного фрагмента — это такой фрагмент метасим-волического представления регулярного выражения с некоторой позиции альтернативного фрагмента до, либо явного метасимвола закрытия группы альтернатив, соединенных логическими связками ИЛИ, либо, если альтернативный фрагмент получен путем опускания необязательных предшествующих символов, положение, непосредственно предшествующее следующему фиксированному состоянию.
Определение 4. Одинаковая концовка альтернативных фрагментов — это такой фрагмент метасимволического представления регулярного выражения, который одинаков для концовок рассматриваемых альтернативных фрагментов.
Определение 5. Одинаковое начало альтернативных фрагментов — это такой фрагмент метасимволического представления регулярного выражения, который одинаков для начал рассматриваемых альтернативных фрагментов.
Определение 6. Допустимый альтернативный фрагмент — это альтернативный фрагмент, для которого выполняется дополнительное условие разрешенности (допустимости).
Утверждение 1. Соответствующие фиксированные состояния одинаковых начал альтернативных фрагментов и одинаковых концовок альтернативных фрагментов есть одни и те же состояния для всех рассматриваемых альтернативных фрагментов.
Если в регулярном отношении встречаются последовательности необязательных цепочек вида АХ*р*г*Х*1*и*, где А — начальное состояние последовательности, то с целью построения детерминированного конечного автомата разбора эти последовательности приводятся к виду:
АХ?А1Х *р?А2Р *Г?А3Г*Х?А4Х Ч?А5^и?Аби *,
с вводом дополнительных состояний для позиций последовательности.
Правило 1. Множество допустимых альтернативных фрагментов для состояний последовательности ограничивается. Для альтернативных фрагментов с одинаковыми началами, допустимым является фрагмент, начало которого следует ранее в метасимволическом представлении регулярного выражения.
По сути, правило 1 обеспечивает детерминированность (однозначность) интерпретации записи при логическом построении конечного автомата разбора.
Например, А х*р*гЧ*х*п*р*а в, преобразуем к виду с дополнительными состояниями:
А Х? А1 Х*р? А2 Р*Г? А3 Г*? А4 *? А5 Х*П? А6 П*Р? А7 Р*а в.
Для каждого состояния приведем множество альтернативных фрагментов, выделяя альтернативные фрагменты с одинаковыми началами (табл. 1).
Поскольку, в принципе, нас интересуют исключительно первые символы альтернативных фрагментов, то процесс определения альтернативных фрагментов от некоторой позиции регулярного выражения будет заключаться в последовательном опускании необязательных элементов, следующих за данной позицией.
Ограничим множество альтернативных фрагментов до множества допустимых фрагментов, используя правило ограничения 1 (табл. 2).
Правила регулярной грамматики для последовательности тогда будут (табл. 3):
А
А1
А2
А3
А4
А5
А6
А7
X? А1 X*... А1 X*...
Р? А2 Р*... Р? А2 Р*.
Г? А3 Г*... Г? А3 Г*..
t? А4 *... t? А4 *..
х? А5 х*— х? А5 х*•
П? А6 П*... П? А6 П*.
Р? А7Р*— Р? А7 Р*.
a в a в
А2 ?*■■■ Г? А3 Г*...
I? А41*...
X? А5 х*...
П? А6 П *.. Р? А7р*..
а в
А3 Г*...
I? а44
X? А5 X *.. П? А6 П *.. Р? А7Р*..
а в
А4
X? А5 X*... П? А6 П *... Р? А7Р*...
а в
А5 X*...
П? А6 П *... Р? А7Р*...
а в
А6 П *...
Р? А7 Р*..
а в
А7 Р*...
а в
Таблица 2. Допустимые фрагменты для каждого состояния последовательности
А А1 А2 А3 А4 А5 А6 А7
X? А1 X*... Р? А2 Р*... Г? А3 Г*... t? А4 *... П? А6 П*... А1 X*... Р? А2 Р*... Г? А3 Г*... t? А4 *... П? А6 П*... А2 Р*... Г? А3 Г*... t? А4 *... X? А5 X*... П? А6 П*... А3 Г*... t? А4 *... X? А5 X*... П? А6 П*... Р? А7 Р*... А4 *... X? А5 X*... П? А6 П*... Р? А7 Р*... a в А5 X*... П? А6 П*... Р? А7Р*... a в А6 П*... Р? А7Р*... a в А7 Р*... a в
a в a в a в a в
Таблица 3. Правила регулярной грамматики для каждого состояния последовательности
А
А1
А2
А3
А4
А5
А6
А7
А1 — Ах А2 — Ар А3 — Аг А4 — At А6 — Ап В — Аа
А1 — А1х А2 — А1р А3 — А1г А4 — АП А6 — А1п В — А1а
А2 — А2р А3 — А2г А4 — A2t А5 — А2х А6 — А2п В — А2а
А3 — А3г А4 — A3t А5 — А3х А6 — А3п А7 — А3р В — А3а
А4 — A4t А5 — А4х А6 — А4п А7 — А4р В — А4а
А5 — А5х А6 — А5п А7 — А5р В — А5а
А6 — А6п А7 — А6р В — А6а
А7 — А7р В — А7а
abc+x*p*x*(a\k)*p* 1. s = expand(s),
abc+x?x*p?p*x?x*(a\к)?(a\к)*p?p* 2. s = expand2(s),
abcc*x?x*p?p*x?x*(a\k)?(a\k)*p?p* 3. s = addStates(s),
А a В Ь С c В ^ X? Е X*Р? ¥ Р* X? JX* ^ \ к)? Н ^ \ к)*Р? ЬР*М 4. a = maкeFA(s)■
a(b\c)*d a(c\d)?(c\d)*d А a В ^ \ d)? С ^ \
2. s = expand2(expand(s)),
3. s = addStates(s),
)* dВ.
Преимущества логико-лингвистического метода с точки зрения наглядности дидактического материала заключаются в следующем:
1) работать с метасимволическим представлением регулярной грамматики удобнее в силу компактности записи, определяющей грамматику;
2) операции, выполняемые над метасимволической записью, являются более наглядными и понятными, в отличие от громоздких представлений исходных данных и результатов преобразования грамматик, заданных набором грамматических правил;
3) при построении конечного автомата разбора логико-лингвистическим методом формируется четкое представление о взаимосвязи позиций и символов исходного регулярного выражения с состояниями и переходами конечного автомата;
4) при построении конечного автомата разбора логико-лингвистическим методом формируется понимание смысла итераторов и их эквивалентных представлений на основе других итераторов.
Алгоритм преобразования метасимволического представления регулярной грамматики в детерминированный конечный автомат
Логико-лингвистический подход к описанию преобразования метасимволического представления регулярной грамматики в детерминированный конечный автомат (ДКА) позволяет задать следующий алгоритм преобразования.
1) Преобразовать метасимволическое представление регулярного выражения к единому формату для определения фиксированных состояний путем заменены конструкции Х+ с оператором итерирования + на конструкции с оператором * итерирования хх* и элементы последовательности необязательных цепочек Х* с итератором * на конструкцию Х?Х*.
2) Определить фиксированные состояния.
3) Для каждого фиксированного состояния определить альтернативные фрагменты.
4) Для альтернативных фрагментов с одинаковыми началами и концовками определить общие состояния.
5) Построить ДКА, состояния которого берутся из определенных нами фиксированных состояний. Переходы между состояниями осуществляются по обязательным или возможным единичным символам, предшествующим в метасимволическом представлении фиксированным состояниям, в том числе с учетом итераторов. А петли в конкретных состояниях задаются всеми возможными началами альтернативных фрагментов, не включающими переходы между состояниями.
Рассмотрим несколько примеров:
Пример 1. Регулярное выражение для чисел с плавающей точкой:
[0-9]*[. ] ?[0-9]+([еЕ][+ -]?[0-9]+)?.
Заменим конструкции с оператором итерирования Х+ на конструкции с оператором итерирования Х* и изначальную конструкцию Х* с итератором * на конструкцию Х?Х*, получим:
[0-9] [0-9]*)?
I
Н.
Рис. 1. Схема ДКА разбора текста на соответствие регулярному выражению, описывающему запись чисел с плавающей точкой в нотации языка С++, построенная с применением
логико-лингвистического метода
Для получения полностью определенного ДКА требуется ввести еще одно состояние — состояние ошибки, и определить переходы из каждого состояния для всех неопределенных еще в качестве переходов для данного состояния символов переход в состояние ошибки.
[0-9]?[0-9]*[. ] ?[0-9][0-9]*([еЕ][+ -] ?[0-9][0-9] *) ?. Определим фиксированные состояния:
[0-9]? [0-9]* [.]? [0-9] [0-9]* ([еЕ] [+-]?
I I I I
А В С В
Построим ДКА разбора:
I I
Е ^
О
Приведенный пример иллюстрирует легкость и наглядность логико-лингвистического преобразования по сравнению с традиционными громоздкими алгоритмами на основе теоретико-множественных преобразований грамматик.
Так для решения данной задачи в традиционной постановке пришлось бы выполнить следующие ресурсоемкие алгоритмы [1, 2, 7-10]:
1) алгоритм построения набора правил регулярной грамматики по метасимволическому представлению;
2) алгоритм приведения грамматики к автоматному виду;
3) алгоритм построения конечного автомата по множеству правил автоматной грамматики;
4) алгоритм приведения конечного автомата к детерминированному виду в пространстве состояний, представляющих собой всевозможные сочетания состояний исходного автомата;
5) алгоритм отсева недостижимых состояний.
Последний алгоритм искусственно выделен из алгоритма приведения конечного автомата к детерминированному виду с целью иллюстрации ресурсоемких операций.
Пример 2. Регулярное выражение для константных строк языка С++:
п(г\п\\т].)*п,
или, что тоже
па^шгп^п.
Определим фиксированные состояния:
["] (Г'\п\\] I [\\] Г\п])* ["]
I I I I
А В С В.
В состоянии В мы имеем явным образом определенные альтернативные фрагменты [Л"\л\\] и [\\][А\п], завершающиеся закрывающей скобкой группировки фрагментов.
Таким образом, схема ДКА будет следующей:
Рис. 2. Схема ДКА разбора текста на соответствие регулярному выражению, описывающему константные строки в нотации языка С++, построенная с применением логико-лингвистического метода
Пример 3. Регулярное выражение для блочных комментариев языка С++:
[/][*](ГШ*]+[А*/])*[*]+[/].
Заменим конструкции с оператором итерирования + на конструкции с оператором итерирования *, получим:
[/][*]([**] I [*][*] *Г */]) *[*][*] *[/].
Определим фиксированные состояния:
[/] [*] ( Г*] I [*] [*]*Г*/] )* [*] [*]* [/]
I I I I I I
А В С В Е Г.
Определим альтернативные фрагменты для фиксированного состояния С, указав имена состояний буквами нижнего регистра:
. [А*], (1) [*] в [*]* Г*/], (2)
и, в силу необязательности группы явно определенных альтернатив (...)* третьей альтернативой будет концовка регулярного выражения:
[*] Е [*]* [/] Р . (3)
Покажем для альтернативных фрагментов (2) и (3) наличие одинаковых начал:
[*] в [*]*...,
[*] Е [*]* ....
Следовательно, в соответствии с утверждением 1 состояния В и Е есть одно состояние. Обозначим данное состояние именем И. Тогда имеем:
[/] [*] ( Г*] I [*] [*]*Г*/] )* [*] [*]* [/]
I I I I I I
А В С И И Г.
Рассмотрим альтернативные фрагменты для состояния И:
1) [*]* и; 2) г*/] )* с;
3) [/] г.
Они задают переходы в состояния И, С, Г соответственно. Построим ДКА:
Рис. 3. Схема детерминированного конечного автомата разбора текста на соответствие регулярному выражению, описывающему блочные комментарии в нотации языка С++, построенная с применением логико-лингвистического метода
Заключение
Логико-лингвистические преобразования обладают легкостью и наглядностью по сравнению с традиционными громоздкими алгоритмами на основе теоретико-множественных преобразований грамматик.
Применение данного подхода позволяет не только решить задачу быстрого построения детерминированного конечного автомата по метасимволическому представлению регулярного выражения, но и раскрыть интуитивно понятные закономерности преобразований при обучении студентов теории формальных грамматик и правилам построения лексических анализаторов, что формирует понимание цели выполняемых преобразований на каждой стадии преобразований.
Логико-лингвистические преобразования представляют собой перспективное направление в области преобразований лингвистических структур.
LOGICAL-LINGUISTIC METHOD OF CONSTRUCTING DETERMENITIC FINITE AUTOMAT OF LEXER GRAMMAR, GIVEN WITH REGULAR METASYMBOLIC EXPRESSION
DO. GLUKHOV, R.P. BOGUSH, M.V. MATSIUSH, T.M. GLUKHOVA
Abstract
In the article proposed logical-linguistic methods of work with grammatical structures, feature of which is formalization of knowledge about the transformation of linguistic structures in contrast to the description of the transformation algorithm using set-theoretic operations. This approach is applicable in the case if the result of a complex transformation is intuitively understandable and an easily interpretable. The last property, in particular, has and a complex algorithm for constructing the lexical analyzer of formal grammar, given with regular metasymbolic expression.
Литература
1. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. СПб., 2001.
2. Серебряков В.А., Галочкин М.П. Основы конструирования компиляторов. М., 2001.
3. БройМ. Информатика. Структуры систем и системное программирование: В 4 частях: Пер. с нем. М., 1996. Ч. 3.
4. Глухов Д.О. Экспертная система на нечетких продукционных правилах для обследования сложного объекта / Сб. докл. Междунар. конф. по мягким вычислениям и измерениям. Т. 2. СПб., 1998. С. 174-176.
5. Hlukhau D. Dynamic expert system by fuzzy inference rules to automations an examination of complex objects / Budownictwo i Inzynieria Srodowiska / Zielonogorsk: Politechnika Zielonogorska, 1998. ISBN 83-85911-60-X. P. 105-109
6. Глухов А.О., Глухов Д.О., Трофимов В.В. Мониторинг по нечетким продукционным правилам в сложных динамических системах с изменяющейся структурой / Вестник факультета менеджмента СПбГУ. СПб: СПбГУ, 1998
7. Глухов А.О., Глухов Д.О., Глухова Т.М. Методические указания к лабораторным работам по курсу "Системное программное обеспечение. Лексические анализаторы" для студентов специальности 40.02.01. Новополоцк: ПГУ, 2002.
8. Stephen C. Johnson Yacc: Yet Another Compiler-Compiler. Bell Laboratories Murray Hill, New Jersey 07974.
9. Compilers: Principles, Techniques, and Tools (http://www1.fatbrain.com/asp/bookinfo/bookinfo.asp?theisbn= 0201100886&vm=c) Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman Addison-Wesley Pub Co ISBN: 0201100886
10. Lex & Yacc (http://www.ora.com/catalog/lex/index.html) John R. Levine, Tony Mason, Doug Brown Paperback - 366 pages 2nd/updated edition (October 1992) O'Reilly & Associates ISBN: 1565920007