Patrones de diseño veintitrés: modo de intérprete (Intérprete)

En el desarrollo de software, nos encontramos con algunos problemas en varias ocasiones ocurrir, y hay una cierta similitud y la regularidad. Si se agrupan en un lenguaje sencillo, estas cuestiones serán algunos ejemplos de frases de la lengua, por lo que puede utilizar la "teoría del compilador" en el modo de intérprete de lograr.

Aunque los ejemplos que utilizan un modo de intérprete no es mucho, pero para cumplir con las características anteriores, y la eficiencia operativa no es muy alto ejemplo de aplicación, si se implementa el modo de intérprete, el efecto es muy bueno, este artículo presentará sus obras y utilizar.

La definición y características del modelo

intérprete definido (Intérprete) Modo: analizar una definición objeto de lenguaje, y la definición de la gramática de la lengua, dijo re-diseño de un programa de análisis para interpretar el lenguaje de la oración. En otras palabras, un lenguaje compilado para analizar ejemplos de aplicaciones. Este modelo gramática de expresión implementa el procedimiento de interfase, una explicación específica del contexto interfaz.

El concepto de la gramática y la sentencia se ha mencionado aquí en la misma teoría del compilador para describir la misma, "gramática" se refiere a las reglas gramaticales de la lengua, y "condena" es el foco de los elementos del lenguaje. Por ejemplo, hay muchos frase china, "Soy Chino" es una frase, se puede utilizar un árbol de sintaxis para describir visualmente las frases en el idioma.

Intérprete patrón es un tipo de clases del modelo, las siguientes ventajas principales.

  1. Buena escalabilidad. El uso de clases en el modo de intérprete representado reglas gramaticales de una lengua y la gramática puede ser cambiado o ampliado por mecanismos de herencia.
  2. Fácil de implementar. Cada clase en el nodo de expresión en el árbol de sintaxis son similares, es relativamente fácil de lograr su gramática.


El principal inconveniente del modo explicado a continuación.

  1. Cuanto menor es la eficiencia. Intérprete patrón de uso común en un gran número de ciclos y llamadas recursivas, cuando para explicar oraciones más complejas, su velocidad es muy lenta, y el proceso de depuración del código demasiados problemas.
  2. Clase hará que la hinchazón. Cada modo Regla intérprete definir al menos una clase, cuando la regla gramatical contiene muchos, el número de clases aumentará considerablemente, lo que resulta en la gestión y el mantenimiento del sistema difícil.
  3. escena aplicable es relativamente pequeño. En el desarrollo de software, ejemplos de aplicaciones necesitan para definir la gramática de la lengua es muy pequeña, por lo que este modo rara vez se utiliza para.

Arquitectura e Implementación Modelo

patrón intérprete de uso común en la recopilación o análisis de ejemplos de lenguaje sencillo con el fin de dominar su estructura y aplicación, primero debemos entender el principio traducción de "árbol de sintaxis gramatical, frase" y otros conceptos relacionados.

1) gramática

Las reglas formales de la gramática se utiliza para describir la estructura gramatical de la lengua. No hay reglas ni normas, por ejemplo, algunas personas piensan que las directrices son el amor perfecto "atracción mutua, la especificidad emocional, ninguna de las partes amor con experiencia", aunque el último criterio de una más exigente, pero todo lo demás, hay reglas, el idioma, también, si se trata de un lenguaje de máquina o lenguaje natural, con sus propias reglas gramaticales. Por ejemplo, los chinos en la gramática "sentencia" sigue. 

〈句子〉::=〈主语〉〈谓语〉〈宾语〉
〈主语〉::=〈代词〉|〈名词〉
〈谓语〉::=〈动词〉
〈宾语〉::=〈代词〉|〈名词〉
〈代词〉你|我|他
〈名词〉7大学生I筱霞I英语
〈动词〉::=是|学习

Nota: la notación ":: =" medios "se define como" medios, con el "<" y ">" símbolo no terminal encierran, envolvente es ningún terminador.

2) condena

Sentence es la unidad básica de la lengua, la lengua es un conjunto de elementos, que consta de un terminador puede ser derivado de "gramática". Por ejemplo, la gramática anterior se puede introducir, "I es un estudiante de la universidad", por lo que es una pena.

3) árboles de sintaxis

El árbol de sintaxis es una estructura de árbol de una frase, que representa el resultado derivación de la proposición, que es útil para comprender el nivel de la estructura gramatical de las oraciones. La figura 1 es "Soy un estudiante universitario," el árbol de sintaxis.
 

                                       La frase "Soy un estudiante universitario," el árbol de sintaxis
1 frase "Soy un estudiante universitario," el árbol de sintaxis


Con estos fundamentos, ahora introducir la estructura del patrón intérprete es simple. Estructura y modo de interpretación patrón de combinación similar, pero que contiene elementos constitutivos que el patrón de combinación, y una combinación de modelo estructural es un modelo de objeto, se interpreta el modo de tipo de clase de modelo.

1. Estructura Modelo

patrón intérprete consiste en lo siguiente papel importante.

  1. Resumen de expresión (Abstract expresión) Roles: convenciones de interfaz de intérprete definido que explican el funcionamiento del intérprete, que comprende una interpretación principal interpretar ().
  2. expresión Terminator (Expresión Terminal) Roles: subclases de la expresión abstracta se utiliza para implementar operaciones asociadas con símbolos terminales en la gramática, la gramática cada símbolo terminal tiene un extremo de expresión particular correspondiente a la misma.
  3. No terminales expresión (Expresión Noterminal) Roles: subclases de la expresión abstracta se utiliza para implementar la operación no terminales de la gramática, la gramática asociado con cada uno corresponde regla a una expresión no terminal.
  4. Medio Ambiente (Context) Roles: comprende típicamente datos o funciones de la respectiva intérprete común se requiere, generalmente utilizado para transmitir todo intérprete de datos compartida, el intérprete puede obtener los últimos valores aquí.
  5. Client (Cliente): La tarea principal de la frase o expresión se va a analizar en el uso de la descripción del objeto intérprete del árbol de sintaxis abstracta, y luego llamar al intérprete de interpretación, por supuesto, también se puede acceder indirectamente a través de la función ambiental de intérprete de la interpretación .


diagrama de configuración patrón Intérprete muestra en la Figura 2.
 

            Modo de la estructura de la figura explicó

2. Modo de realización

modo de interpretación Key se implementa reglas gramaticales definen las clases de diseño y terminador clase no terminal, la estructura mostrada en la figura construido árbol de sintaxis si es necesario, la estructura de código es el siguiente:

//抽象表达式类
interface AbstractExpression
{
    public Object interpret(String info);    //解释方法
}
//终结符表达式类
class TerminalExpression implements AbstractExpression
{
    public Object interpret(String info)
    {
        //对终结符表达式的处理
    }
}
//非终结符表达式类
class NonterminalExpression implements AbstractExpression
{
    private AbstractExpression exp1;
    private AbstractExpression exp2;
    public Object interpret(String info)
    {
        //非对终结符表达式的处理
    }
}
//环境类
class Context
{
    private AbstractExpression exp;
    public Context()
    {
        //数据初始化
    }
    public void operation(String info)
    {
        //调用相关表达式类的解释方法
    }
}

 

Modo de ejemplos de aplicación

[Ejemplo 1] diseñar una tarjeta bus "Shao Unitoll" con el modo de programa intérprete lector de tarjetas.

Descripción: Si el lector de tarjetas "Shao Yue Tong" puede determinar la identidad de los pasajeros del autobús, si es "Shaoguan" o "Cantón" y "ancianos" "Mujeres", "niño" puede ser un paseo libre, otros montan una hebilla 2 yuanes.

Análisis: Este ejemplo de "modo de interpretación" es un diseño más adecuado, el primer diseño que sigue las reglas de la gramática.

<expression> ::= <city>的<person>
<city> ::= 韶关|广州
<person> ::= 老人|妇女|儿童

Entonces, de acuerdo con las reglas de diseño de diagrama de clases de gramática del programa de lector de tarjeta de bus, siga estos pasos.

  • Definir una interfaz abstracta expresión (Expresión), que contiene la interpretación interpretar (Información string).
  • La expresión define un terminador (la expresión terminal) de clase, con el que conjunto (Set) o tipo humano para mantener la ciudad para cumplir con las condiciones, y para lograr una interfaz interpretación expresión abstracta interpretar (StringInfo), el personaje se determina para ser analizados si las cadenas son conjunto terminador.
  • Terminator objeto de expresión personal terminador objeto de expresión y satisfacer las condiciones de la definición de una clase expresión no terminal (AndExpressicm), que es una subclase de expresión abstracta, que incluye la condición de la ciudad, y para lograr interpretar (String información método), que se utiliza para determinar si la cadena se analiza para cumplir con las condiciones de las personas que satisfacen la condición en la ciudad.
  • Por último, la definición de una clase de entorno (contexto), que contiene el intérprete de datos necesarios para la inicialización completa del terminador de la expresión, y define un método de interpretación Freeride (Información string) para llamar al objeto de expresión cadena de caracteres para ser analizados explicó. La estructura mostrada en la Figura 3.

 

                   Mapa de la estructura del programa "Shao Tong Yue" Bus del lector


Código es el siguiente:

package interpreterPattern;
import java.util.*;
/*文法规则
  <expression> ::= <city>的<person>
  <city> ::= 韶关|广州
  <person> ::= 老人|妇女|儿童
*/
public class InterpreterPatternDemo
{
    public static void main(String[] args)
    {
        Context bus=new Context();
        bus.freeRide("韶关的老人");
        bus.freeRide("韶关的年轻人");
        bus.freeRide("广州的妇女");
        bus.freeRide("广州的儿童");
        bus.freeRide("山东的儿童");
    }
}
//抽象表达式类
interface Expression
{
    public boolean interpret(String info);
}
//终结符表达式类
class TerminalExpression implements Expression
{
    private Set<String> set= new HashSet<String>();
    public TerminalExpression(String[] data)
    {
        for(int i=0;i<data.length;i++)set.add(data[i]);
    }
    public boolean interpret(String info)
    {
        if(set.contains(info))
        {
            return true;
        }
        return false;
    }
}
//非终结符表达式类
class AndExpression implements Expression
{
    private Expression city=null;    
    private Expression person=null;
    public AndExpression(Expression city,Expression person)
    {
        this.city=city;
        this.person=person;
    }
    public boolean interpret(String info)
    {
        String s[]=info.split("的");       
        return city.interpret(s[0])&&person.interpret(s[1]);
    }
}
//环境类
class Context
{
    private String[] citys={"韶关","广州"};
    private String[] persons={"老人","妇女","儿童"};
    private Expression cityPerson;
    public Context()
    {
        Expression city=new TerminalExpression(citys);
        Expression person=new TerminalExpression(persons);
        cityPerson=new AndExpression(city,person);
    }
    public void freeRide(String info)
    {
        boolean ok=cityPerson.interpret(info);
        if(ok) System.out.println("您是"+info+",您本次乘车免费!");
        else System.out.println(info+",您不是免费人员,本次乘车扣费2元!");   
    }
}

 Los resultados del programa son los siguientes:

您是韶关的老人,您本次乘车免费!
韶关的年轻人,您不是免费人员,本次乘车扣费2元!
您是广州的妇女,您本次乘车免费!
您是广州的儿童,您本次乘车免费!
山东的儿童,您不是免费人员,本次乘车扣费2元!

Aplicación de modos de escena

La estructura y características del modo de explicación anterior, el siguiente análisis de su escenario de aplicación.

  1. Cuando la gramática del lenguaje es sencillo y la implementación de la eficiencia no es el problema clave.
  2. Cuando el problema se repite, y se puede utilizar un lenguaje sencillo para expresar el tiempo.
  3. Cuando un lenguaje interpretado deseada y frases en el idioma pueden expresarse como un árbol de sintaxis abstracta, como explica documento XML.


Nota: Modelo intérprete utilizado en el desarrollo de software real es relativamente pequeño, ya que conducirá a la eficiencia, el rendimiento y los problemas de mantenimiento. Si usted choca con la interpretación de las expresiones en  Java  puede ser utilizado como Expression4J o Jep diseño.

el modo extendido

En el desarrollo del proyecto, si quieres ser un análisis de datos de expresión y el cálculo, no tomará el diseño modo de intérprete, Java proporciona la siguiente fórmula matemática potente analizador: Expression4J, MESP (Expresión matemática de cuerdas Analizador) y Jep, etc. que pueden explicar algunas gramática compleja, potente y fácil de usar.

Jep ahora un ejemplo para introducir el uso de la caja de herramientas. PEC es un corto analizador de expresiones de Java, que Java analizador de expresiones, que se utiliza para convertir una expresión matemática y calcular la biblioteca de Java. Por esta biblioteca, el usuario puede introducir una fórmula arbitraria como una cadena, a continuación, calcular rápidamente su resultado. Y Jep apoya definidos por el usuario variables, constantes y funciones, que incluye muchas funciones y constantes matemáticas comunes.

Jep descarga antes de paquete, sin envasar uso comprimido, se PEC-xxxjar archivos en un directorio de su elección, seleccione "Agregar archivo JAR externo (X) en Eclipse" ficha Java Build Path "diálogo" biblioteca" .. .", se añade el paquete después de Jep proyecto para utilizar uno de la biblioteca.

Abajo para calcular el interés sobre los depósitos como ejemplo para introducir. interés de los depósitos se calcula: Principal Tasa x = x Tiempo de interés, el código en cuestión es la siguiente:

package interpreterPattern;
import com.singularsys.jep.*;
public class JepDemo
{
    public static void main(String[] args) throws JepException
    {
        Jep jep=new Jep();
        //定义要计算的数据表达式
        String 存款利息="本金*利率*时间";
        //给相关变量赋值
        jep.addVariable("本金",10000);
        jep.addVariable("利率",0.038);
        jep.addVariable("时间",2);
        jep.parse(存款利息);    //解析表达式
        Object accrual=jep.evaluate();    //计算
        System.out.println("存款利息:"+accrual);
    }
}

 Los resultados del programa son los siguientes:

存款利息:760.0

 

 

 

 

 

 

Publicados 136 artículos originales · ganado elogios 6 · vistas 1536

Supongo que te gusta

Origin blog.csdn.net/weixin_42073629/article/details/104437918
Recomendado
Clasificación