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

问题描述 投票:0回答:1
  • 在我的C++嵌入式程序中,我有一些预定义的变量,如int Var_A, Var_B, Var_C, Var_D...。
  • 我必须在外部文本文件中定义逻辑表达式(因为逻辑表达式可以在外部文本文件中配置,称为配置文件),之后这个文件将被读取到微控制器的文件系统中。
  • 配置文件中的变量与嵌入式程序中的变量相同。
  • 该文件包含以下预定义格式的逻辑表达式。

(Operand 1) (Operator) (Operator 2)

例子 : Var_A AND Var_B

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

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

请给我一个合理的解决方法。

c++ embedded logical-operators interpreter
1个回答
0
投票

你的解决方案是要写一个扫描器和解析器来建立一个树。

最好的解决方法是用它来做一些测试,使用 挠性Yacc. 这些工具允许你进行扫描(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来包含一个足够大的数据缓冲区,用于这个树结构,比它可以做到.我的解决方案是为我的树对象节点分配一个缓冲区,为变量的名称分配一个缓冲区,这将允许使用一个静态的内存量,而不会碎片化。

© www.soinside.com 2019 - 2024. All rights reserved.