文章 "计算数学表达式(第一部分)。 递归下降解析器" 新评论 MetaQuotes 2020.10.19 09:03 新文章 计算数学表达式(第一部分)。 递归下降解析器已发布: 本文研究数学表达式解析和计算的基本原理。 我们基于预建语法树,实现运行于解释器和快速计算模式的递归下降解析器。 在自动执行交易任务时,可能需要在其执行阶段提供计算算法的灵活性。 例如,当微调程序以闭合(编译)模式分布时,我们可以从众多可能的组合中选择目标函数类型。 特别是在优化智能交易系统或快速评估指标原型时,这很有用。 除了更改对话框中的参数之外,用户还可以更改计算公式。 在这种情况下,我们只需从其文本表达形式计算其数学表达式,而无需更改 MQL 程序代码。 可以通过各种解析器来解决此任务,这些解析器可以即时解释公式,将其“编译”为语法树,生成所谓的字节码(计算指令序列),进而执行从而得出计算结果 。 在本文中,我们将研究几种类型的解析器和表达式计算方法。 问题的陈述 在本文中,算术表达式是单行序数据项和运算符的相关操作描述。 数据项是数字和已命名变量。 变量值可从外部设置和编辑,即并非在表达式内部,而是用特殊的解析器属性。 换句话说,没有赋值运算符('=')来存储中间结果。 以下是受支持的运算符列表,按计算优先级顺序显示: !, - , + — 一元逻辑非,减号和加号 () — 括号分组 *, /, % — 乘法,除法和除法模 +, - — 加法和减法 >, <, >=, <= — 大、小比较 ==, != — 相等或不等比较 &&, || — 逻辑与 AND 和逻辑或 OR(请注意,优先级相同,因此应使用括号) ?: — 三元条件运算符,可令您根据条件分支计算 我们还将允许在表达式中使用 MQL 的标准数学函数,共计 25 个。 其中之一是用于幂运算的 pow 函数。 有因于此,运算符列表中没有指数运算符('^')。 另外,运算符 '^' 仅支持整数幂,而该函数则无此限制。 还有一个更特殊的功能,即把 “^” 与其他研究的运算符区分开。 作者:Stanislav Korotky 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
新文章 计算数学表达式(第一部分)。 递归下降解析器已发布:
本文研究数学表达式解析和计算的基本原理。 我们基于预建语法树,实现运行于解释器和快速计算模式的递归下降解析器。
在自动执行交易任务时,可能需要在其执行阶段提供计算算法的灵活性。 例如,当微调程序以闭合(编译)模式分布时,我们可以从众多可能的组合中选择目标函数类型。 特别是在优化智能交易系统或快速评估指标原型时,这很有用。 除了更改对话框中的参数之外,用户还可以更改计算公式。 在这种情况下,我们只需从其文本表达形式计算其数学表达式,而无需更改 MQL 程序代码。
可以通过各种解析器来解决此任务,这些解析器可以即时解释公式,将其“编译”为语法树,生成所谓的字节码(计算指令序列),进而执行从而得出计算结果 。 在本文中,我们将研究几种类型的解析器和表达式计算方法。
问题的陈述
在本文中,算术表达式是单行序数据项和运算符的相关操作描述。 数据项是数字和已命名变量。 变量值可从外部设置和编辑,即并非在表达式内部,而是用特殊的解析器属性。 换句话说,没有赋值运算符('=')来存储中间结果。 以下是受支持的运算符列表,按计算优先级顺序显示:
我们还将允许在表达式中使用 MQL 的标准数学函数,共计 25 个。 其中之一是用于幂运算的 pow 函数。 有因于此,运算符列表中没有指数运算符('^')。 另外,运算符 '^' 仅支持整数幂,而该函数则无此限制。 还有一个更特殊的功能,即把 “^” 与其他研究的运算符区分开。
作者:Stanislav Korotky