18,3 Modo Interpreter Overview
padrão de intérprete é uma freqüência relativamente baixo difícil de aprender, mas o padrão de design que é usado para descrever como usar a linguagem orientada a objetos constitui um intérprete de linguagem simples. Em alguns casos, a fim de melhor descrever um certo tipo de problema, podemos criar uma nova linguagem, a linguagem tem sua própria expressão e estrutura, ou seja, regras gramaticais, instâncias desses problemas corresponderá ao frases na língua. Neste ponto, você pode usar o padrão Interpreter para a concepção deste novo idioma. Modo intérprete de aprendizagem pode aprofundar nossa compreensão sobre orientada a objeto e processual linguagem de programação para dominar a interpretação de leis chinesas.
padrão intérprete é definida como se segue:
padrão Interpreter (o intérprete Padrão) : definição de uma gramática da linguagem, e estabelece um intérprete para interpretar a linguagem da sentença, onde "linguagem" refere-se às regras de formato e código da gramática. Interpretador padrão é um tipo de classe de modelo. |
Uma vez que a expressão pode ser dividido expressão terminador e expressão não-terminal, a estrutura e a estrutura do modo de interpretação modo de combinação é um pouco semelhante a, mas contém mais elementos constituintes em um modo explicado na sua estrutura, como mostrado na FIG 18 -3 mostrado:
Fig. 18-3 configuração padrão intérprete na FIG.
Ele inclui as seguintes vários papéis na estrutura de modo interpretação FIG:
● abstractexpression (expressão abstrata): uma declaração explicando o funcionamento do abstrato na expressão abstrata, é o pai comum de todos os terminadores expressões e expressão não-terminal.
● TerminalExpression (expressão terminador): expressão terminador é uma subclasse da expressão resumo, que implementa a explicação da operação dos símbolos terminais na gramática associadas, em cada terminador frase é uma classe de instância. Um intérprete tipicamente apenas uns poucos modos de classe expressão terminador, exemplos pode ser composta por frases mais complexas de expressão não-terminal.
● NonterminalExpression (expressão não-terminal): expressão não-terminal é também uma subclasse da expressão resumo, que implementa a gramática África explicando a operação de símbolos terminais, uma vez que a expressão pode compreender um terminador de expressão não-terminal, pode continuar a compreender a expressão não-terminal, o que explica a operação de que é geralmente conseguido por uma forma recursiva.
● Contexto (ambiental): Classe ambiental, também conhecida como classe de contexto, que para alguns fora de informação global do intérprete de armazenamento, geralmente precisam explicar isso armazena temporariamente o comunicado.
Modo no interpretador, cada um do símbolo terminal e não-terminal tem uma classe concreta correspondente, por causa do uso de classe para representar cada uma das disposições regulamentares, o sistema terá uma melhor flexibilidade e escalabilidade. Para todos símbolo terminal e não-terminal, primeiro precisamos de uma superclasse abstrata comum, ou seja, a classe da expressão abstrata, que é um código típico da seguinte forma:
Abstractexpression classe abstrata { vazio abstrato pública interpretar (Context ctx); } |
Terminator classes de expressão e expressão não-terminais de expressão são subclasses da classe abstracta, o terminador para a expressão, o qual código é muito simples, o processamento principal do elemento de terminação, tipicamente código como se segue:
classe TerminalExpression estende abstractexpression { public void interpretar (ctx Contexto) { // terminador para explicar o funcionamento da expressão } } |
Para a expressão não-terminal para o código é relativamente complexo, porque é possível expressões em estruturas mais complexas por expressões não-terminais não-terminais para classe contém dois elementos de comando, que são tipicamente o seguinte código:
classe NonterminalExpression estende abstractexpression { Abstractexpression privada esquerda; direito abstractexpression privado;
pública NonterminalExpression (abstractexpression esquerda, abstractexpression direita) { this.left = da esquerda; this.right = direito; }
public void interpretar (ctx Contexto) { // chamada recursiva cada componente interpretar () Método // composição ligação especificada enquanto parte da chamada recursiva, isto é, a função não-terminal } } |
除了上述用于表示表达式的类以外,通常在解释器模式中还提供了一个环境类Context,用于存储一些全局信息,通常在Context中包含了一个HashMap或ArrayList等类型的集合对象(也可以直接由HashMap等集合类充当环境类),存储一系列公共信息,如变量名与值的映射关系(key/value)等,用于在进行具体的解释操作时从中获取相关信息。其典型代码片段如下:
class Context { private HashMap map = new HashMap();
public void assign(String key, String value) { //往环境类中设值 }
public String lookup(String key) { //获取存储在环境类中的值 } } |
当系统无须提供全局公共信息时可以省略环境类,可根据实际情况决定是否需要环境类。
|