📄 client.java
字号:
/*
* Created on 2005-5-11
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.test.pattern.behavir.interpreter;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @author Administrator
*
* 意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 适用性 当有一个语言需要解释执行,
* 并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好: 该文法简单对于复杂的文法,
* 文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达式, 这样可以节省空间而且还可能节省时间。
* 效率不是一个关键问题最高效的解释器通常不是通过直接解释语法分析树实现的,
* 而是首先将它们转换成另一种形式。例如,正则表达式通常被转换成状态机。但即使在这种情况下, 转换器仍可用解释器模式实现, 该模式仍是有用的。
*/
class Context {
}
abstract class AbstractExpression {
abstract public void Interpret(Context c);
}
// class for terminal symbol
class TerminalExpression extends AbstractExpression {
public void Interpret(Context c) {
}
}
// class for grammar rule (one per rule needed)
class NonterminalExpression extends AbstractExpression {
public void Interpret(Context c) {
}
}
// to extend grammar, just add other NonterminalExpression classes
/// <summary>
/// Summary description for Client.
/// </summary>
public class Client {
public static void main(String[] args) {
Context c = new Context();
ArrayList l = new ArrayList(); //really need a tree here!
// build up context information
// . . .
// Populate abstract syntax tree with data
l.add(new TerminalExpression());
l.add(new NonterminalExpression());
// interpret
Iterator iterator = l.iterator();
while (iterator.hasNext()) {
AbstractExpression exp = (AbstractExpression) iterator.next();
exp.Interpret(c);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -