/* Startable.java */
package sample;
public interface Startable {
void start() throws CannotStartException;
}
/* CannotStartException.java */
package sample;
public class CannotStartException extends Exception {
public CannotStartException(String msg) {
super(msg);
}
}
/* ExitReportHandler.java */
package sample;
public interface ExitReportHandler {
public void aborted(int exitCode, String msg, Throwable cause);
public void finished(int exitCode);
}
package sample;
public interface Result<T> {
/** なんらかの作業結果を返す */
public T result();
/** result()を呼んで意味のある値を得られるかどうか */
public boolean isAvailable();
}
明白にポート型を意識したインターフェース達。
/* VSTToken.java */
package sample;
/* トークン・データ */
public class VSTToken {
public enum Kind {L_BRACE, R_BRACE, TEXT, EOF}
public final Kind kind;
public final String value;
public VSTToken(Kind kind, String value) {
this.kind = kind;
this.value = value;
}
}
/* VSTLexerPI.java */
package sample;
import java.io.IOException;
/* レクサーのインターフェース */
public interface VSTLexerPI {
public VSTToken nextToken() throws IOException;
}
/* VSTParserPI.java */
package sample;
import java.io.IOException;
public interface VSTParserPI {
void parse() throws IOException, VSTParseException;
}
/* VSTParseException.java */
package sample;
/* パージング時の例外 */
class VSTParseException extends Exception {
public VSTParseException(String msg) {
super(msg);
}
}
/* VSTHandler.java */
package sample;
/* ハンドラのインターフェース */
public interface VSTHandler {
public void startTemplate();
public void endTemplate();
public void placeholder(String content);
public void text(String text);
public void error(String message);
}
/* Evaluator.java */
package sample;
public interface Evaluator {
public String eval(String arg);
}
/* VSTProcesssorPI.java */
package sample;
public interface VSTProcessorPI {
void process();
}