Научная статья на тему 'Детерминированная семантика регулярных выражений'

Детерминированная семантика регулярных выражений Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
454
78
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ФОРМАЛЬНЫЙ ЯЗЫК / АНАЛИЗАТОР / РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ / АЛГЕБРА КЛИНИ / КОНЕЧНЫЙ АВТОМАТ / ДЕТЕРМИНИРОВАННАЯ СЕМАНТИКА / FORMAL LANGUAGE PARSER / REGULAR EXPRESSION / KLEENE ALGEBRA / FINITE AUTOMATON / DETERMINISTIC SEMANTIC OF REGULAR EXPRESSION

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Черемисинов Дмитрий Иванович

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

The deterministic semantic of the regular expressions

The problem of conversion of formal language texts is of considerable practical importance for software reengineering and for the software integration. Pattern matching is technique of searching a text string based on a specific search pattern. The pattern specified by regular expression forms the basis for building a variety of converters. It is proposed to change the traditional model of the language parser by pattern matching based on the finite state machine into the algebra of patterns with side effects. The proposed deterministic semantic of regular expression eliminates the need to switch from the regular expression engine and user code execution environment and back again

Текст научной работы на тему «Детерминированная семантика регулярных выражений»

УДК 681.3.06

ДЕТЕРМИНИРОВАННАЯ СЕМАНТИКА РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ

Дмитрий Иванович Черемисинов, к.т.н., ведущий научный сотрудник Тел.: 375 17 284 28 61, e-mail: Cher@newman.bas-net.by Объединенный институт проблем информатики НАН Беларуси

http://uiip.bas-net.by

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

Ключевые слова: Формальный язык, анализатор, регулярное выражение, алгебра Клини, конечный автомат, детерминированная семантика.

Регулярные выражения [1] часто используются на практике с целью построения

I программ, являющихся анализаторами текста. Для разработки

анализатора языка с регулярной грамматикой имеются особые инструменты, например, Lex, ге2с и языки сценариев, такие как Sed, Awk и Perl. Все они строят анализаторы однотипной архитектуры, состоящие из двух уровней: процессор регулярных выражений и какой-то программный «клей», связывающий отдельные регулярные выражения вместе.

Процессор регулярных выражений является анализатором текста на основе детерминированного конечного автомата. Такой автомат может быть представлен как статические данные программы анализа в виде таблицы переходов и выходов. Таблично управляемые анализаторы используются в Perl, Python, Emacs, Tel и .Net. Поскольку признаком распознавания служит переход автомата в конечное состояние, процессор регулярных выражений не «ловит» подвыражений исходного регулярного выражения.

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

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

Язык регулярных выражений

Регулярным выражением называется формула алгебры Клини K. Язык регулярных выражений составляет множество формул алгебры K. Элементами K являются строки символов фиксированного алфавита £, сигнатуру операции составляют константы 0 и 1 и операции объединения ( v ), конкатенации (.) и звезда Клини (*). В стандартной интерпретации регулярное выражение s задает язык L(s) алфавита £ ; 0 интерпретируется как пустая строка, 1 - как язык, состоящий из пустой строки, операция a v b - как язык L(a v b)= L(aL(b), операция a.b - как язык L(a.b) = {xy | x g L(a), y g L(b) и звезда Клини a * - язык L(a*) всех строк, полученных конкатенацией нуля или более строк из L(a).

Пусть S - кортеж (линейно упорядоченное множество) строк. Система составляющих на S - это множество C отрезков S, которое содержит в качестве элементов как само S , так и каждое слово, входящее в S, и построено таким образом, что любые два отрезка, входящие в C, либо не пересекаются, либо один из них содержится в другом. Элементы такого множества C называются составляющими. Составляющая x доминирует над составляющей y ( y вложено в x ), если y является частью x и y отлично от x. Составляющими регулярного выражения являются символы алфавита £ и выражения операций. Структуру регулярного выражения a задает дерево непосредственных составляющих (ДНС), отношение которого задается непосредственным доминированием составляющих. ДНС может быть преобразовано в множество правил переходов конечного автомата [2] (в общем случае недетерминированного). Этот автомат строится как композиция автоматов, изоморфная ДНС. Вершины ДНС однозначно соответствуют компонентным автоматам.

Конечный автомат - это пятерка КА = (£,Q,q0,T,P), где £ - алфавит; Q - конечное множество состояний; q0 - начальное состояние (q0 g Q) ; T - множество терминальных состояний, T œ Q ; функция переходов P, заданная множеством правил qiakqj , где qt и q. - состояния, ak - входной символ: qi,q] œ Q,ak œ £ или является

пустым символом. Автомат КА недерминирован, если среди его правил перехода есть правила с пустым входным символом [2]. Правила с пустым входным символом появляются в компонентных автоматах, соответствующим операциям объединения ( v ) и звезде Клини (*).

Состоянием разбора слова v называется упорядоченная пара (v,i), где v g £*, а i -целое число; 0 ^i < |v|,|V - длина слова v. Состояние разбора (v,i) задает представление слова v в виде конкатенации br = v,|b| = i. Правило перехода qiakq] автомата КА применимо в состоянии разбора (v,l), если v представимо в виде конкатенации bakr = v,\b\ = l и текущим состоянием автомата является qt . Для недерминированного автомата текущее состояние - это множество состояний, и qi должно содержаться в этом множестве. Применение правила переводит автомат в состояние qj ,(для недерми-нированного автомата q ] становится элементом текущего состояния), а текущим состоянием разбора становится (v,l + l). Автомат КА применим в состоянии разбора (v,l), если имеется правило для начального состояния, применимое в этом состоянии разбора, и после применения всех возможных правил автомат оказывается в терминальном состоянии. Исходное состояние разбора (v,l ) и состояние разбора (v,m), когда автомат находится в терминальном состоянии, задают представление слова v в виде конкатена-

ции bx/ = v,|b| = l,\bx\ = m. Слово x распознается регулярным выражением s, по которому построен автомат КА. Множество всех слов, распознаваемых регулярным выражением - это язык L(s), называемый регулярным.

Таким образом, регулярное выражение s можно интерпретировать как частичную функцию на множестве состояний разбора. Анализ текста с интерпретацией операций анализа как частичных функций на множестве состояний разбора называется анализом по образцу [3]. В случае регулярных выражений образцом для анализа является регулярное выражение. В большинстве языков программирования имеется реализация такой операции, в которой образцом является само распознаваемое слово (регулярное выражение, построенное операцией конкатенации). В операции поиска по образцу организуется лексикографический перебор состояний разбора с целью нахождения одного (нескольких) вхождений образца. Для языка С++ функция поиска в тексте слова, заданного регулярным выражением, реализована в известной библиотеке Boost [4].

Недетерминизм стандартной интерпретации языка регулярных выражений

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

Регулярное выражение может быть преобразовано в набор правил перехода, задающих детерминированный конечный автомат (текущее состояние всегда одноэлементное и не допускаются переходы по пустому входному символу) [3]. По регулярному выражению детерминированный автомат может быть построен непосредственно процедурой с экспоненциальной верхней оценкой временной сложности, или недерминированный автомат может быть преобразован процедурой детерминизации. Для детерминированного автомата дерево непосредственных составляющих, соответствующих состояниям автомата, при анализе заданной строки может быть построено. Однако этот набор правил перехода не имеет структурного подобия с ДНС регулярного выражения, и поэтому структуру регулярного выражения невозможно использовать в ходе анализа строки.

Для анализа подвыражений можно ограничиться подмножеством языка регулярных выражений, в котором композиция компонентных автоматов, соответствующих вершинам ДНС, задает детерминированный автомат. Некоторые правила переходов с пустым входным символом могут быть удалены с сохранением эквивалентности автоматов. Однако при таком походе существенно сокращаются изобразительные возможности языка регулярных выражений, и значительно возрастает риск ошибок программирования, так как процедура установления свойства детерминированности не тривиальна. Этот подход предлагается использовать в Ragel State Machine Compiler [5].

Алгебра образцов

Пусть f и pt - символы некоторых функций и предикатов на состояниях разбора. Выражение ( ^ f;p2 ^ f2;...;p„ ^ fn) называется условным выражением

Мак-Карти [6] и определяет частичную функцию И на состояниях разбора, совпадающую с одной из функций , номер г которой удовлетворяет следующему условию

рг (х) V V/ ((/</ ^ —р/ ((х)))) , здесь символ — обозначает инверсию

логического значения. Если такого г не существует, то функция И не определена.

Частичная функция преобразования состояний разбора строки / - образец, если для любых состояний а = (у,/\( = (у,г),р = /(а) и w = v,j < г. Пусть р(/,а) -предикат, обозначающий утверждение, что образец / определен на состоянии а . Если °бразцы /х = /2, то и р(/1) = р(/2).

Будем использовать инфиксную форму записи операции # применения образца / к некоторому состоянию строки: /#(=а. Введем следующие операции над образцами.

Катенацией образцов / и g называется операция, определяемая условным выражением ^#а = р(/а) — g#(/#а). Альтернация / V g образцов / и g определяется условным выражением /V g#а = р(/,а) — (/#а);р^,а) — ^#а). Итерация образца / * определяется через степень следующим выражением с бесконечным числом членов /*#а = -р(/ ,а) — а;Р(/2,а) — /1#а;...;Р(/,а) — /_г# а;.... Степень определяется рекурсивно выражениями / 1#а = /#а и /п#а = /#(/(п-1)#а) .

Введенные операции образуют алгебру образцов, элементами которой в отличие от алгебры Клини являются состояния разбора - пары где V е!*, а г - целое число. Нетривиальными константанами этой алгебры являются примитивные образцы, распознающие вхождение слов, состоящих из единственного символа алфавита. Константа 1 этой алгебры - тождественный образец - обладает следующими свойствами: если / образец, то 1* = 1, 1 / = / /1 = /, IV/ = 1, /V1 = g такой (всюду определенный), что на области определения /^ = /, в остальной области g = 1.

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

Пара состояний разбора а и (= /(а) задают представление слова V в виде ахс, то есть образец / распознает слова х как часть слова V. Множество всех слов, распознаваемых образцом /, называется языком ¿\/], распознаваемым образцом. Легко проверяется, что ¿\/] е ¿(/).

Для удобства практического использования в сигнатуру алгебры Клини часто включают операцию разности. Разность регулярных выражений а и Ь (а-Ь) есть язык ¿(а-Ь), слова которого принадлежат ¿(а), но не принадлежат ¿(Ь). В сигнатуру алгебры образцов удобнее включить операцию отрицание /, задаваемую выражением /-#а = -р(/,а) —а.

Подстановка языков

Формально языковую подстановку можно рассматривать как упорядоченную тройку (,Ь2,ф) состоящую из двух языков ,Ь2 и отображения ф: — ¿2 [7]. Операция применения_языковой подстановки_состоит в построении слова Ж из слова V.

Если существует x е Lj и x - вхождение в V, то w получается заменой в V вхождения X словом y = ф(х)е L2. Если X е Lx не содержится в V, то подстановка ((,L2,ф) к V не применима.

Сопоставим с образцом f, распознающим язык L\f ], однозначную функцию ф: L\f ] ^ L2 .Такой образец называется образцом с побочным эффектом. В информатике функция или выражение программы имеет побочный эффект (side effect), если вызов конструкции изменяет состояние вызывающей программы [8]. Преобразование Р = f (а) состояния разбора составляет основной эффект образца f.

Побочным эффектом образца может служить другой образец с побочным эффектом. Образцы с побочным эффектом являются классом рекурсивных функций. Так как рекурсивные функции являются одной из алгоритмических моделей, то вследствие тезиса Чёрча [9] образцы с побочным эффектом - это алгоритмически полная система. Следствием алгоритмической полноты языка регулярных выражений с побочным эффектом является возможность распознавания языка любого типа в классификации Хом-ского, а не только класса регулярных языков.

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

Можно считать, что образцы с побочным эффектом задают некоторую операцию, применимую к анализируемому слову только в том случае, если в этом слове имеется состояние разбора, в котором образец применим. Таким образом, образец с побочным эффектом задает алгоритм построения слова у на основе информации о системе составляющих анализируемого слова x. Образец с побочным эффектом представляет собой нормальный алгоритм Маркова [10]. Конструирование этого алгоритма заключается во «встраивании» операций построения слова у в процедуру анализа x. Для этого в образец, задающий процедуру анализа, включаются тождественные образцы с побочным эффектом. Операции, представляющие побочный эффект этих образцов, являются базисом алгоритмического разложения операции вычисления (x) = y.

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

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

Синтез программы по регулярному выражению с побочным эффектом

Пусть U - некоторое множество переменных, а V - множество их значений. Со-

стояние памяти машины Ü - это функция из U в V, а множество S состояний памяти - это множество всех функций s : U ^ V . Состояние управления - это пара (v,i), в которой v - текст программы на языке L(ü) машины Q, v е Е*, а i - целое число. Множество всех возможных состояний управления совпадает с множеством состояний разбора слов для языка l(q) . Командами машины Ü служат образцы с побочными эффектами, определенными на множестве 4(0) * l(ü) . Если образец f представляет некоторую команду, то множество состояний управления, в которых он применим, задает множество допустимых состояний управления команды, а побочный эффект -функцию преобразования исходных состояний памяти и управления в конечные. Машина Q - это образец (f v f2 v ...v f'n)*, где f - образец с побочным эффектом - команда машины Ü. Программы этой машины принадлежат языку L(Q).

Рассмотрим программу р для машины Q. Пусть P множество состояний управления, возникающих при интерпретации программы р машиной Q. Для каждого состояния управления а е P можно задать отображение ж{ : S ^ P, указывающее состояние управления, в которое перейдет машина Q после выполнения команды, допустимой в состоянии. Объединение всех ttí дает отображение ж: P * S ^ P, называемое

схемой программы р . Схема программы - это граф, вершинами которого являются состояния управления, а дуги помечены значениями переменных памяти машины Q. Команда, изменяющая только состояние памяти, называется преобразователем, команда, не изменяющая состояние памяти, но изменяющая основной эффект образца, называется распознавателем. На команды машины Q накладывается ограничение: все ее команды или преобразователи, или распознаватели. В графическом представлении схемы распознаватели обозначаются ромбами, преобразователи - прямоугольниками.

Память машины Q состоит из переменных и, i, представляющих состояние разбора строки, являющейся значением и, стека для хранения числовых значений и рабочей переменной j числового типа. Преобразователи с пометками ^ и II соответствуют операции запоминания i в стеке, который в момент начала просмотра пуст, операции выборки из стека в переменную i и операции удаления верхнего элемента магазина соответственно. Элементы с пометкой ^ или ^ задают операцию запоминания верхнего элемента магазина в переменнуюj или операцию пересылки значения j в i.

Процесс выполнения программы р для машины Ü на состоянии памяти s0

определяется следующим образом. Он состоит в путешествии по схеме, прокладывающем в ней ориентированный путь и сопровождающемся преобразованием состояний из S. Процесс начинается из состояния управления (р,0) при состоянии памяти s0 . Переход через преобразователь с символом y сопровождается преобразованием текущего состояния памяти х в состояние y(x). Переход через распознаватель не меняет текущего состояния памяти и состоит в выборе одной из исходящих из распознавателя дуг для продолжения путешествия по схеме; если и - сопоставленная распознавателю переменная, то выбирается дуга, помеченная значением и(х). Выполнение схемы завершается, если путешествие по ней привело на выход схемы, и в этом случае текущее состояние воспринимается как результат выполнения программы р с исходными данными s0 . В ином случае результат не определен.

Для синтеза программы для машины Q, реализующей алгоритм, заданный образцом a, используется обратная польская запись образца a. При обнаружении в поль-

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

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

Рис 1. Шаблоны схем

Язык регулярных выражений и транслятор - это система программирования образцов. В настоящее время транслятор этой системы представляет собой препроцессор компилятора С, преобразующий обозначения образцов в программы на языке С. В программе, построенной этим препроцессором, для представления состояния строк используются указатель char * A . Шаблон примитивного образа (рис. 1 а) задается выражением int B = *(A + +)An;; где n - распознаваемый символ. Катенация (рис. 1 б) задается шаблоном h if(!B){ g }.

Альтернация (рис. 1 в) задается шаблоном

Р.push_back (А); h if (В){ А = P.pop_back (); g } else { Р.рор_Ьаск (); В = 1;}.

Итерация (рис. 1 г) задается шаблоном

do { Р.push_back (А); if (!*В){В =0;break;} h В =(!В); }while (!В ); if (!В )В =-1;else {А =Р.pop_back();В =0;}.

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

Заключение

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

ки. Применение побочного эффекта в образцах делает регулярные выражения таким же универсальным формализмом, как и грамматики. Установление структуры составляющих в заданном слове происходит при интерпретации грамматики алгоритмом грамматического разбора. Однако сам алгоритм грамматического разбора частью формализма грамматик не является. Реализация операции анализа, основанная на применении образцов предлагаемого типа, потенциально более эффективна, так как в этом случае имеется возможность управлять последовательностью применения подстановок. Представление подстановки образцами более естественно, особенно в простых случаях, по сравнению с атрибутными грамматиками, т.к. указывая атрибуты для вычисления f(x) = y, приходится учитывать особенности алгоритма грамматического разбора. Однако забота о степени свободы в виде возможности управлять последовательностью подстановок в некоторых случаях по сравнению с грамматиками может увеличить трудоемкость разработки алгоритма анализа.

Система программирования образцов успешно использовалась для построения ряда анализаторов форматов [11].

Литература

1. Фридл Дж. Регулярные выражения / Дж. Фридл. СПб.: «Питер», 2001. 352 с.

2. Ахо А.В., Хопкрофт Д.Э., Ульман Д.Д. Построение и анализ вычислительных алгоритмов. М.: Мир, 1979. 536 с.

3. Aho A. Algorithms for finding patterns in strings // Handbook for theoretical computer science, MIT Press. Vol. A. 1990. P. 257-300.

4. Сик Д., Лай-Кван Ли, Ламсдэйн Э. C++ Boost Graph Library. - Питер, 2006. - 304 с.

5. Thurston A.D. Ragel State Machine Compiler User Guide [Электронный ресурс]. URL: http://www.colm.net/files/ragel/ragel-guide-6.9.pdf (дата обращения: 30.1.2016).

6. McCarthy J. Recursive function of symbolic expressions and their computation by machine, part 1. // Comm. ACM. 1960. V. 3. N. 4. P. 184-195.

7. Черемисинов, Д. И. Программирование подстановок языков / Д. И. Черемисинов // Программирование, 1981. № 5. С. 30-37.

8. Себеста Р.У. Основные концепции языков программирования = Concepts of programming languages. 5-е изд. М.: Вильямс, 2001. С. 282-284.

9. Мальцев А.И. Алгоритмы и рекурсивные функции. М.: Наука, 1986. 368 с.

10. Марков А.А. Теория алгорифмов // Тр. МИАН СССР, М.-Л.: Изд-во АН СССР, 1954. . Т. 42. С. 3-375.

11. Черемисинов Д.И. Перепроектирование ПЛИС на основе трансформации моделей // Проблемы разработки перспективных микро- и наноэлектронных систем - 2014. Сб. трудов / под общ. ред. акад. РАН А. Л. Стемпковского. М.: ИППМ РАН, 2014, Ч. 1. С. 25-30.

The deterministic semantic of the regular expressions

Cheremisinov Dmitry Ivanovich, Ph.D.

The problem of conversion offormal language texts is of considerable practical importance ^ for software reengineering and for the software integration. Pattern matching is technique of searching a text string based on a specific search pattern. The pattern specified by regular expression forms the basis for building a variety of converters. It is proposed to change the traditional model of the language parser by pattern matching based on the finite state machine into the algebra of patterns with side effects. The proposed deterministic semantic of regular expression eliminates the need to switch from the regular expression engine and user code execution environment and back again.

Keywords: ^ formal language parser, regular expression, Kleene algebra,finite automaton, deterministic semantic of regular expression.

i Надоели баннеры? Вы всегда можете отключить рекламу.