Московский государственный индустриальный университет
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3338 / 384 | Оценка: 4.17 / 3.79 | Длительность: 24:17:00
Специальности: Программист
Лекция 12:

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

Тексты эталонных проектов

Сначала приведем все исходные тексты рекурсивного компилятора формул.

Makefile для рекурсивного компилятора формул

# -*- mode: makefile -*-

.PHONY : run clean

# Запустить тест рекурсивного компилятора формул.
run:			RecursCompfTest.class 
	java RecursCompfTest

# Откомпилировать текст рекурсивного компилятора формул.
RecursCompfTest.class:	RecursCompfTest.java RecursCompf.java \
                        Xterm.java
	javac RecursCompfTest.java

# Удалить лишние файлы.
clean:
	rm -f *.class *.expand

Рекурсивный компилятор формул

// Рекурсивный компилятор формул.
public class RecursCompf {
    private static final int DEFSIZE = 255;
    private char[] str;
    private int    index;
    private void compileF() {
        compileT();
        if (index >= str.length) return;
        if (str[index] == '+'){
            index++;
            compileF();
            Xterm.print("+ ");
            return;
        }
        if (str[index] == '-'){
            index++;
            compileF();
            Xterm.print("- ");
        }
    }
    private void compileT() {
        compileM();
        if (index >= str.length) return;
        if (str[index] == '*'){
            index++;
            compileT();
            Xterm.print("* ");
            return;
        }
        if (str[index] == '/'){
            index++;
            compileT();
            Xterm.print("/ ");
        }
    }
    private void compileM() {
        if (str[index] == '(') {
            index++;
            compileF();
            index++;
        } else
	    compileV();
    }
    private void compileV() {
        Xterm.print("" + str[index++] + " ");
    }

    public void RecursCompf() {	
        str = new char[DEFSIZE];
    }
    public void compile(char[] str) {
        this.str = str;
        index    = 0;
        compileF();
        Xterm.print("\n");
    }
}

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

// Тест для рекурсивного компилятора формул.
public class RecursCompfTest {
    public static void main(String[] args) throws Exception {
        RecursCompf c = new RecursCompf();
        while (true)	       
            c.compile(Xterm.inputChars("Введите формулу -> "));	    
    }
}
Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева