Ладно, тогда попробуем без огульного отрицания ИИ. Найдет ИИ здесь ошибку? Почему выдает "Ошибка при задании формулы"?
<FORM name="form1">
<pre>
Введите формулу: <input type="text" size=25 name="f1"><HR>
Формула в поcтфикcной нотации: <input type="text" size=25 name="fres"><HR>

imgsmail.ru/download/11706893_b344652719ac62c8658993cfb38f7c3a.png
В функции postmn() условие if ((c >= "а") && ( c <= "z")) содержит латинскую букву "а" вместо русской "а". Правильно: if ((c >= "а") && ( c <= "я")).
у вас ошибкой считается любой символ кроме закрытой скобки.
Этот код представляет собой парсер для обработки арифметических выражений, представленных в инфиксной нотации, и преобразования их в обратную польскую нотацию. "Ошибка при задании формулы" возникает, когда во входной формуле обнаруживается что-то, что не соответствует ожидаемой грамматике (т.е., ожидаемым символам и их порядку).
Если вы получаете это сообщение об ошибке, то, скорее всего, входное выражение не соответствует ожиданиям парсера. Он ожидает выражение, состоящее из операторов +, -, *, / и букв от a до z, которые обозначают переменные или операнды. Все операции должны быть заключены в скобки, за исключением самого верхнего уровня выражения.
Вот некоторые возможные причины ошибки:
1. Выражение не заканчивается на операнд (буква от a до z).
2. Выражение содержит незакрытую открывающую скобку или лишнюю закрывающую скобку.
3. Выражение содержит недопустимый символ (не от a до z, +, -, *, /, или скобки).
4. Операнды или операции идут подряд без скобок или оператора между ними.
Для получения более конкретной помощи вам нужно предоставить пример выражения, которое вызывает ошибку.
// Глобальные переменные
var s; // Формула в обратной польской записи
var st; // Исходная формула в инфиксной нотации
var i; // Индекс очередного анализируемого символа
var er; // Ошибка
var c; // Очередной символ формулы
// Функция, осуществляющая начальные установки и вызов основной функции, осуществляющей построение
// обратной польской записи для формулы
function main(obj) {
s = "";
st = obj.f1.value; // берем value формы form1.f1. Это исходная формула в инфиксной нотации
i = -1; // начальный индекс
er = false;
c = cursym(); // рассматриваемый элемент строки
postform();
if (er)
alert("Ошибка при задании формулы");
else
form1.fres.value = s;
}
// Выбор очередного символа
function cursym() {
i = i + 1;
return st.charAt(i);
// возвращает новый рассматриваемый элемент инфиксной строки
}
// Формирование строки, представляющей формулу в обратной польской записи
function wrsym(h) {
s += h;
// добавляет элемент в выходную строку
}
// Обратная польская запись для формулы
function postform() {
postterm();
while ((c == "+") || (c == "-")) {
var h = c;
c = cursym();
postterm();
wrsym(h);
}
}
// Обратная польская запись для терма
function postterm() {
postmn();
while ((c == "*") || (c == "/")) {
var h = c;
c = cursym();
postmn();
wrsym(h);
}
}
// Обратная польская запись для множителя
function postmn() {
if ((c >= "а") && (c <= "z")) {
// если рассматриваемый элемент - буква
wrsym(c); // добавляем в выходную строку
c = cursym(); // переходим к следующему элементу
} else {
if (c == "(") {
// если (
c = cursym();
postform();
if (c != ")")
er = true;
else {
c = cursym();
}
} else
er = true;
}
}