Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка 15.02.docx
Скачиваний:
2
Добавлен:
07.05.2019
Размер:
240.61 Кб
Скачать

Преобразование регулярного выражения в автомат

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

Построение -НКА, обладающего свойствами:

  • имеет ровно одно допускающее состояние.

  • нет дуг, ведущих в начальное состояние.

  • нет дуг, выходящих из допускающего состояния.

Таблица 7. Регулярные выражения.

Выражение

Описание

,

Любой символ

\

Интерпретирует символ после \ как литерал

()

Группировка операторов

{n}

Последовательность из n раз повторяющегося элемента, расположенного пред {n}

Пример: ‘a{2}’ определяет строку 'aa'

{n,m}

Последовательность от n до m раз повторяющегося элемента, расположенного пред {n,m}

Пример: ‘a{2,4}’ определяет строки 'aa','aaa',’aaaa’

{n,}

Последовательность из n и более элементов

Пример: ‘a{2,}’ определяет строки 'aa',’aaa’,…

*

Последовательность из 0 и более элементов

L((ab)*) = {, ab, abab, ababab,…}

+

Последовательность из 1 и более элементов

L((ab)+) = {ab, abab, ababab,…}

?

Последовательность из 0 или 1 элемента

L((ab)?) = {, ab}

|

Конкатенация выражений

L(ab|c*) = {ab, e, c,cc,ccc,…}

[aeiou]

Любой символ из представленных в квадратных скобках: L([abcd]) = {a,b,c,d}

[a-z]

Любой символ из заданного диапазона

L([a-c])={a,b,c}

[^aeiou]

Любой символ, исключая представленные в квадратных скобках

\w

Любая буква или цифра

^

Последовательность начинается с начала строки

$

Последовательность заканчивается на конце строки

Все строки правильного адреса email:

L(^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$) = {new@era.com, func-01@new.era.com, …}

Распознание токенов

  1. Задать грамматику языка

  2. Задать регулярную грамматику токенов

  3. Задать атрибуы токенов

  4. Преобразовать регулярные выражения в КА.

  5. Реализовать КА.

Пример 8. Грамматика (Pascal):

S  if E then S | if E then S else E |

E  T relation T | T

T  id | num

Грамматика терминалов:

if  if

then  then

else  else

relation  <|<=|=|<>|>|>=

id  [a-Z]([a-Z]|[0-9])*

num  [0-9]+(.[0-9]+)?(E(+|-)?[0-9]+)?

Разделители лексем:

delim  blank | tab | newline

ws  delim+

Таблица 8. Регулярные выражения для мини-Pascal.

Регулярное выражение

Токен

Атрибут

ws

-

-

if

if

-

then

then

-

else

else

-

id

id

Указатель на запись в таблице символов

num

num

Указатель на запись в таблице символов

<

relation

LT (lower than)

>

relation

GT(grater than)

>=

relation

GTE

<=

relation

LTE

Рисунок 4. КА для операций отношения (relation).