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

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

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

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

The algorithm of deadlock-free syntactical analysis of context-free languages is suggested. Kronecker criteria on rationality is generalized for power series of algebraic functions, in principle this result provides a possibility to research the interior properties of the context-free languages (programming languages).

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

On syntactical analysis and properties of formal programming languages

The algorithm of deadlock-free syntactical analysis of context-free languages is suggested. Kronecker criteria on rationality is generalized for power series of algebraic functions, in principle this result provides a possibility to research the interior properties of the context-free languages (programming languages).

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

Вычислительные технологии

Том 10, Специальный выпуск, 2005

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

К.В. Сафонов

Красноярский государственный технический университет, Россия

e-mail: [email protected]

The algorithm of deadlock-free syntactical analysis of context-free languages is suggested. Kronecker criteria on rationality is generalized for power series of algebraic functions, in principle this result provides a possibility to research the interior properties of the context-free languages (programming languages).

Введение

Настоящая статья является продолжением работы [1], посвященной вычислительному распознаванию контекстно-свободных языков (кс-языков) и контекстно-свободных грамматик (кс-грамматик), порождающих эти языки [2-6]. Исследование ведется применительно к языкам программирования, поскольку общим свойством таких языков является их принадлежность классу кс-языков, определяемых следующим образом.

Пусть {xi,..., xn} — множество терминальных символов языка (используемых, например, при написании программ, в том числе операторов языка программирования, букв, цифр и т. д.), а {z1,..., zn} — множество нетерминальных символов, необходимых для задания совокупности грамматических правил языка программирования (его грамматики). Грамматика кс-языка (языка программирования) задается в виде совокупности продукций — правил подстановки:

Zi ^ fii(x,z),...,zi ^ fiqi (x,z),i =l,...,m, (1)

где fij (x, z) — мономы от некоммутативных символьных переменных, как терминальных, так и нетерминальных (левая часть продукций содержит единственный символ и применяется независимо от его окружения — контекста). При этом z1 — выделенный символ, означающий начало программы (подпрограммы). Грамматике ставится в соответствие система символьных уравнений

zi = Pi(x,z),i = l,...,m, (2)

где многочлен pi(x, z) равен формальной сумме мономов fi1(x, z) + ... + fiqi (x, z) [5]. Решение системы (1) можно получить методом последовательных приближений:

zf+1) = Pi(x, z), k = 0,1,...,

© Институт вычислительных технологий Сибирского отделения Российской академии наук, 2005.

г(0) = (0,.0), г(к) = , 4^).

Неограниченное число итераций дает выражение переменных в виде формальных степенных рядов от Х1,..., хп, в частности, формальный ряд

выражающий переменную г1, и является данным кс-языком, а его слагаемые — всевозможные правильные предложения (программы) этого языка.

Изучение характеристических свойств кс-языков дает информацию о внутренних свойствах языков программирования, т. е. совокупности всевозможных “правильных” программ, написанных на этих языках, что представляет интерес для теоретического программирования.

Как отмечено, например, в [7, с. 236], “одной из важных проблем, подлежащих решению при разработке современных систем программирования, является проблема синтаксического анализа программ”. Эта проблема состоит, во-первых, в распознавании правильности программы, т. е. ее принадлежности данному алгоритмическому языку (этап синтаксического контроля), во-вторых, в описании синтаксической структуры правильных программ (т. е. определении, какие грамматические продукции использовались при написании данной программы). Причем наибольший интерес представляют алгоритмы беступикового (безостановочного) синтаксического анализа [7, с. 253].

1. Алгоритм беступикового синтаксического анализа

Поставим в соответствие продукциям (1) систему символьных уравнений

где Д(£, г, х) = Ьц/а(х, г) + ... + fiqi(х, г), г = 1,..., т, а Ьц — дополнительные сим-

вольные множители при мономах — “мономиальные метки”. Систему (4) будем решать методом последовательных приближений:

Очевидно, что решение системы (4) при = е, где е — пустая цепочка, совпадает с решением системы (2), в частности, если его первая компонента г1 представлена формальным рядом

где Щ — мономы от переменных х = (х1, . . . , хт), Ь = (Ьц), то при (Ь^) = (е) получается ряд (3).

Итерации метода последовательных приближений дают мономы возрастающей длины, и через конечное число шагов их степень (число символов х1,..., хп) превысит степень заданного монома ш (заданное конечное число символов программы). “Считывая” мономы необходимой степени и пропуская при этом метки Ьц, можно определить, есть ли среди них моном ш. Каждая переменная , содержащаяся в соответствующем мономе, указывает, что при его выводе использована продукция ^ ^ Ьц/ц(х,г). Действительно, применение

(3)

^ = РДЬ, г, х), г = 1,..., т,

(4)

г(к+1) = РДЬ, г(к+1), х), г(0) =0, г = 1,..., т.

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

Итак, имеет место

Теорема 1. Метод мономиальных меток, заключающийся в решении системы (4) методом последовательных приближений, позволяет провести за конечное число шагов беступиковый (безостановочный) синтаксический анализ любой заданной программы ш.

Пример. Проведем данным методом синтаксический анализ фрагмента арифметической программы (((а + Ь) * Ь) * Ь), написанной на языке программирования, порожденном грамматикой, которая содержит систему продукций:

[7, с. 251]. Здесь +, *, (, ),а,Ь — терминальные символы. Переобозначим их символами х1,х2,х3, х4, х5, х6 соответственно, тогда программа примет вид

и первый моном при Ь11 = Ь12 = Ь21 = е совпадает с искомой программой, причем число вхождений переменных Ь11, Ь12, Ь21 показывает, сколько раз использованы соответствующие продукции грамматики: продукция г1 ^ (г1 * г2) использована дважды, продукция г1 ^ (а + Ь) — один раз и продукция г2 ^ Ь — два раза.

Формальному степенному ряду поставим в соответствие ряд с комплексными переменными [1], задав отображение терминальных xi и нетерминальных zj• символов из множества X и Z в множество комплексных переменных, за которыми оставляем прежние обозначения — xi и Zj соответственно, тогда (х, г) € СП+т. Таким образом, получаем фиксированный гомоморфизм, который ставит в соответствие формальному ряду

г1 ^ (г1 * г2), г1 ^ (а + Ь), г1 ^ Ь

2. Обобщенный критерий Кронекера и кс-языки

степенной ряд от комплексных переменных

к

называемый его коммутативным образом, где к = (к1,...,кп ),ак хк = акь...;кп хк1 ... х^, при этом

< г, -т >

#Х1('ш^=к1,...,#хп('ш^=кп

где #а(в) — число вхождений символа а в моном в• Заметим, что коммутативный образ кс-языка является функцией, голоморфной в непустой окрестности нуля [8].

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

Вопрос о рациональности суммы степенного ряда с одной переменной

а(^) = X! ^ (5)

к>0

решается с использованием хорошо известного критерия Кронекера [9, с. 173], согласно которому рациональность равносильна тому, что при 3 > 30,1 > /0 равны нулю определители Ганкеля

а'+1 • • • а'+«

%+1 а'+2 • • • «'+«+1

а'+« а'+«+1 • • • а'+2«

Эти равенства легко получаются, если умножить ряд (5) на многочлен, который является знаменателем его суммы — рациональной функции. Если сказать более точно, критерий Кронекера связывает рациональность с обращением в нуль определителей Н^, что равносильно исходной формулировке в силу свойств определителей Ганкеля.

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

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

Решение последнего вопроса получается следующим образом. Обозначим к к

41} = X! а^к-*> ак' = X! а^к-Л 3 =2, 3, • • •, & = 0,1, • • •,

г=0 г=0

тогда имеет место

Теорема 2. Для того чтобы функция (5) была алгебраической, необходимо и достаточно существование чисел ^, 30,/0 таких, что при всех 3 > 30,1 > /0 выполнены равенства Н® = 0, где

н'ч(<г) =

— обобщенный определитель Ганкеля степени й, а число q = (I + 1)й — 1.

Теорема 2 обобщает критерий Кронекера о рациональности: если функция — рациональная, то степень определяющего многочлена й =1 и Н()(й) = Н(), т. е. в этом случае получается равенство нулю определителя Ганкеля.

«1+1

«Г

а51н)і

а(1)

а

(і) 1+1+1

«Г

«1+11)

а

(^-1)

1+1+1

(1)

а1+д ... а1+5+г а1+5+г

а(1)

«і+з+і

(й-1) 7 .

Ъ+з

а(гі-1)

«І+з+і

а

Н

(і) _

Доказательство. Пусть а(г) — голоморфная в окрестности нуля ветвь алгебраической функции ш = а(г), представленная рядом (5) и заданная неприводимым многочленом

5(ш, г) = ^0(г) + ^(^ш + • • • + 5й(г)шй, (6)

где 5'(г), 3 = 1, • • •; ^ — многочлены; 5(а(г), г) = 0.

Очевидно, что а' —тейлоровские коэффициенты функции (а(г))'+1^ Подставляя функцию ш = а (ж) в тождество (6), получим тождество

51 (г)(а(г)) + • • • + 5й(г)(а(г))й = -50(2)- (7)

Возьмем I = шах0<'<^{/'} и, дополняя при необходимости коэффициенты многочленов 5' (г) нулевыми значениями, будем считать, что 51(г) = д0 + д1г + • • • + дг1, 5' (г) =

д0'-1) + д'-1^ + • • • + д1'-1)г1, 3 = 2, • • •, ^ Подставляя в тождество (7) ряды функций

(а(г)), (а(г))2, • • •, (а(г))й, получаем равенство

(#0 + #1г + • • • + ^ ] ак^к+

к>0

+(?01} + #1^ + • • • + #(°г1) ^ ак1}гк + • • •

к>0

• • • + (^-1) + ?(Й-1)г + • • • + ^-1)гг) ^ ак'г-1)гк =

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

к>0

Приравнивая к нулю коэффициент при г' в левой части последнего равенства при 3 > 30 = deg £0(г), получим бесконечную систему равенств

, (1) (1) , (1) (1) , , (1) (1) ,

д«а' + д«-1а'+1 + • • • + #0а'+« + # а + д«—1 а'+1 + • • • + #0 а'+« + • • •

I „(й— 1)а(й—1) I д(й—1)а(й—1) + + п(й—1)а(й—1) = 0 (8)

• • • + 5 а + <?г—1 а'+1 + • • • + 50 а'+« = 0 (8)

Рассматривая систему равенств (8) как бесконечную систему линейных уравнений относительно неизвестных #0,•• •, 5, • • •, #0^ 1), • • •, 5^ 1) и выбирая произвольные (/ + 1)^

о / (^—1)

уравнений, получаем подсистему, имеющую ненулевое решение (#0, • • •, 51, • • •, 50 ,•••,

#(й 1)). Последнее равносильно тому, что определитель системы (8) равен нулю, т. е.

Н'(1)(^) = 0 при всех 3 > 30. Теорема 2 доказана. □

Данная теорема дает возможность сформулировать алгоритм вычислительного распознавания степенных рядов алгебраических функций следующим образом. Пусть задан общий вид коэффициентов ряда ак как функций номера &• Тогда необходимо:

1) вычисляя определители Ганкеля как функции номеров 3,1, проверить, равны ли они нулю;

2) вычислить коэффициенты ак1) как функции номера и проверить, равны ли нулю значения обобщенных определителей Ганкеля Н'(1)(2);

3) вычислить для следующего значения % коэффициенты а^ и проверить, обращаются ли в нуль обобщенные определители Ганкеля Н'(1)(% + 1)

Вычисления продолжаются до тех пор, пока не будет установлено обращение в нуль требуемых определителей либо установлено, что они как функции номеров не равны нулю (последнее будет означать, что функция трансцендентна).

Применение обобщенного критерия Кронекера по каждой переменной кратного ряда

(ряда Гартогса) дает возможность сформулировать условие алгебраичности коммутативных образов кс-языков в виде бесконечной системы равенств нулю определителей, составленных из коэффициентов этих рядов.

Список литературы

[1] Сафонов К.В. О возможности вычислительного распознавания контекстно-свободных грамматик // Вычисл. технологии. 2005. Т. 10, № 4. С. 91-98.

[2] Хомский Н. Три модели для описания языка // Кибернетический сборник: Сб. перев. статей. М.: Иностр. лит. 1961. Вып. 2. С. 237-266.

[3] Хомский Н., Щютценверже М.П. Алгебраическая теория контекстно-свободных языков // Кибернетический сборник, нов. серия: Сб. перев. статей. М.: Мир, 1966. Вып. 2. С. 121230.

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

[5] Salomaa A., Soittola M. Automata-Theoretics Aspects of Formal Power Series. N.Y.: Springer-Verlag, 1978.

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

[7] Глушков В.М., Цейтлин Г.Е., Ющенко Е.Л. Алгебра, языки, программирование. Киев: Наук. думка, 1974.

[8] Семенов А.Л. Алгоритмические проблемы для степенных рядов и контекстно-свободных грамматик // Докл. АН СССР. 1973. Т. 212, № 1. С. 50-52.

[9] Бивервах Л. Аналитическое продолжение. М.: Наука, 1967.

Поступила в редакцию 2 ноября 2005 г.

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