Не надо быть святее Папы Римского.
Ну типа помочь пользователю - это одно. А думать за него - это другое.
Скажем, корни фильтра Баттерворта равномерно расположены на круге. Коэффициенты фильтрации, соответственно, определяются косинусами каких-то очень простых константных выражений.
Посчитать их в Compile-Time - это помощь.
А думать за кого-то (раскрывать скобки, выделять общие подвыражения) -- бесперспективное занятие.
Тут два философских варианта:
Либо - все равно не поможет (вариант тупого юзера).
Либо - не факт, что ты умнее Автора (вариант умного юзера).
------------ Дoбавленo в 08.21:
2Assasin,
1) Варнинг на 557-й можно убрать примерно так:
#pas
else{CmdXor:} b := (x1 <> 0) xor (x2 <> 0);
3) Внимание, 1334: 26, 30:, это вам не 26..30:. Тем более, что при "вычислении" - второй вариант остался
------------ Дoбавленo в 09.15:
А вообще-то, функции min/max с одним аргументом -- смотрятся немного странно. Хотя и работают.
Предлагаю сделать "вклейку":
#pas
......
31, 32:
begin
if Token<>',' then
{$ifdef F_P} begin Err:=0; exit; end;
{$else} raise Exception.Create(e_Custom,''); {$endif}
while Token=',' do begin
GetToken; Level1a; {$ifdef F_P} if Err>=0 then exit; {$endif}
inc(cnt);
end;
end;
......
#pas
if (i = 31) or (i = 32) then begin
FProgram.WriteInteger(cnt);
end;
#pas
if (cnt>0) then FProgram.WriteInteger(cnt);