文章 "利用MQL进行MQL解析"

 

新文章 利用MQL进行MQL解析已发布:

本文描述了用于解析基于MQL的源代码的预处理器、扫描器和解析器,MQL 的实现在附件中。

编程本质上是使用通用或专用语言将某些过程形式化和自动化。MetaTrader 交易平台允许使用嵌入式MQL语言应用编程来解决各种交易员的问题。通常,编码过程是根据源代码中指定的规则分析和处理应用程序数据。但是,有时需要分析和处理源代码本身。下面是一些例子。

最一致和最常用的任务之一是在源代码库中进行上下文和语义搜索。当然,您可以像在普通文本中一样在源代码中搜索字符串;但是,所寻找的字符串的语义正在丢失。毕竟,在源代码的情况下,需要区分在每个特定情况下使用子字符串的具体情况。如果程序员想找到在哪里使用某个特定变量,例如“notification”,那么通过其名称进行简单的搜索可以返回远远超过必要的结果,其中字符串出现在其他值中,例如方法名、文本或注释中。

通常,在大型项目中,识别代码结构、依赖关系和类层次结构是一项更复杂和更受欢迎的任务。它与允许执行代码重构/改进和代码生成的元编程紧密相连。例如 MetaEditor 提供了一些生成代码的功能, 特别是使用 向导创建EA交易的的代码或者是根据源代码生成头文件,然而,这项技术的潜力更大。

代码结构分析允许计算各种质量度量和统计,以及查找编译器无法检测到的典型运行时错误源。事实上,编译器本身当然是分析源代码并返回许多类型警告的第一个工具;但是,检查所有潜在错误通常并不是内置的-此任务太大,因此通常分配给单独的程序。

此外,解析源代码也可以用于样式(格式化)和模糊(混淆)。

MQL解析类的UML图

作者:Stanislav Korotky

 
这个话题复杂而有趣,但实际应用会是什么呢?创建一个编辑器?人工智能?
 

这篇文章写得非常好,质量上乘。我们可以顺理成章地认为,词法解析的延续是 "语义 "解析,我建议写下一篇关于 "语义 "解析的文章。在语义解析之后,我们离创造人工智能就只有咫尺之遥了。:)

ZY.只剩下具有基本智力功能的人工心脏有待编写了。

 

请作者认真回答:

我有自己的标记语言。它有一套规则,由关键字组成,关键字是数字。

大多数关键字都与字符串词(组或元素的名称)交错在一起,没有必要对这些字符串 "标记 "进行分析。MQL 编译器会发现关键字名称中的错误,因为它们的定义在文件中是相连的。

但是,用户在编译标记代码时可能会违反语言规则。有必要在编译后检查代码中与规则而非语法 有关的错误

是否可以根据文章中描述的解析概念来进行检查,还是有必要创建一种不同的机制?

我希望能借鉴您的经验。

谢谢。

 
Реter Konow:

...

是基于论文中概述的解析概念,还是需要一种不同的机制?

...

就我个人而言,我选择了以下解决方案:扫描代码(本质上是一个值数组),查找违反关键字(命令)序列的情况,并将相关信息输出到日志中。原则上,这很简单,因为您可以通过一组条件、过滤器和标志来监控数字序列。

词法、语法和句法分析要困难得多,因为与命令不同,人类单词没有数字等价物。单词具有没有数字的属性,而且这些属性很多。词法解析不仅需要处理单词的不同属性,还需要处理短语或标点符号的不同属性。在这一切之上 "漂浮 "着文本中蕴含的意义(上下文),提取这些意义可能是语义解析将来的任务(我不确定它是否存在)。

对于我的任务来说,简单地控制命令顺序就足够了。

 
以后我们会尝试添加一些著名的静态分析器。

我们自己使用 PVS Studio
 

也许可以用这种方法为市场编写一个 mq4->mq5 转换器:

  • 启动 ex5-advisor,向其输入 mq4 代码。
  • 输出是 mq5 代码。
市场上有这样的尝试,但效果不佳。

 

我发布了更新的源代码。

确保最新版本的可编译性。

修复了几个难以发现的错误。

附加的文件:
 
Stanislav Korotky:

我正在发布更新后的源代码。

替换文章中的
 
这很酷。如果能提供一个重构的例子就更好了。
 

你好,我是一名新手。

在阅读文章后,我以为 RESULT 会是一个搜索工具,用来查找向导生成的代码。

下载了压缩文件。安装了脚本 mql.mq5,编译时没有出错。

运行 mql.ex5 在屏幕上没有显示任何结果。

我处于学习模式。我希望能使用向导使用代码库中的代码,然后进行分析和修改,以获得可用的 EA。

希望得到任何帮助。

谢谢