Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по теории автоматов.doc
Скачиваний:
105
Добавлен:
01.05.2014
Размер:
3.35 Mб
Скачать

Задача распознавания цепочек языка.

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

R = φψ, гдеφ,ψ € V*

ώ1 = ξ1φ ξ2= ώ2 = ξ1ψξ2

ξ1ξ2 €V* - цепочки

то говорят, что ώ2непосредственно сворачивается в ώ1и обозначается ώ1<= ώ2 либо

n

ώ1<= ώ2

Пусть задано множество цепочек

Ω = { ώ1 , ώ2 , ώ3 , … , ώn}

ώn-1< = ώn

ώ1 <= ώ2

говорят, что ώn<= ώ1

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

Классификация грамматик по Хомскому.

  1. Грамматика типа 0 или общего вида

φ ψ , φ ≠e(e– символ конца)

φ может содержать не только терминальные символы

| ώ| - длина цепочки – число символов цепочки.

| φ | < | ψ |

Могут быть правила, которые укорачивают цепочки. Эта грамматика не имеет практического использования.

  1. Грамматика типа 1 или непосредственных составляющих.

Это контекстно-зависимая грамматика и неукорачивает длину цепочки.

ξ1φ ξ2 ξ1ψ ξ2

ξ1ξ2φ ψ € V*

Грамматика контекстно-зависимая и неукорачивающая.

G8

Vт = {a , b , с, d}

I

Vn = {I , A , B}

R = {IaAI , AIAA , AAAABA , aBA  bcdA , bI  ba}

  1. Грамматика типа 2 или контекстно-свободная

A € Vn , ώ € V*

G9

Vт = {a , b}

I

Vn = {I }

R = {IcIa , IbIb , Iaa , I  bb}

I  aIa  abIba  abaIaba  ababbaba

L(G9) = {xx1 ; x € Vт*}

  1. Грамматика типа 3 или автоматная

  1. левосторонняя

A  a , A  Ba

  1. правосторонняя

A  a , A  aB

A , B € Vn , a € Vт

В грамматике либо левосторонняя, либо правосторонняя.

AaA;AAa– рекурсивное

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

G10

Vт = {a , b}

I

Vn = {I , A}

R = {IaI , IaA , AbA , A  b}

L(G10) = {anbm , a,b € Vт , n>0 , m>0 }

L0<=LI<=LII<=LIII

Язык LIIIболее узок, чем языкLIIи так далее.

Примеры построения грамматик.

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

Vт= {/,*}

Vn= {A,I}Aбудет обозначать любую непустую последовательность наклонных

R= {I*B** ,AA/ ,A/}

B– произвольное количество черточек, разделенное *

BA,BB*A(!)

Чтобы получить произвольное количество цепочек из наклонных, введем нетерминальный символ B, который означает цепочку из наклонных, разделенная *, при этом надо добавить два правила (!) и изменить первоначальное правило:

I*B***B*A***A*A***A/*A***//*A***//*/**

Примеры грамматик, используемых при определении языков программирования. Терминальные слова – множество основных символов языка, нетерминальные – синтаксические понятия языка. Для описание правил языка будем использовать язык Бекуса.

Пример: <целое без знака>

<> ::= <> это есть

В левой части пишется определенное понятие, в правой цепочка символов и синтаксических понятий. В правой части могут быть символы.

Пример:

<целое без знака>::=<цифра>

<цифра>::=0| 1|2 … | 9.

Vт ={0,1,2…9}

Vn = {I,A}

I

R= {IIA,IA,A0 ,A1…A9}

Пример грамматика для идентификатора:

<идентификатор>::=<буква>|<идентификатор><буква>|<идентификатор><цифра>

<цифра>::=0| 1| 2…|9

<буква>::=a|b|c…|z

Vт = {0,1,2…9,a,b,…,z}

Vn = {I,B,C}

R = {IB , IIB , IIc , Ba , B…z , C0…C9}

Контекстно-свободные грамматики типа 2

<идентификатор>::=<буква><конец идентификатора>

<буква>::=a|b…|z

<конец идентификатора>::=<буква><идентификатор>|<цифра><идентификатор>| BK

Предполагается что идентификатор заканчивается символом BK.

Vт={0,1…9,a,b,c…,z,BK}

Vn ={I , B , C , E}

R = {IBE , EBE , ECE , EBK , Aa..z , C0..9}

пример определения десятичное число с точкой и знаком.

<десятичное число с(.)>::=+<десятичное число с (.)>|<десятичное число с (.)>|-<десятичное число с (.)>

< десятичное число с (.)>::=<целое число> , <целое число> | . <целое число>.

<целое число>::= <цифра>|<целое число><цифра>

<цифра>::=0|1…|9

Vт ={0,1…9 , + , - , .}

Vn = {P , Q , N , D}

R = {P+Q , PQ , P-Q , QN , QN , ND , NND , D0 , D1…D9}