Опубликован: 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("Введите формулу -> ")); } }