設計モード(十五)----解釈器モード(Interpreter)---(JAVA版)
2149 ワード
インタプリタモード
言語を指定し、文法の表現を定義し、言語の文を説明するために使用される解釈器を定義します.
適用性
実行を解釈する言語があり、その言語の文を抽象構文ツリーとして表すことができる場合は、解釈モードを使用します.このモードの効果は、以下の場合に最適です.
1.この文法は単純で複雑な文法に対して、文法の階層が膨大になり管理できなくなる
2.効率は重要な問題ではありません.最も効率的な解釈器は、通常、構文解析ツリーを直接解釈することによって実現されるのではなく、まず別の形式に変換される.
参加者
1.AbstractExpression(抽象式)
抽象構文ツリー内のすべてのノードで共有される抽象的な解釈操作を宣言します.
2.TerminalExpression(ターミネータ式)
文法の終端に関連する解釈操作を実現する.1つの文の各終端には、クラスのインスタンスが必要です.
3.NonterminalExpression(エンドマーク以外の式)
文法における非終端子の解釈(Interpret)操作を実現する
4.Context(コンテキスト)
解釈器以外のグローバル情報を含む
5.Client
構文定義言語の特定の文を表す抽象構文ツリーを構築(または指定)します.この抽象構文ツリーは、TerminalExpressionとNonterminalExpressionのインスタンスによって組み立てられています.
一例
1.AbstractExpression
2.Expression
3.Context
4.test
result
これは简単な解釈器です...これは先進的な解釈器です...これは简単な解釈器です...
参加文献:
1.http://rainbowj234.diandian.com/post/2011-11-20/6967684
2.http://www.cnblogs.com/java-my-life/archive/2012/06/19/2552617.html
3.http://wuquanyin1011.iteye.com/blog/709682
言語を指定し、文法の表現を定義し、言語の文を説明するために使用される解釈器を定義します.
適用性
実行を解釈する言語があり、その言語の文を抽象構文ツリーとして表すことができる場合は、解釈モードを使用します.このモードの効果は、以下の場合に最適です.
1.この文法は単純で複雑な文法に対して、文法の階層が膨大になり管理できなくなる
2.効率は重要な問題ではありません.最も効率的な解釈器は、通常、構文解析ツリーを直接解釈することによって実現されるのではなく、まず別の形式に変換される.
参加者
1.AbstractExpression(抽象式)
抽象構文ツリー内のすべてのノードで共有される抽象的な解釈操作を宣言します.
2.TerminalExpression(ターミネータ式)
文法の終端に関連する解釈操作を実現する.1つの文の各終端には、クラスのインスタンスが必要です.
3.NonterminalExpression(エンドマーク以外の式)
文法における非終端子の解釈(Interpret)操作を実現する
4.Context(コンテキスト)
解釈器以外のグローバル情報を含む
5.Client
構文定義言語の特定の文を表す抽象構文ツリーを構築(または指定)します.この抽象構文ツリーは、TerminalExpressionとNonterminalExpressionのインスタンスによって組み立てられています.
一例
1.AbstractExpression
public interface Expression {
void interpret(Context c);
}
2.Expression
public class SimpleExpression implements Expression {
@Override
public void interpret(Context c) {
System.out.println(" 。。。");
}
}
public class AdvanceExpression implements Expression {
@Override
public void interpret(Context c) {
System.out.println(" 。。。");
}
}
3.Context
public class Context {
private String content;
private List list = new ArrayList();
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public List getList() {
return list;
}
public void add(Expression e) {
list.add(e);
}
}
4.test
public class Test {
public static void main(String[] args) {
Context c = new Context();
c.add(new SimpleExpression());
c.add(new AdvanceExpression());
c.add(new SimpleExpression());
for (Expression eps : c.getList()) {
eps.interpret(c);
}
}
}
result
これは简単な解釈器です...これは先進的な解釈器です...これは简単な解釈器です...
参加文献:
1.http://rainbowj234.diandian.com/post/2011-11-20/6967684
2.http://www.cnblogs.com/java-my-life/archive/2012/06/19/2552617.html
3.http://wuquanyin1011.iteye.com/blog/709682