繁体   English   中英

在嵌入式 C++ 中使用运算符作为预定义变量评估字符串格式的逻辑表达式

[英]Evaluating Logical expression in string format with operators as predefined variables in Embedded C++

  • 在我的 C++ 嵌入式程序中,我有某些预定义的变量,例如 int Var_A、Var_B、Var_C、Var_D....
  • 我必须在外部文本文件中定义逻辑表达式(因为逻辑表达式可以在称为配置文件的外部文本文件中配置),稍后在微控制器的文件系统中读取该文件。
  • 配置文件中的变量与嵌入式程序中的变量相同。
  • 该文件包含以下预定义格式的逻辑表达式,

(Operand 1) (Operator) (Operator 2)

示例: Var_A AND Var_B

  • 变量在运行时确实会发生变化(在嵌入式程序中)。
  • 后来这个逻辑表达式的结果被用来执行某些子程序。
  • 我们不能将中断用于相同的操作,因为我们有 100 个这样的变量。

我想用interpreter来解决这个问题,但是我对interpreter不太熟悉,只是听说这种情况下可以使用interpreter。

请提出相同的逻辑解决方案。

您的解决方案将是编写一个扫描器和解析器来构建一棵树。

获得想法的最佳解决方案是使用FlexYacc进行一些测试。 这些工具允许您进行扫描 (Flex) 并将扫描的字符串转换为解析器 (Yacc) 可以使用上下文无关语法 (CFG) 将其转换为对方程进行编码的节点树。 (这与编译器的完成方式非常相似)

如果您的输入是这样的,这允许您执行以下操作:

var1 + var2

您扫描此字符串以查找令牌,它们是: var1<variable> +<operator> var2<variable>

您将这些标记转换为树的节点:

    node #1
    op: +
    operatorType: enumvalue for +
       |               |
      |                 |
     |                   |
    \/                   \/
node #2                node# #3
name: var1             name: var2
type: var              type: var

您现在可以遍历树并使用树中对象的成员来确定它是什么以及如何使用它。

现在棘手的部分是你将如何在受限的嵌入式设备中实现它。 如果您的设备有足够的 RAM 来包含足够大的用于此树结构的数据缓冲区,则可以做到这一点。 我的解决方案是为我的树 object 节点分配一个缓冲区,并为变量名称分配一个缓冲区,这将允许在没有碎片的情况下使用 static 数量的 memory。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM