Вот... наконец то мы подошли к главному...
А теперь, что бы мысль не скакала впереди носа, попробуй ПРОГРАМНО определить ошибку в любом выражении... Так, для прикола набросай функцию (эдакий маленький синтаксический анализатор) на корректность...
Просто кнопочку и Edit в котором будем вводить выражения...

а лучше что бы он еще и считал все что ему на данном этапе можно просчитать...
Не надо спешить и формировать как это БУДЕТ выглядеть в компиляторе, тут до этого куча работы...

))
А вот уже после этого компилятор написать, что к подруге сходить...
ЗЫ к стати
public static int d[]; может быть совсем не int или сначала будет int а потом real (приведение типа) а z сначала может быть одним, а в самый неподходящий момент(например выше по коду) вдруг оказаться нулём, и компилер упадет от переполнения...
Самое интересное начнется в выражениях такого плана
x:= d[d[a]*a] или d[d[c-a[d[c]]]] если диапазон не верный...
Вобщем тут куча примерчиков, которая очень хорошо понимается когда кодируешь а не когда рассказываешь...