All Packages Class Hierarchy This Package Previous Next Index
java.lang.Object | +----epp.Parser
注意: このクラスは、 javadoc を作るための便宜的なクラスです。 実際の EPP のソースコード中には存在しません。
plug-in の中から、SystemMixin 構文を使って、 各メソッドの挙動を拡張することにより、 EPP が処理する Java 言語の 文法を拡張することができます。
EPP のパーザは、再帰下降スタイルで書かれています。 再帰下降パーザとは、各 non-terminal を1つの関数で表すスタイルで 書かれたパーザです。 関数は、 non-terminal を1つ構文解析し、結果を tree として返します。 例えば EPP の場合、 expression() というメソッド呼び出しは、 現在のトークンから「式」が始まるものと仮定して構文解析を始め、 成功したら構文解析の結果を抽象構文木として返します。
非終端記号の多くは、 defineNonterminal というマクロで定義されます。 このマクロは、 xxxTop, xxxLeft, xxxRight というメソッドを自動的に 定義します。 plug-in は、これらのメソッドを拡張することで、 非終端記号に新たな選択肢を追加することができます。 どのような非終端記号があるかは、 「EPP が受理する Java 文法」 を見て下さい。
EPP では構文解析中にバックトラックする機構を提供してます。 純粋な1トークン先読み再帰下降構文解析では LL(1) の文法しか解析できませんが、 バックトラックすることにより、より広範囲の文法を扱えます。
public Parser()
public Tree xxx()
public Tree xxxTop()
このメソッドは、defineNonterminal マクロによって自動的に定義されます。
public Tree xxxRight(Tree tree)
このメソッドは、defineNonterminal マクロによって自動的に定義されます。
public Tree xxxLeft(Tree tree)
このメソッドは、defineNonterminal マクロによって自動的に定義されます。
public Tree xxx1()
public Tree type()
実装の都合上、メソッド type は、まずメソッド primary を呼び出し、 その返値を型を表現する正規形に変換して、返します。 正規形に変換するために、メソッド convertExpressionToType を 呼び出します。
plug-in が新しい「型の表現」を導入するためには、 メソッド primaryTop とメソッド convertExpressionToType を 拡張する必要があります。
public Tree convertExpressionToType(Tree exp)
型の正規形は、次のように定義されます。
CanonicalType: (name Identifier Identifier*) (arrayOf CanonicalType) <extended alternatives>
型を表現する抽象構文木として不適切なものが引数に渡された時は、 EppUserError が throw されます。
All Packages Class Hierarchy This Package Previous Next Index