Oi Gustavo,
Ops, você tem razão .
No executável o '>' e o '<' estão trocados.
Corrigi isto e coloquei um novo executável aqui.
A propósito, um erro bem comum em intridução à computação é o aluno escrever
if (A < B < C) { ... }
pensando que isto é o mesmo que
if (A < B && B < C) { ... }
Inclusive o gcc apresenta o seguinte warning nesse caso:
warning: comparisons like ‘X<=Y<=Z’ do not have their mathematical meaning
Agora que vocês estão fazendo um interpretador de expressões aritméticas (que são semelhantes a expressões lógicas),
qual vocês acham que é o significado de
A < B < C
Utilizem o executável do ep4 com um arquivo contendo as expressões abaixo e vejam o resultado
A = !2 B = !1 C = 0 D = A < B < C