Discussão do artigo "Análise sintática MQL via ferramentas MQL"

 

Novo artigo Análise sintática MQL via ferramentas MQL foi publicado:

Este artigo descreve um pré-processador, um leitor e um analisador para examinar códigos fonte em MQL. A implementação em MQL está anexada ao artigo.

Basicamente, a programação consiste na criação e automação de certos processos usando linguagens gerais ou especiais. Graças à sua linguagem MQL embutida, a plataforma de negociação MetaTrader permite implementar programação para resolver as mais diversas tarefas do trader. Normalmente, o processo de programação se baseia na análise e no processamento de dados de aplicativos segundo regras já estabelecidas em códigos fonte. No entanto, às vezes, é necessário analisar e processar esses mesmos códigos fonte. Aqui estão alguns exemplos:

Uma das tarefas mais procuradas e fáceis de entender é a da pesquisa contextual em bases de códigos-fonte. Naturalmente, pode-se procurar no código fonte tanto strings como texto sem formatação, não entanto, ao fazer isso, perde-se a semântica da pesquisa. Além disso, no caso de códigos fonte, é bom distinguir as especificidades do uso de substrings. Se um programador quiser descobrir onde se usa uma determinada variável, por exemplo, "notification", uma busca simples pelo nome pode dar dados a mais se a string for encontrada em outros valores, como no nome de método, no literal ou no comentário.

Quanto a grandes projetos, normalmente, uma das tarefas mais complexas e populares é a da visualização de estruturas de código, de dependências e de hierarquia de classes. Esse trabalho está intimamente relacionado à meta-programação permitindo refatoração (aprimoramento) e geração de código. Lembre que o MetaEditor possui alguns recursos de geração de código, em particular, a criação de códigos fonte especializados usando Assistentes ou a geração de arquivos de cabeçalho de código fonte. No entanto, o potencial dessa tecnologia é muito mais amplo.

A análise da estrutura do código permite calcular várias métricas de qualidade, estatísticas e também encontrar fontes típicas de erros de tempo de execução que o compilador não pode detectar. Na verdade, é claro que o próprio compilador é a primeira ferramenta de análise de código fonte e fornece muitos tipos de avisos, mas a verificação de todos os possíveis erros geralmente não é incorporada a ele, uma vez que isso é uma tarefa muito grande e, portanto, é atribuído a programas individuais.

Além disso, a análise do código fonte é usada para formatação e ofuscação.

Diagrama UML de classes de análise sintática MQL

Autor: Stanislav Korotky

 
O tópico é complexo e interessante, mas qual poderia ser a aplicação prática? Criar um editor? UMA IA?
 

O artigo está muito bem escrito, qualitativamente. É lógico supor que a continuação da análise lexical é a análise "semântica", sobre a qual proponho escrever o próximo artigo. E depois da análise semântica, estaremos a um passo de criar uma IA. :)

ZY: Somente a psique artificial com funções intelectuais básicas será deixada para ser escrita.

 

Pergunta séria para o autor:

Tenho minha própria linguagem de marcação. Ela tem um conjunto de regras e consiste em palavras-chave, que são números.

A maioria das palavras-chave é intercalada com palavras de string - nomes de grupos ou elementos, e não há necessidade de analisar esses "tokens" de string. O compilador MQL detecta erros nos nomes das palavras-chave, porque suas definições estão conectadas no arquivo.

No entanto, o usuário pode cometer violações das regras da linguagem ao compilar o código de marcação. É necessário verificar o código após a compilação em busca de erros relacionados às regras, não à gramática.

É possível fazer isso com base no conceito de análise descrito no artigo ou é necessário criar um mecanismo diferente?

Confio em sua experiência.

Muito obrigado.

 
Реter Konow:

...

Isso pode ser feito com base no conceito de análise descrito no documento ou é necessário um mecanismo diferente?

...

Para mim, escolhi a seguinte solução: examinar o código (essencialmente uma matriz de valores) em busca de violações da sequência de palavras-chave (comandos) e enviar mensagens sobre elas para o registro. Em princípio, isso é simples, pois você pode monitorar a sequência de números por meio de um conjunto de condições, filtros e sinalizadores.

A análise léxica, gramatical e sintática é muito mais difícil, pois as palavras humanas não têm equivalente numérico, ao contrário dos comandos. As palavras têm propriedades que não têm um número, e essas propriedades são muitas. A análise léxica exige que se trabalhe com propriedades diferentes não apenas das palavras, mas também das frases ou da pontuação. E acima de tudo isso "flutua" o significado incorporado no texto (contexto), cuja extração pode se tornar a tarefa da análise semântica no futuro (não tenho certeza de que ela exista).

Para minhas tarefas, um simples controle da sequência de comandos é suficiente.

 
Com o tempo, tentaremos adicionar algum analisador estático conhecido.

Nós mesmos usamos o PVS Studio
 

Provavelmente, usando esse método, é possível escrever um conversor mq4->mq5 para o mercado:

  • É lançado um consultor ex5, que é alimentado com código mq4.
  • A saída é o código mq5.
Existem tentativas desse tipo no mercado, mas são fracas.

 

Publico fontes atualizadas.

Garantimos a compilação nas compilações mais recentes.

Corrigimos vários bugs difíceis de encontrar.

Arquivos anexados:
 
Stanislav Korotky:

Estou publicando o código-fonte atualizado.

Substituído no artigo
 
Isso é legal. Um exemplo de refatoração seria bom.
 

Olá, sou relativamente novato aqui.

Depois de ler o artigo, presumi que o RESULTADO seria uma ferramenta de pesquisa para procurar o código gerado pelo assistente.

Baixei o arquivo zip. Instalei o script mql.mq5 e o compilei sem erros.

A execução do mql.ex5 não produz nenhum resultado na tela.

Estou no modo de aprendizado. Quero poder usar o assistente para usar o código fora da base de código e, em seguida, analisar e modificar para obter um EA utilizável.

Qualquer ajuda seria muito bem-vinda.

Obrigado pela ajuda