Пред. страница   . След. страница   Раздел     Содержание


2.3. Преобразование некоторых типов языков и грамматик к автоматному виду.

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

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

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

Пусть задан язык L=α12,...,αn , где αi Î VТ*. Возьмем некоторую цепочку αi=a1,a2,...,am, символы которой aj Î VТ. Выберем в качестве начального символа искомой грамматики символ <I> и m-1 нетерминальный символ A1, A2,..., Am-1. По выбранной цепочке построим  m правил вывода искомой автоматной грамматики:

<I> ® a1<A1> , <A1> ® a2<A2>, <A2> ® a3<A3>,..., <Am-1> ® am .

Аналогичным образом построим правила вывода для каждой цепочки αk Î L , выбирая каждый раз новые нетерминальные символы.

 

Чтобы сократить число нетерминальных символов при построении правил грамматики для слов с одинаковыми начальными частями, следует использовать одинаковые нетерминальные символы. Например, если слово αi+1=a1,a2,a3’,...,am содержит начальный отрезок a1,a2, совпадающий с начальным отрезком слова αi, то правила грамматики должны иметь вид:

<I> ® a1<A1> , <A1> ® a2<A2>, <A2> ® a3’<A3’>,..., <Am-1’> ® am’ .

Совокупность всех введённых нетерминальных символов составит словарь VA, а совокупность правил - множество R искомой грамматики.

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

Определение. Правило называется праволинейным, если оно имеет вид <A> ® α <B>, где α Î VТ* и <B> ÎVA. Правило называется заключительным, если оно имеет вид <A> ® α, где α Î VТ*.

Определение. Грамматика КС называется праволинейной, если все её правила праволинейные или заключительные.

Утверждение. По любой праволинейной грамматике может быть построена эквивалентная ей автоматная грамматика.

Возьмём некоторое правило заданной грамматики r=<A>® α<B> Î R. Пусть оно имеет вид <A> ® a1, a2,..., am <B>, где ai Î VТ, A, B Î VА и m > 2. Если m = 1, то такие правила преобразовывать не нужно, их следует просто перенести в искомую грамматику.  Выберем m-1 нетерминальный символ A1, A2,..., Am-1 и преобразуем выбранное правило в группу правил вида.:

 <A> ® a1 <A1>, <A1> ® a2<A2>, ...,<Am-1> ® am <B>.

Если исходное правило имело вид <A> ® a1 a2...am, то последнее из построенных правил должно иметь вид <Am-1> ® am. Выберем для каждого правила, у которого m ³ 2 , новые нетерминальные символы и выполним описанное преобразование. Добавляя к построенным правилам правила, правая часть которых состоит из одного символа или у которых m=1, получим А-грамматику, эквивалентную заданной.

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


Пред. страница   . След. страница   Раздел     Содержание