All Packages  Class Hierarchy  This Package  Previous  Next  Index

Class epp.Lex

java.lang.Object
   |
   +----epp.Lex

public class Lex
extends Object
EPP プリプロセッサが持つメソッドのうち ファイル Lex.java で定義されるメソッドは、 Java 言語の字句解析を行なうためのものです。.

注意: このクラスは、 javadoc を作るための便宜的なクラスです。 実際の EPP のソースコード中には存在しません。

構文解析ルーチンは、メソッド match と matchAny によって、 字句解析ルーチンを間接的に呼び出しています。

メソッド match あるいは matchAny の呼び出しによって新たなトークンが 必要になると、メソッド readToken が呼ばれます。 このメソッドは、必要に応じてさらに他のメソッドを呼び出して、 EppInputStream からトークンを1つ切り出して返します。

plug-in は、これらのメソッドを拡張することで、 この字句解析ルーチンの挙動を変更できます。 例えば、普通の Java では "**" という文字列は :"*" という Symbol 2つに 字句解析されますが、それを :"**" という1つの Symbol に字句解析するように 拡張するには、次のようにします。

SystemMixin NewOp {
  class Epp {
    extend Token readOperator(EppInputStream in){
      if (in.peekc() == '*') {
        int p = in.pointer();
        in.getc();
        if (in.getc() == '*') {
           return :"**";
        }
        in.backtrack(p);
        return original(in);
      } else {
        return original(in);
      }
    }
  }
}

See Also:
EppInputStream, match, matchAny, readToken

Constructor Index

 o Lex()

Method Index

 o readCharLiteral(EppInputStream)
トークンの先頭がシングルクォートだった時に、 readOperator から 呼び出され、文字リテラルを返します。
 o readEndOfLineComment(EppInputStream)
"//" で始まるコメントを読み飛ばし、次のトークンを返します。.
 o readEscapedChar(EppInputStream, StringBuffer, char)
"¥"" のようなエスケープシーケンスを処理します。.
 o readId(EppInputStream)
トークンの先頭がアルファベットである場合に呼び出されるメソッドです。.
 o readNumber(EppInputStream)
数値リテラルを読んで返します。.
 o readOperator(EppInputStream)
トークンの先頭が記号である場合に呼び出されるメソッドです。.
 o readSharp(EppInputStream)
"#" で始まるトークンを処理します。.
 o readStringLiteral(EppInputStream)
トークンの先頭がダブルクォートだった時に、 readOperator から 呼び出され、文字列リテラルを返します。
 o readTokenAtNextLine(EppInputStream)
行末までを無視し、次の行からトークンを読んでそれを返します。.
 o readTokenStart(EppInputStream)
引数 in からトークンを1つ読んで返します。.
 o readTraditionalComment(EppInputStream)
"/*" で始まるコメントを読み飛ばし、次のトークンを返します。.

Constructors

 o Lex
 public Lex()

Methods

 o readTokenStart
 public Token readTokenStart(EppInputStream in)
引数 in からトークンを1つ読んで返します。. 空白文字は既にスキップされているものと仮定します。 最初の1文字を先読みし、その値がアルファベットか 数字か記号かによって、 readId, readNumber, readOperator を呼び出します。 このメソッドは、 readToken から呼ばれます。

See Also:
readToken
 o readId
 public Token readId(EppInputStream in)
トークンの先頭がアルファベットである場合に呼び出されるメソッドです。. 識別子あるいはキーワード(if, while など)を読んで Symbol として返します。

 o readNumber
 public Token readNumber(EppInputStream in)
数値リテラルを読んで返します。. トークンの先頭が数字である場合に readTokenStart から 呼び出されます。 ただし、 ".1" のような場合は、 readTokenStart から まず readOperator が呼び出され、そこからこのメソッドが呼ばれます。

 o readOperator
 public Token readOperator(EppInputStream in)
トークンの先頭が記号である場合に呼び出されるメソッドです。. 必要に応じて、 readTraditionalComment など他のメソッドを呼び出します。

 o readStringLiteral
 public Token readStringLiteral(EppInputStream in)
トークンの先頭がダブルクォートだった時に、 readOperator から 呼び出され、文字列リテラルを返します。

 o readCharLiteral
 public Token readCharLiteral(EppInputStream in)
トークンの先頭がシングルクォートだった時に、 readOperator から 呼び出され、文字リテラルを返します。

 o readEscapedChar
 public void readEscapedChar(EppInputStream in,
                             StringBuffer buf,
                             char c)
"¥"" のようなエスケープシーケンスを処理します。. readStringLiteral と readCharLiteral から呼び出されます。

 o readTraditionalComment
 public Token readTraditionalComment(EppInputStream in)
"/*" で始まるコメントを読み飛ばし、次のトークンを返します。. "/*" の2文字はすでに消費された状態で呼び出されます。

 o readEndOfLineComment
 public Token readEndOfLineComment(EppInputStream in)
"//" で始まるコメントを読み飛ばし、次のトークンを返します。. "//" の2文字はすでに消費された状態で呼び出されます。

 o readSharp
 public Token readSharp(EppInputStream in)
"#" で始まるトークンを処理します。. "#" の1文字はすでに消費された状態で呼び出されます。 このメソッドのデフォルトの動作は、readTokenAtNextLine メソッドを 呼び出します。 ( #epp コマンドを読み飛ばすためです。)

 o readTokenAtNextLine
 public Token readTokenAtNextLine(EppInputStream in)
行末までを無視し、次の行からトークンを読んでそれを返します。. このメソッドは readEndOfLineComment および readSharp から 呼び出されます。


All Packages  Class Hierarchy  This Package  Previous  Next  Index