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




Скачать 52.89 Kb.
Дата 01.10.2016
Размер 52.89 Kb.

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

  2. Множество всех цепочек из {0,1,a}*, заканчивающихся цепочкой ’a1’ и содержащих чётное количество нулей. Например, ‘a1’, ‘00a1’, ‘010a1’ и т.п.

  3. Построить регулярное выражение, задающее этот язык.



  4. Решение:

В соответствии с условием задачи цепочки регулярного языка заканчиваются последовательностью «a1», причем цепочка должна содержать чётное количество нулей. Следовательно, длина итоговой цепочки без учета конечных «a» и «1» должны быть равна: связка из четного количества нулей и произвольного количества единиц и символов «a». Таким образом, итоговое регулярное выражение можно разбить на две части:

  1. Последовательность из четного количества нулей и произвольного количества единиц и символов «a»: ((1+a)*0(1+a)*0(1+a)*). Так как данная последовательность может быть повторена произвольное количество раз, добавим соответствующий оператор: ((1+a)*0(1+a)*0(1+a)*)*.

  2. Конечные «a» и единица: a1.

Для получения результирующего выражения необходимо объединить данные выражения:

  1. ((1+a)*0(1+a)*0(1+a)*)*a1

Чётное количество нулей м.б. и нулевым, например, «1а1», «аа1а1а1а1»… По Вашему РВ такое не получить.

3 Построить КС-грамматику, задающую язык из задачи №1. Сгенерировать две цепочки языка по построенной грамматике. Процесс генерации цепочек языка записать в виде цепочки вывода, указывая номера применённых правил (или сами правила, как показано в примере). Использовать левосторонний или правосторонний вывод.



  1. Решение:

  2. Регулярное выражение имело вид ((1+a)*0(1+a)*0(1+a)*)*a1. Обозначим A(1+a)*, B((1+a)*0(1+a)*0(1+a)*)*. Тогда первое правило будет иметь вид: SBa1. В правиле для B будут присутствовать A: BA0A0A, надо добавить рекурсию и пустое правило: BA0A0AB|. Нетерминал A рекурсивно порождает любые символы кроме ‘0’: A1A|aA|. Итак, рамматика построена, выпишем её полностью.

  3. G({0,1,a},{S,A,B},P,S), где P:

  4. SBa1,

  5. A1A|aA|,

  6. BA0A0AB|.

  7. Аналогично №1.

  8. Эта грамматика более наглядна, чем регулярная.

  9. Ещё в этом же задании требовалось сгенерировать цепочки языка по полученной грамматике. Покажем на примере одной цепочки, подчёркивая каждый раз нетерминал, который будем раскрывать, и используя правосторонний вывод (каждый раз заменяем крайний правый нетерминал в цепочке вывода).

  10. S  (правило SBa1) Ba1  (правило BA0A0AB) A0A0ABa1  (правило A) 0A0ABa1  (правило A1A0A10ABa1  (правило A) 010ABa1  (правило A) 010Ba1  (правило B) 010a1.

  11. Выделено неверное применение правила.

  12. Получили цепочку, соответствующую требованиям языка.

4 Построить детерминированный конечный автомат (ДКА), распознающий язык из задачи №1. Функцию переходов ДКА представить в двух видах: таблицей и графом переходов. Проверить с помощью этого ДКА допустимость цепочек языка, полученных в задаче №3. Процесс проверки выписать в виде последовательности конфигураций построенного ДКА.



  1. Решение:

  2. При построении ДКА полезно следовать трём правилам:

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

  4. 2) Минимальная непустая цепочка языка должна переводить автомат из начального состояния в конечное.

  5. 3) Если все цепочки языка должны иметь длину заданной кратности, то в функции переходов количество состояний в цикле равно этой кратности (и не может быть меньшим!!!). Тогда для цепочек произвольной длины на вершинах графа функции переходов допустимы петли, для чётной длины циклы включают по два состояния, и т.д.



  6. Для наглядности построение функции переходов ДКА будем выполнять сначала в виде графа:



Ваш автомат примет цепочки вида а10а1, что неверно.

  1. Выпишем полностью построенный ДКА: M({q0,q1,q2,q3},{0,1,a},,q0,{q2})

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






  3. вход

    состояние

    0

    1

    а

    q0

    {q3}

    {q0}

    {q1}

    q1

    {q3}

    {q2}

    {q1}

    q2

    {q0}

    {q0}

    {q1}

    q3

    {q0}

    {q3}

    {q3}



  4. Для наглядности закрасим ячейки таблицы, соответствующие переходам минимальной допустимой цепочки. Рассмотрим разбор построенной в задаче 3 цепочки:



  5. (q0,010a1) ├─ (q3,10a1) ├─ (q3,0a1) ├─ (q0,a1) ├─ (q1,1) ├─ (q2,). Поскольку q2F, это означает, что ‘010a1’L(M).

  6. 6 Построить детерминированный автомат с магазинной памятью, распознающий язык из задачи №5 и работающий с опустошением стека. Проверить с помощью этого ДМПА допустимость цепочек языка, полученных в задаче №5. Процесс проверки выписать в виде последовательности конфигураций построенного ДМПА, указывая номера правил.

Решение:

При построении функции переходов ДМПА потребуется учитывать несколько факторов – равенство и чётность количества символов ‘a’ и ‘b’, количество символов ‘c’, равное половине количества пар ‘ab’.

Таким образом, определим несколько состояний q0, q1, q2, q3:

q0 – прочитан только первый символ ‘a’;

q1 – прочитана одна пара ‘ab’;

q2 – прочитано две пары ‘ab’;

q3 – считан символ ‘с’.

Итак, функция переходов  будет иметь вид:



(q0,a,Z)={(q0,aZ)}

(q1,a,a)={(q1,aa)}

(q2,a,a)={(q2,aa)}

(q3,c,a)={(q3,)}

(q0,b,a)={(q1,)}

(q1,b,a)={(q2,a)}

(q2,b,a)={(q1,)}







(q1,a,Z)={(q1,aZ)}

(q2,c,a)={(q3,)}




(q3,,Z)={(q3,)}

Конец работы.







По выделенным правилам Ваш автомат успешно прочтет недопустимую цепочку с несколькими подряд расположенными «а». Это неверно.

Осталось выписать полностью ДМПА P и проверить допустимость полученной в предыдущей задаче цепочки, для примера возьмём ‘ababababcc’.

P({q0,q1,q2,q3},{a,b,c},{Z,a},,q0,Z,{q3});

(q0,ababababcc,Z) ├─ (q0,babababcc,aZ) ├─ (q1,abababcc,Z) ├─ (q1,bababcc,aZ) ├─ (q2,ababcc,aZ) ├─(q2,babcc,aaZ) ├─ (q1,abcc,aZ) ├─ (q1,bcc,aaZ) ├─ (q2,cc,aaZ) ├─ (q3,c,aZ) ├─ (q3,,Z) ├─ (q3,,).



Поскольку q3F, это означает, что ‘ababababcc‘ L(P).





База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница