Линеаризация выражений

Модератор: Модераторы разделов

Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Линеаризация выражений

Сообщение ety »

здравствуйте уважаемые, гуру.

встала предо мной трабла написания миниатюрного линеаризатора выражений (сорри не знаю как это по научному) - в общем эта фигня разматывает рекурсию во мнемокод. допустим выражение "(a+6) > b ? b*7 : a^b" становится:
mov bx,[a]
mov si,a
push bx
mov bx,6
pop dx
add dx,bx
push dx
mov bx,[b]
mov si,b
pop dx
cmp dx,bx
mov dx,0
jbe false0
mov dx,1
false0:
test dx,dx
jz false1
mov bx,[b]
mov si,b
push bx
mov bx,7
pop ax
mul bx
jmp end1
false1:
mov bx,[a]
mov si,a
push bx
mov bx,[b]
mov si,b
pop dx
xor dx,bx
mov bx,dx
end1:
result is in bx

не очень приглядно <_<

в общем, к вам просьба провести аудицию, и подсказать, как можно это более культурно оформить - меньше движений регистрами, меньше строк кода, итд... хочу простенький компилятор слатать - не более 1000-чи строк, дабы откомпилить те великие сорсы v5 никсов под x86, писанные на пред K&R-овском диалекте :)
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Линеаризация выражений

Сообщение elide »

в построении компиляторов я вообще не разбираюсь....
а ты не смотрел сырцы tcc? там, насколько я помню, как раз не более 1000 строк.
слава роботам!
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: Линеаризация выражений

Сообщение ety »

elide писал(а):
22.10.2006 14:18
в построении компиляторов я вообще не разбираюсь....
а ты не смотрел сырцы tcc? там, насколько я помню, как раз не более 1000 строк.

странно, что я его раньше не разглядел (попадался micro-c). но в любом случае, там не совсем тысяча, а скорее несколько детсяков тысяч - само ядро v5 меньше весит :)

я больше думаю как это cделать on-fly. из проблем: форвардинг регистров, и организация хэш-таблиц символов для каждого блока под лимитом в 64kb.

если преуспею займу 1-е место на IOCCC за самый жуткий код <_<
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Линеаризация выражений

Сообщение elide »

не, ты просто что-то не то нашел... это современные версии его, когда tcc пытаются развернуть лицом к людям.
а его первая версия была написана, afair, как раз для IOCCC. и там было если не меньше тысячи строк, то точно меньше двух.
слава роботам!
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: Линеаризация выражений

Сообщение ety »

holy shit.... нашел и проникся! теперь думаю переписать любимые shell скрипты на сишку, и пора открывать собственный дистр, грузящийся в секунды %)
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Линеаризация выражений

Сообщение elide »

после TCCBOOT уже сложно чем-то удивить... (:
слава роботам!
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: Линеаризация выражений

Сообщение ety »

elide писал(а):
22.10.2006 22:06
после TCCBOOT уже сложно чем-то удивить... (:

это пока еще эксперементальное искуство.

но думаю при обагащении синтаксиса сишки регулярными выражениями, и классической коммандой echo, jit станет вполне пригоден - выкидываем яву с ее тормозным jit-ом на помойку.
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали: