Опубликован: 27.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный индустриальный университет
Лекция 12:

Проект "Компилятор формул"

Интерпретатор формул

// Непрерывная реализация стека целых чисел.
class StackInt {
    private static final int DEFSIZE = 16;
    private int[] array;
    private int   head;

    public StackInt() {
        array = new int[DEFSIZE];
        head = 0;
    }
    public final void push(int val) {
        array[head++] = val;
    }
    public final int pop() {
        return array[--head];
    }
    public final int top() {
        return array[head-1];
    }
}
// Калькулятор арифметических формул.
public class Calc extends Compf {
    private StackInt s;
    private static int char2int(char c) {
        return (int)c - (int)'0';
    }
    protected int symOther(char c) {
        if (c < '0' || c > '9') {
            Xterm.println("Недопустимый символ: " + c);
            System.exit(0);
        }
        return SYM_OTHER;
    }	
    protected void nextOper(char c) {	
        int second = s.pop();
        int first  = s.pop();
        switch (c) {
          case '+':
            s.push(first + second); break;
          case '-':	  
            s.push(first - second); break;
          case '*':
            s.push(first * second); break;
          case '/':
            s.push(first / second); break;
        }
    }
    protected void nextOther(char c) {	
        s.push(char2int(c));
    }

    public Calc() {
        s = new StackInt();
    }
    public final void compile(char[] str) { 
        super.compile(str);
        Xterm.println("" + s.top());
    }
}

Тест для интерпретатора формул

// Тест для калькулятора формул.
public class CalcTest {
    public static void main(String[] args) throws Exception {
        Calc c = new Calc();
        while (true)	       
            c.compile(Xterm.inputChars("Введите формулу -> "));	    
    }
}
Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева
Ирина Тютрина
Ирина Тютрина
Россия, Усолье-Сибирское
Глеб Бочкарёв
Глеб Бочкарёв
Россия