Вверх ↑
Разработчик
Ответов: 4697
Рейтинг: 426
#1: 2014-06-22 22:11:18 ЛС | профиль | цитата
Galkov, подскажи пожалуйста, а каким образом была решена проблема преждевременного добавления операционных кодов? Например, есть выражение 2/(2+%1). Пусть %1 = 2 (компилятор об этом не знает). Очевидно, что результат = 0.5. Если не возвращать из каждой функции levelX структуру, в которой хранится либо промежуточный код, либо константа, (потому что это вариант, требующий значительной переделки алгоритма компиляции) то получается такая последовательность действий компилятора:
1. Получаем число 2 в функции оператора /
2. Входим в скобки.
3. Получаем число 2 в функции оператора +
4. Получаем переменную %1.
5. Функция оператора + видит, что выражение не вычислить на месте и последовательно пишет в код 2, %1 и операцию сложения.
6. Выходим из скобок.
7. Функция оператора / видит, что выражение в скобках не вычислилось на месте, и пишет свой аргумент в код, затем операцию деления.
Итого, получим такую цепочку: 2, %1, +, 2, /. Выполнив ее, получаем (2+2)/2 = 2.
Как решена такая проблема в FastMathParse?
карма: 10
0