ПРИКЛАДНАЯ ДИСКРЕТНАЯ МАТЕМАТИКА
11 ПРИЛОЖЕНИЕ Сентябрь 2018
Секция 6
МАТЕМАТИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ И ПРОГРАММИРОВАНИЯ
УДК 519.682 Б01 10.17223/2226308X711/39
СИНТАКСИЧЕСКИЙ АНАЛИЗ ПРОГРАММ МЕТОДОМ ИНТЕГРАЛЬНЫХ ПРЕДСТАВЛЕНИЙ1
О. И. Егорушкин, И. В. Колбасина, К. В. Сафонов
Предложен новый метод синтаксического анализа мономов контекстно-свободного языка как модели языков программирования, основанный на интегральном представлении синтаксического полинома программы. При этом показано, что интеграл фиксированной кратности по циклу позволяет найти синтаксический полином монома (программы) с неограниченным числом символов, что даёт новый подход к проблеме синтаксического анализа. Предполагается, что интеграл по циклу может быть вычислен с помощью теории вычетов.
Ключевые слова: формальный степенной ряд, коммутативный образ, синтаксический анализ, интегральное представление.
Одной из важных проблем, связанных с разработкой систем и языков программирования, является проблема синтаксического анализа программ [1]. Как известно, большинство языков программирования является кс-языками, которые можно представить в виде формального степенного ряда (ФСР), поэтому каждая программа, написанная на языке программирования, может рассматриваться как моном соответствующего ФСР. В связи с этим рассмотрим проблему синтаксического анализа мономов кс-языка.
Для того чтобы сформулировать её, рассмотрим подробнее систему полиномиальных уравнений Хомского — Щутценберже, которая определяет кс-язык. Как известно [1, 2], грамматика кс-языка является множеством правил подстановки
х,- ^ дп(г,х), ..., ^ ^ д^.(х,х), ] = 1 ,...,п,
где д.,^(х,х) является мономом от некоммутативных символьных переменных с числовым коэффициентом, равным единице. Правила подстановки можно применять к начальному символу Х\, а затем к другим мономам в любом порядке неограниченное число раз, что позволяют выводить новые «правильные» мономы, образующие кс-язык.
В [3] предложен метод мономиальных меток, который позволяет провести беступиковый синтаксический анализ монома V от терминальных символов XI,... ,хт. Метод состоит в следующем. Сначала каждое правило подстановки ^ д^(х,х) заменяется правилом Хз ^ Ьзид^ (х, х), имеющим мономиальную метку 3, которая является символом из расширенного алфавита, и для новых правил вывода рассматривается
Исследование выполнено при финансовой поддержке РФФИ и Правительства Красноярского края в рамках научного проекта № 17-47-240318.
Математические основы информатики и программирования
129
соответствующая система уравнений Хомского — Щутценберже:
Zj = Q*(z,x,t) = гпдп(г,х) + ... + д^(г,х), 1 = 1,...
х) + ... + .д,п. (z,x), 1 = 1,...,п.
Решение этой системы можно получить методом последовательных приближений в виде ФСР, в том числе в виде ФСР представлена первая компонента решения
те
Zl = z\ (х= £ ,-г) -г, (2)
г=0
где — мономы от символов х*,. . . , хт, t11,t12, ... , ЬПРп.
Синтаксический анализ монома V кс-языка z1 (х) можно провести следующим образом. Считывая мономы степени degx(v) относительно символов х1,... , хт и пропуская символы tjk, можно установить, есть ли среди них моном V, а значит, можно ли вывести его с помощью системы продукций. При этом каждая мономиальная метка tjk, содержащаяся в таком мономе, показывает, что при его выводе использовалось правило Zj ^ tjkдjk^,х). В самом деле, из системы уравнений (1) и метода последовательных приближений нетрудно видеть, что, применяя это правило вывода к моному, мы умножаем его слева на символ tjk. Следовательно, мономиальные метки монома решают проблему его синтаксического анализа, показывая, какие правила вывода кс-языка и сколько раз использовались при выводе этого монома, с точностью до порядка их применения.
Информацию о мономиальных метках монома можно получить в виде (п+т)-крат-ного интеграла по циклу, где числа п и т не зависят от степени монома и равны числу нетерминальных и терминальных символов грамматики кс-языка соответственно.
Рассмотрим коммутативный образ [4] ФСР (2)
Ф1 (х,ф = £ (1)ха, (3)
а
сгруппированный по степеням ха в кратный ряд Гартогса [5, 6].
Назовём синтаксическим полиномом монома V относительно кс-языка z1(x) = = z1 (х,е) коэффициент 8а(Ь) ряда Гартогса (3), такой, что ха =
Мономиальные метки, содержащиеся в некоммутативных мономах кс-языка, не исчезают при переходе от ФСР (2) к его коммутативному образу (3) и сохраняются в виде мономов синтаксических полиномов, поскольку все коэффициенты ФСР (3) являются целыми положительными числами [7, 8]. Следовательно, если синтаксический полином монома относительно кс-языка равен нулю, то моном не принадлежит этому языку.
Следующая теорема даёт принципиальную возможность получить синтаксические полиномы эа(1) в виде кратного интеграла по циклу, который может быть вычислен с помощью многомерных вычетов.
Теорема 1. При всех Ь, достаточно близких к нулю, и всех мультииндексах а синтаксический полином ва(1) задаётся равенствами
1 Г z1 det- (сг^1^,х^)))'г) dz Л ¿х
8а(^ = (2пг)п+т У ^ ' (4)
ХГх
1 [ д 1Н1 .Zl det(5^ - (сг^,Х,Ь))))
(2пг)па! } дха\ ^ - сг^*^,х,Ь)))
dz,
х=0
130
Прикладная дискретная математика. Приложение
где Yz = (N = • • • = |zn| = e} и Гх = {|xi| = ... = |xm| = 8} —циклы интегрирования; 0 <8 < e < 1; dz = dz1 Л ... Л dzn; dx = dx1 Л ... Л dxm; xa+I = x\г+1 ■ ... ■ xmm+1; a! = «1! ■ ... ■ am!; (z - ci(Q*(z,x,t))) = (z1 - ci(Q1(z,x,t))) ■ ... ■ (zn - ci(Qn(z,x,t)));
dIMI gai+...+am
= -; 8ij — дельта Кронекера.
dxa ox^ ■ ... ■ dxm
Формулы (4) и (5) позволяют эффективно осуществлять синтаксический анализ монома, находя его синтаксический полином. Так, кратный интеграл (4) можно вычислить как повторный, используя формулу Коши и разложение в степенной ряд подынтегральной функции.
ЛИТЕРАТУРА
1. Глушков В. М., Цейтлин Г. Е., Ющенко Е. Л. Алгебра. Языки. Программирование. Киев: Наукова думка, 1973.
2. Salomaa A. and Soitolla M. Automata-Theoretic Aspects of Formal Power Series. N.Y.: Springer Verlag, 1978.
3. Сафонов К. В., Егорушкин О. И. О синтаксическом анализе и проблеме В. М. Глушкова распознавания контекстно-свободных языков Хомского // Вестник Томского государственного университета. 2006. Приложение № 17. С. 63-67.
4. Семёнов А. Л. Алгоритмические проблемы для степенных рядов и контекстно-свободных грамматик // Доклады АН СССР. 1973. №212. С. 50-52.
5. Safonov K. V. On power series of algebraic and rational functions in Cn // J. Math. Analysis Appl. 2000. V. 243. P. 261-277.
6. Сафонов К. В. Об условиях алгебраичности и рациональности суммы степенного ряда // Матем. заметки. 1987. Т. 41. Вып.3. С. 325-332.
7. Егорушкин О. И., Колбасина И. В., Сафонов К. В. О совместности систем символьных полиномиальных уравнений и их приложении // Прикладная дискретная математика. Приложение. 2016. №9. С. 119-121.
8. Egorushkin O. I., Kolbasina I. V., and Safonov K. V. On solvability of systems of symbolic polynomial equations // Журн. СФУ. Сер. Матем. и физ. 2016. Т. 9. Вып. 2. С. 166-172.
УДК 004.4 DOI 10.17223/2226308X/11/40
РАБОТА СО СТЕКОМ В ЛЯПАСЕ1
М. С. Недяк, В. О. Сафонов
Описана работа со стеком в модульном трансляторе с ЛЯПАСа, которая включает в себя механизмы вызова функции, работу с локальными переменными и параметрами функции. Рассматриваются механизмы обработки композиции функций.
Ключевые слова: ЛЯПАС, язык программирования, транслятор, соглашение о вызове.
Введение
Рассмотрим модуль для работы со стеком модульного транслятора [1, 2] с ЛЯПАСа [3]. Далее этот модуль и его язык называются стекоязом.
В силу ограниченного количества переменных в языке, в текущей версии транслятора соглашение о вызовах выглядит следующим образом: перед вызовом функции
1 Работа поддержана грантом РФФИ, проект №17-01-00354.