0. Definição do modo de intérprete:
Dado um idioma, defina uma representação de sua gramática e defina um intérprete que usa a representação para interpretar frases no idioma. Pertence ao modo comportamental.
O modo de intérprete é usado muito pouco no desenvolvimento real do sistema, pois pode causar problemas como eficiência, desempenho e manutenção.
O diagrama de classe geral do modo de intérprete é mostrado na figura.
1. Vantagens do modo de intérprete
O intérprete é uma ferramenta de análise de sintaxe simples. Sua vantagem mais proeminente é sua expansão. A modificação das regras de sintaxe é apenas para modificar a expressão não terminal correspondente. Se você expandir a sintaxe, basta adicionar uma classe não terminal.
2. Desvantagens do modo de intérprete
O padrão do intérprete causará expansão de classe: cada sintaxe precisa produzir uma expressão não terminal. Quando as regras de sintaxe são relativamente complexas, um grande número de arquivos de classe pode ser gerado, o que traz muitos problemas à manutenção.
O padrão do intérprete adota um método de chamada recursiva: cada expressão não terminal se importa apenas com as expressões relacionadas a si mesmo. Cada expressão precisa conhecer o resultado final e deve ser a camada não revestida por camada. Seja uma linguagem orientada ao processo ou uma linguagem orientada a objetos, a recursão é usada em condições necessárias, o que leva a depuração muito complexa. Pense nisso, se queremos solucionar problemas de um erro de sintaxe, precisamos depurar um por um, até a menor unidade de sintaxe?
Problema de eficiência: o modo de intérprete usa muitos loops e recursão, a eficiência é um problema que não pode ser ignorado, especialmente quando usado para analisar a sintaxe complexa e longa. A eficiência é insuportável.
3. Use cenários do modo de intérprete
Problemas repetidos podem ser usados com o modo de intérprete: por exemplo, vários servidores de aplicativos geram um grande número de logs todos os dias e os arquivos de log precisam ser analisados e processados. Como os formatos de log de cada servidor são diferentes, os elementos de dados são os mesmos. Segundo o intérprete, as expressões do Terminator são as mesmas, mas as expressões não do terminador precisam ser formuladas. Nesse caso, o problema pode ser resolvido de uma vez por todas por meio de um programa.
Um cenário em que a sintaxe simples precisa ser explicada: por que é simples? Veja expressões não terminais. Quanto mais regras gramaticais, maior a complexidade e as chamadas recursivas são necessárias entre as classes (veja a pilha em nosso exemplo), que geralmente não é complicado. Pense nisso, que tipo de paciência e confiança você precisa para solucionar problemas ao ligar para várias classes. Portanto, o modo de intérprete é geralmente usado para analisar conjuntos de caracteres padrão comparativos, como análise de sintaxe SQL, mas essa parte é gradualmente substituída por ferramentas especializadas. Em alguns ambientes de negócios especiais, o modelo de intérprete também será usado. O exemplo que acabamos de fazer é um ambiente de negócios e existem muitos exemplos de operações de modelo agora. Muitas instituições comerciais são capazes de fornecer uma grande quantidade de dados para análise.
4. Exemplos simples
/ *** Declare uma operação de interpretação abstrata*/ Interface pública Interpretadora {public void Interpret (contexto de contexto); // De fato, pode haver um tipo retornado para definir o objeto de dados interpretado} public class XMLSaxInterPreter implementa intérprete {@Override public void Interpret (context context) {System.out.println ("Interpretador XML Sax:" + context.getData ()); }} classe pública xmldominterpreter implementa o intérprete {@Override public void Interpret (context context) {System.out.println ("Xml Dom Interpreter:" + context.getData ()); }} / *** contém algumas informações fora do intérprete* / Public Class Context {Private String Data; public String getData () {retornar dados; } public void setData (dados da string) {this.data = data; }} public class Test {public static void main (string [] args) {context context = new Context (); context.setData ("um pedaço de dados XML"); novo xmlSaxInterPreter (). Interpret (contexto); novo xmldomInterpreter (). Interpret (context); }}5. Notas no modo de intérprete
Tente não usar o modo de intérprete em módulos importantes, caso contrário, a manutenção será um grande problema. No projeto, você pode usar linguagens de script como Shell, Jruby e Groovy para substituir o modo de intérprete para compensar as deficiências dos idiomas compilados de Java. Usamos o JRUBY para processamento de cálculo no projeto analítico de um banco, evitando a operação de quatro caracteres no modo de intérprete e tendo um bom desempenho em todos os aspectos de eficiência e desempenho.