Научная статья на тему 'Работа со стеком в ЛЯПАСе'

Работа со стеком в ЛЯПАСе Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
63
11
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ЛЯПАС / ЯЗЫК ПРОГРАММИРОВАНИЯ / PROGRAMMING LANGUAGE / ТРАНСЛЯТОР / TRANSLATOR / СОГЛАШЕНИЕ О ВЫЗОВЕ / CALLING CONVENTION / LYAPAS

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Недяк Мария Сергеевна, Сафонов Вадим Олегович

Описана работа со стеком в модульном трансляторе с ЛЯПАСа, которая включает в себя механизмы вызова функции, работу с локальными переменными и параметрами функции. Рассматриваются механизмы обработки композиции функций.

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Недяк Мария Сергеевна, Сафонов Вадим Олегович

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

Stack management in LYAPAS

The paper describes the stack management in the modular translator of LYaPAS language. Stack management includes mechanisms for calling a function, working with local variables and function parameters, mechanism for processing function composition.

Текст научной работы на тему «Работа со стеком в ЛЯПАСе»

где Yz = (N = • • • = |zn| = e} и Гх = {|xi| = ... = |xm| = 8} —циклы интегрирования; 0 <8 < e < 1; dz = dz1 Л ... Л dzn; dx = dx1 Л ... Л dxm; xa+I = x"1+1 ■ ... ■ xmm+1; a! = «1! ■ ... ■ am!; (z - ci(Q*(z, x, t))) = (z1 - ci(Q1(z, x, t))) ■ ... ■ (zn - ci(Qn(z,x,t)));

dll«ll ßai+...+am

= ^Tä-; 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.

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

В работе описаны новые механизмы вызова функции, работы с её локальными переменными и параметрами, предложен механизм обработки композиции функций.

1. Операции со стеком

Модуль транслирует операции входной программы предыдущего промежуточного языка (комплексояза) [4] в набор операций стекояза. Стекояз состоит из операций комплексояза и содержит новые вспомогательные операции:

1) stack_alloc N — резервирует в стеке 8N байт;

2) stack_free N — освобождает в стеке 8N байт;

3) call {function) —помещает в вершину стека адрес возврата и передаёт управление функции function;

4) ret — передаёт управление по адресу возврата, который извлекается из вершины стека;

5) push {variable) —помещает в вершину стека значение variable;

6) pop {variable) — извлекает значение из вершины стека и помещает его в variable.

2. Правила передачи аргументов в функции

Разработаны следующие правила передачи аргументов в функции:

1) входные аргументы помещаются в стек;

2) резервируется память в стеке под выходные аргументы;

3) вызывается функция;

4) возвращаемые значения записываются в соответствующие локальные переменные;

5) освобождается память, занятая входными аргументами.

Рассмотрим правила на примере. Дана операция вызова функции на языке ком-плексояз:

1 call funcl f, g, /, a, b, c

Результат трансляции:

1 push f

2 push g

3 stack_alloc 3

4 call funcl

5 pop c

6 pop b

7 pop a

8 stack_free 2

3. Правила обработки композиции функций

Разработаны следующие правила обработки композиции функций:

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

2) для каждой следующей функции:

а) резервируется память на стеке под выходные параметры;

б) вызывается функция;

3) возвращаемые значения записываются в соответствующие локальные переменные;

4) освобождается память стека от входных аргументов всех функций.

Вызовы функций композиции «накладываются» друг на друга. Рассмотрим правила на примере. Пусть дана операция композиции на языке комплексояз:

1 call_composition f3, f2, f1, /, a, /, d, c

Результат трансляции:

1 push a

2 stack_alloc 2

3 call f1

4 stack_alloc 1

5 call f2

6 stack_alloc 2

7 call f3

8 pop d

9 pop с

10 stack_free 4

4. Правила работы с локальными переменными и параметрами функции

Разработаны следующие правила работы с локальными переменными и параметрами:

1) резервируется место в стеке под локальные переменные;

2) каждой переменной ставится в соответствие новое название:

а) локальным переменным /0, h, ..., 1п;

б) параметрам рп+2, рп+3, ...;

номер нового названия равен сдвигу относительно указателя на вершину стека;

3) названия переменных заменяются на новые названия;

4) перед операцией ret зарезервированное место на стеке освобождается. Рассмотрим данные правила на примере. Дана функция на комплексоязе:

1 definition function(k/i)

2 move acc , k

3 move i, acc

4 i nc i

Результат трансляции:

1 funct ion:

2 stack_alloc 1

3 move l0, p3

4 move p2, l0

5 i nc p2

6 stack_free 1

7 ret

Заключение

Разработаны и реализованы в модульном трансляторе ЛЯПАС [1]: 1) правила обработки вызова функций;

2) правила обработки композиции функций;

3) правила работы с локальными переменными и параметрами функции.

ЛИТЕРАТУРА

1. Стефанцов Д. А., Сафонов В. О., Першин В. В. и др. Модульный транслятор с языка ЛЯ-ПАС // Прикладная дискретная математика. Приложение. 2016. №8. С. 122-126.

2. https://github.com/tsu-iscd/lyapas-lcc — LYaPAS Compiler Chain. 2018.

3. Агибалов Г. П., Липский В. Б., Панкратова И. А. О криптографическом расширении и его реализации для русского языка программирования // Прикладная дискретная математика. 2013. №3. С. 93-104.

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

4. https://github.com/tsu-iscd/lyapas-lcc/blob/73b21bcd5f674bc6762a379bc32f71f61ee51164/ doc/cyaz.md — LYaPAS Cyaz Documentation. 2018.

УДК 510.52 DOI 10.17223/2226308X/11/41

0 ГЕНЕРИЧЕСКОЙ СЛОЖНОСТИ ПРОБЛЕМЫ ДИСКРЕТНОГО ЛОГАРИФМА В ГРУППАХ ТОЧЕК ЭЛЛИПТИЧЕСКИХ КРИВЫХ

НАД КОНЕЧНЫМИ ПОЛЯМИ1

А. Н. Рыбалов

Изучается генерическая сложность проблемы дискретного логарифма в группах точек эллиптических кривых над GF(p), где p — простое. Доказывается, что её естественная подпроблема генерически трудноразрешима (то есть трудна для почти всех входов) при условии, что проблема дискретного логарифма для эллиптических кривых трудноразрешима в классическом смысле.

Ключевые слова: генерическая сложность, дискретный логарифм, эллиптическая кривая.

Введение

Эллиптическая криптография занимается разработкой криптосистем с открытым ключом, основанных на эллиптических кривых над конечными полями. В качестве базиса для этих криптосистем используется проблема дискретного логарифма в группах точек эллиптических кривых над конечными полями. Основное преимущество эллиптической криптографии заключается в том, что на сегодняшний день не известно даже субэкспоненциальных алгоритмов решения проблемы дискретного логарифма на эллиптических кривых, в отличие от проблемы дискретного логарифма в конечных полях. Рассмотрим проблему дискретного логарифма в группах точек эллиптических кривых над конечными полями GF(p), где p — простое. Эллиптические кривые над такими полями используются в протоколах электронной цифровой подписи ECDSA и ГОСТ Р 34.10-2012.

В [1] развита теория генерической сложности вычислений. В рамках этого подхода алгоритмическая проблема рассматривается не на всём множестве входов, а на некотором подмножестве «почти всех» входов. Такие входы образуют так называемое генерическое множество. Понятие «почти все» формализуется введением естественной меры на множестве входных данных. С точки зрения современной криптографии интересны такие алгоритмические проблемы, которые, являясь (гипотетически) трудными в классическом смысле, остаются трудными и в генерическом смысле, т. е. для почти

1 Работа поддержана грантом РФФИ, проект №18-41-550001.

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