0. Definición del modo de intérprete:
Dado un idioma, defina una representación de su gramática y defina un intérprete que use la representación para interpretar las oraciones en el idioma. Pertenece al modo de comportamiento.
El modo intérprete se usa muy poco en el desarrollo real del sistema porque puede causar problemas como la eficiencia, el rendimiento y el mantenimiento.
El diagrama de clase general del modo intérprete se muestra en la figura.
1. Ventajas del modo intérprete
El intérprete es una herramienta simple de análisis de sintaxis. Su ventaja más destacada es su expansión. Modificar las reglas de sintaxis es solo modificar la expresión no terminal correspondiente. Si amplía la sintaxis, solo necesita agregar una clase no terminal.
2. Desventajas del modo intérprete
El patrón de intérprete causará expansión de clase: cada sintaxis necesita producir una expresión no terminal. Cuando las reglas de sintaxis son relativamente complejas, se puede generar una gran cantidad de archivos de clase, lo que trae muchos problemas al mantenimiento.
El patrón de intérprete adopta un método de llamada recursiva: cada expresión no terminal solo se preocupa por las expresiones relacionadas con sí misma. Cada expresión necesita conocer el resultado final y debe ser sin recubrimiento por capa. Ya sea que se trate de un lenguaje orientado al proceso o un lenguaje orientado a objetos, la recursión se usa en las condiciones necesarias, lo que conduce a una depuración muy compleja. Piénselo, si queremos solucionar problemas de un error de sintaxis, ¿necesitamos depurar uno por uno, hasta que la unidad de sintaxis más pequeña?
Problema de eficiencia: el modo intérprete utiliza muchos bucles y recursión, la eficiencia es un problema que no se puede ignorar, especialmente cuando se usa para analizar la sintaxis compleja y larga. La eficiencia es insoportable.
3. Use escenarios de modo intérprete
Los problemas repetidos se pueden usar con el modo intérprete: por ejemplo, múltiples servidores de aplicaciones generan una gran cantidad de registros todos los días, y los archivos de registro deben analizarse y procesarse. Dado que los formatos de registro de cada servidor son diferentes, los elementos de datos son los mismos. Según el intérprete, las expresiones de terminador son las mismas, pero las expresiones no terminadas deben formularse. En este caso, el problema se puede resolver una y para todos a través de un programa.
Un escenario en el que se debe explicar la sintaxis simple: ¿Por qué es simple? Mire las expresiones no terminales. Cuantas más reglas gramaticales, mayor sea la complejidad y las llamadas recursivas se requieren entre las clases (ver la pila en nuestro ejemplo), lo que generalmente no es complicado. Piénselo, ¿qué tipo de paciencia y confianza necesita para solucionar problemas al llamar a múltiples clases? Por lo tanto, el modo de intérprete generalmente se usa para analizar conjuntos de caracteres estándar comparativos, como el análisis de sintaxis SQL, pero esta parte se reemplaza gradualmente por herramientas especializadas. En algunos entornos comerciales especiales, el modelo de intérprete también se utilizará. El ejemplo que acabamos de hacer es un entorno empresarial, y ahora hay muchos ejemplos de operaciones modelo. Muchas instituciones comerciales pueden proporcionar una gran cantidad de datos para el análisis.
4. Ejemplos simples
/ *** declarar una operación de interpretación abstracta*/ interfaz pública intérprete {public void interpretación (contexto context); // De hecho, puede haber un tipo devuelto para definir el objeto de datos interpretado} clase pública XMLSAXINTERPREME implementa el intérprete {@Override public void Interpret (contexto de contexto) {System.out.println ("XML Sax Interpreter:" + context.getData ()); }} clase pública XMLDOMInterpreter implementa intérprete {@Override public void Interpret (contexto context) {System.out.println ("XML DOM INTERPRETER:" + context.getData ()); }} / *** Contiene alguna información fuera del intérprete* / contexto de clase pública {datos de cadena privada; public String getData () {return data; } public void setData (string data) {this.data = data; }} prueba de clase pública {public static void main (string [] args) {context context = new context (); context.setData ("Una pieza de datos XML"); nuevo xmlSaxInterpreter (). Interpret (contexto); nuevo xmldominterpreter (). Interpret (contexto); }}5. Notas en modo intérprete
Intente no usar el modo de intérprete en módulos importantes, de lo contrario, el mantenimiento será un gran problema. En el proyecto, puede usar lenguajes de script como Shell, Jruby y Groovy para reemplazar el modo intérprete para compensar las deficiencias de los idiomas compilados Java. Utilizamos Jruby para el procesamiento de cálculo en el proyecto analítico de un banco, evitando la operación de cuatro caracteres en el modo intérprete y funcionando bien en todos los aspectos de la eficiencia y el rendimiento.