Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Anatoly Kochubey                     2:5020/400     04 Jun 2003  13:36:35
 To : ‚ ¤Ё¬ ‡Ґ«Ґ­Ё­
 Subject : Re: Hужны идеи по генерации кода
 -------------------------------------------------------------------------------- 
 
 
 Привет,
 
 ----- Original Message ----- 
 From: "Вадим Зеленин" <green@vista.spb.su>
 To: "Alexander Taradov" <fido7.ru.algorithms@talk.ru>
 Sent: Wednesday, June 04, 2003 11:09 AM
 Subject: Re: Hужны идеи по генерации кода - fido7.ru.algorithms
 >  AT> Допустим есть некая машина, которая: имеет 2 регистра R1 и R2, не
 
 имеет
 
 > AT> другой памяти (в том числе и стека), обладает набором инструкций:
 > [skip]
 > AT> Всегда ли хватит двух регистров? Я контр-примеров придумать не смог.
 >
 > а распиши такое выражение:
 > (1*2+3*4)*(5*6+7*8)
 В такой последовательности  - нельзя.
 
 А в такой - 1*2*5*6 + 1*2*7*8 + 3*4*5*6 + 3*4*7*8 можно.
 
 Рисуем дерево вычисления
 
 1    2                    1    2                    3    4
 3    4
     *      5                 *       7                 *       5
 *      7
         *      6                 *        8                *        6
 *     8
              *                         *                          *
 *
                             +
                                                     +
 
 +
 
 Факт: последовательные "листовые" операции одного приоритета требуют 1
 регистр (mov, +/* на число сколько нужно раз). Результат - в этом регистре.
 "Hелистовые" операции одного приоритета требуют максимум 2х регистров.
 
 Поэтому построим дерево иначе, исходя из операций разного приоритета:
 
 1    2    5    6        1    2    7    8        3    4    5    6        3
 4    7    8
     *    *    *              *    *    *              *    *    *
 *    *    *
                         +                         +
 +
 
 "ширина" такого дерева некритична - мы можем выполнять операции
 последовательно. А вот высота ограничена - у нас всего два регистра, поэтому
 мы не можем посчитать дерево с высотой больше 2.
 
 Поэтому так
 
 1    2        3    4        5    6        7    8
    *              *              *             *
             +                            +
                            *
 
 не получится.
 
 Грубо говоря, задача решается, если мы можем изменить выражение, чтобы
 соотв. дерево было высоты 2.
 А так как у арифметических операций всего 2 приоритета, то это, видимо,
 всегда возможно (путем раскрытия всех скобок).
 
 bw, Anatoly
 
 P.S. sorry, если не шибко понятно объяснил..
 P.P.S. имхо, в общем виде, нам для N приоритетов потребовалось бы N
 регистров.
 -- 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.Mail.Ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Hужны идеи по генерации кода   Alexander Taradov   03 Jun 2003 15:54:28 
 Hужны идеи по генерации кода   Stanislav Shwartsman   03 Jun 2003 19:05:09 
 Hужны идеи по генерации кода   Alexander Zatvornitskiy   03 Jun 2003 21:37:27 
 Re: Hужны идеи по генерации кода   ‚ ¤Ё¬ ‡Ґ«Ґ­Ё­   04 Jun 2003 12:09:07 
 Re: Hужны идеи по генерации кода   Anatoly Kochubey   04 Jun 2003 13:36:35 
 Re: Hужны идеи по генерации кода   ‚ ¤Ё¬ ‡Ґ«Ґ­Ё­   04 Jun 2003 14:42:12 
 Re: Hужны идеи по генерации кода   Kirill Timofeev   05 Jun 2003 10:13:13 
Архивное /ru.algorithms/2362797dd1e8.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional