Сейчас пишу вычисление формул, вспоминаю тот калькулятор ;) Задача сейчас такова: есть описание GUI в XML в виде
<control
name="Button1"
x="100"
y="200"
width="300"
height="400"
/>
Необходима возможность понимать такие выражения:
<control
name="Button1"
x="Button2.x + 100"
y="Form.height - 200"
width="Form.width - (Button3.width*2 + 100)"
height="400"
/>
И чтобы при resize окна (изменении пользователем размеров формы) пересчитались все зависимые от размеров формы координаты.
Как решалась задача:
1. Парсим каждую формулу на лексемы (операнды, операторы и скобки) - получаем выражение в инфиксной форме.
2. Переводим инфиксную форму в постфиксную.
3. Заменяем имена переменных (типа "Form.width" и "Button2.x") на указатели на них.
4. Одна формула может ссылаться на другую, та - на третью, четвертая - на первую и т.п. Поэтому топологической сортировкой выясняем порядок вычисления формул.
5. Вычисляем формулы по порядку, вычисленному в п.4. Формулы в постфиксной форме вычисляются очень просто и быстро.
При изменении размеров формы выполняем только п.5, причем можно вычислять не все формулы, а только прямо или косвенно зависимые от размеров формы.
PS. А мой первый калькулятор был гораздо проще - состоял всего из трех INPUT-ов и четырех IF-ов (на каждый поддерживаемый оператор).
2 комментария:
А как же layout?
что есть layout?
Отправить комментарий