vak: (бэсм-6)
[personal profile] vak
Давненько я не брал в руки бэсмовского Си компилятора. Начал я его ровно год назад, в мае. Но в июне отвлёкся на другие дела и выпал из темы. Сейчас только нашёл время продолжить его пинать. Компилятор наконец выдал первый результат. Берём простой код на Си:
int f() 
{
int x = 10;
return x + 1;
}
Запускаем проходы компилятора. Преобразуем сначала в AST, а потом в TAC. Выводим TAC в виде YAML:
$ cast test.c test.ast
$ tacker --yaml test.ast test.yaml
$ cat test.yaml
- toplevel:
kind: function
name: f
global: true
body:
- instruction:
kind: copy
src:
kind: constant
const:
kind: int
value: 10
dst:
kind: var
name: x
- instruction:
kind: binary
op: add
src1:
kind: var
name: x
src2:
kind: constant
const:
kind: int
value: 1
dst:
kind: var
name: t.0
- instruction:
kind: return
src:
kind: var
name: t.0
Можно нарисовать картинку через Graphviz:
$ tacker --dot test.ast test.dot
$ dot -Tpdf test.dot -o test.pdf
Осталось закончить генерацию TAC для всех конструкций языка Си, а потом соорудить бэкенд. То есть преобразовалку команд абстрактной машины TAC в конкретные инструкции процессора БЭСМ-6.

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org