[ssa] [дальнейшие размышления]
Максим Иванов
bipsqwake42 at gmail.com
Mon Apr 9 02:18:41 MSK 2018
Я так подозреваю, нам ещё нужно, так называемое, "эталонное решение". Точно
так же подозреваю, что мы заморочимся с ним больше всего.
Бегло оглянув возможности вот какие выводы сделал я (может они уже раньше
были сделаны и я пропустил, так что извиняйте):
1. У нас есть штука ssa(Fn*), которая строит сокращённую(?) ssa-форму.
2. Так же у нас есть штука checkssa(Fn*), которая, судя по названию,
проверяет корректность формы, но у меня не получилось вызвать её без
сегфолта. В комментарии к checkssa написано require use и ssa. Это значит,
что чтобы проверить верность ssa-формы, надо её насильно строить? Это очень
странно, и, я думаю, мы не сможем это использовать.
3. По сути выполнение задания состоит в переименовывании и добавлении
переменных и добавлении новых функций.
Получается, что к выполнению задания есть два очевидных подхода:
1)работать с внутренним представлением, а потом использовать printfn,
которая выводит текстовое представление в поток. Проблема тут состоит в
том, что переменные хранятся достаточно особым способом, а так же структура
для переменной содержит много полей, значения которых мне (может только
мне?) неизвестны. Так что это сложно и нет гарантии, что при преводе в
текст ничего не покрашится.
2) Обрабатывать блоки и писать в поток, но по сути это то же самое, что
свой парсер написать, что очень глупо, когда рядом уже лежит парсер. Так
что это тоже сложно и нет гарантии, что всё не покрашится.
4. Если просто считать программу, а затем записать её с помощью printfn, то
ввод и вывод не будут идентичны:
1)ret заменяется на ret<тип возвращаемого значения> (соответственно из
сигнатуры функции возвращаемое значение убирается)
2)вызов функции с аргументами типа print(w a, l b), заменяется на несколько
строчек типа argw a; arglb; print.
Но самое интересное, что эти преобразования не воспринимаются парсером в
обратную сторону.
То есть если взять программу на qbe, загнать её в программу, в которой
сделать printfn, а затем результат снова загнать в программу, получим
unresolved reference или что-то типа этого (не помню точно). Это
подсказывает мне, что первый вариант из предыдущего пункта автоматом
отпадает, а второй слишком геморный.
Вот такие пироги
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://compilers.ispras.ru/pipermail/ssa/attachments/20180409/75678f06/attachment.html>
More information about the ssa
mailing list