私は、Jack Crenshawの「Turbo Pascal 4.0からJAVAへのコンパイラの構築」を書き直しています。古典的な本はまだO-Oバージョン本は15章で構成されていCrenshawの「コンパイラを作ろう」という書き直しのためのデザインパターン?
Is there a more modern, OO version of "Let's Build a Compiler"?
持っていないので、これはやる気です。コンパイラはインクリメンタルに表示されます。第1章では、コンパイラ全体の定型文を提供しています。各章では、先例の章のパスカル手順にいくつかの行を追加しています。
私はすでに最初の2章、パッケージとしての各章、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()を拡張することを考えましたが、静的クラスを拡張することは不可能です。
は、たぶん私は非静的1に、すべての静的メソッドを変更する必要がありますか?
私は確かにここにいくつかのデザインパターンが必要です、誰も助けることができますか?私は明らかに希望します。要約すると、このプロジェクトでは、手順ごとにますます多くの手順が追加されており、継承のようないくつかのJAVAメカニズムを使用して中間段階を記録することを希望しています。
パスカルコードは古典的な本はここにLBCです。
- 各章コール/
- 先例の章で定義された手順にもう少しラインを追加しますので、私は私がでLBCのステップに従うことを望んでいるすべての人に私のJavaソースコードを使用可能にしたいと考えて継承を使用しようとした感じステップ。したがって、作成者のコンパイラの最終的なソースコードを単一のクラスで記述することは適切ではありません。章ごとにコードを分割し、Crenshawのようにコードを徐々に増やすことが不可欠です。
私の実際の解決策は、tp1.Cradleのメソッドを静的に保つことです。 tp2.Cradle、tp3.Cradle、...のメソッドはtp15.Cradleが非静的になり、すべてが静的にインポートされます。 tp1.Cradle。*。さらに、2より大きいすべての整数iに対して、tp [i] .Cradle は、 tp [i-1] .Cradleを拡張する。
もっと良い解決策を教えてください。
書き換えようとしているパスカルコードを追加できますか?私はあなたがパスカルの手順にJava静的メソッドを使用したことを理解します。なぜ私にはわからない質問から、なぜあなたは継承を使いたいのですか? – Seitaridis
@Seitaridis LBC自体にはパスカルコードが含まれていますが、リンク先に従ってください。 –