A implementação personalizada da língua - Modo intérprete (c)

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中包含了一个HashMapArrayList等类型的集合对象(也可以直接由HashMap等集合类充当环境类),存储一系列公共信息,如变量名与值的映射关系(key/value)等,用于在进行具体的解释操作时从中获取相关信息。其典型代码片段如下:

class Context {

     private HashMap map = new HashMap();

     public void assign(String key, String value) {

         //往环境类中设值

     }

public String  lookup(String key) {

         //获取存储在环境类中的值

     }

}

       当系统无须提供全局公共信息时可以省略环境类,可根据实际情况决定是否需要环境类。

思考

绘制加法/减法解释器的类图并编写核心实现代码。

发布了25 篇原创文章 · 获赞 1 · 访问量 773

Acho que você gosta

Origin blog.csdn.net/qq_42770949/article/details/104930377
Recomendado
Clasificación