Анимация
JavaScript
|
Главная Библионтека из которого видно, что реальное число состоит из следующих компонентов, расположенных именно в таком порядке: 1) возможного знака; 2) последовательности из нуля или более цифр; 3) десятичной точки; 4) последовательности из одной или более цифр; 5) возможной экспонентной части, содержащей а) экспоненту (10), б) возможный знак, в) последовательность из одной или более цифр. Регулярные выражения, конечно, эквивалентны грамматикам типа 3 (см. разд. 2.2). Например, грамматика типа 3, соответствующая регулярному выражению для вышеприведенного вещественного числа, имеет порождающие правила: P->dF d F->dF 10A d N->dN d где R - начальный символ. Существует полное соответствие между регулярными выражениями (а поэтому и грамматиками типа 3) и конечными автоматами, которые определяются следующим образом. Конечный автомат - это устройство для распознавания строк какого-либо языка. У него есть конечное множество состояний, отдельные из которых называются последними. По мере считывания каждой литеры строки контроль передается от состояния к состоянию в соответствии с заданным множеством переходов. Если после считывания последней литеры строки автомат будет находиться в одном из последних состояний, о строке говорят, что она принадлежит языку, принимаемому автоматом. В ином случае строка не принадлежит языку, принимаемому автоматом. Формально конечный автомат определяется пятью характеристиками: 1) конечным множеством состояний К; 2) конечным входным алфавитом Z; 3) множеством переходов 5; 4) начальным состоянием S(SeK); 5) множеством последних состояний F(FK). Конечный автомат можно записать в виде пятерки M = (A,Z, 5,S,F). Рассмотрим следующий пример, где состояниями являются А и В, входным алфавитом - {0,1}, начальным состоянием - А, множеством последних состояний - {А}, а переходами § (A,0)=A, §(A,1)=В, §(В,0)=В, §(В,1)=A. Эти переходы означают, что «при чтении 0 в состоянии А управление передается в состояние А» и т. д. При чтении строки 01001011 управление последовательно передается в следующем порядке через со стояния A, А, В, В, В, А, А, В, А. Так как А есть последнее состояние, строка принимается конечным автоматом. Однако при чтении строки 00111 автомат проходит через состояния А, А, А, В, А, В в таком порядке, и поскольку В не является последним состоянием, эта строка не принимается, т. е. она не принадлежит языку, принимаемому этим автоматом. В связи с тем что нули не влияют на состояние автомата, а каждая единица изменяет его состояние с A на В и с В на A,и начальное состояние является тем же, что и последнее состояние, язык, принимаемый автоматом, состоитиз тех строк, которые содержат четное число единиц. Переходы можно представить также с помощью таблицы (табл. 3.1) и схематически (рис. 3.1). Таблица 3.1 Состояния A B A B B A Рис. 3.1 Такой автомат называют детерминированным, потому что в каждом элементе таблицы переходов содержится одно состояние. В недетерминированном конечном автомате это положение не выдерживается. Рассмотрим конечный автомат, определенный следующим образом: M1=(K1,Z1,51,S1,F1), где K1={A,B}, 1={0,/}, S1={A}, F1={B}, а переходы представлены в табл. 3.2 или схематически на рис. 3.2. М, принимает строку тогда и только тогда, когда она начинается с единицы. Эта же строка не может быть принята, так как при чтении 0 не осуществляется переход с А. Таблица 3.2 A B 0 {B} {A,B} {B} Рис. 3.2 Строка 1 будет принята: здесь есть переход (в более общем случае последовательность переходов), ведущий к последнему состоянию при чтении строки. Имеется также переход к не последнему состоянию (от А к А), но это не влияет на приемлемость строки. Поэтому прежде чем прийти к выводу о том, что строка не может быть принята недетерминированным конечным автоматом, необходимо перепробовать все возможные последовательности переходов. С этой целью следует перебрать все возможности одну за другой или параллельно. Если в данный момент времени можно проходить только по одному пути (как обычно и бывает), то требуется возвратиться назад, т. е. необходимо перечитать всю строку или ее часть в процессе опробования другого пути. Очевидно, что эта процедура может оказаться весьма длительной. Существует детерминированный конечный автомат М2, соответствующий автомату М1, который принимает тот же язык, M2=(K2,Z2,52,S2,F2) где K2 = {A,B,C}, Z2={0, /}, S2 = {A},F2={B}, а переходы даны в табл. 3.3 и схематически на рис. 3.3. 0 1 2 3 4 5 6 7 8 9 10 11 [ 12 ] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |