Я переписываю Джека Креншоу «давайте создадим компилятор» с Turbo Pascal 4.0 на JAVA. Это мотивирует, потому что у классической книги еще нет О -О-версии
. Есть ли более современная ОО-версия «Let& #39;s Build a Compiler»?
Книга содержит 15 глав. Компилятор представлен поэтапно. :Глава I содержит шаблоны кода для всего компилятора, затем каждая глава добавляет несколько строк к процедурам Pascal из предыдущей главы.
Я уже перевел первые 2 главы, каждая глава как пакет, каждая процедура Pascal как статический защищенный метод в JAVA, процедуры одной главы собраны в единый класс, который расширяет класс, переведенный из предшествующей главы.
package td1;
public class Cradle {
protected final static char TAB='\t';
protected static char look;
protected static void getChar() throws IOException {
look=(char) System.in.read();
}
...
}
package td2;
public class Cradle extends td1.Cradle{
protected static void factor() throws IOException {
...
}
...
}
Однако, когда я прихожу к td3, мне приходится обновлять фактор ()td2.Cradle, но я не хочу менять в td2.Cradle фактор (),потому что это заставит фактор ()в td2 сделать больше, чем он должен был быть представлен в td2. Я подумал о «расширении» td2.Cradle (), однако кажется невозможным расширить статический класс.
Мой связанный с этим вопрос здесь
Может быть, мне следует изменить каждый статический метод на не -статический?
Мне определенно нужен шаблон проектирования, кто-нибудь может помочь? Надеюсь, я был понятен. Таким образом, этот проект постепенно предоставляет все больше и больше инструкций для каждой процедуры, и я надеюсь записать промежуточные шаги, используя какой-нибудь механизм JAVA, такой как наследование.
Код Паскаля — классическая книга находится здесь ББК . Я чувствую попытку использовать наследование, потому что
Мое реальное решение состоит в том, чтобы оставить методы tp1.Cradle как статические. Методы в tp2.Cradle, tp3.Cradle,... до tp15.Cradle не будут -статическими, и все они статически импортируют tp1.Cradle. *. Более того, для каждого целого числа i, большего 2, tp[i].Cradle расширяет tp[i -1].Cradle.
Не стесняйтесь, подскажите лучшее решение.