All Packages Class Hierarchy This Package Previous Next Index
Class epp.EppCore
java.lang.Object
|
+----epp.EppCore
- public class EppCore
- extends Object
EPP プリプロセッサが持つメソッドのうち
ファイル EppCore.java で定義されるメソッドは、
プリプロセッサの骨組みを定義するものです。.
注意: このクラスは、 javadoc を作るための便宜的なクラスです。
実際の EPP のソースコード中には存在しません。
EPP プリプロセッサは、構文解析パス、マクロ展開パス、型チェックパス、
コード出力パスの4つのパスから成っています。
それぞれのパスは、 self!tree という変数(Ld-2 クラスのインスタンス変数)を
通して、抽象構文木を
受渡しします。
plug-in が各パスの前後に新たなパスを追加できるように、
各パスは次のような構造になっています。
void doTypeCheckingPass() {
beforeTypeCheckingPass();// パス追加の hook
...; // 前処理
typeCheckingPass(); // 本体
...; // 後処理
afterTypeCheckingPass(); // パス追加の hook
}
他の3つのパス、 parsingPass, macroExpansionPass, codeEmittingPass も
同様の構造をしています。
plug-in は、 afterXxxPass, beforeXxxPass というメソッドを
拡張することによって、
それぞれのパスの前後に新たなパスを追加することが
できます。
追加したパスで、マクロ展開オブジェクトなどによる局所的な変換では処理し切れない
大域的な変換を行なうことができます。
パスの「本体」を定義するメソッド(メソッド typeCheckingPass など)は、
パスの実行中に動的変数の環境を作りたい時に、使えます。
例:
SystemMixin bindTypeCheckingEnv {
class Epp {
extend void typeCheckingPass(){
Dynamic.bind(:foo, val);
try{
original();
} finally {
Dynamic.unbind();
}
}
}
}
- See Also:
- Epp
-
EppCore()
-
-
afterCodeEmittingPass()
- コード出力パスの本体を実行した後に呼び出されるメソッドです。
-
afterMacroExpansionPass()
- 構文マクロ展開パスの本体を実行した後に呼び出されるメソッドです。
-
afterParsingPass()
- 構文解析パスの本体を実行した後に呼び出されるメソッドです。
-
backtrack(int)
- EppInputStream 上でのポインタの位置を、引数 p に戻した後、
トークンを1つ読み、「先読みされているトークン」の値を更新します。.
-
beforeCodeEmittingPass()
- コード出力パスの本体を実行する前に呼び出されるメソッドです。
-
beforeMacroExpansionPass()
- 構文マクロ展開パスの本体を実行する前に呼び出されるメソッドです。
-
beforeParsingPass()
- 構文解析パスの本体を実行する前に呼び出されるメソッドです。
-
codeEmittingPass()
- コード出力パスの本体です。.
-
defineEmitter(Symbol, Emitter)
-
-
defineInvokeStyleMacro(Symbol, InvokeStyleMacro)
- InvokeStyleMacro をテーブルに登録します。.
-
defineMacro(Symbol, Macro)
- マクロ展開オブジェクトをテーブルに登録します。.
-
doCodeEmittingPass()
- コード出力パスを呼び出します。 plug-in は普通このメソッドを拡張しません。
-
doMacroExpansionPass()
- 構文マクロ展開パスを呼び出します。
plug-in は普通このメソッドを拡張しません。
-
doParsingPass()
- 構文解析パスを呼び出します。
plug-in は普通このメソッドを拡張しません。
-
doTypeCheckingPass()
- 型チェックパスを呼び出します。
plug-in は普通このメソッドを拡張しません。
-
emit1(String, Tree)
- outputFileName に、 tree を文字列として出力します。.
-
emitAdditionalHeader(OutputStream)
- すべてのファイルの先頭に何か文字列を出力する時に呼ばれるメソッドです。.
-
Epp(String, String)
- このメソッドは、 Ld-2 クラス Epp のコンストラクタです。.
-
eppSourceVersion()
- EPP 本体のソースコードのバージョンを文字列として返します。
-
eppVersion()
- EPP 本体のソースコードのバージョンと
そのソースコードを変換した EPP のバージョンを文字列として返します。
-
error(String)
- 入力プログラム中のシンタックスエラーなど、エンドユーザレベルの
エラーが起きた時に呼ぶメソッドです。.
-
extendMacro(Symbol, Macro)
- マクロ展開オブジェクトを decorator pattern によって拡張します。.
-
initEmitterTable()
- Emitter のテーブルを初期化するメソッドです。.
-
initializationPass()
- プリプロセッサの初期化を行なうメソッドです。.
-
initInvokeStyleMacroTable()
- InvokeStyleMacro のテーブルを初期化するメソッドです。.
-
initMacroTable()
- Macro.macroTable を初期化するメソッドです。.
-
inputPointer()
- 先読みされているトークンが開始した位置(EppInputStream 上でのバイト数)を
返します。.
-
lookahead()
- 先読みされているトークンを返します。
入力ポインタは、進みません。.
-
macroExpansionPass()
- 構文マクロ展開パスの本体です。.
-
match(Token)
- 先読みされているトークンが引数と等しいかどうかを確かめ、
次のトークンに入力ポインタを進めます。.
-
matchAny()
- 先読みされているトークンを値として返します。
そして、入力ポインタを進めます。.
-
openEppInputStream(String)
- 入力ファイルから文字を読み出すためのストリーム EppInputStream を
作って返します。.
-
parsingPass()
- 構文解析パスの本体です。.
-
readToken(EppInputStream)
- 空白文字をスキップし、メソッド readTokenStart を呼んで、
トークンを1つ返します。.
-
redefineEmitter(Symbol, Emitter)
-
-
redefineInvokeStyleMacro(Symbol, InvokeStyleMacro)
- テーブルに登録されている InvokeStyleMacro を再定義します。.
-
start()
- 構文解析を開始する非終端記号に相当するメソッドです。
EppCore
public EppCore()
Epp
public void Epp(String inputFileName,
String outputFileName)
- このメソッドは、 Ld-2 クラス Epp のコンストラクタです。.
プリプロセッサを起動するメソッドです。
このメソッドは、 EPP main routine (Epp という名前の Java クラス)
から、呼び出されます。
- See Also:
- Epp
initializationPass
public void initializationPass()
- プリプロセッサの初期化を行なうメソッドです。.
このメソッドは、 EPP プリプロセッサが起動した直後(構文解析を始める前)に
呼び出されます。
plug-in は、このメソッドを拡張し、必要な初期化処理を
追加することができます。
doParsingPass
public void doParsingPass()
- 構文解析パスを呼び出します。
plug-in は普通このメソッドを拡張しません。
doMacroExpansionPass
public void doMacroExpansionPass()
- 構文マクロ展開パスを呼び出します。
plug-in は普通このメソッドを拡張しません。
doTypeCheckingPass
public void doTypeCheckingPass()
- 型チェックパスを呼び出します。
plug-in は普通このメソッドを拡張しません。
doCodeEmittingPass
public void doCodeEmittingPass()
- コード出力パスを呼び出します。 plug-in は普通このメソッドを拡張しません。
error
public Error error(String str)
- 入力プログラム中のシンタックスエラーなど、エンドユーザレベルの
エラーが起きた時に呼ぶメソッドです。.
このメソッドは、引数の文字列に行番号情報などを追加して、
クラス EppUserError のインスタンスを作って返します。
このメソッドは普通、次のようにして使います。
throw error("message");
fatal error の場合は、このメソッドではなく、 Epp.fatal を使って下さい。
- See Also:
- EppUserError, fatal
lookahead
public Token lookahead()
- 先読みされているトークンを返します。
入力ポインタは、進みません。.
match
public Token match(Token token)
- 先読みされているトークンが引数と等しいかどうかを確かめ、
次のトークンに入力ポインタを進めます。.
もし等しければそのトークンを返し、
もし等しくなければ、ユーザに分かりやすいメッセージとともに
メソッド error を呼び出します。
matchAny
public Token matchAny()
- 先読みされているトークンを値として返します。
そして、入力ポインタを進めます。.
start
public Tree start()
- 構文解析を開始する非終端記号に相当するメソッドです。
readToken
public Token readToken(EppInputStream in)
- 空白文字をスキップし、メソッド readTokenStart を呼んで、
トークンを1つ返します。.
このメソッドは matchAny() メソッドから呼び出されます。
構文解析ルーチンから
このメソッドを直接呼び出してはいけません。
- See Also:
- Lex, readTokenStart
openEppInputStream
public EppInputStream openEppInputStream(String inputFileName)
- 入力ファイルから文字を読み出すためのストリーム EppInputStream を
作って返します。.
plug-in は、このメソッドを再定義し、
EppInputStream のサブクラスを返すように
変更することで、入力ストリームの挙動を拡張することができます。
(Design pattern における Factory method です。)
beforeParsingPass
public void beforeParsingPass()
- 構文解析パスの本体を実行する前に呼び出されるメソッドです。
parsingPass
public void parsingPass()
- 構文解析パスの本体です。.
plug-in は、このパス実行中の
動的変数の環境を作る時などに、このメソッドを拡張します。
afterParsingPass
public void afterParsingPass()
- 構文解析パスの本体を実行した後に呼び出されるメソッドです。
inputPointer
public int inputPointer()
- 先読みされているトークンが開始した位置(EppInputStream 上でのバイト数)を
返します。.
返値は、メソッド backtrack の引数に使います。
- See Also:
- backtrack
backtrack
public void backtrack(int p)
- EppInputStream 上でのポインタの位置を、引数 p に戻した後、
トークンを1つ読み、「先読みされているトークン」の値を更新します。.
次に lookahead() が呼び出されると、 p の直後から開始されるトークンが
返されます。
引数に指定する int 型の値は、メソッド inputPointer によって
あらかじめ取得しておく必要があります。
- See Also:
- inputPointer
initMacroTable
public void initMacroTable()
- Macro.macroTable を初期化するメソッドです。.
plug-in はこのメソッドを拡張し、 defineMacro や
extendMacro を呼び出すことによって、
テーブルに登録されるマクロ展開オブジェクトを追加・拡張できます。
- See Also:
- defineMacro, extendMacro, Macro
defineMacro
public void defineMacro(Symbol tag,
Macro func)
- マクロ展開オブジェクトをテーブルに登録します。.
もしすでに tag に対応するマクロ展開オブジェクトが登録済みなら
fatal error になります。
- See Also:
- initMacroTable, Macro
extendMacro
public void extendMacro(Symbol tag,
Macro func)
- マクロ展開オブジェクトを decorator pattern によって拡張します。.
引数 func の中からは、変数 orig によって、オリジナルの
マクロ展開オブジェクトを参照できます。
- See Also:
- initMacroTable, Macro
beforeMacroExpansionPass
public void beforeMacroExpansionPass()
- 構文マクロ展開パスの本体を実行する前に呼び出されるメソッドです。
macroExpansionPass
public void macroExpansionPass()
- 構文マクロ展開パスの本体です。.
plug-in は、このパス実行中の
動的変数の環境を作る時などに、このメソッドを拡張します。
afterMacroExpansionPass
public void afterMacroExpansionPass()
- 構文マクロ展開パスの本体を実行した後に呼び出されるメソッドです。
defineInvokeStyleMacro
public void defineInvokeStyleMacro(Symbol tag,
InvokeStyleMacro func)
- InvokeStyleMacro をテーブルに登録します。.
- See Also:
- initInvokeStyleMacroTable, InvokeStyleMacro
redefineInvokeStyleMacro
public void redefineInvokeStyleMacro(Symbol tag,
InvokeStyleMacro func)
- テーブルに登録されている InvokeStyleMacro を再定義します。.
- See Also:
- initInvokeStyleMacroTable, InvokeStyleMacro
initInvokeStyleMacroTable
public void initInvokeStyleMacroTable()
- InvokeStyleMacro のテーブルを初期化するメソッドです。.
plug-in はこのメソッドを拡張し、 defineInvokeStyleMacro や
redefineInvokeStyleMacro を呼び出すことによって、
テーブルに登録される InvokeStyleMacro オブジェクトを
追加・変更できます。
- See Also:
- InvokeStyleMacro
initEmitterTable
public void initEmitterTable()
- Emitter のテーブルを初期化するメソッドです。.
plug-in プログラマーは、普通このメソッドを拡張しません。
- See Also:
- Emitter
defineEmitter
public void defineEmitter(Symbol tag,
Emitter func)
redefineEmitter
public void redefineEmitter(Symbol tag,
Emitter func)
beforeCodeEmittingPass
public void beforeCodeEmittingPass()
- コード出力パスの本体を実行する前に呼び出されるメソッドです。
codeEmittingPass
public void codeEmittingPass()
- コード出力パスの本体です。.
plug-in は、このパス実行中の
動的変数の環境を作る時などに、このメソッドを拡張します。
afterCodeEmittingPass
public void afterCodeEmittingPass()
- コード出力パスの本体を実行した後に呼び出されるメソッドです。
emit1
public void emit1(String outputFileName,
Tree tree)
- outputFileName に、 tree を文字列として出力します。.
ただし、もし outputFileName がすでに存在し、
「EPP によって生成されたファイル」でないならば、
EppUserError を throw します。
- See Also:
- isGeneratedFile
emitAdditionalHeader
public void emitAdditionalHeader(OutputStream out)
- すべてのファイルの先頭に何か文字列を出力する時に呼ばれるメソッドです。.
このメソッドは emit1 から呼ばれます。
- See Also:
- emit1
eppVersion
public String eppVersion()
- EPP 本体のソースコードのバージョンと
そのソースコードを変換した EPP のバージョンを文字列として返します。
eppSourceVersion
public String eppSourceVersion()
- EPP 本体のソースコードのバージョンを文字列として返します。
All Packages Class Hierarchy This Package Previous Next Index