El artículo está muy bien escrito, cualitativamente. Es lógico suponer que la continuación del análisis léxico sea el análisis "semántico", sobre el que me propongo escribir el próximo artículo. Y después del parsing semántico, estaremos a un tiro de piedra de crear una IA. :)
ZY. Sólo quedará por escribir la psique artificial con funciones intelectuales básicas.
Pregunta seria para el autor:
Tengo mi propio lenguaje de marcado. Tiene un conjunto de reglas y consta de palabras clave, que son números.
La mayoría de las palabras clave están intercaladas con palabras de cadena - nombres de grupos o elementos, y no hay necesidad de analizar estos "tokens" de cadena. El compilador MQL detecta errores en los nombres de las palabras clave, porque sus definiciones están conectadas en el archivo.
Sin embargo, el usuario puede cometer violaciones de las reglas del lenguaje al compilar el código de marcado. Es necesario comprobar el código después de la compilación en busca de errores relacionados con las reglas, no con la gramática.
¿Es posible hacerlo basándose en el concepto de análisis sintáctico descrito en el artículo, o es necesario crear un mecanismo diferente?
Confío en su experiencia.
Muchas gracias.
...
¿Puede hacerse esto basándose en el concepto de análisis sintáctico esbozado en el documento, o se requiere un mecanismo diferente?
...
En mi caso, he optado por la siguiente solución: escanear el código (esencialmente una matriz de valores) en busca de violaciones de la secuencia de palabras clave (comandos) y emitir mensajes sobre ellas en el registro. En principio, es sencillo, porque se puede controlar la secuencia de números mediante un conjunto de condiciones, filtros y banderas.
El análisis léxico, gramatical y sintáctico es mucho más difícil, ya que las palabras humanas no tienen equivalente numérico, a diferencia de los comandos. Las palabras tienen propiedades que no tienen un número, y estas propiedades son muchas. El análisis léxico requiere trabajar con distintas propiedades no sólo de las palabras, sino también de las frases o los signos de puntuación. Y por encima de todo esto "flota" el significado incrustado en el texto (contexto), cuya extracción puede convertirse en la tarea del análisis semántico en el futuro (no estoy seguro de que exista).
Para mis tareas, basta con un simple control de la secuencia de comandos.
Probablemente, usando este método es posible escribir un convertidor mq4->mq5 para el Mercado:
- Se lanza un ex5-advisor, que es alimentado mq4-código.
- La salida es código mq5.
Publico fuentes actualizadas.
Garantizada la compilación en las últimas versiones.
Corregidos varios errores difíciles de encontrar.
Voy a publicar el código fuente actualizado.
Hola, soy relativamente novato.
Después de haber leído el artículo asumió el resultado sería una herramienta de búsqueda para buscar el código generado por el asistente.
Descargado el archivo zip. Instalado el script mql.mq5 compilado sin errores.
Al ejecutar mql.ex5 no aparece ningún resultado en pantalla.
Estoy en modo aprendizaje. Quiero ser capaz de utilizar el asistente para utilizar el código de la base de código a continuación, analizar y modificar para obtener un EA utilizable.
Cualquier ayuda sería apreciada.
Gracias
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Análisis sintáctico de MQL usando las herramientas de MQL:
El presente artículo describe el preprocesador, escáner y el parser (analizador sintáctico) para el análisis sintáctico de los códigos fuente en el lenguaje MQL. La implementación en MQL se adjunta.
Esencialmente, la programación consiste en la formalización y automatización de algunos procesos usando los lenguajes de aplicación general o especial. Gracias al lenguaje «built-in» MQL, la plataforma comercial MetaTrader permite implementar la programación para resolver diversas tareas del trader. Normalmente, el proceso de la programación se basa en el análisis y procesamiento de los datos aplicados de acuerdo con las reglas establecidas en los códigos fuente. Sin embargo, a veces surge la necesidad de realizar el análisis y procesamiento de estos mismos códigos fuente. Aquí, tenemos algunos ejemplos.
Una de las tareas más reclamadas y fáciles de entender es la búsqueda semántica y contextual en la base de los códigos fuente. Naturalmente, se puede buscar las cadenas (string) en el código fuente como en el texto normal, pero, en este caso, se pierde la semántica de lo que se busca. Y eso que en caso de los códigos fuente, es deseable distinguir la especificidad del uso de una subcadena en cada caso particular. Si un programador quiere encontrar donde se usa cada determinada variable, por ejemplo, «notification», la búsqueda simple por su nombre puede dar datos de más si la cadena se encuentra en otros valores: como el nombre del método, literal o en comentarios.
En cuanto a los proyectos grandes, generalmente, una de las tareas más complejas y reclamadas consiste en identificar la estructura del código, las dependencias y la jerarquía de las clases. Esta tarea está estrechamente unida con la meta-programación, que permite realizar la refactorización del código (la mejora) y la generación del código. Recordaremos que MetaEditor ofrece algunas posibilidades de la generación del código. En particular, se trata de la creación de los códigos fuente de los EAs a través del Asistente, o la generación del archivo de cabecera del código fuente. Sin embargo, las posibilidades potenciales de esta tecnología son bastante más amplias.
El análisis de la estructura del código permite calcular varias métricas de su calidad, estadística, así como, encontrar las fuentes típicas de los errores runtime que no pueden ser detectadas por el compilador. Está claro que, en realidad, el propio compilador es la primera herramienta del análisis del código fuente, y salta muchos tipos de avisos, pero la verificación de todos los posibles errores normalmente no está incorporada en él, es que, es una tarea bastante volumétrica, por tanto, la atribuyen a los programas ajenos.
Aparte de eso, el análisis sintáctico de los códigos fuente se usa para la estilización (formateo) y la ofuscación.
Autor: Stanislav Korotky