Diseño del modo de patrones de interpretación (Intérprete) y el código de ejemplos detallados

En primer lugar, la definición y características del modo explica

  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.

En segundo lugar, explicar el modo de ventajas y desventajas

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

  • 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.
  • 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.

  • 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.
  • 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.
  • 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.

En tercer lugar, para lograr el modo de intérprete

  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, la 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.

<Sentencia> :: = <asunto> <predicado> <object> 
<asunto> :: = <pronombres> | <nombre> 
<predicado> :: = <verb> 
<object> :: = <pronombres> | <nombre> 
<> pronombres usted | I | él 
<> 7 sustantivo estudiantes que Xiao Xia I Inglés 
<verb> :: = Sí | aprendizaje

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

  2, frase

  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, el árbol 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. "Soy un estudiante universitario," el árbol de sintaxis que se muestra:

              

  Con estos fundamentos, ahora introducir la estructura del patrón intérprete es simple. Estructura y patrones similares de composición para explicar el modo, pero 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.

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

  • 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 ().
  • 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.
  • 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.
  • 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í.
  • 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 .

  Intérprete diagrama de configuración patrón como se muestra:

          

  Estructura del código es el siguiente: 

// clase expresión abstracta 
interfaz AbstractExpression 
{ 
    público objeto de interpretar (Información string);     // interpretación 
}
 // expresión terminador clase 
clase TerminalExpression los implementos AbstractExpression 
{ 
    público objeto de interpretar (Información string) 
    { 
        // para expresiones terminador procesamiento 
    } 
} 
// no terminal clase de expresión 
de clase NonterminalExpression los implementos AbstractExpression 
{ 
    privado AbstractExpression exp1;
     privada AbstractExpression EXP2;
     públicaInterpretar de objetos (información String) 
    { 
        // no terminal procesamiento símbolo en la expresión 
    } 
} 
// Ambiental 
clase el contexto 
{ 
    Privado AbstractExpression exp;
     pública del Contexto () 
    { 
        // Inicializar los datos 
    }
     pública  vacío Operación (Información string) 
    { 
        // llame a la interpretación de la expresión de la clase relevante 
    } 
}

modo de Ejemplo de aplicación IV

  Utilizamos el patrón intérprete diseñar un programa lector de tarjeta de bus "Shao Tong Yue": Si el lector de tarjetas "Shao Tong Yue" puede determinar la identidad de los pasajeros del autobús, si es "Shaoguan" o "Cantón" y "viejo hombre "" mujeres "" niño "puede ser un paseo libre, otros montan una hebilla de 2 yuanes.

  Análisis: Este ejemplo de "modo de interpretación" es un diseño más adecuado, el diseño de su primera regla gramatical de la siguiente manera:

<Expresión> :: = <ciudad> de <la Persona> 
<Ciudad> :: = Shaoguan | Guangzhou
 <persona> :: = ancianos | mujer | Niños

  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:

                

  Código se implementa de la siguiente manera:

/ * Las reglas gramaticales 
  <expresión> :: = <ciudad> de <la Persona> 
  <Ciudad> :: = Shaoguan | Guangzhou 
  <persona> :: = ancianos | mujer | Niños 
* / 
público  de clase InterpreterPatternDemo 
{ 
    pública  estática  vacío main (String [ ] args) 
    { 
        Contexto autobús = nuevo nuevo contexto (); 
        bus.freeRide ( "hombre Shaoguan viejo" ); 
        bus.freeRide ( "hombre joven Shaoguan" ); 
        bus.freeRide ( "mujeres Guangzhou" ); 
        bus.freeRide ( "niños" Guangzhou ); 
        bus.freeRide ( "hijos de Shandong" );
    } 
} 
//抽象表达式类
interfaz de Expresión 
{ 
    pública  booleano interpretar (Información string); 
} 
// 终结符表达式类
clase TerminalExpression implementos Expresión 
{ 
    privada Set <String> SET = nueva HashSet <String> ();
    público TerminalExpression (String [] de datos) 
    { 
        para ( int i = 0; i <data.length; i ++ ) set.add (datos [i]); 
    } 
    Pública  boolean interpretar (Información string) 
    { 
        si (set.contains (Info)) 
        { 
            retorno  verdadera; 
        } 
        Devolver  falsa ; 
    } 
} 
// 非终结符表达式类
clase AndExpression implementos Expresión 
{ 
    privado de la ciudad Expresión = nula ;    
    privada persona Expresión = nula ;
    pública AndExpression (ciudad Expresión, Expresión persona) 
    { 
        este .city = ciudad;
        este .person = persona; 
    } 
    Pública  boolean interpretar (Información string) 
    { 
        Cadena s [] = info.split ( "的");       
        retorno city.interpret (s [0]) && person.interpret (s [1 ]); 
    } 
} 
// 环境类
clase Contexto 
{ 
    privado String [] = {citys "韶关", "广州" };
    privada String [] = {personas "老人", "妇女", "儿童" };
    privada cityPerson Expresión;
    pública Contexto () 
    { 
        Expresión de la ciudad = nueva TerminalExpression (citys); 
        Persona Expresión = nuevo TerminalExpression (personas); 
        cityPerson = nueva AndExpression (ciudad, persona); 
    } 
    pública  Vacío FREERIDE (Información string) 
    { 
        boolean permiso = cityPerson.interpret (info);
         SI (permiso) System.out.println ( "Usted es el" + info + "esto a su viaje gratis!" );
         El otro System.out .println (+ info "usted no es un pueblo libre, este coche de cargo 2 yuanes!" );    
    } 
}

  Los resultados son los siguientes:

Usted es una persona mayor de Shaoguan que este libre de coche! 
Shaoguan joven, que no son un pueblo libre, este coche de cargo 2 yuanes! 
Usted es una mujer en Guangzhou, este su viaje gratis! 
Sus niños en Guangzhou, este su viaje gratis! 
Shandong niño, usted no es pueblo libre, este coche de cargo 2 yuanes!

En quinto lugar, el modo de intérprete de escenarios de aplicación

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

  • Cuando la gramática del lenguaje es sencillo y la implementación de la eficiencia no es el problema clave.
  • Cuando el problema se repite, y se puede utilizar un lenguaje sencillo para expresar el tiempo.
  • 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.

En sexto lugar, ampliar el modo de intérprete

  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:

público  de clase JepDemo 
{ 
    públicas  estáticas  void main (String [] args) lanza JepException 
    { 
        Jep Jep = nueva nueva Jep ();
         // datos para ser calculados se define la expresión de 
        interés de los depósitos String = "principal * Tasa * Tiempo" ;
         // a relacionada asignación de variable 
        jep.addVariable ( "principales", 10000 ); 
        jep.addVariable ( "tasas de interés", 0.038 ); 
        jep.addVariable ( "tiempo", 2 ); 
        jep.parse (interés de los depósitos);     // expresión analítica 
        = objeto de acumulación jep.evaluate ();     // Calcular
        System.out.println ( "interés de los depósitos:" + acumulación); 
    } 
}

  resultados de la ejecución son las siguientes:

Los intereses sobre depósitos: 760,0

Supongo que te gusta

Origin www.cnblogs.com/jing99/p/12610089.html
Recomendado
Clasificación