Научная статья на тему 'Описание контекстных условий формальных языков грамматики с контекстуальными аргументами'

Описание контекстных условий формальных языков грамматики с контекстуальными аргументами Текст научной статьи по специальности «Математика»

CC BY
291
56
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по математике, автор научной работы — Скрипов А. В.

В классе грамматик с контекстуальными аргументами выделен подкласс LL(1)K-грамматик. Доказана теорема о детерминированности левостороннего вывода для грамматик класса LL(1)K. И доказана теорема, на основании которой строится анализатор для грамматик этого класса. Рассмотренная грамматика LL(1)K является довольно естественным обобщением класса LL(1)-грамматик. Используемый формализм контекстуальных аргументов позволяет описывать некоторые контекстные условия.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

THE DESCRIPTION OF CONTEXTUAL CONDITIONS OF FORMAL LANGUAGES GRAMMARS WITH CONTEXTUAL ARGUMENTS

In a class of grammars with contextual arguments the subclass of LL (1) K-grammars is allocated. The theorem of determinacy of a left-side conclusion for grammars of a class LL (1)K is proved. Also the theorem on the basis of which the analyzer for grammars of this class is under construction is proved. The considered grammar of LL (1)K is quite natural generalization of a class LL(1) grammars. The used formalism of contextual arguments allows describing some contextual conditions.

Текст научной работы на тему «Описание контекстных условий формальных языков грамматики с контекстуальными аргументами»

ОБРАЗОВАНИЕ

ОПИСАНИЕ КОНТЕКСТНЫХ УСЛОВИЙ ФОРМАЛЬНЫХ ЯЗЫКОВ ГРАММАТИКАМИ С КОНТЕКСТУАЛЬНЫМИ АРГУМЕНТАМИ

СКРИПОВ А.В.

В классе грамматик с контекстуальными аргументами выделен подкласс ЦЦ1)К-грамматик. Доказана теорема о детерминированности левостороннего вывода для грамматик класса ЦЦ1)К. И доказана теорема, на основании которой строится анализатор для грамматик этого класса. Рассмотренная грамматика ЦЦ1)К является довольно естественным обобщением класса ЦЦ1)-грамматик. Используемый формализм контекстуальных аргументов позволяет описывать некоторые контекстные условия.

THE DESCRIPTION OF CONTEXTUAL CONDITIONS OF FORMAL LANGUAGES GRAMMARS WITH CONTEXTUAL ARGUMENTS

A.V. Skripov

In a class of grammars with contextual arguments the subclass of LL (1) K-grammars is allocated. The theorem of determinacy of a left-side conclusion for grammars of a class LL (1)K is proved. Also the theorem on the basis of which the analyzer for grammars of this class is under construction is proved. The considered grammar of LL (1)K is quite natural generalization of a class LL(1) - grammars. The used formalism of contextual arguments allows describing some contextual conditions.

Почти все синтаксические свойства языков программирования и некоторые свойства естественных языков описывает контекстно-свободная грамматика (КС-грамматика).

КС-грамматикой называется четверка объектов G = (V, £, S, Р), где

1) V - вспомогательный алфавит А, В, ...);

2) £ - основной алфавит 1)£ п V = 0, (а, Ь, с, ...);

3) S е V - аксиома (начальный вспомогательный символ);

4) Р - конечное множество правил вывода, т.е. выражения вида:

А ^ р, где АеХ ре(У и £)*

Существующая практика написания компилятора в основном следующая: КС-часть языка переводится автоматически, а контекстно-зависимая учитывается «вручную». При обработке КС-части обычно КС-грамматику преобразовывают (если возможно)

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

Напишем КС-грамматику, которая порождает предложения русского языка. ПРИМЕР G р.я.(/ - обозначает или): <предложение>^<им._ группа><глаг._группа> <им._ группа>^<существительное> <им._ группа>^<прилагательное><им._ группа> <гл._группа>^<глагол>

<гл._группа>^<глагол><предлог><им.группа> <существительное>^самолет | восток | машина <прилагательное>^большой | белый | красный | белая | красная

<глагол>^ летит | едет <предлог>^на

Используя эту грамматику можно вывести следующее предложение: "Большой белый самолет летит на красный восток". Синтаксически все правильно, но выводимо и другое предложение: "Большой белый машина едет". А эта цепочка уже неправильная, тем не менее она выводима.

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

Скрипов А.В.

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

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

Грамматики, для которых таблица предсказывающего анализатора не имеет неоднозначно определенных входов, называются КЬ(1)-грамматиками. Предсказывающий анализатор, построенный для LL(1)-грамматики, называется КЬ(1)-анализато-ром. Две буквы L означают: входная цепочка читается слева направо и строится левый вывод входной цепочки, 1 - что на каждом шаге для принятия решения используется один символ непрочитанной части входной цепочки.

Введем понятие LL(1) - грамматики с контекстуальными аргументами - LL(1)K.

Множество вспомогательных символов V разобьем на два взаимно непересекающихся множества Y и Z: Y={BeV|B - не зависит от аргументов}, Z={Xe V|X - зависит от аргументов} и YoZ=V.

Очевидно, что если BeY, то B=o(B), где g- любая подстановка.

Для определения LL(1)K - грамматики введем сначала следующие понятия:

FIRST(ß) = {aeS | ß^*ay} - это множество основных символов, из которых начинаются цепочки, выводимые из ß.

FOLLOW(X) = {bell S^ *aXbß, а и ß - произвольные цепочки над Z^V, X=g (A(x,...)) для некоторых подстановок у, которые возможны при варьировании аргументов} - это множество основных символов, которые следуют за X при некоторых подстановках.

Ex: рассмотрим грамматику Gj и найдем для первых 2-х правил множества FIRST(ß), для третьего правила FOLLOW(X)

1) 2)

3)

4)

5)

S—A(x,y)B(x)S S—C(x)A(x,y) A(x,y) — s A(1,1) — A(1,2) —d

6) A(2,1) —f

7) B(1) —k

8) B(2) —l

9) C(1) —a

10) C(2) —b

FIRST (A (x,y)B(x)S) = {c, d, f, k, l}; FIRST(C(x)A(x,y)) = {a, b}; FOLLOW(A(x,y))=FOLLOW(A(1,1))^ ^FOLLOW(A(2,1))^FOLLOw(A(1,2))^ ^FOLLOw(A(2,2))={k,l}.

МНОЖЕСТВО ВЫБОРА ПРАВИЛ (SELECT) определим так же, как и для обычной КЬ(1)-грамматики, а именно:

\FIRST(¡), если ¡3 Ф>'е

SELECT (X ^ ß) =

FIRST(ß)UFOLLOW(X), если ß^-'s

ОПРЕДЕЛЕНИЕ: Грамматика G называется ЦЦ1)К-грамматикой, если множество выбора правил (SELECT) с одинаковой левой частью (независимо от контекста) не имеют общих элементов.

SELECT(X'^p)nSELECT(X"^y)=0,

где X'= o'(A(x,...)), X''= o''(A(x,...)), а подстановки о' и а" могут совпадать, а могут различаться. В определении LL(1)K-грамматики мы не различаем X' от X''

Например, чтобы грамматика Gj являлась ЦЬ(1)К-грамматикой, необходимо и достаточно, чтобы:

1) SELEKT(1) n SELEKT(2) = 0

2) SELEKT(3) n SELEKT(4) = 0

3) SELEKT(3) n SELEKT(5) = 0

4) SELEKT(3) nSELEKT(6)=0

5) SELEKT(4) nSELEKT(5)=0

6) SELEKT(4) nSELEKT(6)=0

7) SELEKT(5) nSELEKT(6)=0

8) SELEKT(7) nSELEKT(8)=0

9) SELEKT(9) nSELEKT(1O)=0

ОПРЕДЕЛЕНИЕ: Подстановка

о'(хрх2,х3...) СОВМЕСТИМА с подстановкой о(уру2,у3...), т.е. о^ о', если аргументы, которые зафиксированы (т.е. х=а, где aleDl -области изменения х), равны друг другу у=х ТЕОРЕМА 1. Пусть G-LL(1)K - грамМатика. Тогда если из аксиомы выводима цепочка wXa, где Х=о(А(х,.)) и ЬеЕ, то найдется не более одного правила вывода, которое надо применить к X, чтобы получить

вывод цепочки, начинающийся с wb (здесь wеZ, ае^^У).

ДОКАЗАТЕЛЬСТВО (от противного):

Предположим, что существует 2 правила:Х'^р и Х"^у, где Х'= о'(А(х, ...)), Х'= о''(А(х,...)), о которых говорится в формулировке теоремы.

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

Тогда существует два вывода:

(2) S=>*wX''а=>wyа=>*wb^

Рассмотрим дерево первого (рис. 1) и второго (рис. 2) вывода, в случае, если нет аннулирующих правил:

8

рис. 1

Теперь из рис. 1 видно, что bеFIRST(P), следовательно, Ье SELECT(X'^P). Из рис. 2 видно, что bеFIRST(y), следовательно, bеSELECT(X''^y).

Таким образом, мы получили, что: SELECT(X'^P) п SELECT(X''^y)={b}. Следовательно, грамматика G противоречит определению LL(1)K - грамматике, а это значит, что она не является LL(1)K -грамматикой.

Получили противоречие: по условию теоремы G - это LL(1)K-грамматика.

Рассмотрим деревья первого вывода. В случае, когда применяются аннулирующие правила, возможны 2 случая (рис. 3):

В первом случае видим, что bеFIRST(P), следовательно, bеSELECT(X'^P). Во втором: bеFOLLOW(X'), следовательно, в любом из 2-х возможных случаев bеSELECT(X'^P).

Если построить деревья второго вывода, в случае, когда применяются аннулирующие правила, то аналогично можно убедиться, что bеSELECT(X''^y).

Таким образом, мы опять получили, что: SELECT(X'^P)nSELECT(X''^y)={b}.

Следовательно, грамматика G не является LL(1)K - грамматикой.

Снова получаем противоречие: по условию теоремы G - это LL(1)K-грамматика.

Следовательно, наше предположение о существовании двух правил вывода было ложным, и остается признать истинность теоремы.

Теорема доказана.

На основании Теоремы 1 строим МП-автомат (автомат с магазинной памятью) с дополнительной проверкой о подстановке.

(А, Ь, о)=>действие=>(А7, Ь7, о 7), где А, А7 принадлежат множеству магазинных

Скрипов А.В.

символов. Символы Ь, Ь принадлежат множеству входных символов автомата. Рассмотрим подробней.

Множество входных символов автомата Множество магазинных символов Г =УиЕ/ ^{У }, где и - множество основных символов, которые стоят в правых частях правил вывода в конце правил или в середине.

Рассмотрим множество выбора правил, содержащие одинаковые символы А в левой части: Х'^Ри Х"^у, где Х'= а'(А(х,...)), Х''= у''(А(х,...)). Подстановки а' и а" могут совпадать, а могут различаться. Если Ь принадлежит множеству выбора правил, то только одному bеSELECT(X'^Р).

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

1. Если Ь не принадлежит множеству выбора правил, ни одному из правил, содержащих А в левой части, то пишем "отвергнуть".

2. Если Р^Ъ9, тогда:

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

Если Ае2, записываем допустимую а подстановку (т.е. ту подстановку, которая написана в левой части правила к символу А), сравниваем подстановку текущую ау и допустимую а. Если ау <^а, то меняем текущую подстановку ау = ау +а .

// операция ау = ау +а означает придание значений аргументам, которые не зафиксированы в подстановке ау и зафиксированы в подстановке а.//

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

3. Если Р не начинается с символа Ь, тогда:

Если Ае Y в магазин вместо А записываем Р, а сдвига не делаем, текущая подстановка остается прежней.

Если Ае2, записываем допустимую а подстановку (т.е. ту подстановку, которая написана в левой части правила к символу А), сравниваем подстановку текущую ау и допустимую а. Если ау ^ а, то меняем текущую подстановку ау = ау +а, далее в магазин вместо А записываем Р, а сдвига не делаем. Если подстановка текущая не совместима с подстановкой допустимой, тогда "отвергнуть".

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

Ex: Построим автомат для грамматики 04:

1) S^AbB(x) SELECT(1)={a, Ь, с, е}

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

2) S^d SELECT(2)={d}

3) А^С(х)В(х)Ь SELECT(3) ={а, е}

4) А^В(х) SELECT(4)={e, Ь}

5) В(1)^cSd SELECT(5) ={с}

6) В(2)^е SELECT(6)={Ь,-\}

7) С(1)^а SELECT(7)={a}

8) C(2)^ed SELECT(8)={e}

D={1,2}

Эта грамматика является КЬ(1)К - грамматикой. Построим анализатор (таблица 1).

ЕМП = {3> Ь С ^ ^ "|}

г А, в, с, ь, а, У}

магазин у

ТЕОРЕМА 2. Пусть автомат, построенный по правилам, описанным выше, сделал к тактов без операции "отвергнуть". Тогда произведение обработанной части цепочки на содержимое магазина, с выполненной подстановкой ау, без дна магазина У есть левосторонний вывод.

ДОКАЗАТЕЛЬСТВО (методом индукции):

Обозначим это произведение через а для ьтого такта.

Покажем индукцией по к, что З^а^а^...^^ - левосторонний вывод.

Таблица 1

а ъ с а е

Б Зам. на АЬВ(х) Зам. на АЬВ(х) Зам. на АЬВ(х) Выт. сдвиг Зам. на АЬВ(х) Отв.

А Зам. на С(х)В(х)Ъ Отв. Отв. Отв. Зам на С(х)В(х)Ъ Отв.

В Отв. с(х=2) выт. а(х=1) зам на сдвиг Отв. Отв. Отв.

С а(х=1) БЫТ. СДВИГ Отв. Отв. Отв. а(х=2) зам на <1 сдвиг Отв.

(1 Отв. Вел. сдвиг Отв. Отв. Отв. Отв.

V Отв. Отв. Отв. Отв. Отв. доп.

Посмотрим, как функционирует автомат. Начальное состояние магазина SV. Результат работы будем записывать в таблицу 2:

Таблица 2

N Обработанная часть Оставшаяся часть магазин о

0 0 еаы ЭУ X

1 0 едЬЬ-| АЬВ(х)У X

2 0 есМ )- С(х)В(х)ЪЬВ(х)У X

3 е аын БВ(2)ЪЪВ(2)У 2

4 её ььн В{2)ЪЬВ(2)У 2

5 её ьь- ЬЬВ(2)У 2

6 еаъ ъ- ЬВ(2)У 2

7 есШЬ - В(2)У 2

8 ес1ЬЬ - V 2

допустить

БАЗА ИНДУКЦИИ к= 1

есть левый вывод? Смотрим МП-автомат. Текущая подстановка оу. Какое действие возможно при состоянии (З, Ь, оу) 1 пункт и "иначе" во 2 и 3 пункте не возможны, т.к. по условию теоремы операции отвергнуть не было. Если по 2 пункту (рис 4): $=>*Ь9 Тогда а1=Ь оу(9)-левосторонний вывод.

Рис. 4

Если по 3 пункту (рис. 5): З—>Р, из Р не выводима цепочка, начинающаяся на Ь. Тог-

да a,j= Gv(ß) - левосторонний вывод. Таким образом, из S выводима aj

ШАГ ИНДУКЦИИ

Пусть З^а^. ,.^ак1 левый вывод. Пункт 4 (рис. 6): из рисунка 6 видно, что Ь из магазина уходит в обработанную цепочку, таким образом, а = ак

Пункт 2: ак-1 = и оу(А^) А^Ш Тогда ак = иЬоу(9^). Аналогично для 3 пункта. Таким образом, ак выводима из ак 1

Теорема доказана.

СЛЕДСТВИЕ: построенный выше МП-автомат допускает цепочку w ^ тогда и только тогда, когда weL(G).

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

ЛИТЕРАТУРА

1. Замятин А.П., Шур А.М. Языки, грамматики, распознаватели: Учебное пособие. Екатеринбург: УрГУ, 2007.

2. Агафонов В.Н. Синтаксический анализ языков программирования: Учебное пособие. Новосибирск: НГУ, 1981. 91 с.

3. Братчиков И.Л. Синтаксис языков программирования. М.: Наука, 1975. 232 с.

4. Гинзбург С. Математическая теория контекстно-свободных языков. М.: Мир, 1970. 326 с.

5. Гладкий А.В. Формальные грамматики и языки. М.: Наука, 1973. 368 с.

6. Грис Д. Конструирование компиляторов для цифровых вычислительных машин. М.: Мир, 1975. 544 с.

7. Гросс М., Лантен А. Теория формальных грамматик. М.: Мир, 1971. 294 с.

8. Льюис Ф., Розенкранц Д., Стирнз Р. Теоретические основы проектирования компиляторов. М.: «Мир», 1979, 656 с.

9. Рейуорд - Смит В. Дж. Теория формальных языков. Вводный курс. М.: Радио и связь, 1988. 129 с.

10. Ахо A., Ульман Дж. Теория синтаксического анализа, перевода и компиляции. Т. 1. М.: Мир, 1978. C. 612.

11. Фомичев В.С. Формальные языки, грамматики и автоматы.

12. http ://www. etu. ru/misc/edu/Index.htm#cont

i Надоели баннеры? Вы всегда можете отключить рекламу.