Работа со стеком в ЛЯПАСе | ПДМ. Приложение. 2018. № 11. DOI: 10.17223/2226308X/11/40

Работа со стеком в ЛЯПАСе

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

Stack management in LYAPAS.pdf Введение Рассмотрим модуль для работы со стеком модульного транслятора [1, 2] с ЛЯПАСа [3]. Далее этот модуль и его язык называются стекоязом. В силу ограниченного количества переменных в языке, в текущей версии транслятора соглашение о вызовах выглядит следующим образом: перед вызовом функции на стеке резервируется память под все переменные независимо от того, используются они в подпрограмме или нет. Такой метод использования памяти стека нерационален. В работе описаны новые механизмы вызова функции, работы с её локальными переменными и параметрами, предложен механизм обработки композиции функций. 1. Операции со стеком Модуль транслирует операции входной программы предыдущего промежуточного языка (комплексояза) [4] в набор операций стекояза. Стекояз состоит из операций комплексояза и содержит новые вспомогательные операции: 1) stack_alloc N - резервирует в стеке 8N байт; 2) stack_free N - освобождает в стеке 8N байт; 3) call (/unction) -помещает в вершину стека адрес возврата и передаёт управление функции /unction; 4) ret - передаёт управление по адресу возврата, который извлекается из вершины стека; 5) push (variable) -помещает в вершину стека значение variable; 6) pop (variable) - извлекает значение из вершины стека и помещает его в variable. 2. Правила передачи аргументов в функции Разработаны следующие правила передачи аргументов в функции: 1) входные аргументы помещаются в стек; 2) резервируется память в стеке под выходные аргументы; 3) вызывается функция; 4) возвращаемые значения записываются в соответствующие локальные переменные; 5) освобождается память, занятая входными аргументами. Рассмотрим правила на примере. Дана операция вызова функции на языке ком-плексояз: 1 call func1 f, g, /, a, b, c Результат трансляции: 1 push f 2 push g 3 stack_alloc 3 4 call func1 5 pop c 6 pop b 7 pop a 8 stack_free 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, 11, ..., 1n; б) параметрам pra+2, Pn+з, ...; номер нового названия равен сдвигу относительно указателя на вершину стека; 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) правила работы с локальными переменными и параметрами функции.

Ключевые слова

ЛЯПАС, язык программирования, транслятор, соглашение о вызове, LYaPAS, programming language, translator, calling convention

Авторы

ФИООрганизацияДополнительноE-mail
Сафонов Вадим ОлеговичАО «Позитив Текнолоджиз»программистvsaffonov.1115@gmail.com
Недяк Мария СергеевнаТомский государственный университетстудентка кафедры защиты информации и криптографииmashanedyak@gmail.com
Всего: 2

Ссылки

https://github.com/tsu-iscd/lyapas-lcc/blob/73b21bcd5f674bc6762a379bc32f71f61ee51164/ doc/cyaz.md - LYaPAS Cyaz Documentation. 2018.
https://github.com/tsu-iscd/lyapas-lcc - LYaPAS Compiler Chain. 2018.
Агибалов Г. П., Липский В. Б., Панкратова И. А. О криптографическом расширении и его реализации для русского языка программирования // Прикладная дискретная математика. 2013. №3. С. 93-104.
Стефанцов Д. А., Сафонов В. О., Першин В. В. и др. Модульный транслятор с языка ЛЯ-ПАС // Прикладная дискретная математика. Приложение. 2016. №8. С. 122-126.
 Работа со стеком в ЛЯПАСе | ПДМ. Приложение. 2018. № 11. DOI: 10.17223/2226308X/11/40

Работа со стеком в ЛЯПАСе | ПДМ. Приложение. 2018. № 11. DOI: 10.17223/2226308X/11/40