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

Constructor Index

 o EppCore()

Method Index

 o afterCodeEmittingPass()
コード出力パスの本体を実行した後に呼び出されるメソッドです。
 o afterMacroExpansionPass()
構文マクロ展開パスの本体を実行した後に呼び出されるメソッドです。
 o afterParsingPass()
構文解析パスの本体を実行した後に呼び出されるメソッドです。
 o backtrack(int)
EppInputStream 上でのポインタの位置を、引数 p に戻した後、 トークンを1つ読み、「先読みされているトークン」の値を更新します。.
 o beforeCodeEmittingPass()
コード出力パスの本体を実行する前に呼び出されるメソッドです。
 o beforeMacroExpansionPass()
構文マクロ展開パスの本体を実行する前に呼び出されるメソッドです。
 o beforeParsingPass()
構文解析パスの本体を実行する前に呼び出されるメソッドです。
 o codeEmittingPass()
コード出力パスの本体です。.
 o defineEmitter(Symbol, Emitter)
 o defineInvokeStyleMacro(Symbol, InvokeStyleMacro)
InvokeStyleMacro をテーブルに登録します。.
 o defineMacro(Symbol, Macro)
マクロ展開オブジェクトをテーブルに登録します。.
 o doCodeEmittingPass()
コード出力パスを呼び出します。 plug-in は普通このメソッドを拡張しません。
 o doMacroExpansionPass()
構文マクロ展開パスを呼び出します。 plug-in は普通このメソッドを拡張しません。
 o doParsingPass()
構文解析パスを呼び出します。 plug-in は普通このメソッドを拡張しません。
 o doTypeCheckingPass()
型チェックパスを呼び出します。 plug-in は普通このメソッドを拡張しません。
 o emit1(String, Tree)
outputFileName に、 tree を文字列として出力します。.
 o emitAdditionalHeader(OutputStream)
すべてのファイルの先頭に何か文字列を出力する時に呼ばれるメソッドです。.
 o Epp(String, String)
このメソッドは、 Ld-2 クラス Epp のコンストラクタです。.
 o eppSourceVersion()
EPP 本体のソースコードのバージョンを文字列として返します。
 o eppVersion()
EPP 本体のソースコードのバージョンと そのソースコードを変換した EPP のバージョンを文字列として返します。
 o error(String)
入力プログラム中のシンタックスエラーなど、エンドユーザレベルの エラーが起きた時に呼ぶメソッドです。.
 o extendMacro(Symbol, Macro)
マクロ展開オブジェクトを decorator pattern によって拡張します。.
 o initEmitterTable()
Emitter のテーブルを初期化するメソッドです。.
 o initializationPass()
プリプロセッサの初期化を行なうメソッドです。.
 o initInvokeStyleMacroTable()
InvokeStyleMacro のテーブルを初期化するメソッドです。.
 o initMacroTable()
Macro.macroTable を初期化するメソッドです。.
 o inputPointer()
先読みされているトークンが開始した位置(EppInputStream 上でのバイト数)を 返します。.
 o lookahead()
先読みされているトークンを返します。 入力ポインタは、進みません。.
 o macroExpansionPass()
構文マクロ展開パスの本体です。.
 o match(Token)
先読みされているトークンが引数と等しいかどうかを確かめ、 次のトークンに入力ポインタを進めます。.
 o matchAny()
先読みされているトークンを値として返します。 そして、入力ポインタを進めます。.
 o openEppInputStream(String)
入力ファイルから文字を読み出すためのストリーム EppInputStream を 作って返します。.
 o parsingPass()
構文解析パスの本体です。.
 o readToken(EppInputStream)
空白文字をスキップし、メソッド readTokenStart を呼んで、 トークンを1つ返します。.
 o redefineEmitter(Symbol, Emitter)
 o redefineInvokeStyleMacro(Symbol, InvokeStyleMacro)
テーブルに登録されている InvokeStyleMacro を再定義します。.
 o start()
構文解析を開始する非終端記号に相当するメソッドです。

Constructors

 o EppCore
 public EppCore()

Methods

 o Epp
 public void Epp(String inputFileName,
                 String outputFileName)
このメソッドは、 Ld-2 クラス Epp のコンストラクタです。. プリプロセッサを起動するメソッドです。 このメソッドは、 EPP main routine (Epp という名前の Java クラス) から、呼び出されます。

See Also:
Epp
 o initializationPass
 public void initializationPass()
プリプロセッサの初期化を行なうメソッドです。. このメソッドは、 EPP プリプロセッサが起動した直後(構文解析を始める前)に 呼び出されます。 plug-in は、このメソッドを拡張し、必要な初期化処理を 追加することができます。

 o doParsingPass
 public void doParsingPass()
構文解析パスを呼び出します。 plug-in は普通このメソッドを拡張しません。

 o doMacroExpansionPass
 public void doMacroExpansionPass()
構文マクロ展開パスを呼び出します。 plug-in は普通このメソッドを拡張しません。

 o doTypeCheckingPass
 public void doTypeCheckingPass()
型チェックパスを呼び出します。 plug-in は普通このメソッドを拡張しません。

 o doCodeEmittingPass
 public void doCodeEmittingPass()
コード出力パスを呼び出します。 plug-in は普通このメソッドを拡張しません。

 o error
 public Error error(String str)
入力プログラム中のシンタックスエラーなど、エンドユーザレベルの エラーが起きた時に呼ぶメソッドです。. このメソッドは、引数の文字列に行番号情報などを追加して、 クラス EppUserError のインスタンスを作って返します。

このメソッドは普通、次のようにして使います。

   throw error("message");
fatal error の場合は、このメソッドではなく、 Epp.fatal を使って下さい。

See Also:
EppUserError, fatal
 o lookahead
 public Token lookahead()
先読みされているトークンを返します。 入力ポインタは、進みません。.

 o match
 public Token match(Token token)
先読みされているトークンが引数と等しいかどうかを確かめ、 次のトークンに入力ポインタを進めます。. もし等しければそのトークンを返し、 もし等しくなければ、ユーザに分かりやすいメッセージとともに メソッド error を呼び出します。

 o matchAny
 public Token matchAny()
先読みされているトークンを値として返します。 そして、入力ポインタを進めます。.

 o start
 public Tree start()
構文解析を開始する非終端記号に相当するメソッドです。

 o readToken
 public Token readToken(EppInputStream in)
空白文字をスキップし、メソッド readTokenStart を呼んで、 トークンを1つ返します。. このメソッドは matchAny() メソッドから呼び出されます。 構文解析ルーチンから このメソッドを直接呼び出してはいけません。

See Also:
Lex, readTokenStart
 o openEppInputStream
 public EppInputStream openEppInputStream(String inputFileName)
入力ファイルから文字を読み出すためのストリーム EppInputStream を 作って返します。. plug-in は、このメソッドを再定義し、 EppInputStream のサブクラスを返すように 変更することで、入力ストリームの挙動を拡張することができます。 (Design pattern における Factory method です。)

 o beforeParsingPass
 public void beforeParsingPass()
構文解析パスの本体を実行する前に呼び出されるメソッドです。

 o parsingPass
 public void parsingPass()
構文解析パスの本体です。. plug-in は、このパス実行中の 動的変数の環境を作る時などに、このメソッドを拡張します。

 o afterParsingPass
 public void afterParsingPass()
構文解析パスの本体を実行した後に呼び出されるメソッドです。

 o inputPointer
 public int inputPointer()
先読みされているトークンが開始した位置(EppInputStream 上でのバイト数)を 返します。. 返値は、メソッド backtrack の引数に使います。

See Also:
backtrack
 o backtrack
 public void backtrack(int p)
EppInputStream 上でのポインタの位置を、引数 p に戻した後、 トークンを1つ読み、「先読みされているトークン」の値を更新します。. 次に lookahead() が呼び出されると、 p の直後から開始されるトークンが 返されます。 引数に指定する int 型の値は、メソッド inputPointer によって あらかじめ取得しておく必要があります。

See Also:
inputPointer
 o initMacroTable
 public void initMacroTable()
Macro.macroTable を初期化するメソッドです。. plug-in はこのメソッドを拡張し、 defineMacro や extendMacro を呼び出すことによって、 テーブルに登録されるマクロ展開オブジェクトを追加・拡張できます。

See Also:
defineMacro, extendMacro, Macro
 o defineMacro
 public void defineMacro(Symbol tag,
                         Macro func)
マクロ展開オブジェクトをテーブルに登録します。. もしすでに tag に対応するマクロ展開オブジェクトが登録済みなら fatal error になります。

See Also:
initMacroTable, Macro
 o extendMacro
 public void extendMacro(Symbol tag,
                         Macro func)
マクロ展開オブジェクトを decorator pattern によって拡張します。. 引数 func の中からは、変数 orig によって、オリジナルの マクロ展開オブジェクトを参照できます。

See Also:
initMacroTable, Macro
 o beforeMacroExpansionPass
 public void beforeMacroExpansionPass()
構文マクロ展開パスの本体を実行する前に呼び出されるメソッドです。

 o macroExpansionPass
 public void macroExpansionPass()
構文マクロ展開パスの本体です。. plug-in は、このパス実行中の 動的変数の環境を作る時などに、このメソッドを拡張します。

 o afterMacroExpansionPass
 public void afterMacroExpansionPass()
構文マクロ展開パスの本体を実行した後に呼び出されるメソッドです。

 o defineInvokeStyleMacro
 public void defineInvokeStyleMacro(Symbol tag,
                                    InvokeStyleMacro func)
InvokeStyleMacro をテーブルに登録します。.

See Also:
initInvokeStyleMacroTable, InvokeStyleMacro
 o redefineInvokeStyleMacro
 public void redefineInvokeStyleMacro(Symbol tag,
                                      InvokeStyleMacro func)
テーブルに登録されている InvokeStyleMacro を再定義します。.

See Also:
initInvokeStyleMacroTable, InvokeStyleMacro
 o initInvokeStyleMacroTable
 public void initInvokeStyleMacroTable()
InvokeStyleMacro のテーブルを初期化するメソッドです。. plug-in はこのメソッドを拡張し、 defineInvokeStyleMacro や redefineInvokeStyleMacro を呼び出すことによって、 テーブルに登録される InvokeStyleMacro オブジェクトを 追加・変更できます。

See Also:
InvokeStyleMacro
 o initEmitterTable
 public void initEmitterTable()
Emitter のテーブルを初期化するメソッドです。. plug-in プログラマーは、普通このメソッドを拡張しません。

See Also:
Emitter
 o defineEmitter
 public void defineEmitter(Symbol tag,
                           Emitter func)
 o redefineEmitter
 public void redefineEmitter(Symbol tag,
                             Emitter func)
 o beforeCodeEmittingPass
 public void beforeCodeEmittingPass()
コード出力パスの本体を実行する前に呼び出されるメソッドです。

 o codeEmittingPass
 public void codeEmittingPass()
コード出力パスの本体です。. plug-in は、このパス実行中の 動的変数の環境を作る時などに、このメソッドを拡張します。

 o afterCodeEmittingPass
 public void afterCodeEmittingPass()
コード出力パスの本体を実行した後に呼び出されるメソッドです。

 o emit1
 public void emit1(String outputFileName,
                   Tree tree)
outputFileName に、 tree を文字列として出力します。. ただし、もし outputFileName がすでに存在し、 「EPP によって生成されたファイル」でないならば、 EppUserError を throw します。

See Also:
isGeneratedFile
 o emitAdditionalHeader
 public void emitAdditionalHeader(OutputStream out)
すべてのファイルの先頭に何か文字列を出力する時に呼ばれるメソッドです。. このメソッドは emit1 から呼ばれます。

See Also:
emit1
 o eppVersion
 public String eppVersion()
EPP 本体のソースコードのバージョンと そのソースコードを変換した EPP のバージョンを文字列として返します。

 o eppSourceVersion
 public String eppSourceVersion()
EPP 本体のソースコードのバージョンを文字列として返します。


All Packages  Class Hierarchy  This Package  Previous  Next  Index